Size & speed optimisations

This commit is contained in:
Blaz Kristan 2024-07-11 21:22:58 +02:00
parent 1ec68c428a
commit cd1ede38a7
16 changed files with 72 additions and 70 deletions

View File

@ -113,7 +113,7 @@ float UsermodTemperature::readDallas() {
#ifdef WLED_DEBUG #ifdef WLED_DEBUG
if (OneWire::crc8(data,8) != data[8]) { if (OneWire::crc8(data,8) != data[8]) {
DEBUG_PRINTLN(F("CRC error reading temperature.")); DEBUG_PRINTLN(F("CRC error reading temperature."));
for (byte i=0; i < 9; i++) DEBUG_PRINTF_P(PSTR("0x%02X "), data[i]); for (unsigned i=0; i < 9; i++) DEBUG_PRINTF_P(PSTR("0x%02X "), data[i]);
DEBUG_PRINT(F(" => ")); DEBUG_PRINT(F(" => "));
DEBUG_PRINTF_P(PSTR("0x%02X\n"), OneWire::crc8(data,8)); DEBUG_PRINTF_P(PSTR("0x%02X\n"), OneWire::crc8(data,8));
} }
@ -133,7 +133,7 @@ float UsermodTemperature::readDallas() {
break; break;
} }
} }
for (byte i=1; i<9; i++) data[0] &= data[i]; for (unsigned i=1; i<9; i++) data[0] &= data[i];
return data[0]==0xFF ? -127.0f : retVal; return data[0]==0xFF ? -127.0f : retVal;
} }

View File

