Address issue #88

This commit is contained in:
fvanroie 2021-03-26 16:02:03 +01:00
parent 6ef4538fda
commit 1f1b3eebd1
4 changed files with 53 additions and 52 deletions

View File

@ -136,7 +136,7 @@ typedef int16_t lv_coord_t;
/* Repeated trigger period in long press [ms] /* Repeated trigger period in long press [ms]
* Time between `LV_EVENT_LONG_PRESSED_REPEAT */ * 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 */ /* Gesture threshold in pixels */

View File

@ -40,7 +40,7 @@
extern uint8_t hasp_sleep_state; extern uint8_t hasp_sleep_state;
dispatch_conf_t dispatch_setings = {.teleperiod = 10}; dispatch_conf_t dispatch_setings = {.teleperiod = 300};
uint32_t dispatchLastMillis; uint32_t dispatchLastMillis;
uint8_t nCommands = 0; 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 // 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 data[40];
char eventname[8]; char eventname[8];
dispatch_get_event_name(state, eventname, sizeof(eventname)); dispatch_get_event_name(eventid, eventname, sizeof(eventname));
snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":%d}"), eventname, state); snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":%d}"), eventname, val);
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_obj_data(obj, data); dispatch_obj_data(obj, data);
} }

View File

@ -77,8 +77,7 @@ void dispatch_send_obj_attribute_color(uint8_t pageid, uint8_t btnid, const char
uint8_t b); uint8_t b);
void dispatch_object_generic_event(lv_obj_t* obj, uint8_t eventid); 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_val_event(lv_obj_t* obj, uint8_t eventid, int16_t val);
void dispatch_object_value_changed(lv_obj_t* obj, int16_t state);
void dispatch_object_selection_changed(lv_obj_t* obj, int16_t val, const char* text); 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); void dispatch_object_color_changed(lv_obj_t* obj, lv_color_t color);

View File

@ -31,6 +31,7 @@
const char** btnmatrix_default_map; // memory pointer to lvgl default btnmatrix map const char** btnmatrix_default_map; // memory pointer to lvgl default btnmatrix map
// static unsigned long last_change_event = 0; // static unsigned long last_change_event = 0;
static bool last_press_was_short = false; // Avoid SHORT + UP double events static bool last_press_was_short = false; // Avoid SHORT + UP double events
static lv_style_int_t last_value_sent;
// ##################### Object Finders ######################################################## // ##################### 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) void toggle_event_handler(lv_obj_t* obj, lv_event_t event)
{ {
if(event == LV_EVENT_VALUE_CHANGED) { if(event == LV_EVENT_VALUE_CHANGED) {
char property[36]; // 4 for val only
bool val = 0; bool val = 0;
hasp_update_sleep_state(); // wakeup? 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_send_obj_attribute_int(obj, property, val);
hasp_update_sleep_state(); // wakeup? 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); dispatch_normalized_group_value(obj->user_data.groupid, obj, val, HASP_EVENT_OFF, HASP_EVENT_ON);
} else if(event == LV_EVENT_DELETE) { } else if(event == LV_EVENT_DELETE) {
@ -510,24 +510,28 @@ 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) void slider_event_handler(lv_obj_t* obj, lv_event_t event)
{ {
if(event == LV_EVENT_VALUE_CHANGED) { uint16_t evt;
/* bool is_dragged; switch(event) {
case LV_EVENT_VALUE_CHANGED:
break;
if(obj->user_data.objid == LV_HASP_SLIDER) { case LV_EVENT_DELETE:
is_dragged = lv_slider_is_dragged(obj); LOG_VERBOSE(TAG_HASP, F(D_OBJECT_DELETED));
} else if(obj->user_data.objid == LV_HASP_ARC) { hasp_object_delete(obj);
is_dragged = lv_arc_is_dragged(obj); break;
}
if(is_dragged && (millis() - last_change_event < LV_INDEV_DEF_LONG_PRESS_TIME)) { case LV_EVENT_PRESSED:
return; 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; // case LV_EVENT_PRESSED || LV_EVENT_LONG_PRESSED_REPEAT || LV_EVENT_RELEASED
int16_t min = 0; int16_t val;
int16_t max = 0; int16_t min;
hasp_update_sleep_state(); // wakeup? int16_t max;
if(obj->user_data.objid == LV_HASP_SLIDER) { if(obj->user_data.objid == LV_HASP_SLIDER) {
val = lv_slider_get_value(obj); val = lv_slider_get_value(obj);
@ -540,12 +544,19 @@ void slider_event_handler(lv_obj_t* obj, lv_event_t event)
} else { } else {
return; return;
} }
dispatch_object_value_changed(obj, val);
dispatch_normalized_group_value(obj->user_data.groupid, obj, val, min, max);
} else if(event == LV_EVENT_DELETE) { if((event == LV_EVENT_LONG_PRESSED_REPEAT && last_value_sent != val) ||
LOG_VERBOSE(TAG_HASP, F(D_OBJECT_DELETED)); event != LV_EVENT_LONG_PRESSED_REPEAT) {
hasp_object_delete(obj); last_value_sent = val;
dispatch_object_val_event(obj, evt, val);
dispatch_normalized_group_value(obj->user_data.groupid, obj, val, min, max);
}
break;
}
default:
// LOG_VERBOSE(TAG_HASP, F("Event ID: %d"), event);
;
} }
} }