Skip to content

Commit f3aa8d3

Browse files
committed
Multipin appears to work
1 parent 9518c5f commit f3aa8d3

File tree

7 files changed

+44
-50
lines changed

7 files changed

+44
-50
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
### Development versions after 0.11.1 release
44

5+
#### Build 2101310
6+
7+
- First alpha configurable multipin
8+
59
#### Build 2101130
610

711
- Added color transitions for all segments and slots and for segment brightness

wled00/FX_fcn.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ void WS2812FX::finalizeInit(bool supportWhite, uint16_t countPixels, bool skipFi
6262
_lengthRaw += LED_SKIP_AMOUNT;
6363
}
6464

65-
//if busses failed to load (FS issue...)
65+
//if busses failed to load, add default (FS issue...)
6666
if (busses.getNumBusses() == 0) {
6767
uint8_t defPin[] = {LEDPIN};
6868
BusConfig defCfg = BusConfig(TYPE_WS2812_RGB, defPin, 0, _lengthRaw, COL_ORDER_GRB);

wled00/cfg.cpp

Lines changed: 35 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -12,50 +12,6 @@ void getStringFromJson(char* dest, const char* src, size_t len) {
1212
if (src != nullptr) strlcpy(dest, src, len);
1313
}
1414

15-
//populates bus objects from instance JsonArray, called by deserializeConfig() and by doInitStrip
16-
bool initBusInstances(JsonArray ins) {
17-
uint8_t s = 0;
18-
useRGBW = false;
19-
busses.removeAll();
20-
for (JsonObject elm : ins) {
21-
if (s >= WLED_MAX_BUSSES) break;
22-
uint8_t pins[5] = {255, 255, 255, 255, 255};
23-
JsonArray pinArr = elm[F("pin")];
24-
if (pinArr.size() == 0) continue;
25-
pins[0] = pinArr[0];
26-
uint8_t i = 0;
27-
for (int p : pinArr) {
28-
pins[i] = p;
29-
i++;
30-
if (i>4) break;
31-
}
32-
33-
uint16_t length = elm[F("len")];
34-
if (length==0) continue;
35-
uint8_t colorOrder = (int)elm[F("order")];
36-
//only use skip from the first strip (this shouldn't have been in ins obj. but remains here for compatibility)
37-
if (s==0) skipFirstLed = elm[F("skip")];
38-
uint16_t start = elm[F("start")] | 0;
39-
if (start >= ledCount) continue;
40-
//limit length of strip if it would exceed total configured LEDs
41-
if (start + length > ledCount) length = ledCount - start;
42-
uint8_t ledType = elm[F("type")] | TYPE_WS2812_RGB;
43-
bool reversed = elm[F("rev")];
44-
//RGBW mode is enabled if at least one of the strips is RGBW
45-
useRGBW = (useRGBW || BusManager::isRgbw(ledType));
46-
s++;
47-
BusConfig bc = BusConfig(ledType, pins, start, ledCount, colorOrder, reversed);
48-
busses.add(bc);
49-
}
50-
//if no bus inited successfully (empty cfg or invalid), init default
51-
if (s==0) {
52-
uint8_t defPin[] = {LEDPIN};
53-
BusConfig defCfg = BusConfig(TYPE_WS2812_RGB, defPin, 0, ledCount, COL_ORDER_GRB);
54-
busses.add(defCfg);
55-
}
56-
return s;
57-
}
58-
5915
void deserializeConfig() {
6016
bool fromeep = false;
6117
bool success = deserializeConfigSec();
@@ -142,8 +98,41 @@ void deserializeConfig() {
14298
CJSON(strip.reverseMode, hw_led[F("rev")]);
14399
CJSON(strip.rgbwMode, hw_led[F("rgbwm")]);
144100

145-
JsonVariant strVar = hw_led["ins"];
146-
initBusInstances(strVar.as<JsonArray>());
101+
JsonArray ins = hw_led["ins"];
102+
uint8_t s = 0;
103+
useRGBW = false;
104+
busses.removeAll();
105+
for (JsonObject elm : ins) {
106+
if (s >= WLED_MAX_BUSSES) break;
107+
uint8_t pins[5] = {255, 255, 255, 255, 255};
108+
JsonArray pinArr = elm[F("pin")];
109+
if (pinArr.size() == 0) continue;
110+
pins[0] = pinArr[0];
111+
uint8_t i = 0;
112+
for (int p : pinArr) {
113+
pins[i] = p;
114+
i++;
115+
if (i>4) break;
116+
}
117+
118+
uint16_t length = elm[F("len")];
119+
if (length==0) continue;
120+
uint8_t colorOrder = (int)elm[F("order")];
121+
//only use skip from the first strip (this shouldn't have been in ins obj. but remains here for compatibility)
122+
if (s==0) skipFirstLed = elm[F("skip")];
123+
uint16_t start = elm[F("start")] | 0;
124+
if (start >= ledCount) continue;
125+
//limit length of strip if it would exceed total configured LEDs
126+
if (start + length > ledCount) length = ledCount - start;
127+
uint8_t ledType = elm[F("type")] | TYPE_WS2812_RGB;
128+
bool reversed = elm[F("rev")];
129+
//RGBW mode is enabled if at least one of the strips is RGBW
130+
useRGBW = (useRGBW || BusManager::isRgbw(ledType));
131+
s++;
132+
BusConfig bc = BusConfig(ledType, pins, start, length, colorOrder, reversed);
133+
busses.add(bc);
134+
}
135+
strip.finalizeInit(useRGBW, ledCount, skipFirstLed);
147136

148137
JsonObject hw_btn_ins_0 = hw[F("btn")][F("ins")][0];
149138
CJSON(buttonEnabled, hw_btn_ins_0[F("type")]);

wled00/fcn_declare.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ void handleButton();
2626
void handleIO();
2727

2828
//cfg.cpp
29-
bool initBusInstances(JsonArray ins);
3029
void deserializeConfig();
3130
bool deserializeConfigSec();
3231
void serializeConfig();

wled00/set.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
402402
}
403403
#endif
404404

405-
if (subPage != 6 || !doReboot) serializeConfig(); //do not save if factory reset
405+
if (subPage != 2 && (subPage != 6 || !doReboot)) serializeConfig(); //do not save if factory reset or LED settings (which are saved after LED re-init)
406406
if (subPage == 4) alexaInit();
407407
}
408408

wled00/wled.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,8 @@ void WLED::loop()
204204
delete busConfigs[i]; busConfigs[i] = nullptr;
205205
}
206206
strip.finalizeInit(useRGBW, ledCount, skipFirstLed);
207+
yield();
208+
serializeConfig();
207209
}
208210

209211
yield();

wled00/xml.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ void getSettingsJS(byte subPage, char* dest)
306306
sappend('v',lt,bus->getType());
307307
sappend('v',co,bus->getColorOrder());
308308
sappend('v',ls,bus->getStart());
309-
sappend('c',ls,bus->reversed);
309+
sappend('c',cv,bus->reversed);
310310
}
311311
sappend('v',SET_F("MA"),strip.ablMilliampsMax);
312312
sappend('v',SET_F("LA"),strip.milliampsPerLed);

0 commit comments

Comments
 (0)