mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-25 11:46:31 +00:00
Fix internal array size checks
This commit is contained in:
parent
5f75a4c354
commit
9ed8e7c254
@ -741,7 +741,7 @@ void SettingsDefaultSet2(void)
|
|||||||
Settings.interlock[0] = 0xFF; // Legacy support using all relays in one interlock group
|
Settings.interlock[0] = 0xFF; // Legacy support using all relays in one interlock group
|
||||||
Settings.module = MODULE;
|
Settings.module = MODULE;
|
||||||
ModuleDefault(WEMOS);
|
ModuleDefault(WEMOS);
|
||||||
// for (uint32_t i = 0; i < sizeof(Settings.my_gp); i++) { Settings.my_gp.io[i] = GPIO_NONE; }
|
// for (uint32_t i = 0; i < sizeof(Settings.my_gp.io)/sizeof(Settings.my_gp.io[0]); i++) { Settings.my_gp.io[i] = GPIO_NONE; }
|
||||||
SettingsUpdateText(SET_FRIENDLYNAME1, FRIENDLY_NAME);
|
SettingsUpdateText(SET_FRIENDLYNAME1, FRIENDLY_NAME);
|
||||||
SettingsUpdateText(SET_FRIENDLYNAME2, FRIENDLY_NAME"2");
|
SettingsUpdateText(SET_FRIENDLYNAME2, FRIENDLY_NAME"2");
|
||||||
SettingsUpdateText(SET_FRIENDLYNAME3, FRIENDLY_NAME"3");
|
SettingsUpdateText(SET_FRIENDLYNAME3, FRIENDLY_NAME"3");
|
||||||
@ -1098,7 +1098,7 @@ void SettingsDelta(void)
|
|||||||
Settings.switchmode[i] = SWITCH_MODE;
|
Settings.switchmode[i] = SWITCH_MODE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (uint32_t i = 0; i < sizeof(Settings.my_gp); i++) {
|
for (uint32_t i = 0; i < sizeof(Settings.my_gp.io)/sizeof(Settings.my_gp.io[0]); i++) {
|
||||||
if (Settings.my_gp.io[i] >= GPIO_SWT5) { // Move up from GPIO_SWT5 to GPIO_KEY1
|
if (Settings.my_gp.io[i] >= GPIO_SWT5) { // Move up from GPIO_SWT5 to GPIO_KEY1
|
||||||
Settings.my_gp.io[i] += 4;
|
Settings.my_gp.io[i] += 4;
|
||||||
}
|
}
|
||||||
|
@ -1120,10 +1120,15 @@ String ModuleName(void)
|
|||||||
|
|
||||||
void ModuleGpios(myio *gp)
|
void ModuleGpios(myio *gp)
|
||||||
{
|
{
|
||||||
|
//#ifdef ESP8266
|
||||||
uint8_t *dest = (uint8_t *)gp;
|
uint8_t *dest = (uint8_t *)gp;
|
||||||
memset(dest, GPIO_NONE, sizeof(myio));
|
uint8_t src[sizeof(Settings.user_template.gp.io)/sizeof(Settings.user_template.gp.io[0])];
|
||||||
|
//#else
|
||||||
|
// uint16_t *dest = (uint16_t *)gp;
|
||||||
|
// uint16_t src[sizeof(Settings.user_template.gp.io)/sizeof(Settings.user_template.gp.io[0])];
|
||||||
|
//#endif
|
||||||
|
|
||||||
uint8_t src[sizeof(mycfgio)];
|
memset(dest, GPIO_NONE, sizeof(myio));
|
||||||
if (USER_MODULE == Settings.module) {
|
if (USER_MODULE == Settings.module) {
|
||||||
memcpy(&src, &Settings.user_template.gp, sizeof(mycfgio));
|
memcpy(&src, &Settings.user_template.gp, sizeof(mycfgio));
|
||||||
} else {
|
} else {
|
||||||
@ -1138,7 +1143,7 @@ void ModuleGpios(myio *gp)
|
|||||||
// AddLogBuffer(LOG_LEVEL_DEBUG, (uint8_t *)&src, sizeof(mycfgio));
|
// AddLogBuffer(LOG_LEVEL_DEBUG, (uint8_t *)&src, sizeof(mycfgio));
|
||||||
|
|
||||||
uint32_t j = 0;
|
uint32_t j = 0;
|
||||||
for (uint32_t i = 0; i < sizeof(mycfgio); i++) {
|
for (uint32_t i = 0; i < sizeof(Settings.user_template.gp.io)/sizeof(Settings.user_template.gp.io[0]); i++) {
|
||||||
if (6 == i) { j = 9; }
|
if (6 == i) { j = 9; }
|
||||||
if (8 == i) { j = 12; }
|
if (8 == i) { j = 12; }
|
||||||
dest[j] = src[i];
|
dest[j] = src[i];
|
||||||
@ -1226,7 +1231,11 @@ bool ValidAdc(void)
|
|||||||
return (ADC0_USER == template_adc0);
|
return (ADC0_USER == template_adc0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//#ifdef ESP8266
|
||||||
bool GetUsedInModule(uint32_t val, uint8_t *arr)
|
bool GetUsedInModule(uint32_t val, uint8_t *arr)
|
||||||
|
//#else
|
||||||
|
//bool GetUsedInModule(uint32_t val, uint16_t *arr)
|
||||||
|
//#endif
|
||||||
{
|
{
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
|
|
||||||
@ -1307,7 +1316,7 @@ bool JsonTemplate(const char* dataBuf)
|
|||||||
SettingsUpdateText(SET_TEMPLATE_NAME, name);
|
SettingsUpdateText(SET_TEMPLATE_NAME, name);
|
||||||
}
|
}
|
||||||
if (obj[D_JSON_GPIO].success()) {
|
if (obj[D_JSON_GPIO].success()) {
|
||||||
for (uint32_t i = 0; i < sizeof(mycfgio); i++) {
|
for (uint32_t i = 0; i < sizeof(Settings.user_template.gp.io)/sizeof(Settings.user_template.gp.io[0]); i++) {
|
||||||
Settings.user_template.gp.io[i] = obj[D_JSON_GPIO][i] | 0;
|
Settings.user_template.gp.io[i] = obj[D_JSON_GPIO][i] | 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1326,7 +1335,7 @@ bool JsonTemplate(const char* dataBuf)
|
|||||||
void TemplateJson(void)
|
void TemplateJson(void)
|
||||||
{
|
{
|
||||||
Response_P(PSTR("{\"" D_JSON_NAME "\":\"%s\",\"" D_JSON_GPIO "\":["), SettingsText(SET_TEMPLATE_NAME));
|
Response_P(PSTR("{\"" D_JSON_NAME "\":\"%s\",\"" D_JSON_GPIO "\":["), SettingsText(SET_TEMPLATE_NAME));
|
||||||
for (uint32_t i = 0; i < sizeof(Settings.user_template.gp); i++) {
|
for (uint32_t i = 0; i < sizeof(Settings.user_template.gp.io)/sizeof(Settings.user_template.gp.io[0]); i++) {
|
||||||
ResponseAppend_P(PSTR("%s%d"), (i>0)?",":"", Settings.user_template.gp.io[i]);
|
ResponseAppend_P(PSTR("%s%d"), (i>0)?",":"", Settings.user_template.gp.io[i]);
|
||||||
}
|
}
|
||||||
ResponseAppend_P(PSTR("],\"" D_JSON_FLAG "\":%d,\"" D_JSON_BASE "\":%d}"), Settings.user_template.flag, Settings.user_template_base +1);
|
ResponseAppend_P(PSTR("],\"" D_JSON_FLAG "\":%d,\"" D_JSON_BASE "\":%d}"), Settings.user_template.flag, Settings.user_template_base +1);
|
||||||
|
@ -1000,7 +1000,7 @@ void CmndModule(void)
|
|||||||
Settings.module = XdrvMailbox.payload;
|
Settings.module = XdrvMailbox.payload;
|
||||||
SetModuleType();
|
SetModuleType();
|
||||||
if (Settings.last_module != XdrvMailbox.payload) {
|
if (Settings.last_module != XdrvMailbox.payload) {
|
||||||
for (uint32_t i = 0; i < sizeof(Settings.my_gp); i++) {
|
for (uint32_t i = 0; i < sizeof(Settings.my_gp.io)/sizeof(Settings.my_gp.io[0]); i++) {
|
||||||
Settings.my_gp.io[i] = GPIO_NONE;
|
Settings.my_gp.io[i] = GPIO_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1036,7 +1036,7 @@ void CmndModules(void)
|
|||||||
|
|
||||||
void CmndGpio(void)
|
void CmndGpio(void)
|
||||||
{
|
{
|
||||||
if (XdrvMailbox.index < sizeof(Settings.my_gp)) {
|
if (XdrvMailbox.index < sizeof(Settings.my_gp.io)/sizeof(Settings.my_gp.io[0])) {
|
||||||
myio cmodule;
|
myio cmodule;
|
||||||
ModuleGpios(&cmodule);
|
ModuleGpios(&cmodule);
|
||||||
if (ValidGPIO(XdrvMailbox.index, cmodule.io[XdrvMailbox.index]) && (XdrvMailbox.payload >= 0) && (XdrvMailbox.payload < GPIO_SENSOR_END)) {
|
if (ValidGPIO(XdrvMailbox.index, cmodule.io[XdrvMailbox.index]) && (XdrvMailbox.payload >= 0) && (XdrvMailbox.payload < GPIO_SENSOR_END)) {
|
||||||
@ -1046,7 +1046,7 @@ void CmndGpio(void)
|
|||||||
if (midx == XdrvMailbox.payload) { present = true; }
|
if (midx == XdrvMailbox.payload) { present = true; }
|
||||||
}
|
}
|
||||||
if (present) {
|
if (present) {
|
||||||
for (uint32_t i = 0; i < sizeof(Settings.my_gp); i++) {
|
for (uint32_t i = 0; i < sizeof(Settings.my_gp.io)/sizeof(Settings.my_gp.io[0]); i++) {
|
||||||
if (ValidGPIO(i, cmodule.io[i]) && (Settings.my_gp.io[i] == XdrvMailbox.payload)) {
|
if (ValidGPIO(i, cmodule.io[i]) && (Settings.my_gp.io[i] == XdrvMailbox.payload)) {
|
||||||
Settings.my_gp.io[i] = GPIO_NONE;
|
Settings.my_gp.io[i] = GPIO_NONE;
|
||||||
}
|
}
|
||||||
@ -1057,7 +1057,7 @@ void CmndGpio(void)
|
|||||||
}
|
}
|
||||||
Response_P(PSTR("{"));
|
Response_P(PSTR("{"));
|
||||||
bool jsflg = false;
|
bool jsflg = false;
|
||||||
for (uint32_t i = 0; i < sizeof(Settings.my_gp); i++) {
|
for (uint32_t i = 0; i < sizeof(Settings.my_gp.io)/sizeof(Settings.my_gp.io[0]); i++) {
|
||||||
if (ValidGPIO(i, cmodule.io[i]) || ((GPIO_USER == XdrvMailbox.payload) && !FlashPin(i))) {
|
if (ValidGPIO(i, cmodule.io[i]) || ((GPIO_USER == XdrvMailbox.payload) && !FlashPin(i))) {
|
||||||
if (jsflg) { ResponseAppend_P(PSTR(",")); }
|
if (jsflg) { ResponseAppend_P(PSTR(",")); }
|
||||||
jsflg = true;
|
jsflg = true;
|
||||||
@ -1137,7 +1137,7 @@ void CmndTemplate(void)
|
|||||||
}
|
}
|
||||||
SettingsUpdateText(SET_TEMPLATE_NAME, "Merged");
|
SettingsUpdateText(SET_TEMPLATE_NAME, "Merged");
|
||||||
uint32_t j = 0;
|
uint32_t j = 0;
|
||||||
for (uint32_t i = 0; i < sizeof(mycfgio); i++) {
|
for (uint32_t i = 0; i < sizeof(Settings.user_template.gp.io)/sizeof(Settings.user_template.gp.io[0]); i++) {
|
||||||
if (6 == i) { j = 9; }
|
if (6 == i) { j = 9; }
|
||||||
if (8 == i) { j = 12; }
|
if (8 == i) { j = 12; }
|
||||||
if (my_module.io[j] > GPIO_NONE) {
|
if (my_module.io[j] > GPIO_NONE) {
|
||||||
|
@ -1354,7 +1354,7 @@ void GpioInit(void)
|
|||||||
Settings.serial_config = TS_SERIAL_8N1;
|
Settings.serial_config = TS_SERIAL_8N1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint32_t i = 0; i < sizeof(Settings.user_template.gp); i++) {
|
for (uint32_t i = 0; i < sizeof(Settings.user_template.gp.io)/sizeof(Settings.user_template.gp.io[0]); i++) {
|
||||||
if ((Settings.user_template.gp.io[i] >= GPIO_SENSOR_END) && (Settings.user_template.gp.io[i] < GPIO_USER)) {
|
if ((Settings.user_template.gp.io[i] >= GPIO_SENSOR_END) && (Settings.user_template.gp.io[i] < GPIO_USER)) {
|
||||||
Settings.user_template.gp.io[i] = GPIO_USER; // Fix not supported sensor ids in template
|
Settings.user_template.gp.io[i] = GPIO_USER; // Fix not supported sensor ids in template
|
||||||
}
|
}
|
||||||
@ -1362,7 +1362,7 @@ void GpioInit(void)
|
|||||||
|
|
||||||
myio def_gp;
|
myio def_gp;
|
||||||
ModuleGpios(&def_gp);
|
ModuleGpios(&def_gp);
|
||||||
for (uint32_t i = 0; i < sizeof(Settings.my_gp); i++) {
|
for (uint32_t i = 0; i < sizeof(Settings.my_gp.io)/sizeof(Settings.my_gp.io[0]); i++) {
|
||||||
if ((Settings.my_gp.io[i] >= GPIO_SENSOR_END) && (Settings.my_gp.io[i] < GPIO_USER)) {
|
if ((Settings.my_gp.io[i] >= GPIO_SENSOR_END) && (Settings.my_gp.io[i] < GPIO_USER)) {
|
||||||
Settings.my_gp.io[i] = GPIO_NONE; // Fix not supported sensor ids in module
|
Settings.my_gp.io[i] = GPIO_NONE; // Fix not supported sensor ids in module
|
||||||
}
|
}
|
||||||
@ -1388,7 +1388,7 @@ void GpioInit(void)
|
|||||||
for (uint32_t i = 0; i < GPIO_MAX; i++) {
|
for (uint32_t i = 0; i < GPIO_MAX; i++) {
|
||||||
pin[i] = 99;
|
pin[i] = 99;
|
||||||
}
|
}
|
||||||
for (uint32_t i = 0; i < sizeof(my_module.io); i++) {
|
for (uint32_t i = 0; i < sizeof(my_module.io)/sizeof(my_module.io[0]); i++) {
|
||||||
mpin = ValidPin(i, my_module.io[i]);
|
mpin = ValidPin(i, my_module.io[i]);
|
||||||
|
|
||||||
DEBUG_CORE_LOG(PSTR("INI: gpio pin %d, mpin %d"), i, mpin);
|
DEBUG_CORE_LOG(PSTR("INI: gpio pin %d, mpin %d"), i, mpin);
|
||||||
@ -1465,7 +1465,7 @@ void GpioInit(void)
|
|||||||
|
|
||||||
// Set any non-used GPIO to INPUT - Related to resetPins() in support_legacy_cores.ino
|
// Set any non-used GPIO to INPUT - Related to resetPins() in support_legacy_cores.ino
|
||||||
// Doing it here solves relay toggles at restart.
|
// Doing it here solves relay toggles at restart.
|
||||||
for (uint32_t i = 0; i < sizeof(my_module.io); i++) {
|
for (uint32_t i = 0; i < sizeof(my_module.io)/sizeof(my_module.io[0]); i++) {
|
||||||
mpin = ValidPin(i, my_module.io[i]);
|
mpin = ValidPin(i, my_module.io[i]);
|
||||||
// AddLog_P2(LOG_LEVEL_DEBUG, PSTR("INI: gpio pin %d, mpin %d"), i, mpin);
|
// AddLog_P2(LOG_LEVEL_DEBUG, PSTR("INI: gpio pin %d, mpin %d"), i, mpin);
|
||||||
if (((i < 6) || (i > 11)) && (0 == mpin)) { // Skip SPI flash interface
|
if (((i < 6) || (i > 11)) && (0 == mpin)) { // Skip SPI flash interface
|
||||||
|
@ -260,7 +260,7 @@ void setup(void)
|
|||||||
Settings.rule_enabled = 0; // Disable all rules
|
Settings.rule_enabled = 0; // Disable all rules
|
||||||
}
|
}
|
||||||
if (RtcReboot.fast_reboot_count > Settings.param[P_BOOT_LOOP_OFFSET] +3) { // Restarted 5 times
|
if (RtcReboot.fast_reboot_count > Settings.param[P_BOOT_LOOP_OFFSET] +3) { // Restarted 5 times
|
||||||
for (uint32_t i = 0; i < sizeof(Settings.my_gp); i++) {
|
for (uint32_t i = 0; i < sizeof(Settings.my_gp.io)/sizeof(Settings.my_gp.io[0]); i++) {
|
||||||
Settings.my_gp.io[i] = GPIO_NONE; // Reset user defined GPIO disabling sensors
|
Settings.my_gp.io[i] = GPIO_NONE; // Reset user defined GPIO disabling sensors
|
||||||
}
|
}
|
||||||
Settings.my_adc0 = ADC0_NONE; // Reset user defined ADC0 disabling sensors
|
Settings.my_adc0 = ADC0_NONE; // Reset user defined ADC0 disabling sensors
|
||||||
|
@ -1466,7 +1466,7 @@ void HandleTemplateConfiguration(void)
|
|||||||
}
|
}
|
||||||
WSContentSend_P(PSTR("}1")); // Field separator
|
WSContentSend_P(PSTR("}1")); // Field separator
|
||||||
|
|
||||||
for (uint32_t i = 0; i < sizeof(cmodule); i++) { // 17,148,29,149,7,255,255,255,138,255,139,255,255
|
for (uint32_t i = 0; i < sizeof(cmodule.io)/sizeof(cmodule.io[0]); i++) { // 17,148,29,149,7,255,255,255,138,255,139,255,255
|
||||||
if (!FlashPin(i)) {
|
if (!FlashPin(i)) {
|
||||||
WSContentSend_P(PSTR("%s%d"), (i>0)?",":"", cmodule.io[i]);
|
WSContentSend_P(PSTR("%s%d"), (i>0)?",":"", cmodule.io[i]);
|
||||||
}
|
}
|
||||||
@ -1518,7 +1518,7 @@ void TemplateSaveSettings(void)
|
|||||||
snprintf_P(svalue, sizeof(svalue), PSTR(D_CMND_TEMPLATE " {\"" D_JSON_NAME "\":\"%s\",\"" D_JSON_GPIO "\":["), tmp);
|
snprintf_P(svalue, sizeof(svalue), PSTR(D_CMND_TEMPLATE " {\"" D_JSON_NAME "\":\"%s\",\"" D_JSON_GPIO "\":["), tmp);
|
||||||
|
|
||||||
uint32_t j = 0;
|
uint32_t j = 0;
|
||||||
for (uint32_t i = 0; i < sizeof(Settings.user_template.gp); i++) {
|
for (uint32_t i = 0; i < sizeof(Settings.user_template.gp.io)/sizeof(Settings.user_template.gp.io[0]); i++) {
|
||||||
if (6 == i) { j = 9; }
|
if (6 == i) { j = 9; }
|
||||||
if (8 == i) { j = 12; }
|
if (8 == i) { j = 12; }
|
||||||
snprintf_P(webindex, sizeof(webindex), PSTR("g%d"), j);
|
snprintf_P(webindex, sizeof(webindex), PSTR("g%d"), j);
|
||||||
@ -1604,7 +1604,7 @@ void HandleModuleConfiguration(void)
|
|||||||
WSContentStart_P(S_CONFIGURE_MODULE);
|
WSContentStart_P(S_CONFIGURE_MODULE);
|
||||||
WSContentSend_P(HTTP_SCRIPT_MODULE_TEMPLATE);
|
WSContentSend_P(HTTP_SCRIPT_MODULE_TEMPLATE);
|
||||||
WSContentSend_P(HTTP_SCRIPT_MODULE1, Settings.module);
|
WSContentSend_P(HTTP_SCRIPT_MODULE1, Settings.module);
|
||||||
for (uint32_t i = 0; i < sizeof(cmodule); i++) {
|
for (uint32_t i = 0; i < sizeof(cmodule.io)/sizeof(cmodule.io[0]); i++) {
|
||||||
if (ValidGPIO(i, 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 - g16
|
||||||
}
|
}
|
||||||
@ -1612,7 +1612,7 @@ void HandleModuleConfiguration(void)
|
|||||||
WSContentSend_P(HTTP_SCRIPT_MODULE2, Settings.my_adc0);
|
WSContentSend_P(HTTP_SCRIPT_MODULE2, Settings.my_adc0);
|
||||||
WSContentSendStyle();
|
WSContentSendStyle();
|
||||||
WSContentSend_P(HTTP_FORM_MODULE, AnyModuleName(MODULE).c_str());
|
WSContentSend_P(HTTP_FORM_MODULE, AnyModuleName(MODULE).c_str());
|
||||||
for (uint32_t i = 0; i < sizeof(cmodule); i++) {
|
for (uint32_t i = 0; i < sizeof(cmodule.io)/sizeof(cmodule.io[0]); i++) {
|
||||||
if (ValidGPIO(i, cmodule.io[i])) {
|
if (ValidGPIO(i, cmodule.io[i])) {
|
||||||
snprintf_P(stemp, 3, PINS_WEMOS +i*2);
|
snprintf_P(stemp, 3, PINS_WEMOS +i*2);
|
||||||
#ifdef ESP8266
|
#ifdef ESP8266
|
||||||
@ -1652,7 +1652,7 @@ void ModuleSaveSettings(void)
|
|||||||
myio cmodule;
|
myio cmodule;
|
||||||
ModuleGpios(&cmodule);
|
ModuleGpios(&cmodule);
|
||||||
String gpios = "";
|
String gpios = "";
|
||||||
for (uint32_t i = 0; i < sizeof(cmodule); i++) {
|
for (uint32_t i = 0; i < sizeof(cmodule.io)/sizeof(cmodule.io[0]); i++) {
|
||||||
if (Settings.last_module != new_module) {
|
if (Settings.last_module != new_module) {
|
||||||
Settings.my_gp.io[i] = GPIO_NONE;
|
Settings.my_gp.io[i] = GPIO_NONE;
|
||||||
} else {
|
} else {
|
||||||
|
@ -569,7 +569,7 @@ void TuyaNormalPowerModePacketProcess(void)
|
|||||||
uint8_t key1_gpio = Tuya.buffer[7];
|
uint8_t key1_gpio = Tuya.buffer[7];
|
||||||
bool key1_set = false;
|
bool key1_set = false;
|
||||||
bool led1_set = false;
|
bool led1_set = false;
|
||||||
for (uint32_t i = 0; i < sizeof(Settings.my_gp); i++) {
|
for (uint32_t i = 0; i < sizeof(Settings.my_gp.io)/sizeof(Settings.my_gp.io[0]); i++) {
|
||||||
if (Settings.my_gp.io[i] == GPIO_LED1) led1_set = true;
|
if (Settings.my_gp.io[i] == GPIO_LED1) led1_set = true;
|
||||||
else if (Settings.my_gp.io[i] == GPIO_KEY1) key1_set = true;
|
else if (Settings.my_gp.io[i] == GPIO_KEY1) key1_set = true;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user