From dca9a5d8b8654b74258648440abfa32aef9b8bee Mon Sep 17 00:00:00 2001 From: fvanroie <15969459+fvanroie@users.noreply.github.com> Date: Thu, 6 May 2021 03:47:46 +0200 Subject: [PATCH] Decorate Loop() functions with IRAM_ATTR --- lib/lv_lib_zifont/lv_zifont.cpp | 20 ++++++------ platformio.ini | 5 ++- src/drv/hasp_drv_touch.cpp | 8 ++--- src/drv/hasp_drv_touch.h | 6 ++-- src/drv/touch/hasp_drv_ft6336u.cpp | 2 +- src/drv/touch/hasp_drv_ft6336u.h | 2 +- src/drv/touch/hasp_drv_stmpe610.cpp | 47 ++++++++++++++--------------- src/drv/touch/hasp_drv_stmpe610.h | 4 +-- src/hasp/hasp.cpp | 4 +-- src/hasp/hasp.h | 4 +-- src/hasp/hasp_attribute.cpp | 3 +- src/hasp/hasp_attribute.h | 3 +- src/hasp/hasp_dispatch.cpp | 2 +- src/hasp/hasp_dispatch.h | 2 +- src/hasp/hasp_event.cpp | 32 ++++++++++---------- src/hasp/hasp_event.h | 20 ++++++------ src/hasp_debug.h | 2 +- src/hasp_gui.cpp | 6 ++-- src/hasp_gui.h | 2 +- src/log/hasp_debug.cpp | 2 +- src/main_arduino.cpp | 10 +++--- src/mqtt/hasp_mqtt.h | 2 +- src/mqtt/hasp_mqtt_paho_async.cpp | 2 +- src/mqtt/hasp_mqtt_paho_single.cpp | 2 +- src/mqtt/hasp_mqtt_pubsubclient.cpp | 2 +- src/sys/gpio/hasp_gpio.cpp | 4 +-- src/sys/gpio/hasp_gpio.h | 2 +- src/sys/net/hasp_ethernet_esp32.cpp | 2 +- src/sys/net/hasp_ethernet_esp32.h | 2 +- src/sys/net/hasp_network.cpp | 2 +- src/sys/net/hasp_network.h | 2 +- src/sys/svc/hasp_http.cpp | 2 +- src/sys/svc/hasp_http.h | 2 +- src/sys/svc/hasp_mdns.cpp | 2 +- src/sys/svc/hasp_mdns.h | 2 +- src/sys/svc/hasp_ota.cpp | 2 +- src/sys/svc/hasp_ota.h | 2 +- src/sys/svc/hasp_telnet.cpp | 2 +- src/sys/svc/hasp_telnet.h | 2 +- 39 files changed, 114 insertions(+), 110 deletions(-) diff --git a/lib/lv_lib_zifont/lv_zifont.cpp b/lib/lv_lib_zifont/lv_zifont.cpp index 176c26a4..f801a907 100644 --- a/lib/lv_lib_zifont/lv_zifont.cpp +++ b/lib/lv_lib_zifont/lv_zifont.cpp @@ -55,9 +55,9 @@ enum zifont_codepage_t8_t { ASCII = 0x01, ISO_8859_1 = 0x03, UTF_8 = 0x18 }; /********************** * STATIC PROTOTYPES **********************/ -const uint8_t* IRAM_ATTR lv_font_get_bitmap_fmt_zifont(const lv_font_t* font, uint32_t unicode_letter); -bool IRAM_ATTR lv_font_get_glyph_dsc_fmt_zifont(const lv_font_t* font, lv_font_glyph_dsc_t* dsc_out, - uint32_t unicode_letter, uint32_t unicode_letter_next); +HASP_ATTRIBUTE_FAST_MEM const uint8_t* lv_font_get_bitmap_fmt_zifont(const lv_font_t* font, uint32_t unicode_letter); +HASP_ATTRIBUTE_FAST_MEM bool lv_font_get_glyph_dsc_fmt_zifont(const lv_font_t* font, lv_font_glyph_dsc_t* dsc_out, + uint32_t unicode_letter, uint32_t unicode_letter_next); /********************** * STATIC VARIABLES @@ -83,8 +83,8 @@ static uint8_t* charBitmap_p; * GLOBAL FUNCTIONS **********************/ -static void IRAM_ATTR blackAdd(uint8_t* charBitmap_p, uint16_t pos); -static void IRAM_ATTR colorsAdd(uint8_t* charBitmap_p, uint8_t color1, uint16_t pos); +HASP_ATTRIBUTE_FAST_MEM static void blackAdd(uint8_t* charBitmap_p, uint16_t pos); +HASP_ATTRIBUTE_FAST_MEM static void colorsAdd(uint8_t* charBitmap_p, uint8_t color1, uint16_t pos); // static uint16_t unicode2codepoint(uint32_t unicode, uint8_t codepage); // static void printBuffer(uint8_t * charBitmap_p, uint8_t w, uint8_t h); @@ -282,7 +282,7 @@ int lv_zifont_font_init(lv_font_t** font, const char* font_path, uint16_t size) * @param unicode_letter an unicode letter which bitmap should be get * @return pointer to the bitmap or NULL if not found */ -const uint8_t* IRAM_ATTR lv_font_get_bitmap_fmt_zifont(const lv_font_t* font, uint32_t unicode_letter) +HASP_ATTRIBUTE_FAST_MEM const uint8_t* lv_font_get_bitmap_fmt_zifont(const lv_font_t* font, uint32_t unicode_letter) { /* Bitmap still in buffer */ if(charInBuffer == unicode_letter && charBitmap_p) { @@ -469,8 +469,8 @@ const uint8_t* IRAM_ATTR lv_font_get_bitmap_fmt_zifont(const lv_font_t* font, ui * @return true: descriptor is successfully loaded into `dsc_out`. * false: the letter was not found, no data is loaded to `dsc_out` */ -bool IRAM_ATTR lv_font_get_glyph_dsc_fmt_zifont(const lv_font_t* font, lv_font_glyph_dsc_t* dsc_out, - uint32_t unicode_letter, uint32_t unicode_letter_next) +HASP_ATTRIBUTE_FAST_MEM bool lv_font_get_glyph_dsc_fmt_zifont(const lv_font_t* font, lv_font_glyph_dsc_t* dsc_out, + uint32_t unicode_letter, uint32_t unicode_letter_next) { /* Only ascii characteres supported for now */ // returning true with a box_h of 0 does not display an error @@ -564,7 +564,7 @@ bool IRAM_ATTR lv_font_get_glyph_dsc_fmt_zifont(const lv_font_t* font, lv_font_g return true; } -static void IRAM_ATTR blackAdd(uint8_t* charBitmap_p, uint16_t pos) +HASP_ATTRIBUTE_FAST_MEM static void blackAdd(uint8_t* charBitmap_p, uint16_t pos) { uint8_t col = pos & 0x0001; // remainder uint16_t map_p = pos >> 1; // devide by 2 @@ -576,7 +576,7 @@ static void IRAM_ATTR blackAdd(uint8_t* charBitmap_p, uint16_t pos) } } -static inline void IRAM_ATTR colorsAdd(uint8_t* charBitmap_p, uint8_t color1, uint16_t pos) +HASP_ATTRIBUTE_FAST_MEM static inline void colorsAdd(uint8_t* charBitmap_p, uint8_t color1, uint16_t pos) { uint32_t col = pos & 0x0001; // remainder uint32_t map_p = pos >> 1; // devide by 2 diff --git a/platformio.ini b/platformio.ini index f918567f..04ca7d15 100644 --- a/platformio.ini +++ b/platformio.ini @@ -116,12 +116,13 @@ build_flags = -D NO_GLOBAL_HTTPUPDATE ; dont instantiate httpUpdate ; -- lvgl build options ----------------------------- -D LV_MEM_SIZE=61440U ; 60kB lvgl memory - -D LV_ATTRIBUTE_FAST_MEM=IRAM_ATTR + -D LV_ATTRIBUTE_FAST_MEM= ; -- ArduinoJson build options ---------------------------- -D ARDUINOJSON_ENABLE_PROGMEM=1 ; for PROGMEM arguments ; -- tft_espi build options ------------------------ ;-D USE_DMA_TO_TFT ; -- openHASP build options ------------------------ + -D HASP_ATTRIBUTE_FAST_MEM=IRAM_ATTR -D HASP_USE_TELNET=1 ;-D HASP_USE_SPIFFS=1 -D HASP_USE_LITTLEFS=1 @@ -189,10 +190,12 @@ build_flags= -D PIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY ; -- lvgl build options ----------------------------- -D LV_MEM_SIZE=12288U ; 12kB lvgl memory + -D LV_ATTRIBUTE_FAST_MEM= ; -- ArduinoJson build options ---------------------------- -D ARDUINOJSON_ENABLE_PROGMEM=1 ; for PROGMEM arguments -D ARDUINOJSON_ENABLE_STD_STRING=1 ; for std::string ; -- openHASP build options ------------------------- + -D HASP_ATTRIBUTE_FAST_MEM= -D HASP_USE_TELNET=1 ;-D HASP_USE_SPIFFS=1 -D HASP_USE_LITTLEFS=1 diff --git a/src/drv/hasp_drv_touch.cpp b/src/drv/hasp_drv_touch.cpp index 438d15d9..900fef4c 100644 --- a/src/drv/hasp_drv_touch.cpp +++ b/src/drv/hasp_drv_touch.cpp @@ -1,10 +1,10 @@ /* MIT License - Copyright (c) 2019-2021 Francis Van Roie For full license information read the LICENSE file in the project folder */ +#include "hasplib.h" + #include "hasp_drv_touch.h" -#include "hasp/hasp.h" #include "drv/tft_driver.h" -#include "lvgl.h" #if TOUCH_DRIVER == 2046 #if defined(USE_FSMC) @@ -174,7 +174,7 @@ static inline bool drv_touchpad_getXY(int16_t* touchX, int16_t* touchY) return touched; } -bool IRAM_ATTR drv_touch_read(lv_indev_drv_t* indev_driver, lv_indev_data_t* data) +IRAM_ATTR bool drv_touch_read(lv_indev_drv_t* indev_driver, lv_indev_data_t* data) { #if TOUCH_DRIVER > 0 int16_t touchX = 0; @@ -211,7 +211,7 @@ bool IRAM_ATTR drv_touch_read(lv_indev_drv_t* indev_driver, lv_indev_data_t* dat return false; } -void IRAM_ATTR drv_touch_loop() +IRAM_ATTR void drv_touch_loop() { #if TOUCH_DRIVER == 911 GT911_loop(); diff --git a/src/drv/hasp_drv_touch.h b/src/drv/hasp_drv_touch.h index f1b83f10..d1d3161e 100644 --- a/src/drv/hasp_drv_touch.h +++ b/src/drv/hasp_drv_touch.h @@ -4,14 +4,14 @@ #ifndef HASP_DRV_TOUCH_H #define HASP_DRV_TOUCH_H -#include "lvgl.h" +#include "hasplib.h" #ifndef TOUCH_DRIVER #define TOUCH_DRIVER -1 // No Touch #endif void drv_touch_init(uint8_t rotation); -bool drv_touch_read(lv_indev_drv_t* indev_driver, lv_indev_data_t* data); -void drv_touch_loop(); +IRAM_ATTR bool drv_touch_read(lv_indev_drv_t* indev_driver, lv_indev_data_t* data); +IRAM_ATTR void drv_touch_loop(); #endif \ No newline at end of file diff --git a/src/drv/touch/hasp_drv_ft6336u.cpp b/src/drv/touch/hasp_drv_ft6336u.cpp index 41835cd0..07bcd14a 100644 --- a/src/drv/touch/hasp_drv_ft6336u.cpp +++ b/src/drv/touch/hasp_drv_ft6336u.cpp @@ -11,7 +11,7 @@ FT6336U* touchpanel; // Read touch points -bool IRAM_ATTR FT6336U_getXY(int16_t* touchX, int16_t* touchY, bool debug) +HASP_ATTRIBUTE_FAST_MEM bool FT6336U_getXY(int16_t* touchX, int16_t* touchY, bool debug) { if(touchpanel->read_touch_number() != 1) return false; diff --git a/src/drv/touch/hasp_drv_ft6336u.h b/src/drv/touch/hasp_drv_ft6336u.h index a52100e1..afae44c0 100644 --- a/src/drv/touch/hasp_drv_ft6336u.h +++ b/src/drv/touch/hasp_drv_ft6336u.h @@ -8,7 +8,7 @@ #include "hasp_debug.h" // for TAG_DRVR -bool FT6336U_getXY(int16_t* touchX, int16_t* touchY, bool debug); +HASP_ATTRIBUTE_FAST_MEM bool FT6336U_getXY(int16_t* touchX, int16_t* touchY, bool debug); void FT6336U_init(); #endif diff --git a/src/drv/touch/hasp_drv_stmpe610.cpp b/src/drv/touch/hasp_drv_stmpe610.cpp index f1a6df4a..7aa361f4 100644 --- a/src/drv/touch/hasp_drv_stmpe610.cpp +++ b/src/drv/touch/hasp_drv_stmpe610.cpp @@ -1,66 +1,65 @@ #if TOUCH_DRIVER == 610 - #include - #include "Adafruit_STMPE610.h" - #include "ArduinoLog.h" +#include +#include "Adafruit_STMPE610.h" +#include "ArduinoLog.h" - #include "hasp_drv_stmpe610.h" +#include "hasp_drv_stmpe610.h" // This is calibration data for the raw touch data to the screen coordinates - #define TS_MINX 3800 - #define TS_MAXX 100 - #define TS_MINY 100 - #define TS_MAXY 3750 +#define TS_MINX 3800 +#define TS_MAXX 100 +#define TS_MINY 100 +#define TS_MAXY 3750 static Adafruit_STMPE610 touch = Adafruit_STMPE610(STMPE_CS); // Read touch points from global variable -bool IRAM_ATTR STMPE610_getXY(int16_t * touchX, int16_t * touchY, uint8_t touchRotation, bool debug) +HASP_ATTRIBUTE_FAST_MEM bool STMPE610_getXY(int16_t* touchX, int16_t* touchY, uint8_t touchRotation, bool debug) { uint16_t x, y; uint8_t z; - if(! touch.touched()) return false; + if(!touch.touched()) return false; - while (! touch.bufferEmpty()) { + while(!touch.bufferEmpty()) { touch.readData(&x, &y, &z); if(debug) Log.trace(TAG_DRVR, F("STMPE610: x=%i y=%i z=%i r=%i"), x, y, z, touchRotation); } touch.writeRegister8(STMPE_INT_STA, 0xFF); - if (1 == touchRotation) { - #if HX8357D_DRIVER == 1 + if(1 == touchRotation) { +#if HX8357D_DRIVER == 1 y = map(y, TS_MINX, TS_MAXX, 0, TFT_HEIGHT); x = map(x, TS_MINY, TS_MAXY, TFT_WIDTH, 0); - #else +#else x = map(x, TS_MAXX, TS_MINX, 0, TFT_WIDTH); y = map(y, TS_MAXY, TS_MINY, 0, TFT_HEIGHT); - #endif - } else if (2 == touchRotation) { - #if HX8357D_DRIVER == 1 +#endif + } else if(2 == touchRotation) { +#if HX8357D_DRIVER == 1 x = map(x, TS_MAXX, TS_MINX, TFT_WIDTH, 0); y = map(y, TS_MAXY, TS_MINY, 0, TFT_HEIGHT); - #else +#else x = map(x, TS_MAXX, TS_MINX, 0, TFT_WIDTH); y = map(y, TS_MAXY, TS_MINY, 0, TFT_HEIGHT); - #endif +#endif } else { - #if HX8357D_DRIVER == 1 +#if HX8357D_DRIVER == 1 x = map(x, TS_MINX, TS_MAXX, TFT_WIDTH, 0); y = map(y, TS_MINY, TS_MAXY, 0, TFT_HEIGHT); - #else +#else x = map(x, TS_MINX, TS_MAXX, 0, TFT_WIDTH); y = map(y, TS_MINY, TS_MAXY, 0, TFT_HEIGHT); - #endif +#endif } *touchX = x; *touchY = y; return true; - } void STMPE610_init() { - if (! touch.begin()) { + if(!touch.begin()) { Log.trace(TAG_DRVR, F("STMPE610 not found!")); } else { Log.trace(TAG_DRVR, F("STMPE610 touch driver started")); diff --git a/src/drv/touch/hasp_drv_stmpe610.h b/src/drv/touch/hasp_drv_stmpe610.h index 2eb07f99..fe0c3c81 100644 --- a/src/drv/touch/hasp_drv_stmpe610.h +++ b/src/drv/touch/hasp_drv_stmpe610.h @@ -6,9 +6,9 @@ #if TOUCH_DRIVER == 610 - #include "hasp_debug.h" // for TAG_DRVR +#include "hasp_debug.h" // for TAG_DRVR -bool IRAM_ATTR STMPE610_getXY(int16_t * touchX, int16_t * touchY, uint8_t touchRotation, bool debug); +HASP_ATTRIBUTE_FAST_MEM bool STMPE610_getXY(int16_t* touchX, int16_t* touchY, uint8_t touchRotation, bool debug); void STMPE610_init(); #endif diff --git a/src/hasp/hasp.cpp b/src/hasp/hasp.cpp index 3e6596b1..390139f5 100644 --- a/src/hasp/hasp.cpp +++ b/src/hasp/hasp.cpp @@ -102,7 +102,7 @@ lv_font_t* hasp_get_font(uint8_t fontid) /** * Check if sleep state needs to be updated */ -bool IRAM_ATTR hasp_update_sleep_state() +HASP_ATTRIBUTE_FAST_MEM bool hasp_update_sleep_state() { uint32_t idle = lv_disp_get_inactive_time(NULL); @@ -470,7 +470,7 @@ void haspSetup(void) * STATIC FUNCTIONS **********************/ -void haspLoop(void) +IRAM_ATTR void haspLoop(void) { dispatchLoop(); } diff --git a/src/hasp/hasp.h b/src/hasp/hasp.h index 35311960..7a946d4b 100644 --- a/src/hasp/hasp.h +++ b/src/hasp/hasp.h @@ -47,7 +47,7 @@ extern "C" { * Create a hasp application */ void haspSetup(void); -void haspLoop(void); +IRAM_ATTR void haspLoop(void); void haspEverySecond(void); void haspReconnect(void); @@ -67,7 +67,7 @@ bool haspSetConfig(const JsonObject& settings); lv_font_t* hasp_get_font(uint8_t fontid); -bool hasp_update_sleep_state(); +HASP_ATTRIBUTE_FAST_MEM bool hasp_update_sleep_state(); void hasp_get_sleep_state(char* payload); void hasp_get_sleep_time(uint16_t& short_time, uint16_t& long_time); void hasp_set_sleep_time(uint16_t short_time, uint16_t long_time); diff --git a/src/hasp/hasp_attribute.cpp b/src/hasp/hasp_attribute.cpp index 6f2f23ac..5126b830 100644 --- a/src/hasp/hasp_attribute.cpp +++ b/src/hasp/hasp_attribute.cpp @@ -1449,7 +1449,8 @@ static void hasp_process_obj_attribute_range(lv_obj_t* obj, const char* attr, co * @param update bool: change/set the value if true, dispatch/get value if false * @note setting a value won't return anything, getting will dispatch the value */ -void IRAM_ATTR hasp_process_obj_attribute(lv_obj_t* obj, const char* attr_p, const char* payload, bool update) +HASP_ATTRIBUTE_FAST_MEM void hasp_process_obj_attribute(lv_obj_t* obj, const char* attr_p, const char* payload, + bool update) { // unsigned long start = millis(); if(!obj) { diff --git a/src/hasp/hasp_attribute.h b/src/hasp/hasp_attribute.h index cfad4afe..46d89411 100644 --- a/src/hasp/hasp_attribute.h +++ b/src/hasp/hasp_attribute.h @@ -16,7 +16,8 @@ void my_obj_set_value_str_text(lv_obj_t* obj, uint8_t part, lv_state_t state, co void my_btnmatrix_map_clear(lv_obj_t* obj); void line_clear_points(lv_obj_t* obj); -void hasp_process_obj_attribute(lv_obj_t* obj, const char* attr_p, const char* payload, bool update); +HASP_ATTRIBUTE_FAST_MEM void hasp_process_obj_attribute(lv_obj_t* obj, const char* attr_p, const char* payload, + bool update); bool hasp_process_obj_attribute_val(lv_obj_t* obj, const char* attr, int16_t intval, bool booval, bool update); void attr_out_str(lv_obj_t* obj, const char* attribute, const char* data); diff --git a/src/hasp/hasp_dispatch.cpp b/src/hasp/hasp_dispatch.cpp index 9e6e5e44..7c7d83fc 100644 --- a/src/hasp/hasp_dispatch.cpp +++ b/src/hasp/hasp_dispatch.cpp @@ -991,7 +991,7 @@ void dispatchSetup() /* WARNING: remember to expand the commands array when adding new commands */ } -void dispatchLoop() +IRAM_ATTR void dispatchLoop() { lv_task_handler(); // process animations } diff --git a/src/hasp/hasp_dispatch.h b/src/hasp/hasp_dispatch.h index be958c1e..edc805c5 100644 --- a/src/hasp/hasp_dispatch.h +++ b/src/hasp/hasp_dispatch.h @@ -28,7 +28,7 @@ enum hasp_event_t { // even = released, odd = pressed /* ===== Default Event Processors ===== */ void dispatchSetup(void); -void dispatchLoop(void); +IRAM_ATTR void dispatchLoop(void); void dispatchEverySecond(void); void dispatchStart(void); void dispatchStop(void); diff --git a/src/hasp/hasp_event.cpp b/src/hasp/hasp_event.cpp index 49d02c0a..fe8ad4e4 100644 --- a/src/hasp/hasp_event.cpp +++ b/src/hasp/hasp_event.cpp @@ -32,7 +32,7 @@ static lv_style_int_t last_value_sent; static lv_color_t last_color_sent; -void IRAM_ATTR swipe_event_handler(lv_obj_t* obj, lv_event_t event); +void swipe_event_handler(lv_obj_t* obj, lv_event_t event); /** * Clean-up allocated memory before an object is deleted @@ -137,7 +137,7 @@ void event_timer_refresh(lv_task_t* task) * @param event type of event that occured * @param eventid returns the hasp eventid */ -static bool IRAM_ATTR translate_event(lv_obj_t* obj, lv_event_t event, uint8_t& eventid) +static bool translate_event(lv_obj_t* obj, lv_event_t event, uint8_t& eventid) { switch(event) { case LV_EVENT_GESTURE: @@ -173,7 +173,7 @@ static bool IRAM_ATTR translate_event(lv_obj_t* obj, lv_event_t event, uint8_t& // ##################### Value Senders ######################################################## -static void IRAM_ATTR event_send_object_data(lv_obj_t* obj, const char* data) +static void event_send_object_data(lv_obj_t* obj, const char* data) { uint8_t pageid; uint8_t objid; @@ -187,7 +187,7 @@ static void IRAM_ATTR event_send_object_data(lv_obj_t* obj, const char* data) } // Send out events with a val attribute -static void IRAM_ATTR event_object_val_event(lv_obj_t* obj, uint8_t eventid, int16_t val) +static void event_object_val_event(lv_obj_t* obj, uint8_t eventid, int16_t val) { char data[40]; char eventname[8]; @@ -198,7 +198,7 @@ static void IRAM_ATTR event_object_val_event(lv_obj_t* obj, uint8_t eventid, int } // Send out events with a val and text attribute -static void IRAM_ATTR event_object_selection_changed(lv_obj_t* obj, uint8_t eventid, int16_t val, const char* text) +static void event_object_selection_changed(lv_obj_t* obj, uint8_t eventid, int16_t val, const char* text) { char data[200]; char eventname[8]; @@ -211,7 +211,7 @@ static void IRAM_ATTR event_object_selection_changed(lv_obj_t* obj, uint8_t even // ##################### Event Handlers ######################################################## #if HASP_USE_GPIO > 0 -void IRAM_ATTR event_gpio_input(uint8_t pin, uint8_t group, uint8_t eventid) +void event_gpio_input(uint8_t pin, uint8_t group, uint8_t eventid) { char payload[64]; char topic[8]; @@ -289,7 +289,7 @@ static void log_event(const char* name, lv_event_t event) * @param obj pointer to a button matrix * @param event type of event that occured */ -void IRAM_ATTR wakeup_event_handler(lv_obj_t* obj, lv_event_t event) +void wakeup_event_handler(lv_obj_t* obj, lv_event_t event) { log_event("wakeup", event); @@ -302,7 +302,7 @@ void IRAM_ATTR wakeup_event_handler(lv_obj_t* obj, lv_event_t event) } } -void IRAM_ATTR swipe_event_handler(lv_obj_t* obj, lv_event_t event) +void swipe_event_handler(lv_obj_t* obj, lv_event_t event) { if(!obj || obj->user_data.swipeid == 0) return; @@ -330,7 +330,7 @@ void IRAM_ATTR swipe_event_handler(lv_obj_t* obj, lv_event_t event) * @param obj pointer to a button object * @param event type of event that occured */ -void IRAM_ATTR generic_event_handler(lv_obj_t* obj, lv_event_t event) +void generic_event_handler(lv_obj_t* obj, lv_event_t event) { log_event("generic", event); @@ -429,7 +429,7 @@ void IRAM_ATTR generic_event_handler(lv_obj_t* obj, lv_event_t event) * @param obj pointer to a switch object * @param event type of event that occured */ -void IRAM_ATTR toggle_event_handler(lv_obj_t* obj, lv_event_t event) +void toggle_event_handler(lv_obj_t* obj, lv_event_t event) { log_event("toggle", event); @@ -472,7 +472,7 @@ void IRAM_ATTR toggle_event_handler(lv_obj_t* obj, lv_event_t event) * @param obj pointer to a dropdown list or roller * @param event type of event that occured */ -void IRAM_ATTR selector_event_handler(lv_obj_t* obj, lv_event_t event) +void selector_event_handler(lv_obj_t* obj, lv_event_t event) { log_event("selector", event); @@ -544,7 +544,7 @@ void IRAM_ATTR selector_event_handler(lv_obj_t* obj, lv_event_t event) * @param obj pointer to a dropdown list or roller * @param event type of event that occured */ -void IRAM_ATTR btnmatrix_event_handler(lv_obj_t* obj, lv_event_t event) +void btnmatrix_event_handler(lv_obj_t* obj, lv_event_t event) { log_event("btnmatrix", event); @@ -579,7 +579,7 @@ void IRAM_ATTR btnmatrix_event_handler(lv_obj_t* obj, lv_event_t event) * @param obj pointer to a dropdown list or roller * @param event type of event that occured */ -void IRAM_ATTR msgbox_event_handler(lv_obj_t* obj, lv_event_t event) +void msgbox_event_handler(lv_obj_t* obj, lv_event_t event) { log_event("msgbox", event); @@ -611,7 +611,7 @@ void IRAM_ATTR msgbox_event_handler(lv_obj_t* obj, lv_event_t event) * @param obj pointer to a slider * @param event type of event that occured */ -void IRAM_ATTR slider_event_handler(lv_obj_t* obj, lv_event_t event) +void slider_event_handler(lv_obj_t* obj, lv_event_t event) { log_event("slider", event); @@ -651,7 +651,7 @@ void IRAM_ATTR slider_event_handler(lv_obj_t* obj, lv_event_t event) * @param obj pointer to a color picker * @param event type of event that occured */ -void IRAM_ATTR cpicker_event_handler(lv_obj_t* obj, lv_event_t event) +void cpicker_event_handler(lv_obj_t* obj, lv_event_t event) { log_event("cpicker", event); @@ -678,7 +678,7 @@ void IRAM_ATTR cpicker_event_handler(lv_obj_t* obj, lv_event_t event) // dispatch_normalized_group_values(obj->user_data.groupid, obj, val, min, max); } -void IRAM_ATTR calendar_event_handler(lv_obj_t* obj, lv_event_t event) +void calendar_event_handler(lv_obj_t* obj, lv_event_t event) { log_event("calendar", event); diff --git a/src/hasp/hasp_event.h b/src/hasp/hasp_event.h index df581e6c..50f6e40d 100644 --- a/src/hasp/hasp_event.h +++ b/src/hasp/hasp_event.h @@ -15,19 +15,19 @@ void event_timer_calendar(lv_task_t* task); // Object event Handlers -void IRAM_ATTR wakeup_event_handler(lv_obj_t* obj, lv_event_t event); -void IRAM_ATTR generic_event_handler(lv_obj_t* obj, lv_event_t event); -void IRAM_ATTR toggle_event_handler(lv_obj_t* obj, lv_event_t event); -void IRAM_ATTR slider_event_handler(lv_obj_t* obj, lv_event_t event); -void IRAM_ATTR selector_event_handler(lv_obj_t* obj, lv_event_t event); -void IRAM_ATTR btnmatrix_event_handler(lv_obj_t* obj, lv_event_t event); -void IRAM_ATTR msgbox_event_handler(lv_obj_t* obj, lv_event_t event); -void IRAM_ATTR cpicker_event_handler(lv_obj_t* obj, lv_event_t event); -void IRAM_ATTR calendar_event_handler(lv_obj_t* obj, lv_event_t event); +void wakeup_event_handler(lv_obj_t* obj, lv_event_t event); +void generic_event_handler(lv_obj_t* obj, lv_event_t event); +void toggle_event_handler(lv_obj_t* obj, lv_event_t event); +void slider_event_handler(lv_obj_t* obj, lv_event_t event); +void selector_event_handler(lv_obj_t* obj, lv_event_t event); +void btnmatrix_event_handler(lv_obj_t* obj, lv_event_t event); +void msgbox_event_handler(lv_obj_t* obj, lv_event_t event); +void cpicker_event_handler(lv_obj_t* obj, lv_event_t event); +void calendar_event_handler(lv_obj_t* obj, lv_event_t event); #if HASP_USE_GPIO > 0 // GPIO event Handler -void IRAM_ATTR event_gpio_input(uint8_t pin, uint8_t group, uint8_t eventid); +void event_gpio_input(uint8_t pin, uint8_t group, uint8_t eventid); #endif #endif // HASP_EVENT_H \ No newline at end of file diff --git a/src/hasp_debug.h b/src/hasp_debug.h index 51dc7bf2..1e5e4055 100644 --- a/src/hasp_debug.h +++ b/src/hasp_debug.h @@ -133,7 +133,7 @@ extern "C" { // Functions used by ANDROID, WINDOWS and POSSIX void debugLvglLogEvent(lv_log_level_t level, const char* file, uint32_t line, const char* funcname, const char* descr); -void debugLoop(void); +IRAM_ATTR void debugLoop(void); void debugEverySecond(void); void debugStart(void); void debugStop(void); diff --git a/src/hasp_gui.cpp b/src/hasp_gui.cpp index 91b399e6..f245ca73 100644 --- a/src/hasp_gui.cpp +++ b/src/hasp_gui.cpp @@ -48,7 +48,7 @@ File pFileOut; #define INVERT_COLORS 0 #endif -// static void IRAM_ATTR lv_tick_handler(void); +// HASP_ATTRIBUTE_FAST_MEM static void lv_tick_handler(void); gui_conf_t gui_settings = {.show_pointer = false, .backlight_pin = TFT_BCKL, @@ -73,7 +73,7 @@ gui_conf_t gui_settings = {.show_pointer = false, // lv_tick_inc(LVGL_TICK_PERIOD); // } -void IRAM_ATTR gui_flush_cb(lv_disp_drv_t* disp, const lv_area_t* area, lv_color_t* color_p) +IRAM_ATTR void gui_flush_cb(lv_disp_drv_t* disp, const lv_area_t* area, lv_color_t* color_p) { haspTft.flush_pixels(disp, area, color_p); } @@ -285,7 +285,7 @@ void guiSetup(void) LOG_INFO(TAG_LVGL, F(D_SERVICE_STARTED)); } -void IRAM_ATTR guiLoop(void) +IRAM_ATTR void guiLoop(void) { #if defined(STM32F4xx) // tick.update(); diff --git a/src/hasp_gui.h b/src/hasp_gui.h index cb7500a7..0c8a25d4 100644 --- a/src/hasp_gui.h +++ b/src/hasp_gui.h @@ -17,7 +17,7 @@ struct gui_conf_t /* ===== Default Event Processors ===== */ void guiSetup(void); -void guiLoop(void); +IRAM_ATTR void guiLoop(void); void guiEverySecond(void); void guiStart(void); void guiStop(void); diff --git a/src/log/hasp_debug.cpp b/src/log/hasp_debug.cpp index ffb977a9..ff00a1be 100644 --- a/src/log/hasp_debug.cpp +++ b/src/log/hasp_debug.cpp @@ -333,7 +333,7 @@ void debugSetupWithoutLogging(JsonObject settings) } } -void debugLoop(void) +IRAM_ATTR void debugLoop(void) { int16_t keypress; do { diff --git a/src/main_arduino.cpp b/src/main_arduino.cpp index 2d5666d8..ae897bd6 100644 --- a/src/main_arduino.cpp +++ b/src/main_arduino.cpp @@ -68,10 +68,6 @@ void setup() haspSetup(); } -#if HASP_USE_GPIO > 0 - gpioSetup(); -#endif - /**************************** * Apply User Configuration ***************************/ @@ -80,6 +76,10 @@ void setup() mqttSetup(); // Load Hostname before starting WiFi #endif +#if HASP_USE_GPIO > 0 + gpioSetup(); +#endif + #if HASP_USE_WIFI > 0 || HASP_USE_ETHERNET > 0 networkSetup(); #endif @@ -109,7 +109,7 @@ void setup() // guiStart(); } -void IRAM_ATTR loop() +IRAM_ATTR void loop() { guiLoop(); haspLoop(); diff --git a/src/mqtt/hasp_mqtt.h b/src/mqtt/hasp_mqtt.h index ff7a3cdc..af0f02b7 100644 --- a/src/mqtt/hasp_mqtt.h +++ b/src/mqtt/hasp_mqtt.h @@ -23,7 +23,7 @@ typedef enum { } hasp_mqtt_error_t; void mqttSetup(); -void mqttLoop(); +IRAM_ATTR void mqttLoop(); void mqttEvery5Seconds(bool wifiIsConnected); void mqttStart(); void mqttStop(); diff --git a/src/mqtt/hasp_mqtt_paho_async.cpp b/src/mqtt/hasp_mqtt_paho_async.cpp index aec077ee..323cb80d 100644 --- a/src/mqtt/hasp_mqtt_paho_async.cpp +++ b/src/mqtt/hasp_mqtt_paho_async.cpp @@ -430,7 +430,7 @@ void mqttStop() void mqttSetup(){}; -void mqttLoop(){}; +IRAM_ATTR void mqttLoop(){}; void mqttEvery5Seconds(bool wifiIsConnected){}; diff --git a/src/mqtt/hasp_mqtt_paho_single.cpp b/src/mqtt/hasp_mqtt_paho_single.cpp index 4113eece..a05ae1a8 100644 --- a/src/mqtt/hasp_mqtt_paho_single.cpp +++ b/src/mqtt/hasp_mqtt_paho_single.cpp @@ -403,7 +403,7 @@ void mqttSetup() printf("%s %d\n", __FILE__, __LINE__); } -void mqttLoop() +IRAM_ATTR void mqttLoop() { int topicLen; char* topicName; // Freed by msgarrvd diff --git a/src/mqtt/hasp_mqtt_pubsubclient.cpp b/src/mqtt/hasp_mqtt_pubsubclient.cpp index d3940476..eb096a87 100644 --- a/src/mqtt/hasp_mqtt_pubsubclient.cpp +++ b/src/mqtt/hasp_mqtt_pubsubclient.cpp @@ -355,7 +355,7 @@ void mqttSetup() } } -void mqttLoop(void) +IRAM_ATTR void mqttLoop(void) { if(mqttEnabled) mqttClient.loop(); } diff --git a/src/sys/gpio/hasp_gpio.cpp b/src/sys/gpio/hasp_gpio.cpp index c9131c54..44912d9f 100644 --- a/src/sys/gpio/hasp_gpio.cpp +++ b/src/sys/gpio/hasp_gpio.cpp @@ -333,7 +333,7 @@ void gpioSetup() LOG_INFO(TAG_GPIO, F(D_SERVICE_STARTED)); } -void gpioLoop(void) +IRAM_ATTR void gpioLoop(void) { // Should be called every 4-5ms or faster, for the default debouncing time of ~20ms. for(uint8_t i = 0; i < gpioUsedInputCount; i++) { @@ -349,7 +349,7 @@ void gpioSetup(void) gpioSavePinConfig(2, 13, HASP_GPIO_LED, 0, -1); gpioSavePinConfig(3, 14, HASP_GPIO_DAC, 0, -1); } -void gpioLoop(void) +IRAM_ATTR void gpioLoop(void) {} #endif // ARDUINO diff --git a/src/sys/gpio/hasp_gpio.h b/src/sys/gpio/hasp_gpio.h index 2174fb61..25de68b5 100644 --- a/src/sys/gpio/hasp_gpio.h +++ b/src/sys/gpio/hasp_gpio.h @@ -22,7 +22,7 @@ struct hasp_gpio_config_t }; void gpioSetup(void); -void gpioLoop(void); +IRAM_ATTR void gpioLoop(void); void gpioEvery5Seconds(void); // void gpio_set_group_onoff(uint8_t groupid, bool ison); diff --git a/src/sys/net/hasp_ethernet_esp32.cpp b/src/sys/net/hasp_ethernet_esp32.cpp index 00737dfe..b9cb872b 100644 --- a/src/sys/net/hasp_ethernet_esp32.cpp +++ b/src/sys/net/hasp_ethernet_esp32.cpp @@ -55,7 +55,7 @@ void ethernetSetup() ETH.begin(ETH_ADDR, ETH_POWER_PIN, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_TYPE, ETH_CLKMODE); } -void ethernetLoop(void) +IRAM_ATTR void ethernetLoop(void) {} bool ethernetEvery5Seconds() diff --git a/src/sys/net/hasp_ethernet_esp32.h b/src/sys/net/hasp_ethernet_esp32.h index 4d8463c4..d8c62dab 100644 --- a/src/sys/net/hasp_ethernet_esp32.h +++ b/src/sys/net/hasp_ethernet_esp32.h @@ -9,7 +9,7 @@ static bool eth_connected = false; void ethernetSetup(); -void ethernetLoop(void); +IRAM_ATTR void ethernetLoop(void); bool ethernetEverySecond(); bool ethernetEvery5Seconds(); diff --git a/src/sys/net/hasp_network.cpp b/src/sys/net/hasp_network.cpp index 272e1ad8..820a85bd 100644 --- a/src/sys/net/hasp_network.cpp +++ b/src/sys/net/hasp_network.cpp @@ -58,7 +58,7 @@ void networkSetup() #endif } -void networkLoop(void) +IRAM_ATTR void networkLoop(void) { #if HASP_USE_ETHERNET > 0 ethernetLoop(); diff --git a/src/sys/net/hasp_network.h b/src/sys/net/hasp_network.h index 7df30a99..15305d80 100644 --- a/src/sys/net/hasp_network.h +++ b/src/sys/net/hasp_network.h @@ -6,7 +6,7 @@ /* ===== Default Event Processors ===== */ void networkSetup(); -void networkLoop(void); +IRAM_ATTR void networkLoop(void); bool networkEvery5Seconds(void); // bool networkEverySecond(void); void networkStart(void); diff --git a/src/sys/svc/hasp_http.cpp b/src/sys/svc/hasp_http.cpp index f6da2ad6..5bfc57ea 100644 --- a/src/sys/svc/hasp_http.cpp +++ b/src/sys/svc/hasp_http.cpp @@ -2219,7 +2219,7 @@ void httpReconnect() } //////////////////////////////////////////////////////////////////////////////////////////////////// -void httpLoop(void) +IRAM_ATTR void httpLoop(void) { if(http_config.enable) webServer.handleClient(); } diff --git a/src/sys/svc/hasp_http.h b/src/sys/svc/hasp_http.h index 51313c6d..23be22ca 100644 --- a/src/sys/svc/hasp_http.h +++ b/src/sys/svc/hasp_http.h @@ -16,7 +16,7 @@ struct hasp_http_config_t }; void httpSetup(); -void httpLoop(void); +IRAM_ATTR void httpLoop(void); void httpEvery5Seconds(void); // void httpReconnect(void); void httpStart(void); diff --git a/src/sys/svc/hasp_mdns.cpp b/src/sys/svc/hasp_mdns.cpp index 822c7970..464db38d 100644 --- a/src/sys/svc/hasp_mdns.cpp +++ b/src/sys/svc/hasp_mdns.cpp @@ -78,7 +78,7 @@ void mdnsStart() } } -void mdnsLoop(void) +IRAM_ATTR void mdnsLoop(void) { #if defined(ARDUINO_ARCH_ESP8266) if(mdns_config.enable) { diff --git a/src/sys/svc/hasp_mdns.h b/src/sys/svc/hasp_mdns.h index 2700595b..d81cd3f6 100644 --- a/src/sys/svc/hasp_mdns.h +++ b/src/sys/svc/hasp_mdns.h @@ -13,7 +13,7 @@ struct hasp_mdns_config_t /* ===== Default Event Processors ===== */ void mdnsSetup(); -void mdnsLoop(void); +IRAM_ATTR void mdnsLoop(void); void mdnsStart(void); void mdnsStop(void); diff --git a/src/sys/svc/hasp_ota.cpp b/src/sys/svc/hasp_ota.cpp index c4cc39f8..42bee68c 100644 --- a/src/sys/svc/hasp_ota.cpp +++ b/src/sys/svc/hasp_ota.cpp @@ -200,7 +200,7 @@ void otaSetup(void) } } -void otaLoop(void) +IRAM_ATTR void otaLoop(void) { ArduinoOTA.handle(); } diff --git a/src/sys/svc/hasp_ota.h b/src/sys/svc/hasp_ota.h index 215cd73a..83908539 100644 --- a/src/sys/svc/hasp_ota.h +++ b/src/sys/svc/hasp_ota.h @@ -10,7 +10,7 @@ /* ===== Default Event Processors ===== */ void otaSetup(void); -void otaLoop(void); +IRAM_ATTR void otaLoop(void); void otaEverySecond(void); /* ===== Special Event Processors ===== */ diff --git a/src/sys/svc/hasp_telnet.cpp b/src/sys/svc/hasp_telnet.cpp index 7678d19a..8101cf32 100644 --- a/src/sys/svc/hasp_telnet.cpp +++ b/src/sys/svc/hasp_telnet.cpp @@ -258,7 +258,7 @@ void telnetSetup() } } -void telnetLoop() +IRAM_ATTR void telnetLoop() { // Basic telnet client handling code from: https://gist.github.com/tablatronix/4793677ca748f5f584c95ec4a2b10303 diff --git a/src/sys/svc/hasp_telnet.h b/src/sys/svc/hasp_telnet.h index d35612f0..1e4ebdbb 100644 --- a/src/sys/svc/hasp_telnet.h +++ b/src/sys/svc/hasp_telnet.h @@ -10,7 +10,7 @@ /* ===== Default Event Processors ===== */ void telnetSetup(); -void telnetLoop(void); +IRAM_ATTR void telnetLoop(void); void telnetEvery5Seconds(void); void telnetEverySecond(void); void telnetStart(void);