diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino index 5a792b58d..eb0644c3f 100644 --- a/tasmota/xdrv_01_webserver.ino +++ b/tasmota/xdrv_01_webserver.ino @@ -1741,6 +1741,63 @@ void HandleConfiguration(void) /*-------------------------------------------------------------------------------------------*/ +void WSContentSendNiceLists(uint32_t option) { + char stemp[30]; // Template number and Sensor name + for (uint32_t i = 0; i < ARRAY_SIZE(kGpioNiceList); i++) { // GPIO: }2'0'>None (0)}3}2'17'>Button1 (17)}3... + if (option && (1 == i)) { + WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE_NO_INDEX, AGPIO(GPIO_USER), D_SENSOR_USER); // }2'255'>User}3 + } + uint32_t ridx = pgm_read_word(kGpioNiceList + i) & 0xFFE0; + uint32_t midx = BGPIO(ridx); + WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE_NO_INDEX, ridx, GetTextIndexed(stemp, sizeof(stemp), midx, kSensorNames)); + } + WSContentSend_P(PSTR("\";")); + + WSContentSend_P(PSTR("hs=[")); + uint32_t midx; + bool first_done = false; + for (uint32_t i = 0; i < ARRAY_SIZE(kGpioNiceList); i++) { // hs=[36,68,100,132,168,200,232,264,292,324,356,388,421,453]; + midx = pgm_read_word(kGpioNiceList + i); + if (midx & 0x001F) { + if (first_done) { WSContentSend_P(PSTR(",")); } + WSContentSend_P(PSTR("%d"), midx); + first_done = true; + } + } +#ifdef ESP8266 +#ifdef USE_ADC + for (uint32_t i = 0; i < ARRAY_SIZE(kAdcNiceList); i++) { // hs=[36,68,100,132,168,200,232,264,292,324,356,388,421,453]; + midx = pgm_read_word(kAdcNiceList + i); + if (midx & 0x001F) { + if (first_done) { WSContentSend_P(PSTR(",")); } + WSContentSend_P(PSTR("%d"), midx); + first_done = true; + } + } +#endif // USE_ADC +#endif // ESP8266 + WSContentSend_P(PSTR("];")); +} + +#ifdef ESP8266 +#ifdef USE_ADC +void WSContentSendAdcNiceList(uint32_t option) { + char stemp[30]; // Template number and Sensor name + WSContentSend_P(PSTR("os=\"")); + for (uint32_t i = 0; i < ARRAY_SIZE(kAdcNiceList); i++) { // GPIO: }2'0'>None}3}2'17'>Analog}3... + if (option && (1 == i)) { + WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE_NO_INDEX, AGPIO(GPIO_USER), D_SENSOR_USER); // }2'15'>User}3 + } + uint32_t ridx = pgm_read_word(kAdcNiceList + i) & 0xFFE0; + uint32_t midx = BGPIO(ridx); + WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE_NO_INDEX, ridx, GetTextIndexed(stemp, sizeof(stemp), midx, kSensorNames)); + } +} +#endif // USE_ADC +#endif // ESP8266 + +/*-------------------------------------------------------------------------------------------*/ + void HandleTemplateConfiguration(void) { if (!HttpCheckPriviledgedAccess()) { return; } @@ -1781,51 +1838,16 @@ void HandleTemplateConfiguration(void) WSContentSend_P(HTTP_SCRIPT_MODULE_TEMPLATE); WSContentSend_P(HTTP_SCRIPT_TEMPLATE); - for (uint32_t i = 0; i < ARRAY_SIZE(kGpioNiceList); i++) { // GPIO: }2'0'>None (0)}3}2'17'>Button1 (17)}3... - if (1 == i) { - WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE_NO_INDEX, AGPIO(GPIO_USER), D_SENSOR_USER); // }2'255'>User}3 - } - uint32_t ridx = pgm_read_word(kGpioNiceList + i) & 0xFFE0; - uint32_t midx = BGPIO(ridx); - WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE_NO_INDEX, ridx, GetTextIndexed(stemp, sizeof(stemp), midx, kSensorNames)); - } - WSContentSend_P(PSTR("\";")); - WSContentSend_P(PSTR("hs=[")); - bool first_done = false; - for (uint32_t i = 0; i < ARRAY_SIZE(kGpioNiceList); i++) { // hs=[36,68,100,132,168,200,232,264,292,324,356,388,421,453]; - uint32_t midx = pgm_read_word(kGpioNiceList + i); - if (midx & 0x001F) { - if (first_done) { WSContentSend_P(PSTR(",")); } - WSContentSend_P(PSTR("%d"), midx); - first_done = true; - } - } -#ifdef ESP8266 - for (uint32_t i = 0; i < ARRAY_SIZE(kAdcNiceList); i++) { // hs=[36,68,100,132,168,200,232,264,292,324,356,388,421,453]; - uint32_t midx = pgm_read_word(kAdcNiceList + i); - if (midx & 0x001F) { - if (first_done) { WSContentSend_P(PSTR(",")); } - WSContentSend_P(PSTR("%d"), midx); - first_done = true; - } - } -#endif - WSContentSend_P(PSTR("];")); + WSContentSendNiceLists(1); WSContentSend_P(HTTP_SCRIPT_TEMPLATE2); #ifdef ESP8266 - WSContentSend_P(PSTR("os=\"")); - for (uint32_t i = 0; i < ARRAY_SIZE(kAdcNiceList); i++) { // GPIO: }2'0'>None}3}2'17'>Analog}3... - if (1 == i) { - WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE_NO_INDEX, AGPIO(GPIO_USER), D_SENSOR_USER); // }2'15'>User}3 - } - uint32_t ridx = pgm_read_word(kAdcNiceList + i) & 0xFFE0; - uint32_t midx = BGPIO(ridx); - WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE_NO_INDEX, ridx, GetTextIndexed(stemp, sizeof(stemp), midx, kSensorNames)); - } +#ifdef USE_ADC + WSContentSendAdcNiceList(1); WSContentSend_P(HTTP_SCRIPT_TEMPLATE3); +#endif // USE_ADC #endif // ESP8266 WSContentSend_P(HTTP_SCRIPT_TEMPLATE4); @@ -1845,15 +1867,8 @@ void HandleTemplateConfiguration(void) WSContentSend_P(HTTP_TABLE100); for (uint32_t i = 0; i < MAX_GPIO_PIN; i++) { if (!FlashPin(i)) { -//#ifdef ESP8266 -// WSContentSend_P(PSTR("%s%d"), -// ((9==i)||(10==i)) ? WebColor(COL_TEXT_WARNING) : WebColor(COL_TEXT), -// (ADC0_PIN==i) ? PSTR(D_ADC) : PSTR(D_GPIO), (ADC0_PIN==i) ? 0 : i, -// (0==i) ? " style='width:150px'" : "", i, i); -//#else // ESP32 WSContentSend_P(PSTR("" D_GPIO "%d"), ((9==i)||(10==i)) ? WebColor(COL_TEXT_WARNING) : WebColor(COL_TEXT), i, (0==i) ? " style='width:150px'" : "", i, i); -//#endif // ESP8266 WSContentSend_P(PSTR(""), i); } } @@ -1869,10 +1884,24 @@ void HandleTemplateConfiguration(void) WSContentStop(); } +uint16_t WebGetGpioArg(uint32_t i) { + char webindex[5]; // WebGetArg name + snprintf_P(webindex, sizeof(webindex), PSTR("g%d"), i); + char tmp[8]; // WebGetArg numbers only + WebGetArg(webindex, tmp, sizeof(tmp)); // GPIO + uint32_t gpio = (!strlen(tmp)) ? 0 : atoi(tmp); + char webindex2[5]; // WebGetArg name + snprintf_P(webindex2, sizeof(webindex2), PSTR("h%d"), i); + char tmp2[8]; // WebGetArg numbers only + WebGetArg(webindex2, tmp2, sizeof(tmp2)); + uint32_t value2 = (!strlen(tmp2)) ? 0 : atoi(tmp2) -1; + gpio += value2; + return gpio; +} + void TemplateSaveSettings(void) { char tmp[TOPSZ]; // WebGetArg NAME and GPIO/BASE/FLAG byte value - char webindex[5]; // WebGetArg name char svalue[300]; // Template command string WebGetArg("s1", tmp, sizeof(tmp)); // NAME @@ -1882,20 +1911,12 @@ void TemplateSaveSettings(void) for (uint32_t i = 0; i < ARRAY_SIZE(Settings.user_template.gp.io); i++) { if (6 == i) { j = 9; } if (8 == i) { j = 12; } - snprintf_P(webindex, sizeof(webindex), PSTR("g%d"), j); - WebGetArg(webindex, tmp, sizeof(tmp)); // GPIO - uint32_t gpio = atoi(tmp); - char tmp2[8]; // WebGetArg numbers only - char webindex2[5]; // WebGetArg name - snprintf_P(webindex2, sizeof(webindex2), PSTR("h%d"), j); - WebGetArg(webindex2, tmp2, sizeof(tmp2)); - uint32_t value2 = (!strlen(tmp2)) ? 0 : atoi(tmp2) -1; - gpio += value2; - snprintf_P(svalue, sizeof(svalue), PSTR("%s%s%d"), svalue, (i>0)?",":"", gpio); + snprintf_P(svalue, sizeof(svalue), PSTR("%s%s%d"), svalue, (i>0)?",":"", WebGetGpioArg(j)); j++; } uint32_t flag = 0; + char webindex[5]; // WebGetArg name for (uint32_t i = 0; i < GPIO_FLAG_USED; i++) { snprintf_P(webindex, sizeof(webindex), PSTR("c%d"), i); uint32_t state = Webserver->hasArg(webindex) << i; // FLAG @@ -1943,43 +1964,20 @@ void HandleModuleConfiguration(void) WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE_INDEX, midx, AnyModuleName(midx).c_str(), vidx); } WSContentSend_P(PSTR("\";sk(%d,99);os=\""), Settings.module); - for (uint32_t i = 0; i < ARRAY_SIZE(kGpioNiceList); i++) { - uint32_t ridx = pgm_read_word(kGpioNiceList + i) & 0xFFE0; - midx = BGPIO(ridx); - if (!GetUsedInModule(midx, cmodule.io)) { - WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE_NO_INDEX, ridx, GetTextIndexed(stemp, sizeof(stemp), midx, kSensorNames)); - } - } - WSContentSend_P(PSTR("\";")); - WSContentSend_P(PSTR("hs=[")); - bool first_done = false; - for (uint32_t i = 0; i < ARRAY_SIZE(kGpioNiceList); i++) { // hs=[36,68,100,132,168,200,232,264,292,324,356,388,421,453]; - midx = pgm_read_word(kGpioNiceList + i); - if (midx & 0x001F) { - if (first_done) { WSContentSend_P(PSTR(",")); } - WSContentSend_P(PSTR("%d"), midx); - first_done = true; - } - } - WSContentSend_P(PSTR("];")); + WSContentSendNiceLists(0); for (uint32_t i = 0; i < ARRAY_SIZE(cmodule.io); i++) { if (ValidGPIO(i, cmodule.io[i])) { - WSContentSend_P(PSTR("sk(%d,%d);"), my_module.io[i], i); // g0 - g16 + WSContentSend_P(PSTR("sk(%d,%d);"), my_module.io[i], i); // g0 - g17 } } #ifdef ESP8266 -#ifndef USE_ADC_VCC - WSContentSend_P(PSTR("os=\"")); - for (uint32_t i = 0; i < ARRAY_SIZE(kAdcNiceList); i++) { // FLAG: }2'0'>None}3}2'17'>Analog}3... - uint32_t ridx = pgm_read_word(kAdcNiceList + i) & 0xFFE0; - uint32_t midx = BGPIO(ridx); - WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE_NO_INDEX, ridx, GetTextIndexed(stemp, sizeof(stemp), midx, kSensorNames)); - } +#ifdef USE_ADC + WSContentSendAdcNiceList(0); WSContentSend_P(PSTR("\";sk(%d," STR(ADC0_PIN) ");"), Settings.my_gp.io[(sizeof(myio) / 2) -1]); -#endif // USE_ADC_VCC +#endif // USE_ADC #endif // ESP8266 WSContentSend_P(PSTR("}wl(sl);")); @@ -1989,15 +1987,8 @@ void HandleModuleConfiguration(void) for (uint32_t i = 0; i < ARRAY_SIZE(cmodule.io); i++) { if (ValidGPIO(i, cmodule.io[i])) { snprintf_P(stemp, 3, PINS_WEMOS +i*2); -//#ifdef ESP8266 -// WSContentSend_P(PSTR("%s %s%d"), -// (WEMOS==my_module_type)?stemp:"", -// (ADC0_PIN==i) ? PSTR(D_ADC) : PSTR(D_GPIO), (ADC0_PIN==i) ? 0 : i, -// i, i); -//#else // ESP32 WSContentSend_P(PSTR("%s " D_GPIO "%d"), (WEMOS==my_module_type)?stemp:"", i, i, i); -//#endif WSContentSend_P(PSTR(""), i); } } @@ -2010,7 +2001,6 @@ void HandleModuleConfiguration(void) void ModuleSaveSettings(void) { char tmp[8]; // WebGetArg numbers only - char webindex[5]; // WebGetArg name WebGetArg("g99", tmp, sizeof(tmp)); uint32_t new_module = (!strlen(tmp)) ? MODULE : atoi(tmp); @@ -2025,17 +2015,8 @@ void ModuleSaveSettings(void) Settings.my_gp.io[i] = GPIO_NONE; } else { if (ValidGPIO(i, cmodule.io[i])) { - snprintf_P(webindex, sizeof(webindex), PSTR("g%d"), i); - WebGetArg(webindex, tmp, sizeof(tmp)); - uint32_t value = (!strlen(tmp)) ? 0 : atoi(tmp); - char tmp2[8]; // WebGetArg numbers only - char webindex2[5]; // WebGetArg name - snprintf_P(webindex2, sizeof(webindex2), PSTR("h%d"), i); - WebGetArg(webindex2, tmp2, sizeof(tmp2)); - uint32_t value2 = (!strlen(tmp2)) ? 0 : atoi(tmp2) -1; - value += value2; - Settings.my_gp.io[i] = value; - gpios += F(", " D_GPIO ); gpios += String(i); gpios += F(" "); gpios += String(value); + Settings.my_gp.io[i] = WebGetGpioArg(i); + gpios += F(", " D_GPIO ); gpios += String(i); gpios += F(" "); gpios += String(Settings.my_gp.io[i]); } } }