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]);
}
}
}