diff --git a/lib/libesp32/berry/generate/be_const_bytes.h b/lib/libesp32/berry/generate/be_const_bytes.h index 5178622b12fd..c5ce8f8c2e41 100644 --- a/lib/libesp32/berry/generate/be_const_bytes.h +++ b/lib/libesp32/berry/generate/be_const_bytes.h @@ -1,21 +1,21 @@ /* extern binary arrays */ extern const binstance_arg3 be_const_instance_; extern const binstance_arg3 be_const_instance_00000001FFF8FFF9FFFAFFFBFFFCFFFD; -extern const binstance_arg3 be_const_instance_00030005000A000F00110012FFF8FFF9FFFAFFFBFFFCFFFD; -extern const binstance_arg3 be_const_instance_000000010002000300040005FFF8FFF9FFFAFFFBFFFCFFFD; extern const binstance_arg3 be_const_instance_0000000100020003FFF8FFF9FFFAFFFBFFFCFFFD; +extern const binstance_arg3 be_const_instance_000000010002000300040005FFF8FFF9FFFAFFFBFFFCFFFD; extern const binstance_arg3 be_const_instance_0000FFF8FFF9FFFAFFFBFFFCFFFD; +extern const binstance_arg3 be_const_instance_00030005000A000F00110012FFF8FFF9FFFAFFFBFFFCFFFD; extern const binstance_arg3 be_const_instance_000000010002FFF8FFF9FFFAFFFBFFFCFFFD; extern const binstance_arg3 be_const_instance_000000020003000F0011FFF8FFF9FFFAFFFBFFFCFFFD; extern const binstance_arg3 be_const_instance_000000050007000A000B000D000E0017FFF8FFF9FFFAFFFBFFFCFFFD; extern const binstance_arg3 be_const_instance_00070008000F400B400CFFF8FFF9FFFAFFFBFFFCFFFD; extern const binstance_arg3 be_const_instance_00000001000200080009FFF8FFF9FFFAFFFBFFFCFFFD; -extern const binstance_arg3 be_const_instance_FFF8FFF9FFFAFFFBFFFCFFFD; +extern const binstance_arg3 be_const_instance_0000000100020008FFF8FFF9FFFAFFFBFFFCFFFD; +extern const binstance_arg3 be_const_instance_00030004FFF8FFF9FFFAFFFBFFFCFFFD; extern const binstance_arg3 be_const_instance_0000000100020003000400050006000700080009000A000F001100120013FFF8FFF9FFFAFFFBFFFCFFFD; extern const binstance_arg3 be_const_instance_00000001000200030004FFF8FFF9FFFAFFFBFFFCFFFD; -extern const binstance_arg3 be_const_instance_0000000200030004FFF8FFF9FFFAFFFBFFFCFFFD; -extern const binstance_arg3 be_const_instance_0000000100020008FFF8FFF9FFFAFFFBFFFCFFFD; +extern const binstance_arg3 be_const_instance_FFF8FFF9FFFAFFFBFFFCFFFD; extern const binstance_arg3 be_const_instance_000000010007FFF8FFF9FFFAFFFBFFFCFFFD; -extern const binstance_arg3 be_const_instance_00030004FFF8FFF9FFFAFFFBFFFCFFFD; +extern const binstance_arg3 be_const_instance_0000000200030004FFF8FFF9FFFAFFFBFFFCFFFD; extern const binstance_arg3 be_const_instance_000000050007000A000B000C000D000E000F0017FFF8FFF9FFFAFFFBFFFCFFFD; extern const binstance_arg3 be_const_instance_0000000100070008000F4001400AFFF8FFF9FFFAFFFBFFFCFFFD; diff --git a/lib/libesp32/berry/generate/be_const_bytes_def.h b/lib/libesp32/berry/generate/be_const_bytes_def.h index cddd8d9984d7..c3337af4e5d4 100644 --- a/lib/libesp32/berry/generate/be_const_bytes_def.h +++ b/lib/libesp32/berry/generate/be_const_bytes_def.h @@ -1,21 +1,21 @@ /* binary arrays */ be_define_const_bytes_empty(); be_define_const_bytes(00000001FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); -be_define_const_bytes(00030005000A000F00110012FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x03, 0x00, 0x05, 0x00, 0x0A, 0x00, 0x0F, 0x00, 0x11, 0x00, 0x12, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); -be_define_const_bytes(000000010002000300040005FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); be_define_const_bytes(0000000100020003FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); +be_define_const_bytes(000000010002000300040005FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); be_define_const_bytes(0000FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x00, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); +be_define_const_bytes(00030005000A000F00110012FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x03, 0x00, 0x05, 0x00, 0x0A, 0x00, 0x0F, 0x00, 0x11, 0x00, 0x12, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); be_define_const_bytes(000000010002FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); be_define_const_bytes(000000020003000F0011FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x0F, 0x00, 0x11, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); be_define_const_bytes(000000050007000A000B000D000E0017FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x0D, 0x00, 0x0E, 0x00, 0x17, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); be_define_const_bytes(00070008000F400B400CFFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x07, 0x00, 0x08, 0x00, 0x0F, 0x40, 0x0B, 0x40, 0x0C, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); be_define_const_bytes(00000001000200080009FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x08, 0x00, 0x09, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); -be_define_const_bytes(FFF8FFF9FFFAFFFBFFFCFFFD, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); +be_define_const_bytes(0000000100020008FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x08, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); +be_define_const_bytes(00030004FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x03, 0x00, 0x04, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); be_define_const_bytes(0000000100020003000400050006000700080009000A000F001100120013FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08, 0x00, 0x09, 0x00, 0x0A, 0x00, 0x0F, 0x00, 0x11, 0x00, 0x12, 0x00, 0x13, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); be_define_const_bytes(00000001000200030004FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); -be_define_const_bytes(0000000200030004FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); -be_define_const_bytes(0000000100020008FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x08, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); +be_define_const_bytes(FFF8FFF9FFFAFFFBFFFCFFFD, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); be_define_const_bytes(000000010007FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x00, 0x00, 0x01, 0x00, 0x07, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); -be_define_const_bytes(00030004FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x03, 0x00, 0x04, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); +be_define_const_bytes(0000000200030004FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); be_define_const_bytes(000000050007000A000B000C000D000E000F0017FFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x0C, 0x00, 0x0D, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x17, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); be_define_const_bytes(0000000100070008000F4001400AFFF8FFF9FFFAFFFBFFFCFFFD, 0x00, 0x00, 0x00, 0x01, 0x00, 0x07, 0x00, 0x08, 0x00, 0x0F, 0x40, 0x01, 0x40, 0x0A, 0xFF, 0xF8, 0xFF, 0xF9, 0xFF, 0xFA, 0xFF, 0xFB, 0xFF, 0xFC, 0xFF, 0xFD); diff --git a/tasmota/Plugins/grepmodule-firmware.py b/tasmota/Plugins/grepmodule-firmware.py index 43204cdeb3a2..7f765d73133f 100644 --- a/tasmota/Plugins/grepmodule-firmware.py +++ b/tasmota/Plugins/grepmodule-firmware.py @@ -30,7 +30,7 @@ def grep_module(source, target, env): if msync[0] == 0x4a and msync[1] == 0xfc and msync[2] == 0xaa and msync[3] == 0x55: xarch = fp.read(4) - arch = int.from_bytes(xarch, "little") + arch = int.from_bytes(xarch, "little") & 0xf xtype = fp.read(4) type = int.from_bytes(xtype, "little") if arch == 0 and type <= 4: diff --git a/tasmota/Plugins/module_defines.h b/tasmota/Plugins/module_defines.h index 749e58eb51cd..704dfead2300 100644 --- a/tasmota/Plugins/module_defines.h +++ b/tasmota/Plugins/module_defines.h @@ -476,6 +476,8 @@ extern MODULES_TABLE modules[]; #define ALLOCMEM GET_MTBL; GET_JT; mt->mem_size = sizeof(MODULE_MEMORY);mt->mem_size += mt->mem_size % 4;mt->mod_memory = jcalloc(mt->mem_size / 4, 4);if (!mt->mod_memory) {return -1;};MODULE_MEMORY *mem = (MODULE_MEMORY*)mt->mod_memory;SETTINGS *jsettings = *asettings;FLASH_MODULE *mp = (FLASH_MODULE*)mt->mod_addr; #define RETMEM if (mt->mem_size) {jfree(mt->mod_memory);mt->mem_size = 0;} #define MODULE_DESCRIPTOR(NAME,TYPE,REV,GPIO1,PIN1,GPIO2,PIN2,GPIO3,PIN3,GPIO4,PIN4) __attribute__((section(SECTION_DESC))) extern const FLASH_MODULE MODULE_HEADER = {MODULE_SYNC,CURR_ARCH,(TYPE),(REV),(NAME),mod_func_execute,END_OF_MODULE,0,0,(uint32_t)&modules,(uint32_t)&MODULE_JUMPTABLE,(uint32_t)&module_header,mod_func_execute,{GPIO1,PIN1,GPIO2,PIN2,GPIO3,PIN3,GPIO4,PIN4}}; +#define MODULE_DESCRIPTOR6(NAME,TYPE,REV,GPIO1,PIN1,GPIO2,PIN2,GPIO3,PIN3,GPIO4,PIN4,GPIO5,PIN5,GPIO6,PIN6) __attribute__((section(SECTION_DESC))) extern const FLASH_MODULE MODULE_HEADER = {MODULE_SYNC,CURR_ARCH|MAX_MOD_STORES<<24,(TYPE),(REV),(NAME),mod_func_execute,END_OF_MODULE,0,0,(uint32_t)&modules,(uint32_t)&MODULE_JUMPTABLE,(uint32_t)&module_header,mod_func_execute,{GPIO1,PIN1,GPIO2,PIN2,GPIO3,PIN3,GPIO4,PIN4,GPIO5,PIN5,GPIO6,PIN6}}; + #define MOD_FUNC(A, ...) A(MODULES_TABLE *mt, ##__VA_ARGS__) //#define MOD_FUNC(A, ...) A(##__VA_ARGS__) diff --git a/tasmota/Plugins/modules_def.h b/tasmota/Plugins/modules_def.h index e430c1c56d56..bc37bf5c903d 100644 --- a/tasmota/Plugins/modules_def.h +++ b/tasmota/Plugins/modules_def.h @@ -68,7 +68,9 @@ typedef struct { volatile MD_TYPE value; } MODULE_STORE; +#ifndef MAX_MOD_STORES #define MAX_MOD_STORES 4 +#endif // this descriptor is in .text so only 32 bit access allowed #pragma pack(4) diff --git a/tasmota/Plugins/xdrv_14_mp3_test.cpp b/tasmota/Plugins/xdrv_14_mp3_test.cpp index feff997d79d2..17b5a06a25fb 100644 --- a/tasmota/Plugins/xdrv_14_mp3_test.cpp +++ b/tasmota/Plugins/xdrv_14_mp3_test.cpp @@ -77,6 +77,7 @@ //#define MODULE_HEADER module_header_XDRV_14 +#define MAX_MOD_STORES 6 #include "module.h" #include "module_defines.h" @@ -98,7 +99,8 @@ PUSH_OPTIONS -MODULE_DESCRIPTOR("MP3PLAYER",MODULE_TYPE_DRIVER,MP3PLAYER_REV,"TXD",MP3_DEFAULT_TX_PIN,"TYPE",0x01000101,"",0,"",0) +//MODULE_DESCRIPTOR("MP3PLAYER",MODULE_TYPE_DRIVER,MP3PLAYER_REV,"TXD",MP3_DEFAULT_TX_PIN,"TYPE",0x01000101,"X1",0,"X2",0) +MODULE_DESCRIPTOR6("MP3PLAYER",MODULE_TYPE_DRIVER,MP3PLAYER_REV,"TXD",MP3_DEFAULT_TX_PIN,"TYPE",0x01000101,"X1",0,"X2",0,"X3",0,"X4",0) // all functions must be declared MUDULE_PART MODULE_PART uint16_t MP3_Checksum(uint8_t *array); diff --git a/tasmota/Plugins/xdrv_42_i2s.cpp b/tasmota/Plugins/xdrv_42_i2s.cpp index 8b3a3cc6e136..03c4388237ce 100644 --- a/tasmota/Plugins/xdrv_42_i2s.cpp +++ b/tasmota/Plugins/xdrv_42_i2s.cpp @@ -32,7 +32,9 @@ #define USE_MP3 //#define USE_WEBRADIO // select a codec -//#define USE_WM8960 +#ifndef __riscv +#define USE_WM8960 +#endif #endif @@ -127,11 +129,21 @@ typedef struct { #define MODNAME "I2SWAV" #endif +#ifdef __riscv +#define GPIO_DOUT 6 +#define GPIO_BCK 7 +#define GPIO_WS 8 +#else +#define GPIO_DOUT 17 +#define GPIO_BCK 10 +#define GPIO_WS 18 +#endif + #define I2S_REV 1 << 16 | 5 #ifdef ESP8266 MODULE_DESCRIPTOR(MODNAME, MODULE_TYPE_DRIVER, I2S_REV, "", 0, "", 0, "", 0, "", 0) #else -MODULE_DESCRIPTOR(MODNAME, MODULE_TYPE_DRIVER, I2S_REV, "DOUT", 17, "BCK", 10, "WS", 18, "MODE", 0x01000200) +MODULE_DESCRIPTOR(MODNAME, MODULE_TYPE_DRIVER, I2S_REV, "DOUT", GPIO_DOUT, "BCK", GPIO_BCK, "WS", GPIO_WS, "MODE", 0x01000200) #endif // all functions must be declared MUDULE_PART diff --git a/tasmota/tasmota_xdrv_driver/xdrv_123_plugins.ino b/tasmota/tasmota_xdrv_driver/xdrv_123_plugins.ino index 1c4fcd24c97d..be0063e0deff 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_123_plugins.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_123_plugins.ino @@ -1892,6 +1892,8 @@ uint16_t mod_size; #endif } plugins; + + // 35 + 8 x MODULES_TABLE (18*8 = 144) = about 179 Bytes MODULES_TABLE modules[MAX_PLUGINS]; @@ -2404,7 +2406,7 @@ void LinkModule(uint8_t *mp, uint32_t size, char *name) { return; } - if (fm->arch != CURR_ARCH) { + if ((fm->arch & 0x000000ff) != CURR_ARCH) { free(mp); AddLog(LOG_LEVEL_INFO,PSTR("plugin architecture error")); return; @@ -2516,7 +2518,13 @@ void Read_Module_Data(uint32_t module, uint32_t *data) { FLASH_MODULE *fm = (FLASH_MODULE*)modules[module].mod_addr; if (fm->sync == MODULE_SYNC) { //AddLog(LOG_LEVEL_INFO,PSTR("read flash data:")); - for (uint16_t cnt = 0; cnt < MAX_MOD_STORES; cnt++ ) { + uint32_t num = fm->arch & 0xff000000; + if (num) { + num = num >> 24; + } else { + num = MAX_MOD_STORES; + } + for (uint16_t cnt = 0; cnt < num; cnt++ ) { *data = fm->ms[cnt].value; data++; } @@ -2538,7 +2546,13 @@ void Update_Module_Data(uint32_t module, uint32_t *data) { //AddLog(LOG_LEVEL_INFO,PSTR("read flash: %08x"),fm->sync); if (fm->sync == MODULE_SYNC) { //AddLog(LOG_LEVEL_INFO,PSTR("modify data")); - for (uint16_t cnt = 0; cnt < MAX_MOD_STORES; cnt++ ) { + uint32_t num = fm->arch & 0xff000000; + if (num) { + num = num >> 24; + } else { + num = MAX_MOD_STORES; + } + for (uint16_t cnt = 0; cnt < num; cnt++ ) { fm->ms[cnt].value = *data++; } // rewrite modified module @@ -2555,7 +2569,13 @@ void Update_Module_Data(uint32_t module, uint32_t *data) { //AddLog(LOG_LEVEL_INFO,PSTR("read flash: %08x"),fm->sync); if (fm->sync == MODULE_SYNC) { AddLog(LOG_LEVEL_INFO,PSTR("modify data")); - for (uint16_t cnt = 0; cnt < MAX_MOD_STORES; cnt++ ) { + uint32_t num = fm->arch & 0xff000000; + if (num) { + num = num >> 24; + } else { + num = MAX_MOD_STORES; + } + for (uint16_t cnt = 0; cnt < num; cnt++ ) { fm->ms[cnt].value = *data++; } err = esp_partition_erase_range(plugins.flash_pptr, offset, ESP32_PLUGIN_HSIZE); @@ -3052,7 +3072,7 @@ void Modul_Check_HTML_Setvars(void) { uint8_t pind = strtol(cp, &cp, 10); // should better update values on closing menu - uint32_t vals[MAX_MOD_STORES]; + uint32_t vals[16]; Read_Module_Data(mind, vals); uint32_t old = vals[pinn] & 0xff; vals[pinn] = (vals[pinn] & 0xffffff00) | pind; @@ -3103,7 +3123,8 @@ void Module_upload() { WSContentSend_P(HTTP_MODULES_CSS); - uint32_t *vp = (uint32_t *)calloc(sizeof(FLASH_MODULE) / 4 , 4); + // reserve space for larger headers + uint32_t *vp = (uint32_t *)calloc(sizeof(FLASH_MODULE) / 2 , 4); if (!vp) { return; } @@ -3111,7 +3132,7 @@ void Module_upload() { for (uint16_t cnt = 0; cnt < MAX_PLUGINS; cnt++) { if (modules[cnt].mod_addr) { uint32_t *mp = (uint32_t*)modules[cnt].mod_addr; - for (uint16_t cnt = 0; cnt < sizeof(FLASH_MODULE) / 4; cnt++) { + for (uint16_t cnt = 0; cnt < sizeof(FLASH_MODULE) / 2; cnt++) { vp[cnt] = mp[cnt]; } #if defined(ESP32) @@ -3134,7 +3155,13 @@ void Module_upload() { WSContentSend_P(HTTP_MODULES_COMMONa, "808080", cnt + 1, name, type, srev, Get_mod_size, modules[cnt].mem_size); WSContentSend_P(PSTR("")); - for (uint8_t xcnt = 0; xcnt < MAX_MOD_STORES; xcnt++) { + uint32_t num = fm->arch & 0xff000000; + if (num) { + num = num >> 24; + } else { + num = MAX_MOD_STORES; + } + for (uint8_t xcnt = 0; xcnt < num; xcnt++) { char name[8]; strncpy(name, fm->ms[xcnt].name, 8); if (name[0]) { @@ -3272,7 +3299,7 @@ bool Check_Arch(FLASH_MODULE *fm) { return false; } - if (fm->arch != CURR_ARCH) { + if ((fm->arch & 0x000000ff) != CURR_ARCH) { AddLog(LOG_LEVEL_INFO,PSTR("plugin architecture error")); plugins.upload_error = MOD_UPL_ERR_ARCH; return false; @@ -3365,7 +3392,7 @@ bool Module_upload_write(uint8_t *upload_buf, size_t current_size) { delay(0); if (plugins.module_bytes_read == 0) { - AddLog(LOG_LEVEL_INFO,PSTR("progress bytes read 1; %d"),plugins.module_bytes_read); + //AddLog(LOG_LEVEL_INFO,PSTR("progress bytes read 1; %d"),plugins.module_bytes_read); memcpy(plugins.module_input_ptr, upload_buf, current_size); plugins.module_bytes_read += current_size; if (current_size < 2048) { @@ -3374,7 +3401,7 @@ bool Module_upload_write(uint8_t *upload_buf, size_t current_size) { return false; } } else { - AddLog(LOG_LEVEL_INFO,PSTR("progress bytes read 2; %d"),plugins.module_bytes_read); + //AddLog(LOG_LEVEL_INFO,PSTR("progress bytes read 2; %d"),plugins.module_bytes_read); memcpy(plugins.module_input_ptr + plugins.module_bytes_read, upload_buf, current_size); Store_Module_Block(plugins.module_input_buffer, plugins.upload_slot); plugins.upload_start_block++;