diff --git a/src/hasp/hasp_dispatch.cpp b/src/hasp/hasp_dispatch.cpp index 6f5743a5..9e6e5e44 100644 --- a/src/hasp/hasp_dispatch.cpp +++ b/src/hasp/hasp_dispatch.cpp @@ -463,15 +463,15 @@ static inline void dispatch_state_msg(const __FlashStringHelper* subtopic, const // // dispatch_output_group_state(groupid, payload); // } -void dispatch_normalized_group_value(uint8_t groupid, lv_obj_t* obj, int16_t val, int16_t min, int16_t max) +void dispatch_normalized_group_values(uint8_t groupid, lv_obj_t* obj, int16_t val, int16_t min, int16_t max) { if(groupid == 0) return; LOG_VERBOSE(TAG_MSGR, F("GROUP %d value %d (%d-%d)"), groupid, val, min, max); #if HASP_USE_GPIO > 0 - gpio_set_normalized_group_value(groupid, val, min, max); // Update GPIO states + gpio_set_normalized_group_values(groupid, val, min, max); // Update GPIO states #endif - object_set_normalized_group_value(groupid, obj, val, min, max); // Update onsreen objects + object_set_normalized_group_values(groupid, obj, val, min, max); // Update onsreen objects } /********************************************** Native Commands ****************************************/ @@ -801,13 +801,6 @@ void dispatch_reboot(bool saveConfig) haspDevice.reboot(); } -void dispatch_current_state() -{ - dispatch_statusupdate(NULL, NULL); - dispatch_idle(NULL, NULL); - dispatch_current_page(); -} - /******************************************* Command Wrapper Functions *********************************/ // Periodically publish a JSON string indicating system status @@ -907,6 +900,14 @@ void dispatch_statusupdate(const char*, const char*) #endif } +void dispatch_current_state() +{ + dispatch_statusupdate(NULL, NULL); + dispatch_idle(NULL, NULL); + dispatch_current_page(); + dispatch_send_discovery(NULL, NULL); +} + void dispatch_calibrate(const char*, const char*) { guiCalibrate(); diff --git a/src/hasp/hasp_dispatch.h b/src/hasp/hasp_dispatch.h index 2f3f150a..be958c1e 100644 --- a/src/hasp/hasp_dispatch.h +++ b/src/hasp/hasp_dispatch.h @@ -64,7 +64,7 @@ void dispatch_wakeup(const char*, const char*); void dispatch_gpio_input_event(uint8_t pin, uint8_t group, uint8_t eventid); void dispatch_output_pin_value(uint8_t pin, uint16_t val); -void dispatch_normalized_group_value(uint8_t groupid, lv_obj_t* obj, int16_t val, int16_t min, int16_t max); +void dispatch_normalized_group_values(uint8_t groupid, lv_obj_t* obj, int16_t val, int16_t min, int16_t max); void dispatch_state_subtopic(const char* subtopic, const char* payload); diff --git a/src/hasp/hasp_event.cpp b/src/hasp/hasp_event.cpp index e6fdd6c7..0b4604fd 100644 --- a/src/hasp/hasp_event.cpp +++ b/src/hasp/hasp_event.cpp @@ -103,7 +103,7 @@ static bool translate_event(lv_obj_t* obj, lv_event_t event, uint8_t& eventid) // ##################### Value Senders ######################################################## -void 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; @@ -117,7 +117,7 @@ void event_send_object_data(lv_obj_t* obj, const char* data) } // Send out events with a val attribute -void 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]; @@ -128,7 +128,7 @@ void event_object_val_event(lv_obj_t* obj, uint8_t eventid, int16_t val) } // Send out events with a val and text attribute -void 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]; @@ -157,7 +157,7 @@ void event_gpio_input(uint8_t pin, uint8_t group, uint8_t eventid) } #endif -void log_event(const char* name, lv_event_t event) +static void log_event(const char* name, lv_event_t event) { return; @@ -346,8 +346,12 @@ void generic_event_handler(lv_obj_t* obj, lv_event_t event) snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\"}"), eventname); event_send_object_data(obj, data); } - dispatch_normalized_group_value(obj->user_data.groupid, obj, Parser::get_event_state(last_value_sent), - HASP_EVENT_OFF, HASP_EVENT_ON); + + // Update group objects and gpios on release + if(last_value_sent == HASP_EVENT_UP || last_value_sent == HASP_EVENT_RELEASE) { + dispatch_normalized_group_values(obj->user_data.groupid, obj, Parser::get_event_state(last_value_sent), + HASP_EVENT_OFF, HASP_EVENT_ON); + } } /** @@ -386,7 +390,11 @@ void toggle_event_handler(lv_obj_t* obj, lv_event_t event) } event_object_val_event(obj, hasp_event_id, last_value_sent); - dispatch_normalized_group_value(obj->user_data.groupid, obj, last_value_sent, HASP_EVENT_OFF, HASP_EVENT_ON); + + // Update group objects and gpios on release + if(last_value_sent == HASP_EVENT_UP) { + dispatch_normalized_group_values(obj->user_data.groupid, obj, last_value_sent, HASP_EVENT_OFF, HASP_EVENT_ON); + } } /** @@ -450,7 +458,11 @@ void selector_event_handler(lv_obj_t* obj, lv_event_t event) if(hasp_event_id == HASP_EVENT_CHANGED && last_value_sent == val) return; // same value as before last_value_sent = val; event_object_selection_changed(obj, hasp_event_id, val, buffer); - // if(max > 0) dispatch_normalized_group_value(obj->user_data.groupid, obj, val, 0, max); + + if(max > 0) // max a cannot be 0, its the divider + if(hasp_event_id == HASP_EVENT_UP || hasp_event_id == LV_EVENT_VALUE_CHANGED) { + dispatch_normalized_group_values(obj->user_data.groupid, obj, last_value_sent, 0, max); + } // set the property // snprintf_P(property, sizeof(property), PSTR("val\":%d,\"text"), val); @@ -485,7 +497,11 @@ void btnmatrix_event_handler(lv_obj_t* obj, lv_event_t event) last_value_sent = val; event_object_selection_changed(obj, hasp_event_id, val, buffer); - // if(max > 0) dispatch_normalized_group_value(obj->user_data.groupid, obj, val, 0, max); + + // if(max > 0) // max a cannot be 0, its the divider + // if(hasp_event_id == HASP_EVENT_UP || hasp_event_id == LV_EVENT_VALUE_CHANGED) { + // dispatch_normalized_group_values(obj->user_data.groupid, obj, last_value_sent, 0, max); + // } } /** @@ -517,7 +533,7 @@ void msgbox_event_handler(lv_obj_t* obj, lv_event_t event) last_value_sent = val; event_object_selection_changed(obj, hasp_event_id, val, buffer); - // if(max > 0) dispatch_normalized_group_value(obj->user_data.groupid, obj, val, 0, max); + // if(max > 0) dispatch_normalized_group_values(obj->user_data.groupid, obj, val, 0, max); } /** @@ -555,7 +571,9 @@ void slider_event_handler(lv_obj_t* obj, lv_event_t event) last_value_sent = val; event_object_val_event(obj, hasp_event_id, val); - dispatch_normalized_group_value(obj->user_data.groupid, obj, val, min, max); + + if(hasp_event_id == HASP_EVENT_CHANGED && min != max) + dispatch_normalized_group_values(obj->user_data.groupid, obj, val, min, max); } /** @@ -587,5 +605,5 @@ void cpicker_event_handler(lv_obj_t* obj, lv_event_t event) eventname, c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue); event_send_object_data(obj, data); - // dispatch_normalized_group_value(obj->user_data.groupid, obj, val, min, max); + // dispatch_normalized_group_values(obj->user_data.groupid, obj, val, min, max); } diff --git a/src/hasp/hasp_event.h b/src/hasp/hasp_event.h index a679acef..1def8c41 100644 --- a/src/hasp/hasp_event.h +++ b/src/hasp/hasp_event.h @@ -11,6 +11,7 @@ #define HASP_NUM_PAGE_BACK (HASP_NUM_PAGES + 2) #define HASP_NUM_PAGE_NEXT (HASP_NUM_PAGES + 3) +// Object event Handlers 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); @@ -21,6 +22,7 @@ void msgbox_event_handler(lv_obj_t* obj, lv_event_t event); void cpicker_event_handler(lv_obj_t* obj, lv_event_t event); #if HASP_USE_GPIO > 0 +// GPIO event Handler void event_gpio_input(uint8_t pin, uint8_t group, uint8_t eventid); #endif