@ -445,8 +445,8 @@ void FourLineDisplayUsermod::setPowerSave(uint8_t save) {
void FourLineDisplayUsermod::center(String &line, uint8_t width) { void FourLineDisplayUsermod::center(String &line, uint8_t width) {
int len = line.length(); int len = line.length();
if (len<width) for (byte i=(width-len)/2; i>0; i--) line = ' ' + line; if (len<width) for (unsigned i=(width-len)/2; i>0; i--) line = ' ' + line;
for (byte i=line.length(); i<width; i++) line += ' '; for (unsigned i=line.length(); i<width; i++) line += ' ';
} }
void FourLineDisplayUsermod::draw2x2GlyphIcons() { void FourLineDisplayUsermod::draw2x2GlyphIcons() {
@ -819,28 +819,28 @@ void FourLineDisplayUsermod::showCurrentEffectOrPalette(int inputEffPal, const c
if (overlayUntil == 0) { if (overlayUntil == 0) {
lockRedraw = true; lockRedraw = true;
// Find the mode name in JSON // Find the mode name in JSON
uint8_t printedChars = extractModeName(inputEffPal, qstring, lineBuffer, MAX_JSON_CHARS-1); unsigned printedChars = extractModeName(inputEffPal, qstring, lineBuffer, MAX_JSON_CHARS-1);
if (lineBuffer[0]=='*' && lineBuffer[1]==' ') { if (lineBuffer[0]=='*' && lineBuffer[1]==' ') {
// remove "* " from dynamic palettes // remove "* " from dynamic palettes
for (byte i=2; i<=printedChars; i++) lineBuffer[i-2] = lineBuffer[i]; //include '\0' for (unsigned i=2; i<=printedChars; i++) lineBuffer[i-2] = lineBuffer[i]; //include '\0'
printedChars -= 2; printedChars -= 2;
} else if ((lineBuffer[0]==' ' && lineBuffer[1]>127)) { } else if ((lineBuffer[0]==' ' && lineBuffer[1]>127)) {
// remove note symbol from effect names // remove note symbol from effect names
for (byte i=5; i<=printedChars; i++) lineBuffer[i-5] = lineBuffer[i]; //include '\0' for (unsigned i=5; i<=printedChars; i++) lineBuffer[i-5] = lineBuffer[i]; //include '\0'
printedChars -= 5; printedChars -= 5;
} }
if (lineHeight == 2) { // use this code for 8 line display if (lineHeight == 2) { // use this code for 8 line display
char smallBuffer1[MAX_MODE_LINE_SPACE]; char smallBuffer1[MAX_MODE_LINE_SPACE];
char smallBuffer2[MAX_MODE_LINE_SPACE]; char smallBuffer2[MAX_MODE_LINE_SPACE];
uint8_t smallChars1 = 0; unsigned smallChars1 = 0;
uint8_t smallChars2 = 0; unsigned smallChars2 = 0;
if (printedChars < MAX_MODE_LINE_SPACE) { // use big font if the text fits if (printedChars < MAX_MODE_LINE_SPACE) { // use big font if the text fits
while (printedChars < (MAX_MODE_LINE_SPACE-1)) lineBuffer[printedChars++]=' '; while (printedChars < (MAX_MODE_LINE_SPACE-1)) lineBuffer[printedChars++]=' ';
lineBuffer[printedChars] = 0; lineBuffer[printedChars] = 0;
drawString(1, row*lineHeight, lineBuffer); drawString(1, row*lineHeight, lineBuffer);
} else { // for long names divide the text into 2 lines and print them small } else { // for long names divide the text into 2 lines and print them small
bool spaceHit = false; bool spaceHit = false;
for (uint8_t i = 0; i < printedChars; i++) { for (unsigned i = 0; i < printedChars; i++) {
switch (lineBuffer[i]) { switch (lineBuffer[i]) {
case ' ': case ' ':
if (i > 4 && !spaceHit) { if (i > 4 && !spaceHit) {
@ -865,8 +865,8 @@ void FourLineDisplayUsermod::showCurrentEffectOrPalette(int inputEffPal, const c
} }
} else { // use this code for 4 ling displays } else { // use this code for 4 ling displays
char smallBuffer3[MAX_MODE_LINE_SPACE+1]; // uses 1x1 icon for mode/palette char smallBuffer3[MAX_MODE_LINE_SPACE+1]; // uses 1x1 icon for mode/palette
uint8_t smallChars3 = 0; unsigned smallChars3 = 0;
for (uint8_t i = 0; i < MAX_MODE_LINE_SPACE; i++) smallBuffer3[smallChars3++] = (i >= printedChars) ? ' ' : lineBuffer[i]; for (unsigned i = 0; i < MAX_MODE_LINE_SPACE; i++) smallBuffer3[smallChars3++] = (i >= printedChars) ? ' ' : lineBuffer[i];
smallBuffer3[smallChars3] = 0; smallBuffer3[smallChars3] = 0;
drawString(1, row*lineHeight, smallBuffer3, true); drawString(1, row*lineHeight, smallBuffer3, true);
} }
@ -1265,7 +1265,7 @@ void FourLineDisplayUsermod::addToConfig(JsonObject& root) {
bool FourLineDisplayUsermod::readFromConfig(JsonObject& root) { bool FourLineDisplayUsermod::readFromConfig(JsonObject& root) {
bool needsRedraw = false; bool needsRedraw = false;
DisplayType newType = type; DisplayType newType = type;
int8_t oldPin[3]; for (byte i=0; i<3; i++) oldPin[i] = ioPin[i]; int8_t oldPin[3]; for (unsigned i=0; i<3; i++) oldPin[i] = ioPin[i];
JsonObject top = root[FPSTR(_name)]; JsonObject top = root[FPSTR(_name)];
if (top.isNull()) { if (top.isNull()) {
@ -1276,7 +1276,7 @@ bool FourLineDisplayUsermod::readFromConfig(JsonObject& root) {
enabled = top[FPSTR(_enabled)] | enabled; enabled = top[FPSTR(_enabled)] | enabled;
newType = top["type"] | newType; newType = top["type"] | newType;
for (byte i=0; i<3; i++) ioPin[i] = top["pin"][i] | ioPin[i]; for (unsigned i=0; i<3; i++) ioPin[i] = top["pin"][i] | ioPin[i];
flip = top[FPSTR(_flip)] | flip; flip = top[FPSTR(_flip)] | flip;
contrast = top[FPSTR(_contrast)] | contrast; contrast = top[FPSTR(_contrast)] | contrast;
#ifndef ARDUINO_ARCH_ESP32 #ifndef ARDUINO_ARCH_ESP32
@ -1302,7 +1302,7 @@ bool FourLineDisplayUsermod::readFromConfig(JsonObject& root) {
DEBUG_PRINTLN(F(" config (re)loaded.")); DEBUG_PRINTLN(F(" config (re)loaded."));
// changing parameters from settings page // changing parameters from settings page
bool pinsChanged = false; bool pinsChanged = false;
for (byte i=0; i<3; i++) if (ioPin[i] != oldPin[i]) { pinsChanged = true; break; } for (unsigned i=0; i<3; i++) if (ioPin[i] != oldPin[i]) { pinsChanged = true; break; }
if (pinsChanged || type!=newType) { if (pinsChanged || type!=newType) {
bool isSPI = (type == SSD1306_SPI || type == SSD1306_SPI64 || type == SSD1309_SPI64); bool isSPI = (type == SSD1306_SPI || type == SSD1306_SPI64 || type == SSD1309_SPI64);
bool newSPI = (newType == SSD1306_SPI || newType == SSD1306_SPI64 || newType == SSD1309_SPI64); bool newSPI = (newType == SSD1306_SPI || newType == SSD1306_SPI64 || newType == SSD1309_SPI64);

View File

@ -416,7 +416,7 @@ void RotaryEncoderUIUsermod::sortModesAndPalettes() {
byte *RotaryEncoderUIUsermod::re_initIndexArray(int numModes) { byte *RotaryEncoderUIUsermod::re_initIndexArray(int numModes) {
byte *indexes = (byte *)malloc(sizeof(byte) * numModes); byte *indexes = (byte *)malloc(sizeof(byte) * numModes);
for (byte i = 0; i < numModes; i++) { for (unsigned i = 0; i < numModes; i++) {
indexes[i] = i; indexes[i] = i;
} }
return indexes; return indexes;
@ -700,7 +700,7 @@ void RotaryEncoderUIUsermod::findCurrentEffectAndPalette() {
effectPaletteIndex = 0; effectPaletteIndex = 0;
DEBUG_PRINTLN(effectPalette); DEBUG_PRINTLN(effectPalette);
for (uint8_t i = 0; i < strip.getPaletteCount()+strip.customPalettes.size(); i++) { for (unsigned i = 0; i < strip.getPaletteCount()+strip.customPalettes.size(); i++) {
if (palettes_alpha_indexes[i] == effectPalette) { if (palettes_alpha_indexes[i] == effectPalette) {
effectPaletteIndex = i; effectPaletteIndex = i;
DEBUG_PRINTLN(F("Found palette.")); DEBUG_PRINTLN(F("Found palette."));
@ -764,7 +764,7 @@ void RotaryEncoderUIUsermod::changeEffect(bool increase) {
effectCurrent = modes_alpha_indexes[effectCurrentIndex]; effectCurrent = modes_alpha_indexes[effectCurrentIndex];
stateChanged = true; stateChanged = true;
if (applyToAll) { if (applyToAll) {
for (byte i=0; i<strip.getSegmentsNum(); i++) { for (unsigned i=0; i<strip.getSegmentsNum(); i++) {
Segment& seg = strip.getSegment(i); Segment& seg = strip.getSegment(i);
if (!seg.isActive()) continue; if (!seg.isActive()) continue;
seg.setMode(effectCurrent); seg.setMode(effectCurrent);
@ -792,7 +792,7 @@ void RotaryEncoderUIUsermod::changeEffectSpeed(bool increase) {
effectSpeed = max(min((increase ? effectSpeed+fadeAmount : effectSpeed-fadeAmount), 255), 0); effectSpeed = max(min((increase ? effectSpeed+fadeAmount : effectSpeed-fadeAmount), 255), 0);
stateChanged = true; stateChanged = true;
if (applyToAll) { if (applyToAll) {
for (byte i=0; i<strip.getSegmentsNum(); i++) { for (unsigned i=0; i<strip.getSegmentsNum(); i++) {
Segment& seg = strip.getSegment(i); Segment& seg = strip.getSegment(i);
if (!seg.isActive()) continue; if (!seg.isActive()) continue;
seg.speed = effectSpeed; seg.speed = effectSpeed;
@ -820,7 +820,7 @@ void RotaryEncoderUIUsermod::changeEffectIntensity(bool increase) {
effectIntensity = max(min((increase ? effectIntensity+fadeAmount : effectIntensity-fadeAmount), 255), 0); effectIntensity = max(min((increase ? effectIntensity+fadeAmount : effectIntensity-fadeAmount), 255), 0);
stateChanged = true; stateChanged = true;
if (applyToAll) { if (applyToAll) {
for (byte i=0; i<strip.getSegmentsNum(); i++) { for (unsigned i=0; i<strip.getSegmentsNum(); i++) {
Segment& seg = strip.getSegment(i); Segment& seg = strip.getSegment(i);
if (!seg.isActive()) continue; if (!seg.isActive()) continue;
seg.intensity = effectIntensity; seg.intensity = effectIntensity;
@ -855,7 +855,7 @@ void RotaryEncoderUIUsermod::changeCustom(uint8_t par, bool increase) {
case 2: val = sid.custom2 = max(min((increase ? sid.custom2+fadeAmount : sid.custom2-fadeAmount), 255), 0); break; case 2: val = sid.custom2 = max(min((increase ? sid.custom2+fadeAmount : sid.custom2-fadeAmount), 255), 0); break;
default: val = sid.custom1 = max(min((increase ? sid.custom1+fadeAmount : sid.custom1-fadeAmount), 255), 0); break; default: val = sid.custom1 = max(min((increase ? sid.custom1+fadeAmount : sid.custom1-fadeAmount), 255), 0); break;
} }
for (byte i=0; i<strip.getSegmentsNum(); i++) { for (unsigned i=0; i<strip.getSegmentsNum(); i++) {
Segment& seg = strip.getSegment(i); Segment& seg = strip.getSegment(i);
if (!seg.isActive() || i == id) continue; if (!seg.isActive() || i == id) continue;
switch (par) { switch (par) {
@ -894,7 +894,7 @@ void RotaryEncoderUIUsermod::changePalette(bool increase) {
effectPalette = palettes_alpha_indexes[effectPaletteIndex]; effectPalette = palettes_alpha_indexes[effectPaletteIndex];
stateChanged = true; stateChanged = true;
if (applyToAll) { if (applyToAll) {
for (byte i=0; i<strip.getSegmentsNum(); i++) { for (unsigned i=0; i<strip.getSegmentsNum(); i++) {
Segment& seg = strip.getSegment(i); Segment& seg = strip.getSegment(i);
if (!seg.isActive()) continue; if (!seg.isActive()) continue;
seg.setPalette(effectPalette); seg.setPalette(effectPalette);
@ -923,7 +923,7 @@ void RotaryEncoderUIUsermod::changeHue(bool increase){
colorHStoRGB(currentHue1*256, currentSat1, col); colorHStoRGB(currentHue1*256, currentSat1, col);
stateChanged = true; stateChanged = true;
if (applyToAll) { if (applyToAll) {
for (byte i=0; i<strip.getSegmentsNum(); i++) { for (unsigned i=0; i<strip.getSegmentsNum(); i++) {
Segment& seg = strip.getSegment(i); Segment& seg = strip.getSegment(i);
if (!seg.isActive()) continue; if (!seg.isActive()) continue;
seg.colors[0] = RGBW32(col[0], col[1], col[2], col[3]); seg.colors[0] = RGBW32(col[0], col[1], col[2], col[3]);
@ -952,7 +952,7 @@ void RotaryEncoderUIUsermod::changeSat(bool increase){
currentSat1 = max(min((increase ? currentSat1+fadeAmount : currentSat1-fadeAmount), 255), 0); currentSat1 = max(min((increase ? currentSat1+fadeAmount : currentSat1-fadeAmount), 255), 0);
colorHStoRGB(currentHue1*256, currentSat1, col); colorHStoRGB(currentHue1*256, currentSat1, col);
if (applyToAll) { if (applyToAll) {
for (byte i=0; i<strip.getSegmentsNum(); i++) { for (unsigned i=0; i<strip.getSegmentsNum(); i++) {
Segment& seg = strip.getSegment(i); Segment& seg = strip.getSegment(i);
if (!seg.isActive()) continue; if (!seg.isActive()) continue;
seg.colors[0] = RGBW32(col[0], col[1], col[2], col[3]); seg.colors[0] = RGBW32(col[0], col[1], col[2], col[3]);
@ -1012,7 +1012,7 @@ void RotaryEncoderUIUsermod::changeCCT(bool increase){
#endif #endif
currentCCT = max(min((increase ? currentCCT+fadeAmount : currentCCT-fadeAmount), 255), 0); currentCCT = max(min((increase ? currentCCT+fadeAmount : currentCCT-fadeAmount), 255), 0);
// if (applyToAll) { // if (applyToAll) {
for (byte i=0; i<strip.getSegmentsNum(); i++) { for (unsigned i=0; i<strip.getSegmentsNum(); i++) {
Segment& seg = strip.getSegment(i); Segment& seg = strip.getSegment(i);
if (!seg.isActive()) continue; if (!seg.isActive()) continue;
seg.setCCT(currentCCT); seg.setCCT(currentCCT);

View File

@ -1215,8 +1215,9 @@ void WS2812FX::finalizeInit(void) {
const unsigned defDataPins[] = {DATA_PINS}; const unsigned defDataPins[] = {DATA_PINS};
const unsigned defCounts[] = {PIXEL_COUNTS}; const unsigned defCounts[] = {PIXEL_COUNTS};
const unsigned defNumPins = ((sizeof defDataPins) / (sizeof defDataPins[0])); const unsigned defNumPins = ((sizeof defDataPins) / (sizeof defDataPins[0]));
const unsigned defNumCounts = ((sizeof defCounts) / (sizeof defCounts[0])); const unsigned defNumCounts = ((sizeof defCounts) / (sizeof defCounts[0]));
const unsigned defNumBusses = defNumPins > defNumCounts && defNumCounts > 1 && defNumPins%defNumCounts == 0 ? defNumCounts : defNumPins; // if number of pins is divisible by counts, use number of counts to determine number of buses, otherwise use pins
const unsigned defNumBusses = defNumPins > defNumCounts && defNumPins%defNumCounts == 0 ? defNumCounts : defNumPins;
const unsigned pinsPerBus = defNumPins / defNumBusses; const unsigned pinsPerBus = defNumPins / defNumBusses;
unsigned prevLen = 0; unsigned prevLen = 0;
for (unsigned i = 0; i < defNumBusses && i < WLED_MAX_BUSSES+WLED_MIN_VIRTUAL_BUSSES; i++) { for (unsigned i = 0; i < defNumBusses && i < WLED_MAX_BUSSES+WLED_MIN_VIRTUAL_BUSSES; i++) {
@ -1229,6 +1230,7 @@ void WS2812FX::finalizeInit(void) {
while (pinManager.isPinAllocated(defPin[0]) && defPin[0] < WLED_NUM_PINS) defPin[0]++; while (pinManager.isPinAllocated(defPin[0]) && defPin[0] < WLED_NUM_PINS) defPin[0]++;
} }
unsigned start = prevLen; unsigned start = prevLen;
// if we have less counts than pins and they do not align, use last known count to set current count
unsigned count = defCounts[(i < defNumCounts) ? i : defNumCounts -1]; unsigned count = defCounts[(i < defNumCounts) ? i : defNumCounts -1];
prevLen += count; prevLen += count;
BusConfig defCfg = BusConfig(DEFAULT_LED_TYPE, defPin, start, count, DEFAULT_LED_COLOR_ORDER, false, 0, RGBW_MODE_MANUAL_ONLY, 0, useGlobalLedBuffer); BusConfig defCfg = BusConfig(DEFAULT_LED_TYPE, defPin, start, count, DEFAULT_LED_COLOR_ORDER, false, 0, RGBW_MODE_MANUAL_ONLY, 0, useGlobalLedBuffer);

View File

@ -34,7 +34,7 @@ struct NodeStruct
NodeStruct() : age(0), nodeType(0), build(0) NodeStruct() : age(0), nodeType(0), build(0)
{ {
for (uint8_t i = 0; i < 4; ++i) { ip[i] = 0; } for (unsigned i = 0; i < 4; ++i) { ip[i] = 0; }
} }
}; };
typedef std::map<uint8_t, NodeStruct> NodesMap; typedef std::map<uint8_t, NodeStruct> NodesMap;

View File

@ -25,7 +25,7 @@ void alexaInit()
// names are identical as the preset names, switching off can be done by switching off any of them // names are identical as the preset names, switching off can be done by switching off any of them
if (alexaNumPresets) { if (alexaNumPresets) {
String name = ""; String name = "";
for (byte presetIndex = 1; presetIndex <= alexaNumPresets; presetIndex++) for (unsigned presetIndex = 1; presetIndex <= alexaNumPresets; presetIndex++)
{ {
if (!getPresetName(presetIndex, name)) break; // no more presets if (!getPresetName(presetIndex, name)) break; // no more presets
EspalexaDevice* dev = new EspalexaDevice(name.c_str(), onAlexaChange, EspalexaDeviceType::extendedcolor); EspalexaDevice* dev = new EspalexaDevice(name.c_str(), onAlexaChange, EspalexaDeviceType::extendedcolor);
@ -64,7 +64,7 @@ void onAlexaChange(EspalexaDevice* dev)
} else // switch-on behavior for preset devices } else // switch-on behavior for preset devices
{ {
// turn off other preset devices // turn off other preset devices
for (byte i = 1; i < espalexa.getDeviceCount(); i++) for (unsigned i = 1; i < espalexa.getDeviceCount(); i++)
{ {
if (i == dev->getId()) continue; if (i == dev->getId()) continue;
espalexa.getDevice(i)->setValue(0); // turn off other presets espalexa.getDevice(i)->setValue(0); // turn off other presets
@ -87,7 +87,7 @@ void onAlexaChange(EspalexaDevice* dev)
applyPreset(macroAlexaOff, CALL_MODE_ALEXA); applyPreset(macroAlexaOff, CALL_MODE_ALEXA);
// below for loop stops Alexa from complaining if macroAlexaOff does not actually turn off // below for loop stops Alexa from complaining if macroAlexaOff does not actually turn off
} }
for (byte i = 0; i < espalexa.getDeviceCount(); i++) for (unsigned i = 0; i < espalexa.getDeviceCount(); i++)
{ {
espalexa.getDevice(i)->setValue(0); espalexa.getDevice(i)->setValue(0);
} }

View File

@ -86,7 +86,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
CJSON(apBehavior, ap[F("behav")]); CJSON(apBehavior, ap[F("behav")]);
/* /*
JsonArray ap_ip = ap["ip"]; JsonArray ap_ip = ap["ip"];
for (byte i = 0; i < 4; i++) { for (unsigned i = 0; i < 4; i++) {
apIP[i] = ap_ip; apIP[i] = ap_ip;
} }
*/ */
@ -565,7 +565,7 @@ bool deserializeConfig(JsonObject doc, bool fromFS) {
JsonArray if_hue_ip = if_hue["ip"]; JsonArray if_hue_ip = if_hue["ip"];
for (byte i = 0; i < 4; i++) for (unsigned i = 0; i < 4; i++)
CJSON(hueIP[i], if_hue_ip[i]); CJSON(hueIP[i], if_hue_ip[i]);
#endif #endif
@ -793,7 +793,7 @@ void serializeConfig() {
ethernet["type"] = ethernetType; ethernet["type"] = ethernetType;
if (ethernetType != WLED_ETH_NONE && ethernetType < WLED_NUM_ETH_TYPES) { if (ethernetType != WLED_ETH_NONE && ethernetType < WLED_NUM_ETH_TYPES) {
JsonArray pins = ethernet.createNestedArray("pin"); JsonArray pins = ethernet.createNestedArray("pin");
for (uint8_t p=0; p<WLED_ETH_RSVD_PINS_COUNT; p++) pins.add(esp32_nonconfigurable_ethernet_pins[p].pin); for (unsigned p=0; p<WLED_ETH_RSVD_PINS_COUNT; p++) pins.add(esp32_nonconfigurable_ethernet_pins[p].pin);
if (ethernetBoards[ethernetType].eth_power>=0) pins.add(ethernetBoards[ethernetType].eth_power); if (ethernetBoards[ethernetType].eth_power>=0) pins.add(ethernetBoards[ethernetType].eth_power);
if (ethernetBoards[ethernetType].eth_mdc>=0) pins.add(ethernetBoards[ethernetType].eth_mdc); if (ethernetBoards[ethernetType].eth_mdc>=0) pins.add(ethernetBoards[ethernetType].eth_mdc);
if (ethernetBoards[ethernetType].eth_mdio>=0) pins.add(ethernetBoards[ethernetType].eth_mdio); if (ethernetBoards[ethernetType].eth_mdio>=0) pins.add(ethernetBoards[ethernetType].eth_mdio);
@ -1046,7 +1046,7 @@ void serializeConfig() {
if_hue_recv["col"] = hueApplyColor; if_hue_recv["col"] = hueApplyColor;
JsonArray if_hue_ip = if_hue.createNestedArray("ip"); JsonArray if_hue_ip = if_hue.createNestedArray("ip");
for (byte i = 0; i < 4; i++) { for (unsigned i = 0; i < 4; i++) {
if_hue_ip.add(hueIP[i]); if_hue_ip.add(hueIP[i]);
} }
#endif #endif
@ -1081,7 +1081,7 @@ void serializeConfig() {
JsonArray timers_ins = timers.createNestedArray("ins"); JsonArray timers_ins = timers.createNestedArray("ins");
for (byte i = 0; i < 10; i++) { for (unsigned i = 0; i < 10; i++) {
if (timerMacro[i] == 0 && timerHours[i] == 0 && timerMinutes[i] == 0) continue; // sunrise/sunset get saved always (timerHours=255) if (timerMacro[i] == 0 && timerHours[i] == 0 && timerMinutes[i] == 0) continue; // sunrise/sunset get saved always (timerHours=255)
JsonObject timers_ins0 = timers_ins.createNestedObject(); JsonObject timers_ins0 = timers_ins.createNestedObject();
timers_ins0["en"] = (timerWeekday[i] & 0x01); timers_ins0["en"] = (timerWeekday[i] & 0x01);
@ -1113,7 +1113,7 @@ void serializeConfig() {
dmx[F("start-led")] = DMXStartLED; dmx[F("start-led")] = DMXStartLED;
JsonArray dmx_fixmap = dmx.createNestedArray(F("fixmap")); JsonArray dmx_fixmap = dmx.createNestedArray(F("fixmap"));
for (byte i = 0; i < 15; i++) { for (unsigned i = 0; i < 15; i++) {
dmx_fixmap.add(DMXFixtureMap[i]); dmx_fixmap.add(DMXFixtureMap[i]);
} }

View File

@ -22,7 +22,7 @@ void handleDMX()
bool calc_brightness = true; bool calc_brightness = true;
// check if no shutter channel is set // check if no shutter channel is set
for (byte i = 0; i < DMXChannels; i++) for (unsigned i = 0; i < DMXChannels; i++)
{ {
if (DMXFixtureMap[i] == 5) calc_brightness = false; if (DMXFixtureMap[i] == 5) calc_brightness = false;
} }

View File

@ -226,7 +226,7 @@ void handleNightlight()
nightlightDelayMs = (unsigned)(nightlightDelayMins*60000); nightlightDelayMs = (unsigned)(nightlightDelayMins*60000);
nightlightActiveOld = true; nightlightActiveOld = true;
briNlT = bri; briNlT = bri;
for (byte i=0; i<4; i++) colNlT[i] = col[i]; // remember starting color for (unsigned i=0; i<4; i++) colNlT[i] = col[i]; // remember starting color
if (nightlightMode == NL_MODE_SUN) if (nightlightMode == NL_MODE_SUN)
{ {
//save current //save current
@ -251,7 +251,7 @@ void handleNightlight()
bri = briNlT + ((nightlightTargetBri - briNlT)*nper); bri = briNlT + ((nightlightTargetBri - briNlT)*nper);
if (nightlightMode == NL_MODE_COLORFADE) // color fading only is enabled with "NF=2" if (nightlightMode == NL_MODE_COLORFADE) // color fading only is enabled with "NF=2"
{ {
for (byte i=0; i<4; i++) col[i] = colNlT[i]+ ((colSec[i] - colNlT[i])*nper); // fading from actual color to secondary color for (unsigned i=0; i<4; i++) col[i] = colNlT[i]+ ((colSec[i] - colNlT[i])*nper); // fading from actual color to secondary color
} }
colorUpdated(CALL_MODE_NO_NOTIFY); colorUpdated(CALL_MODE_NO_NOTIFY);
} }

View File

@ -377,7 +377,7 @@ void checkTimers()
if (!hour(localTime) && minute(localTime)==1) calculateSunriseAndSunset(); if (!hour(localTime) && minute(localTime)==1) calculateSunriseAndSunset();
DEBUG_PRINTF_P(PSTR("Local time: %02d:%02d\n"), hour(localTime), minute(localTime)); DEBUG_PRINTF_P(PSTR("Local time: %02d:%02d\n"), hour(localTime), minute(localTime));
for (uint8_t i = 0; i < 8; i++) for (unsigned i = 0; i < 8; i++)
{ {
if (timerMacro[i] != 0 if (timerMacro[i] != 0
&& (timerWeekday[i] & 0x01) //timer is enabled && (timerWeekday[i] & 0x01) //timer is enabled

View File

@ -34,7 +34,7 @@ void _overlayAnalogClock()
} }
if (analogClock5MinuteMarks) if (analogClock5MinuteMarks)
{ {
for (byte i = 0; i <= 12; i++) for (unsigned i = 0; i <= 12; i++)
{ {
unsigned pix = analogClock12pixel + roundf((overlaySize / 12.0f) *i); unsigned pix = analogClock12pixel + roundf((overlaySize / 12.0f) *i);
if (pix > overlayMax) pix -= overlaySize; if (pix > overlayMax) pix -= overlaySize;
@ -91,7 +91,7 @@ void handleOverlayDraw() {
usermods.handleOverlayDraw(); usermods.handleOverlayDraw();
if (analogClockSolidBlack) { if (analogClockSolidBlack) {
const Segment* segments = strip.getSegments(); const Segment* segments = strip.getSegments();
for (uint8_t i = 0; i < strip.getSegmentsNum(); i++) { for (unsigned i = 0; i < strip.getSegmentsNum(); i++) {
const Segment& segment = segments[i]; const Segment& segment = segments[i];
if (!segment.isActive()) continue; if (!segment.isActive()) continue;
if (segment.mode > 0 || segment.colors[0] > 0) { if (segment.mode > 0 || segment.colors[0] > 0) {

View File

@ -295,7 +295,7 @@ byte PinManagerClass::allocateLedc(byte channels)
{ {
if (channels > MAX_LED_CHANNELS || channels == 0) return 255; if (channels > MAX_LED_CHANNELS || channels == 0) return 255;
byte ca = 0; byte ca = 0;
for (byte i = 0; i < MAX_LED_CHANNELS; i++) { for (unsigned i = 0; i < MAX_LED_CHANNELS; i++) {
byte by = i >> 3; byte by = i >> 3;
byte bi = i - 8*by; byte bi = i - 8*by;
if (bitRead(ledcAlloc[by], bi)) { //found occupied pin if (bitRead(ledcAlloc[by], bi)) { //found occupied pin
@ -305,7 +305,7 @@ byte PinManagerClass::allocateLedc(byte channels)
} }
if (ca >= channels) { //enough free channels if (ca >= channels) { //enough free channels
byte in = (i + 1) - ca; byte in = (i + 1) - ca;
for (byte j = 0; j < ca; j++) { for (unsigned j = 0; j < ca; j++) {
byte bChan = in + j; byte bChan = in + j;
byte byChan = bChan >> 3; byte byChan = bChan >> 3;
byte biChan = bChan - 8*byChan; byte biChan = bChan - 8*byChan;
@ -319,7 +319,7 @@ byte PinManagerClass::allocateLedc(byte channels)
void PinManagerClass::deallocateLedc(byte pos, byte channels) void PinManagerClass::deallocateLedc(byte pos, byte channels)
{ {
for (byte j = pos; j < pos + channels; j++) { for (unsigned j = pos; j < pos + channels; j++) {
if (j > MAX_LED_CHANNELS) return; if (j > MAX_LED_CHANNELS) return;
byte by = j >> 3; byte by = j >> 3;
byte bi = j - 8*by; byte bi = j - 8*by;

View File

@ -68,7 +68,7 @@ static bool resetNightMode() {
static void brightnessUp() { static void brightnessUp() {
if (nightModeActive()) return; if (nightModeActive()) return;
// dumb incremental search is efficient enough for so few items // dumb incremental search is efficient enough for so few items
for (uint8_t index = 0; index < numBrightnessSteps; ++index) { for (unsigned index = 0; index < numBrightnessSteps; ++index) {
if (brightnessSteps[index] > bri) { if (brightnessSteps[index] > bri) {
bri = brightnessSteps[index]; bri = brightnessSteps[index];
break; break;

View File

@ -4,57 +4,57 @@
*/ */
//Usermod Manager internals //Usermod Manager internals
void UsermodManager::setup() { for (byte i = 0; i < numMods; i++) ums[i]->setup(); } void UsermodManager::setup() { for (unsigned i = 0; i < numMods; i++) ums[i]->setup(); }
void UsermodManager::connected() { for (byte i = 0; i < numMods; i++) ums[i]->connected(); } void UsermodManager::connected() { for (unsigned i = 0; i < numMods; i++) ums[i]->connected(); }
void UsermodManager::loop() { for (byte i = 0; i < numMods; i++) ums[i]->loop(); } void UsermodManager::loop() { for (unsigned i = 0; i < numMods; i++) ums[i]->loop(); }
void UsermodManager::handleOverlayDraw() { for (byte i = 0; i < numMods; i++) ums[i]->handleOverlayDraw(); } void UsermodManager::handleOverlayDraw() { for (unsigned i = 0; i < numMods; i++) ums[i]->handleOverlayDraw(); }
void UsermodManager::appendConfigData() { for (byte i = 0; i < numMods; i++) ums[i]->appendConfigData(); } void UsermodManager::appendConfigData() { for (unsigned i = 0; i < numMods; i++) ums[i]->appendConfigData(); }
bool UsermodManager::handleButton(uint8_t b) { bool UsermodManager::handleButton(uint8_t b) {
bool overrideIO = false; bool overrideIO = false;
for (byte i = 0; i < numMods; i++) { for (unsigned i = 0; i < numMods; i++) {
if (ums[i]->handleButton(b)) overrideIO = true; if (ums[i]->handleButton(b)) overrideIO = true;
} }
return overrideIO; return overrideIO;
} }
bool UsermodManager::getUMData(um_data_t **data, uint8_t mod_id) { bool UsermodManager::getUMData(um_data_t **data, uint8_t mod_id) {
for (byte i = 0; i < numMods; i++) { for (unsigned i = 0; i < numMods; i++) {
if (mod_id > 0 && ums[i]->getId() != mod_id) continue; // only get data form requested usermod if provided if (mod_id > 0 && ums[i]->getId() != mod_id) continue; // only get data form requested usermod if provided
if (ums[i]->getUMData(data)) return true; // if usermod does provide data return immediately (only one usermod can provide data at one time) if (ums[i]->getUMData(data)) return true; // if usermod does provide data return immediately (only one usermod can provide data at one time)
} }
return false; return false;
} }
void UsermodManager::addToJsonState(JsonObject& obj) { for (byte i = 0; i < numMods; i++) ums[i]->addToJsonState(obj); } void UsermodManager::addToJsonState(JsonObject& obj) { for (unsigned i = 0; i < numMods; i++) ums[i]->addToJsonState(obj); }
void UsermodManager::addToJsonInfo(JsonObject& obj) { for (byte i = 0; i < numMods; i++) ums[i]->addToJsonInfo(obj); } void UsermodManager::addToJsonInfo(JsonObject& obj) { for (unsigned i = 0; i < numMods; i++) ums[i]->addToJsonInfo(obj); }
void UsermodManager::readFromJsonState(JsonObject& obj) { for (byte i = 0; i < numMods; i++) ums[i]->readFromJsonState(obj); } void UsermodManager::readFromJsonState(JsonObject& obj) { for (unsigned i = 0; i < numMods; i++) ums[i]->readFromJsonState(obj); }
void UsermodManager::addToConfig(JsonObject& obj) { for (byte i = 0; i < numMods; i++) ums[i]->addToConfig(obj); } void UsermodManager::addToConfig(JsonObject& obj) { for (unsigned i = 0; i < numMods; i++) ums[i]->addToConfig(obj); }
bool UsermodManager::readFromConfig(JsonObject& obj) { bool UsermodManager::readFromConfig(JsonObject& obj) {
bool allComplete = true; bool allComplete = true;
for (byte i = 0; i < numMods; i++) { for (unsigned i = 0; i < numMods; i++) {
if (!ums[i]->readFromConfig(obj)) allComplete = false; if (!ums[i]->readFromConfig(obj)) allComplete = false;
} }
return allComplete; return allComplete;
} }
#ifndef WLED_DISABLE_MQTT #ifndef WLED_DISABLE_MQTT
void UsermodManager::onMqttConnect(bool sessionPresent) { for (byte i = 0; i < numMods; i++) ums[i]->onMqttConnect(sessionPresent); } void UsermodManager::onMqttConnect(bool sessionPresent) { for (unsigned i = 0; i < numMods; i++) ums[i]->onMqttConnect(sessionPresent); }
bool UsermodManager::onMqttMessage(char* topic, char* payload) { bool UsermodManager::onMqttMessage(char* topic, char* payload) {
for (byte i = 0; i < numMods; i++) if (ums[i]->onMqttMessage(topic, payload)) return true; for (unsigned i = 0; i < numMods; i++) if (ums[i]->onMqttMessage(topic, payload)) return true;
return false; return false;
} }
#endif #endif
#ifndef WLED_DISABLE_ESPNOW #ifndef WLED_DISABLE_ESPNOW
bool UsermodManager::onEspNowMessage(uint8_t* sender, uint8_t* payload, uint8_t len) { bool UsermodManager::onEspNowMessage(uint8_t* sender, uint8_t* payload, uint8_t len) {
for (byte i = 0; i < numMods; i++) if (ums[i]->onEspNowMessage(sender, payload, len)) return true; for (unsigned i = 0; i < numMods; i++) if (ums[i]->onEspNowMessage(sender, payload, len)) return true;
return false; return false;
} }
#endif #endif
void UsermodManager::onUpdateBegin(bool init) { for (byte i = 0; i < numMods; i++) ums[i]->onUpdateBegin(init); } // notify usermods that update is to begin void UsermodManager::onUpdateBegin(bool init) { for (unsigned i = 0; i < numMods; i++) ums[i]->onUpdateBegin(init); } // notify usermods that update is to begin
void UsermodManager::onStateChange(uint8_t mode) { for (byte i = 0; i < numMods; i++) ums[i]->onStateChange(mode); } // notify usermods that WLED state changed void UsermodManager::onStateChange(uint8_t mode) { for (unsigned i = 0; i < numMods; i++) ums[i]->onStateChange(mode); } // notify usermods that WLED state changed
/* /*
* Enables usermods to lookup another Usermod. * Enables usermods to lookup another Usermod.
*/ */
Usermod* UsermodManager::lookup(uint16_t mod_id) { Usermod* UsermodManager::lookup(uint16_t mod_id) {
for (byte i = 0; i < numMods; i++) { for (unsigned i = 0; i < numMods; i++) {
if (ums[i]->getId() == mod_id) { if (ums[i]->getId() == mod_id) {
return ums[i]; return ums[i];
} }

View File

@ -197,7 +197,7 @@ void prepareHostname(char* hostname)
bool isAsterisksOnly(const char* str, byte maxLen) bool isAsterisksOnly(const char* str, byte maxLen)
{ {
for (byte i = 0; i < maxLen; i++) { for (unsigned i = 0; i < maxLen; i++) {
if (str[i] == 0) break; if (str[i] == 0) break;
if (str[i] != '*') return false; if (str[i] != '*') return false;
} }

View File

@ -168,7 +168,7 @@ void appendGPIOinfo() {
#ifdef WLED_USE_ETHERNET #ifdef WLED_USE_ETHERNET
if (ethernetType != WLED_ETH_NONE && ethernetType < WLED_NUM_ETH_TYPES) { if (ethernetType != WLED_ETH_NONE && ethernetType < WLED_NUM_ETH_TYPES) {
for (uint8_t p=0; p<WLED_ETH_RSVD_PINS_COUNT; p++) { oappend(","); oappend(itoa(esp32_nonconfigurable_ethernet_pins[p].pin,nS,10)); } for (unsigned p=0; p<WLED_ETH_RSVD_PINS_COUNT; p++) { oappend(","); oappend(itoa(esp32_nonconfigurable_ethernet_pins[p].pin,nS,10)); }
if (ethernetBoards[ethernetType].eth_power>=0) { oappend(","); oappend(itoa(ethernetBoards[ethernetType].eth_power,nS,10)); } if (ethernetBoards[ethernetType].eth_power>=0) { oappend(","); oappend(itoa(ethernetBoards[ethernetType].eth_power,nS,10)); }
if (ethernetBoards[ethernetType].eth_mdc>=0) { oappend(","); oappend(itoa(ethernetBoards[ethernetType].eth_mdc,nS,10)); } if (ethernetBoards[ethernetType].eth_mdc>=0) { oappend(","); oappend(itoa(ethernetBoards[ethernetType].eth_mdc,nS,10)); }
if (ethernetBoards[ethernetType].eth_mdio>=0) { oappend(","); oappend(itoa(ethernetBoards[ethernetType].eth_mdio,nS,10)); } if (ethernetBoards[ethernetType].eth_mdio>=0) { oappend(","); oappend(itoa(ethernetBoards[ethernetType].eth_mdio,nS,10)); }
@ -632,7 +632,7 @@ void getSettingsJS(byte subPage, char* dest)
sappend('v',SET_F("A1"),macroAlexaOff); sappend('v',SET_F("A1"),macroAlexaOff);
sappend('v',SET_F("MC"),macroCountdown); sappend('v',SET_F("MC"),macroCountdown);
sappend('v',SET_F("MN"),macroNl); sappend('v',SET_F("MN"),macroNl);
for (uint8_t i=0; i<WLED_MAX_BUTTONS; i++) { for (unsigned i=0; i<WLED_MAX_BUTTONS; i++) {
oappend(SET_F("addRow(")); oappend(SET_F("addRow("));
oappend(itoa(i,tm,10)); oappend(","); oappend(itoa(i,tm,10)); oappend(",");
oappend(itoa(macroButton[i],tm,10)); oappend(","); oappend(itoa(macroButton[i],tm,10)); oappend(",");
@ -758,7 +758,7 @@ void getSettingsJS(byte subPage, char* dest)
} }
sappend('v',SET_F("MPC"),strip.panels); sappend('v',SET_F("MPC"),strip.panels);
// panels // panels
for (uint8_t i=0; i<strip.panels; i++) { for (unsigned i=0; i<strip.panels; i++) {
char n[5]; char n[5];
oappend(SET_F("addPanel(")); oappend(SET_F("addPanel("));
oappend(itoa(i,n,10)); oappend(itoa(i,n,10));
@ -766,7 +766,7 @@ void getSettingsJS(byte subPage, char* dest)
char pO[8] = { '\0' }; char pO[8] = { '\0' };
snprintf_P(pO, 7, PSTR("P%d"), i); // MAX_PANELS is 64 so pO will always only be 4 characters or less snprintf_P(pO, 7, PSTR("P%d"), i); // MAX_PANELS is 64 so pO will always only be 4 characters or less
pO[7] = '\0'; pO[7] = '\0';
uint8_t l = strlen(pO); unsigned l = strlen(pO);
// create P0B, P1B, ..., P63B, etc for other PxxX // create P0B, P1B, ..., P63B, etc for other PxxX
pO[l] = 'B'; sappend('v',pO,strip.panel[i].bottomStart); pO[l] = 'B'; sappend('v',pO,strip.panel[i].bottomStart);
pO[l] = 'R'; sappend('v',pO,strip.panel[i].rightStart); pO[l] = 'R'; sappend('v',pO,strip.panel[i].rightStart);