diff --git a/include/lv_conf_v7.h b/include/lv_conf_v7.h index 506d5e03..a37ec19b 100644 --- a/include/lv_conf_v7.h +++ b/include/lv_conf_v7.h @@ -136,7 +136,7 @@ typedef int16_t lv_coord_t; /* Repeated trigger period in long press [ms] * Time between `LV_EVENT_LONG_PRESSED_REPEAT */ -#define LV_INDEV_DEF_LONG_PRESS_REP_TIME 100 +#define LV_INDEV_DEF_LONG_PRESS_REP_TIME 200 /* Gesture threshold in pixels */ diff --git a/src/hasp/hasp_dispatch.cpp b/src/hasp/hasp_dispatch.cpp index 65913e9e..fe44d1d4 100644 --- a/src/hasp/hasp_dispatch.cpp +++ b/src/hasp/hasp_dispatch.cpp @@ -40,7 +40,7 @@ extern uint8_t hasp_sleep_state; -dispatch_conf_t dispatch_setings = {.teleperiod = 10}; +dispatch_conf_t dispatch_setings = {.teleperiod = 300}; uint32_t dispatchLastMillis; uint8_t nCommands = 0; @@ -615,22 +615,13 @@ void dispatch_object_generic_event(lv_obj_t* obj, uint8_t eventid) } // Send out the on/off event, with the val -void dispatch_object_toggle_event(lv_obj_t* obj, bool state) +void dispatch_object_val_event(lv_obj_t* obj, uint8_t eventid, int16_t val) { char data[40]; char eventname[8]; - dispatch_get_event_name(state, eventname, sizeof(eventname)); - snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":%d}"), eventname, state); - dispatch_obj_data(obj, data); -} - -// Send out the changed event, with the val -void dispatch_object_value_changed(lv_obj_t* obj, int16_t state) -{ - char data[48]; - - snprintf_P(data, sizeof(data), PSTR("{\"event\":\"changed\",\"val\":%d}"), state); + dispatch_get_event_name(eventid, eventname, sizeof(eventname)); + snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":%d}"), eventname, val); dispatch_obj_data(obj, data); } @@ -1058,10 +1049,10 @@ void dispatch_output_statusupdate(const char*, const char*) haspPages.get(), haspPages.count()); strcat(data, buffer); -// #if defined(ARDUINO_ARCH_ESP8266) -// snprintf_P(buffer, sizeof(buffer), PSTR("\"espVcc\":%.2f,"), (float)ESP.getVcc() / 1000); -// strcat(data, buffer); -// #endif + // #if defined(ARDUINO_ARCH_ESP8266) + // snprintf_P(buffer, sizeof(buffer), PSTR("\"espVcc\":%.2f,"), (float)ESP.getVcc() / 1000); + // strcat(data, buffer); + // #endif snprintf_P(buffer, sizeof(buffer), PSTR("\"tftDriver\":\"%s\",\"tftWidth\":%u,\"tftHeight\":%u}"), haspTft.get_tft_model(), (TFT_WIDTH), (TFT_HEIGHT)); diff --git a/src/hasp/hasp_dispatch.h b/src/hasp/hasp_dispatch.h index 1cae7f74..ccf982b0 100644 --- a/src/hasp/hasp_dispatch.h +++ b/src/hasp/hasp_dispatch.h @@ -77,8 +77,7 @@ void dispatch_send_obj_attribute_color(uint8_t pageid, uint8_t btnid, const char uint8_t b); void dispatch_object_generic_event(lv_obj_t* obj, uint8_t eventid); -void dispatch_object_toggle_event(lv_obj_t* obj, bool state); -void dispatch_object_value_changed(lv_obj_t* obj, int16_t state); +void dispatch_object_val_event(lv_obj_t* obj, uint8_t eventid, int16_t val); void dispatch_object_selection_changed(lv_obj_t* obj, int16_t val, const char* text); void dispatch_object_color_changed(lv_obj_t* obj, lv_color_t color); diff --git a/src/hasp/hasp_object.cpp b/src/hasp/hasp_object.cpp index ddd12286..eb5c77c6 100644 --- a/src/hasp/hasp_object.cpp +++ b/src/hasp/hasp_object.cpp @@ -31,6 +31,7 @@ const char** btnmatrix_default_map; // memory pointer to lvgl default btnmatrix map // static unsigned long last_change_event = 0; static bool last_press_was_short = false; // Avoid SHORT + UP double events +static lv_style_int_t last_value_sent; // ##################### Object Finders ######################################################## @@ -404,7 +405,6 @@ void generic_event_handler(lv_obj_t* obj, lv_event_t event) void toggle_event_handler(lv_obj_t* obj, lv_event_t event) { if(event == LV_EVENT_VALUE_CHANGED) { - char property[36]; // 4 for val only bool val = 0; hasp_update_sleep_state(); // wakeup? @@ -430,7 +430,7 @@ void toggle_event_handler(lv_obj_t* obj, lv_event_t event) // hasp_send_obj_attribute_int(obj, property, val); hasp_update_sleep_state(); // wakeup? - dispatch_object_toggle_event(obj, val); + dispatch_object_val_event(obj, val, val); dispatch_normalized_group_value(obj->user_data.groupid, obj, val, HASP_EVENT_OFF, HASP_EVENT_ON); } else if(event == LV_EVENT_DELETE) { @@ -510,42 +510,53 @@ static void selector_event_handler(lv_obj_t* obj, lv_event_t event) */ void slider_event_handler(lv_obj_t* obj, lv_event_t event) { - if(event == LV_EVENT_VALUE_CHANGED) { - /* bool is_dragged; + uint16_t evt; + switch(event) { + case LV_EVENT_VALUE_CHANGED: + break; - if(obj->user_data.objid == LV_HASP_SLIDER) { - is_dragged = lv_slider_is_dragged(obj); - } else if(obj->user_data.objid == LV_HASP_ARC) { - is_dragged = lv_arc_is_dragged(obj); - } + case LV_EVENT_DELETE: + LOG_VERBOSE(TAG_HASP, F(D_OBJECT_DELETED)); + hasp_object_delete(obj); + break; - if(is_dragged && (millis() - last_change_event < LV_INDEV_DEF_LONG_PRESS_TIME)) { - return; - } - */ + case LV_EVENT_PRESSED: + hasp_update_sleep_state(); // wakeup on press down? + evt = HASP_EVENT_DOWN; + case LV_EVENT_LONG_PRESSED_REPEAT: + if(event == LV_EVENT_LONG_PRESSED_REPEAT) evt = HASP_EVENT_CHANGED; + case LV_EVENT_RELEASED: { + if(event == LV_EVENT_RELEASED) evt = HASP_EVENT_UP; - int16_t val = 0; - int16_t min = 0; - int16_t max = 0; - hasp_update_sleep_state(); // wakeup? + // case LV_EVENT_PRESSED || LV_EVENT_LONG_PRESSED_REPEAT || LV_EVENT_RELEASED + int16_t val; + int16_t min; + int16_t max; - if(obj->user_data.objid == LV_HASP_SLIDER) { - val = lv_slider_get_value(obj); - min = lv_slider_get_min_value(obj); - max = lv_slider_get_max_value(obj); - } else if(obj->user_data.objid == LV_HASP_ARC) { - val = lv_arc_get_value(obj); - min = lv_arc_get_min_value(obj); - max = lv_arc_get_max_value(obj); - } else { - return; + if(obj->user_data.objid == LV_HASP_SLIDER) { + val = lv_slider_get_value(obj); + min = lv_slider_get_min_value(obj); + max = lv_slider_get_max_value(obj); + } else if(obj->user_data.objid == LV_HASP_ARC) { + val = lv_arc_get_value(obj); + min = lv_arc_get_min_value(obj); + max = lv_arc_get_max_value(obj); + } else { + return; + } + + if((event == LV_EVENT_LONG_PRESSED_REPEAT && last_value_sent != val) || + event != LV_EVENT_LONG_PRESSED_REPEAT) { + last_value_sent = val; + dispatch_object_val_event(obj, evt, val); + dispatch_normalized_group_value(obj->user_data.groupid, obj, val, min, max); + } + break; } - dispatch_object_value_changed(obj, val); - dispatch_normalized_group_value(obj->user_data.groupid, obj, val, min, max); - } else if(event == LV_EVENT_DELETE) { - LOG_VERBOSE(TAG_HASP, F(D_OBJECT_DELETED)); - hasp_object_delete(obj); + default: + // LOG_VERBOSE(TAG_HASP, F("Event ID: %d"), event); + ; } }