Skip to content

Commit 13e5c69

Browse files
authored
Initialize PixelSettings for TM1814 strips (wled#1847)
* Better handling for TM1814 strips * Call SetPixelSettings after Begin as described on the NeoPixelBus wiki * Use NeoTm1814Settings::MaxCurrent constant
1 parent 12de47c commit 13e5c69

File tree

1 file changed

+31
-18
lines changed

1 file changed

+31
-18
lines changed

wled00/bus_wrapper.h

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
#define I_8266_U1_400_3 10
2929
#define I_8266_DM_400_3 11
3030
#define I_8266_BB_400_3 12
31-
//TM1418 (RGBW)
31+
//TM1814 (RGBW)
3232
#define I_8266_U0_TM1_4 13
3333
#define I_8266_U1_TM1_4 14
3434
#define I_8266_DM_TM1_4 15
@@ -68,7 +68,7 @@
6868
#define I_32_R7_400_3 44
6969
#define I_32_I0_400_3 45
7070
#define I_32_I1_400_3 46
71-
//TM1418 (RGBW)
71+
//TM1814 (RGBW)
7272
#define I_32_R0_TM1_4 47
7373
#define I_32_R1_TM1_4 48
7474
#define I_32_R2_TM1_4 49
@@ -115,7 +115,7 @@
115115
#define B_8266_U1_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Uart1400KbpsMethod> //3 chan, esp8266, gpio2
116116
#define B_8266_DM_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266Dma400KbpsMethod> //3 chan, esp8266, gpio3
117117
#define B_8266_BB_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp8266BitBang400KbpsMethod> //3 chan, esp8266, bb (any pin)
118-
//TM1418 (RGBW)
118+
//TM1814 (RGBW)
119119
#define B_8266_U0_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp8266Uart0Tm1814Method>
120120
#define B_8266_U1_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp8266Uart1Tm1814Method>
121121
#define B_8266_DM_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp8266DmaTm1814Method>
@@ -157,7 +157,7 @@
157157
#define B_32_R7_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32Rmt7400KbpsMethod>
158158
#define B_32_I0_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32I2s0400KbpsMethod>
159159
#define B_32_I1_400_3 NeoPixelBrightnessBus<NeoGrbFeature, NeoEsp32I2s1400KbpsMethod>
160-
//TM1418 (RGBW)
160+
//TM1814 (RGBW)
161161
#define B_32_R0_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp32Rmt0Tm1814Method>
162162
#define B_32_R1_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp32Rmt1Tm1814Method>
163163
#define B_32_R2_TM1_4 NeoPixelBrightnessBus<NeoWrgbTm1814Feature, NeoEsp32Rmt2Tm1814Method>
@@ -191,6 +191,15 @@
191191
//handles pointer type conversion for all possible bus types
192192
class PolyBus {
193193
public:
194+
// Begin & initialize the PixelSettings for TM1814 strips.
195+
template <class T>
196+
static void beginTM1814(void* busPtr) {
197+
T tm1814_strip = static_cast<T>(busPtr);
198+
tm1814_strip->Begin();
199+
// Max current for each LED (38.0 mA).
200+
const uint16_t max = NeoTm1814Settings::MaxCurrent;
201+
tm1814_strip->SetPixelSettings(NeoTm1814Settings(/*R*/max, /*G*/max, /*B*/max, /*W*/max));
202+
}
194203
static void begin(void* busPtr, uint8_t busType, uint8_t* pins) {
195204
switch (busType) {
196205
case I_NONE: break;
@@ -207,10 +216,10 @@ class PolyBus {
207216
case I_8266_U1_400_3: (static_cast<B_8266_U1_400_3*>(busPtr))->Begin(); break;
208217
case I_8266_DM_400_3: (static_cast<B_8266_DM_400_3*>(busPtr))->Begin(); break;
209218
case I_8266_BB_400_3: (static_cast<B_8266_BB_400_3*>(busPtr))->Begin(); break;
210-
case I_8266_U0_TM1_4: (static_cast<B_8266_U0_TM1_4*>(busPtr))->Begin(); break;
211-
case I_8266_U1_TM1_4: (static_cast<B_8266_U1_TM1_4*>(busPtr))->Begin(); break;
212-
case I_8266_DM_TM1_4: (static_cast<B_8266_DM_TM1_4*>(busPtr))->Begin(); break;
213-
case I_8266_BB_TM1_4: (static_cast<B_8266_BB_TM1_4*>(busPtr))->Begin(); break;
219+
case I_8266_U0_TM1_4: beginTM1814<B_8266_U0_TM1_4*>(busPtr); break;
220+
case I_8266_U1_TM1_4: beginTM1814<B_8266_U1_TM1_4*>(busPtr); break;
221+
case I_8266_DM_TM1_4: beginTM1814<B_8266_DM_TM1_4*>(busPtr); break;
222+
case I_8266_BB_TM1_4: beginTM1814<B_8266_BB_TM1_4*>(busPtr); break;
214223
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->Begin(); break;
215224
case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->Begin(); break;
216225
case I_HS_WS1_3: (static_cast<B_HS_WS1_3*>(busPtr))->Begin(); break;
@@ -247,16 +256,16 @@ class PolyBus {
247256
case I_32_R7_400_3: (static_cast<B_32_R7_400_3*>(busPtr))->Begin(); break;
248257
case I_32_I0_400_3: (static_cast<B_32_I0_400_3*>(busPtr))->Begin(); break;
249258
case I_32_I1_400_3: (static_cast<B_32_I1_400_3*>(busPtr))->Begin(); break;
250-
case I_32_R0_TM1_4: (static_cast<B_32_R0_TM1_4*>(busPtr))->Begin(); break;
251-
case I_32_R1_TM1_4: (static_cast<B_32_R1_TM1_4*>(busPtr))->Begin(); break;
252-
case I_32_R2_TM1_4: (static_cast<B_32_R2_TM1_4*>(busPtr))->Begin(); break;
253-
case I_32_R3_TM1_4: (static_cast<B_32_R3_TM1_4*>(busPtr))->Begin(); break;
254-
case I_32_R4_TM1_4: (static_cast<B_32_R4_TM1_4*>(busPtr))->Begin(); break;
255-
case I_32_R5_TM1_4: (static_cast<B_32_R5_TM1_4*>(busPtr))->Begin(); break;
256-
case I_32_R6_TM1_4: (static_cast<B_32_R6_TM1_4*>(busPtr))->Begin(); break;
257-
case I_32_R7_TM1_4: (static_cast<B_32_R7_TM1_4*>(busPtr))->Begin(); break;
258-
case I_32_I0_TM1_4: (static_cast<B_32_I0_TM1_4*>(busPtr))->Begin(); break;
259-
case I_32_I1_TM1_4: (static_cast<B_32_I1_TM1_4*>(busPtr))->Begin(); break;
259+
case I_32_R0_TM1_4: beginTM1814<B_32_R0_TM1_4*>(busPtr); break;
260+
case I_32_R1_TM1_4: beginTM1814<B_32_R1_TM1_4*>(busPtr); break;
261+
case I_32_R2_TM1_4: beginTM1814<B_32_R2_TM1_4*>(busPtr); break;
262+
case I_32_R3_TM1_4: beginTM1814<B_32_R3_TM1_4*>(busPtr); break;
263+
case I_32_R4_TM1_4: beginTM1814<B_32_R4_TM1_4*>(busPtr); break;
264+
case I_32_R5_TM1_4: beginTM1814<B_32_R5_TM1_4*>(busPtr); break;
265+
case I_32_R6_TM1_4: beginTM1814<B_32_R6_TM1_4*>(busPtr); break;
266+
case I_32_R7_TM1_4: beginTM1814<B_32_R7_TM1_4*>(busPtr); break;
267+
case I_32_I0_TM1_4: beginTM1814<B_32_I0_TM1_4*>(busPtr); break;
268+
case I_32_I1_TM1_4: beginTM1814<B_32_I1_TM1_4*>(busPtr); break;
260269
// ESP32 can (and should, to avoid inadvertantly driving the chip select signal) specify the pins used for SPI, but only in begin()
261270
case I_HS_DOT_3: (static_cast<B_HS_DOT_3*>(busPtr))->Begin(pins[1], -1, pins[0], -1); break;
262271
case I_HS_LPD_3: (static_cast<B_HS_LPD_3*>(busPtr))->Begin(pins[1], -1, pins[0], -1); break;
@@ -860,6 +869,8 @@ class PolyBus {
860869
return I_8266_U0_NEO_4 + offset;
861870
case TYPE_WS2811_400KHZ:
862871
return I_8266_U0_400_3 + offset;
872+
case TYPE_TM1814:
873+
return I_8266_U0_TM1_4 + offset;
863874
}
864875
#else //ESP32
865876
uint8_t offset = num; //RMT bus # == bus index in BusManager
@@ -872,6 +883,8 @@ class PolyBus {
872883
return I_32_R0_NEO_4 + offset;
873884
case TYPE_WS2811_400KHZ:
874885
return I_32_R0_400_3 + offset;
886+
case TYPE_TM1814:
887+
return I_32_R0_TM1_4 + offset;
875888
}
876889
#endif
877890
}

0 commit comments

Comments
 (0)