mirror of
https://github.com/arendst/Tasmota.git
synced 2025-04-26 07:47:15 +00:00
Redesign GPIO to 16-bit
This commit is contained in:
parent
46cbe13e9b
commit
805f93cfab
@ -1142,6 +1142,27 @@ void TemplateConvert(uint8_t template8[], uint16_t template16[]) {
|
|||||||
template16[i] = GpioConvert(template8[i]);
|
template16[i] = GpioConvert(template8[i]);
|
||||||
}
|
}
|
||||||
template16[(sizeof(mytmplt) / 2) -2] = Adc0Convert(template8[sizeof(mytmplt8285) -1]);
|
template16[(sizeof(mytmplt) / 2) -2] = Adc0Convert(template8[sizeof(mytmplt8285) -1]);
|
||||||
|
|
||||||
|
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("FNC: TemplateConvert"));
|
||||||
|
AddLogBuffer(LOG_LEVEL_DEBUG, template8, sizeof(mytmplt8285));
|
||||||
|
AddLogBufferSize(LOG_LEVEL_DEBUG, (uint8_t*)template16, sizeof(mytmplt) / 2, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConvertGpios(void) {
|
||||||
|
if (Settings.user_template8.flag != 255) {
|
||||||
|
// Convert 8-bit user template
|
||||||
|
TemplateConvert((uint8_t*)&Settings.user_template8, (uint16_t*)&Settings.user_template);
|
||||||
|
Settings.user_template8.flag = 255;
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < sizeof(Settings.my_gp8.io); i++) {
|
||||||
|
Settings.my_gp.io[i] = GpioConvert(Settings.my_gp8.io[i]);
|
||||||
|
}
|
||||||
|
Settings.my_gp.io[(sizeof(myio) / 2) -1] = Adc0Convert(Settings.my_adc0);
|
||||||
|
|
||||||
|
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("FNC: ConvertGpios"));
|
||||||
|
AddLogBuffer(LOG_LEVEL_DEBUG, (uint8_t *)&Settings.my_gp8.io, sizeof(myio8));
|
||||||
|
AddLogBufferSize(LOG_LEVEL_DEBUG, (uint8_t *)&Settings.my_gp.io, sizeof(myio) / 2, 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif // ESP8266
|
#endif // ESP8266
|
||||||
|
|
||||||
@ -1247,28 +1268,29 @@ void GetInternalTemplate(void* ptr, uint32_t module, uint32_t option) {
|
|||||||
memcpy_P(&template8, &kModules8285[module_template - TMP_WEMOS], sizeof(template8));
|
memcpy_P(&template8, &kModules8285[module_template - TMP_WEMOS], sizeof(template8));
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddLogBuffer(LOG_LEVEL_DEBUG, (uint8_t *)&template8, sizeof(mytmplt));
|
// AddLogBuffer(LOG_LEVEL_DEBUG, (uint8_t *)&template8, sizeof(mytmplt8285));
|
||||||
|
|
||||||
// template16 = GPIO 0,1,2,3,4,5,9,10,12,13,14,15,16,Adc,Flg
|
// template16 = GPIO 0,1,2,3,4,5,9,10,12,13,14,15,16,Adc,Flg
|
||||||
uint16_t template16[(sizeof(mytmplt) / 2)] = { GPIO_NONE };
|
uint16_t template16[(sizeof(mytmplt) / 2)] = { GPIO_NONE };
|
||||||
TemplateConvert(template8, template16);
|
TemplateConvert(template8, template16);
|
||||||
|
|
||||||
uint32_t index = 0;
|
uint32_t index = 0;
|
||||||
uint32_t size = sizeof(mycfgio); // template16[module_template].gp
|
uint32_t size = sizeof(mycfgio); // template16[module_template].gp
|
||||||
switch (option) {
|
switch (option) {
|
||||||
case 2: {
|
case 2: {
|
||||||
index = sizeof(template16) -2; // template16[module_template].flag
|
index = (sizeof(mytmplt) / 2) -1; // template16[module_template].flag
|
||||||
size = 2;
|
size = 2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 3: {
|
case 3: {
|
||||||
size = sizeof(template16); // template16[module_template]
|
size = sizeof(mytmplt); // template16[module_template]
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
memcpy(ptr, &template16[index], size);
|
memcpy(ptr, &template16[index], size);
|
||||||
|
|
||||||
// AddLogBuffer(LOG_LEVEL_DEBUG, (uint8_t *)ptr, size);
|
AddLog_P2(LOG_LEVEL_DEBUG, PSTR("FNC: GetInternalTemplate option %d"), option);
|
||||||
|
AddLogBufferSize(LOG_LEVEL_DEBUG, (uint8_t *)ptr, size / 2, 2);
|
||||||
}
|
}
|
||||||
#endif // ESP8266
|
#endif // ESP8266
|
||||||
|
|
||||||
@ -1356,7 +1378,7 @@ uint32_t ValidPin(uint32_t pin, uint32_t gpio)
|
|||||||
|
|
||||||
// if (!is_8285 && !Settings.flag3.user_esp8285_enable) { // SetOption51 - Enable ESP8285 user GPIO's
|
// if (!is_8285 && !Settings.flag3.user_esp8285_enable) { // SetOption51 - Enable ESP8285 user GPIO's
|
||||||
if ((WEMOS == Settings.module) && !Settings.flag3.user_esp8285_enable) { // SetOption51 - Enable ESP8285 user GPIO's
|
if ((WEMOS == Settings.module) && !Settings.flag3.user_esp8285_enable) { // SetOption51 - Enable ESP8285 user GPIO's
|
||||||
if ((pin == 9) || (pin == 10)) {
|
if ((9 == pin) || (10 == pin)) {
|
||||||
return GPIO_NONE; // Disable possible flash GPIO9 and GPIO10
|
return GPIO_NONE; // Disable possible flash GPIO9 and GPIO10
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1366,6 +1388,11 @@ uint32_t ValidPin(uint32_t pin, uint32_t gpio)
|
|||||||
|
|
||||||
bool ValidGPIO(uint32_t pin, uint32_t gpio)
|
bool ValidGPIO(uint32_t pin, uint32_t gpio)
|
||||||
{
|
{
|
||||||
|
#ifdef ESP8266
|
||||||
|
#ifdef USE_ADC_VCC
|
||||||
|
if (17 == pin) { return false; } // ADC0 = GPIO17
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
return (GPIO_USER == ValidPin(pin, BGPIO(gpio))); // Only allow GPIO_USER pins
|
return (GPIO_USER == ValidPin(pin, BGPIO(gpio))); // Only allow GPIO_USER pins
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1465,6 +1492,9 @@ bool JsonTemplate(const char* dataBuf)
|
|||||||
if (obj[D_JSON_GPIO].success()) {
|
if (obj[D_JSON_GPIO].success()) {
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
if (!obj[D_JSON_GPIO][13].success()) { // Old template
|
if (!obj[D_JSON_GPIO][13].success()) { // Old template
|
||||||
|
|
||||||
|
AddLog_P(LOG_LEVEL_DEBUG, PSTR("TPL: Converting template ..."));
|
||||||
|
|
||||||
uint8_t template8[sizeof(mytmplt8285)] = { GPIO_NONE };
|
uint8_t template8[sizeof(mytmplt8285)] = { GPIO_NONE };
|
||||||
for (uint32_t i = 0; i < ARRAY_SIZE(template8) -1; i++) {
|
for (uint32_t i = 0; i < ARRAY_SIZE(template8) -1; i++) {
|
||||||
template8[i] = obj[D_JSON_GPIO][i] | 0;
|
template8[i] = obj[D_JSON_GPIO][i] | 0;
|
||||||
|
@ -90,16 +90,14 @@ void ButtonInit(void)
|
|||||||
Button.present++;
|
Button.present++;
|
||||||
pinMode(Pin(GPIO_KEY1, i), bitRead(Button.no_pullup_mask, i) ? INPUT : ((16 == Pin(GPIO_KEY1, i)) ? INPUT_PULLDOWN_16 : INPUT_PULLUP));
|
pinMode(Pin(GPIO_KEY1, i), bitRead(Button.no_pullup_mask, i) ? INPUT : ((16 == Pin(GPIO_KEY1, i)) ? INPUT_PULLDOWN_16 : INPUT_PULLUP));
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
#ifndef USE_ADC_VCC
|
#ifndef USE_ADC_VCC
|
||||||
else if ((99 == Button.adc) && ((ADC0_BUTTON == my_adc0) || (ADC0_BUTTON_INV == my_adc0))) {
|
else if ((99 == Button.adc) && AdcButtonPresent(0)) {
|
||||||
Button.present++;
|
Button.present++;
|
||||||
Button.adc = i;
|
Button.adc = i;
|
||||||
}
|
}
|
||||||
#endif // USE_ADC_VCC
|
#endif // USE_ADC_VCC
|
||||||
#endif // ESP8266
|
#endif // ESP8266
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,14 +167,7 @@ void ButtonHandler(void)
|
|||||||
#ifndef USE_ADC_VCC
|
#ifndef USE_ADC_VCC
|
||||||
if (Button.adc == button_index) {
|
if (Button.adc == button_index) {
|
||||||
button_present = 1;
|
button_present = 1;
|
||||||
/*
|
button = AdcGetButton(0);
|
||||||
if (ADC0_BUTTON_INV == my_adc0) {
|
|
||||||
button = (AdcRead(1) < 128);
|
|
||||||
}
|
|
||||||
else if (ADC0_BUTTON == my_adc0) {
|
|
||||||
button = (AdcRead(1) > 128);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
#endif // USE_ADC_VCC
|
#endif // USE_ADC_VCC
|
||||||
#else // ESP32
|
#else // ESP32
|
||||||
|
@ -1477,11 +1477,7 @@ void GpioInit(void)
|
|||||||
// AddLog_P2(LOG_LEVEL_DEBUG, PSTR("DBG: Used GPIOs %d"), GPIO_SENSOR_END);
|
// AddLog_P2(LOG_LEVEL_DEBUG, PSTR("DBG: Used GPIOs %d"), GPIO_SENSOR_END);
|
||||||
|
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
if (Settings.user_template8.flag != 255) {
|
ConvertGpios();
|
||||||
// Convert 8-bit user template
|
|
||||||
TemplateConvert((uint8_t*)&Settings.user_template8, (uint16_t*)&Settings.user_template);
|
|
||||||
Settings.user_template8.flag = 255;
|
|
||||||
}
|
|
||||||
#endif // ESP8266
|
#endif // ESP8266
|
||||||
|
|
||||||
for (uint32_t i = 0; i < ARRAY_SIZE(Settings.user_template.gp.io); i++) {
|
for (uint32_t i = 0; i < ARRAY_SIZE(Settings.user_template.gp.io); i++) {
|
||||||
|
@ -596,19 +596,6 @@ const uint16_t kGpioNiceList[] PROGMEM = {
|
|||||||
AGPIO(GPIO_ETH_PHY_MDC),
|
AGPIO(GPIO_ETH_PHY_MDC),
|
||||||
AGPIO(GPIO_ETH_PHY_MDIO), // Ethernet
|
AGPIO(GPIO_ETH_PHY_MDIO), // Ethernet
|
||||||
#endif
|
#endif
|
||||||
#endif // ESP32
|
|
||||||
|
|
||||||
#ifdef USE_ADC
|
|
||||||
#ifdef ESP8266
|
|
||||||
AGPIO(GPIO_ADC_INPUT), // Analog inputs
|
|
||||||
AGPIO(GPIO_ADC_TEMP), // Thermistor
|
|
||||||
AGPIO(GPIO_ADC_LIGHT), // Light sensor
|
|
||||||
AGPIO(GPIO_ADC_BUTTON), // Button
|
|
||||||
AGPIO(GPIO_ADC_BUTTON_INV),
|
|
||||||
AGPIO(GPIO_ADC_RANGE), // Range
|
|
||||||
AGPIO(GPIO_ADC_CT_POWER), // Current
|
|
||||||
AGPIO(GPIO_ADC_JOY), // Joystick
|
|
||||||
#else // ESP32
|
|
||||||
AGPIO(GPIO_ADC_INPUT) + MAX_ADCS, // Analog inputs
|
AGPIO(GPIO_ADC_INPUT) + MAX_ADCS, // Analog inputs
|
||||||
AGPIO(GPIO_ADC_TEMP) + MAX_ADCS, // Thermistor
|
AGPIO(GPIO_ADC_TEMP) + MAX_ADCS, // Thermistor
|
||||||
AGPIO(GPIO_ADC_LIGHT) + MAX_ADCS, // Light sensor
|
AGPIO(GPIO_ADC_LIGHT) + MAX_ADCS, // Light sensor
|
||||||
@ -617,10 +604,23 @@ const uint16_t kGpioNiceList[] PROGMEM = {
|
|||||||
AGPIO(GPIO_ADC_RANGE) + MAX_ADCS, // Range
|
AGPIO(GPIO_ADC_RANGE) + MAX_ADCS, // Range
|
||||||
AGPIO(GPIO_ADC_CT_POWER) + MAX_ADCS, // Current
|
AGPIO(GPIO_ADC_CT_POWER) + MAX_ADCS, // Current
|
||||||
AGPIO(GPIO_ADC_JOY) + MAX_ADCS, // Joystick
|
AGPIO(GPIO_ADC_JOY) + MAX_ADCS, // Joystick
|
||||||
#endif // ESP8266 or ESP32
|
#endif // ESP32
|
||||||
#endif // USE_ADC
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef ESP8266
|
||||||
|
const uint16_t kAdcNiceList[] PROGMEM = {
|
||||||
|
GPIO_NONE, // Not used
|
||||||
|
AGPIO(GPIO_ADC_INPUT), // Analog inputs
|
||||||
|
AGPIO(GPIO_ADC_TEMP), // Thermistor
|
||||||
|
AGPIO(GPIO_ADC_LIGHT), // Light sensor
|
||||||
|
AGPIO(GPIO_ADC_BUTTON), // Button
|
||||||
|
AGPIO(GPIO_ADC_BUTTON_INV),
|
||||||
|
AGPIO(GPIO_ADC_RANGE), // Range
|
||||||
|
AGPIO(GPIO_ADC_CT_POWER), // Current
|
||||||
|
AGPIO(GPIO_ADC_JOY), // Joystick
|
||||||
|
};
|
||||||
|
#endif // ESP8266
|
||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* ATTENTION: No user changeable features beyond this point - do not add templates !!!
|
* ATTENTION: No user changeable features beyond this point - do not add templates !!!
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
@ -486,13 +486,14 @@ const char HTTP_SCRIPT_TEMPLATE2[] PROGMEM =
|
|||||||
"if(8==i){j=12;}"
|
"if(8==i){j=12;}"
|
||||||
"sk(g[i],j);" // Set GPIO
|
"sk(g[i],j);" // Set GPIO
|
||||||
"j++;"
|
"j++;"
|
||||||
"}"
|
"}";
|
||||||
"g=o.shift();"; // FLAG
|
// "g=o.shift();"; // FLAG
|
||||||
const char HTTP_SCRIPT_TEMPLATE3[] PROGMEM =
|
const char HTTP_SCRIPT_TEMPLATE3[] PROGMEM =
|
||||||
"\";"
|
"\";"
|
||||||
"sk(g&15," STR(ADC0_PIN) ");" // Set ADC0
|
"sk(g[13]," STR(ADC0_PIN) ");"; // Set ADC0
|
||||||
"g>>=4;";
|
// "g>>=4;";
|
||||||
const char HTTP_SCRIPT_TEMPLATE4[] PROGMEM =
|
const char HTTP_SCRIPT_TEMPLATE4[] PROGMEM =
|
||||||
|
"g=o.shift();" // FLAG
|
||||||
"for(i=0;i<" STR(GPIO_FLAG_USED) ";i++){"
|
"for(i=0;i<" STR(GPIO_FLAG_USED) ";i++){"
|
||||||
"p=(g>>i)&1;"
|
"p=(g>>i)&1;"
|
||||||
"eb('c'+i).checked=p;" // Set FLAG checkboxes
|
"eb('c'+i).checked=p;" // Set FLAG checkboxes
|
||||||
@ -1760,16 +1761,19 @@ void HandleTemplateConfiguration(void)
|
|||||||
|
|
||||||
WSContentSend_P(HTTP_SCRIPT_TEMPLATE2);
|
WSContentSend_P(HTTP_SCRIPT_TEMPLATE2);
|
||||||
|
|
||||||
//#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
// WSContentSend_P(PSTR("os=\""));
|
WSContentSend_P(PSTR("os=\""));
|
||||||
// for (uint32_t i = 0; i < ADC0_END; i++) { // FLAG: }2'0'>None (0)}3}2'17'>Analog (17)}3...
|
for (uint32_t i = 0; i < ARRAY_SIZE(kAdcNiceList); i++) { // FLAG: }2'0'>None}3}2'17'>Analog}3...
|
||||||
// if (1 == i) {
|
if (1 == i) {
|
||||||
// WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, ADC0_USER, D_SENSOR_USER, ADC0_USER); // }2'15'>User (15)}3
|
WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE_NO_INDEX, AGPIO(GPIO_USER), D_SENSOR_USER); // }2'15'>User}3
|
||||||
// }
|
}
|
||||||
// WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, i, GetTextIndexed(stemp, sizeof(stemp), i, kAdc0Names), i);
|
// WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, i, GetTextIndexed(stemp, sizeof(stemp), i, kAdc0Names), i);
|
||||||
// }
|
uint32_t ridx = pgm_read_word(kAdcNiceList + i) & 0xFFE0;
|
||||||
// WSContentSend_P(HTTP_SCRIPT_TEMPLATE3);
|
uint32_t midx = BGPIO(ridx);
|
||||||
//#endif // ESP8266
|
WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE_NO_INDEX, ridx, GetTextIndexed(stemp, sizeof(stemp), midx, kSensorNames));
|
||||||
|
}
|
||||||
|
WSContentSend_P(HTTP_SCRIPT_TEMPLATE3);
|
||||||
|
#endif // ESP8266
|
||||||
|
|
||||||
WSContentSend_P(HTTP_SCRIPT_TEMPLATE4);
|
WSContentSend_P(HTTP_SCRIPT_TEMPLATE4);
|
||||||
for (uint32_t i = 0; i < sizeof(kModuleNiceList); i++) { // "}2'%d'>%s (%d)}3" - "}2'0'>Sonoff Basic (1)}3"
|
for (uint32_t i = 0; i < sizeof(kModuleNiceList); i++) { // "}2'%d'>%s (%d)}3" - "}2'0'>Sonoff Basic (1)}3"
|
||||||
@ -1797,15 +1801,15 @@ void HandleTemplateConfiguration(void)
|
|||||||
// ((9==i)||(10==i)) ? WebColor(COL_TEXT_WARNING) : WebColor(COL_TEXT), i, (0==i) ? " style='width:200px'" : "", i);
|
// ((9==i)||(10==i)) ? WebColor(COL_TEXT_WARNING) : WebColor(COL_TEXT), i, (0==i) ? " style='width:200px'" : "", i);
|
||||||
//#else // ESP32
|
//#else // ESP32
|
||||||
|
|
||||||
#ifdef ESP8266
|
//#ifdef ESP8266
|
||||||
WSContentSend_P(PSTR("<tr><td><b><font color='#%06x'>%s%d</font></b></td><td%s><select id='g%d' onchange='ot(%d,this.value)'></select></td>"),
|
// WSContentSend_P(PSTR("<tr><td><b><font color='#%06x'>%s%d</font></b></td><td%s><select id='g%d' onchange='ot(%d,this.value)'></select></td>"),
|
||||||
((9==i)||(10==i)) ? WebColor(COL_TEXT_WARNING) : WebColor(COL_TEXT),
|
// ((9==i)||(10==i)) ? WebColor(COL_TEXT_WARNING) : WebColor(COL_TEXT),
|
||||||
(17==i) ? PSTR(D_ADC) : PSTR(D_GPIO), (17==i) ? 0 : i,
|
// (17==i) ? PSTR(D_ADC) : PSTR(D_GPIO), (17==i) ? 0 : i,
|
||||||
(0==i) ? " style='width:150px'" : "", i, i);
|
// (0==i) ? " style='width:150px'" : "", i, i);
|
||||||
#else // ESP32
|
//#else // ESP32
|
||||||
WSContentSend_P(PSTR("<tr><td><b><font color='#%06x'>" D_GPIO "%d</font></b></td><td%s><select id='g%d' onchange='ot(%d,this.value)'></select></td>"),
|
WSContentSend_P(PSTR("<tr><td><b><font color='#%06x'>" D_GPIO "%d</font></b></td><td%s><select id='g%d' onchange='ot(%d,this.value)'></select></td>"),
|
||||||
((9==i)||(10==i)) ? WebColor(COL_TEXT_WARNING) : WebColor(COL_TEXT), i, (0==i) ? " style='width:150px'" : "", i, i);
|
((9==i)||(10==i)) ? WebColor(COL_TEXT_WARNING) : WebColor(COL_TEXT), i, (0==i) ? " style='width:150px'" : "", i, i);
|
||||||
#endif // ESP8266
|
//#endif // ESP8266
|
||||||
WSContentSend_P(PSTR("<td style='width:50px'><select id='h%d'></select></td></tr>"), i);
|
WSContentSend_P(PSTR("<td style='width:50px'><select id='h%d'></select></td></tr>"), i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1864,7 +1868,7 @@ void TemplateSaveSettings(void)
|
|||||||
//#endif // ESP32
|
//#endif // ESP32
|
||||||
for (uint32_t i = 0; i < GPIO_FLAG_USED; i++) {
|
for (uint32_t i = 0; i < GPIO_FLAG_USED; i++) {
|
||||||
snprintf_P(webindex, sizeof(webindex), PSTR("c%d"), i);
|
snprintf_P(webindex, sizeof(webindex), PSTR("c%d"), i);
|
||||||
uint32_t state = Webserver->hasArg(webindex) << i +4; // FLAG
|
uint32_t state = Webserver->hasArg(webindex) << i; // FLAG
|
||||||
flag += state;
|
flag += state;
|
||||||
}
|
}
|
||||||
WebGetArg("g99", tmp, sizeof(tmp)); // BASE
|
WebGetArg("g99", tmp, sizeof(tmp)); // BASE
|
||||||
@ -1950,15 +1954,23 @@ void HandleModuleConfiguration(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
//#ifndef USE_ADC_VCC
|
#ifndef USE_ADC_VCC
|
||||||
// WSContentSend_P(PSTR("os=\""));
|
WSContentSend_P(PSTR("os=\""));
|
||||||
// for (uint32_t j = 0; j < ADC0_END; j++) {
|
/*
|
||||||
// WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, j, GetTextIndexed(stemp, sizeof(stemp), j, kAdc0Names), j);
|
for (uint32_t j = 0; j < ADC0_END; j++) {
|
||||||
// }
|
WSContentSend_P(HTTP_MODULE_TEMPLATE_REPLACE, j, GetTextIndexed(stemp, sizeof(stemp), j, kAdc0Names), j);
|
||||||
// WSContentSend_P(PSTR("\";sk(%d," STR(ADC0_PIN) ");"), Settings.my_adc0);
|
}
|
||||||
//#endif // USE_ADC_VCC
|
WSContentSend_P(PSTR("\";sk(%d," STR(ADC0_PIN) ");"), Settings.my_adc0);
|
||||||
//#endif // ESP8266
|
*/
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
WSContentSend_P(PSTR("\";sk(%d," STR(ADC0_PIN) ");"), Settings.my_gp.io[(sizeof(myio) / 2) -1]);
|
||||||
|
#endif // USE_ADC_VCC
|
||||||
|
#endif // ESP8266
|
||||||
|
|
||||||
WSContentSend_P(PSTR("}wl(sl);"));
|
WSContentSend_P(PSTR("}wl(sl);"));
|
||||||
|
|
||||||
@ -1974,15 +1986,15 @@ void HandleModuleConfiguration(void)
|
|||||||
// (WEMOS==my_module_type)?stemp:"", i, (0==i)? D_SENSOR_BUTTON "1":(1==i)? D_SERIAL_OUT :(3==i)? D_SERIAL_IN :((9==i)||(10==i))? sesp8285 :(12==i)? D_SENSOR_RELAY "1":(13==i)? D_SENSOR_LED "1i":(14==i)? D_SENSOR :"", i);
|
// (WEMOS==my_module_type)?stemp:"", i, (0==i)? D_SENSOR_BUTTON "1":(1==i)? D_SERIAL_OUT :(3==i)? D_SERIAL_IN :((9==i)||(10==i))? sesp8285 :(12==i)? D_SENSOR_RELAY "1":(13==i)? D_SENSOR_LED "1i":(14==i)? D_SENSOR :"", i);
|
||||||
//#else // ESP32
|
//#else // ESP32
|
||||||
|
|
||||||
#ifdef ESP8266
|
//#ifdef ESP8266
|
||||||
WSContentSend_P(PSTR("<tr><td style='width:116px'>%s <b>%s%d</b></td><td style='width:150px'><select id='g%d' onchange='ot(%d,this.value)'></select></td>"),
|
// WSContentSend_P(PSTR("<tr><td style='width:116px'>%s <b>%s%d</b></td><td style='width:150px'><select id='g%d' onchange='ot(%d,this.value)'></select></td>"),
|
||||||
(WEMOS==my_module_type)?stemp:"",
|
// (WEMOS==my_module_type)?stemp:"",
|
||||||
(17==i) ? PSTR(D_ADC) : PSTR(D_GPIO), (17==i) ? 0 : i,
|
// (17==i) ? PSTR(D_ADC) : PSTR(D_GPIO), (17==i) ? 0 : i,
|
||||||
i, i);
|
// i, i);
|
||||||
#else // ESP32
|
//#else // ESP32
|
||||||
WSContentSend_P(PSTR("<tr><td style='width:116px'>%s <b>" D_GPIO "%d</b></td><td style='width:150px'><select id='g%d' onchange='ot(%d,this.value)'></select></td>"),
|
WSContentSend_P(PSTR("<tr><td style='width:116px'>%s <b>" D_GPIO "%d</b></td><td style='width:150px'><select id='g%d' onchange='ot(%d,this.value)'></select></td>"),
|
||||||
(WEMOS==my_module_type)?stemp:"", i, i, i);
|
(WEMOS==my_module_type)?stemp:"", i, i, i);
|
||||||
#endif
|
//#endif
|
||||||
WSContentSend_P(PSTR("<td style='width:50px'><select id='h%d'></select></td></tr>"), i);
|
WSContentSend_P(PSTR("<td style='width:50px'><select id='h%d'></select></td></tr>"), i);
|
||||||
//#endif // ESP8266
|
//#endif // ESP8266
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
xsns_02_analog_esp32.ino - ESP32 ADC support for Tasmota
|
xsns_02_analog.ino - ADC support for Tasmota
|
||||||
|
|
||||||
Copyright (C) 2020 Theo Arends
|
Copyright (C) 2020 Theo Arends
|
||||||
|
|
||||||
@ -17,7 +17,6 @@
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//#ifdef ESP32
|
|
||||||
#ifdef USE_ADC
|
#ifdef USE_ADC
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* ADC support for up to 8 channels on GPIO32 to GPIO39
|
* ADC support for up to 8 channels on GPIO32 to GPIO39
|
||||||
@ -250,6 +249,19 @@ void AdcEvery250ms(void) {
|
|||||||
}
|
}
|
||||||
#endif // USE_RULES
|
#endif // USE_RULES
|
||||||
|
|
||||||
|
bool AdcButtonPresent(uint32_t idx) {
|
||||||
|
return ((ADC_BUTTON == Adc[idx].type) || (ADC_BUTTON_INV == Adc[idx].type));
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t AdcGetButton(uint32_t idx) {
|
||||||
|
if (ADC_BUTTON_INV == Adc[idx].type) {
|
||||||
|
return (AdcRead(Adc[idx].pin, 1) < 128);
|
||||||
|
}
|
||||||
|
else if (ADC_BUTTON == Adc[idx].type) {
|
||||||
|
return (AdcRead(Adc[idx].pin, 1) > 128);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
uint16_t AdcGetLux(uint32_t idx) {
|
uint16_t AdcGetLux(uint32_t idx) {
|
||||||
int adc = AdcRead(Adc[idx].pin, 2);
|
int adc = AdcRead(Adc[idx].pin, 2);
|
||||||
// Source: https://www.allaboutcircuits.com/projects/design-a-luxmeter-using-a-light-dependent-resistor/
|
// Source: https://www.allaboutcircuits.com/projects/design-a-luxmeter-using-a-light-dependent-resistor/
|
||||||
@ -584,4 +596,3 @@ bool Xsns02(uint8_t function) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif // USE_ADC
|
#endif // USE_ADC
|
||||||
//#endif // ESP32
|
|
Loading…
x
Reference in New Issue
Block a user