From 6804a497695c57fa84783293dbb7c3e964e1443a Mon Sep 17 00:00:00 2001 From: fvanroie Date: Sat, 11 Jun 2022 16:03:08 +0200 Subject: [PATCH] Add alarm --- src/hasp/hasp_event.cpp | 46 +++++++++++++++++++++++++++++++++++++++- src/hasp/hasp_event.h | 1 + src/hasp/hasp_object.cpp | 12 ++++++++++- src/hasp/hasp_object.h | 6 +++++- 4 files changed, 62 insertions(+), 3 deletions(-) diff --git a/src/hasp/hasp_event.cpp b/src/hasp/hasp_event.cpp index 8723c510..bdec4645 100644 --- a/src/hasp/hasp_event.cpp +++ b/src/hasp/hasp_event.cpp @@ -63,7 +63,7 @@ void delete_event_handler(lv_obj_t* obj, lv_event_t event) case LV_HASP_MSGBOX: my_msgbox_map_clear(obj); - break; + break; case LV_HASP_IMAGE: my_image_release_resources(obj); @@ -647,6 +647,50 @@ void selector_event_handler(lv_obj_t* obj, lv_event_t event) // attr_out_str(obj, property, buffer); } +/** + * Called when a btnmatrix value has changed + * @param obj pointer to a dropdown list or roller + * @param event type of event that occured + */ +void alarm_event_handler(lv_obj_t* obj, lv_event_t event) +{ + log_event("alarm", event); + + uint8_t hasp_event_id; + if(!translate_event(obj, event, hasp_event_id)) return; // Use LV_EVENT_VALUE_CHANGED + + /* Get the new value */ + // char buffer[128] = ""; + uint16_t val = 0; + + val = lv_btnmatrix_get_active_btn(obj); + if(val != LV_BTNMATRIX_BTN_NONE && hasp_event_id == HASP_EVENT_UP) { + lv_obj_t* ta = hasp_find_obj_from_parent_id(lv_obj_get_parent(obj), 5); + const char* txt = lv_btnmatrix_get_btn_text(obj, val); + if(!strcmp(txt, LV_SYMBOL_BACKSPACE)) + lv_textarea_del_char(ta); + else if(!strcmp(txt, LV_SYMBOL_CLOSE)) + lv_textarea_set_text(ta, ""); + else if(strlen(txt) == 1) + lv_textarea_add_text(ta, txt); + else + ; + // strncpy(buffer, txt, sizeof(buffer)); + } + + if(hasp_event_id == HASP_EVENT_CHANGED && last_value_sent == val && last_obj_sent == obj) + return; // same object and value as before + + last_value_sent = val; + last_obj_sent = obj; + // event_object_selection_changed(obj, hasp_event_id, val, buffer); + + // 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) { + // event_update_group(obj->user_data.groupid, obj, last_value_sent, 0, max); + // } +} + /** * Called when a btnmatrix value has changed * @param obj pointer to a dropdown list or roller diff --git a/src/hasp/hasp_event.h b/src/hasp/hasp_event.h index a10b862a..0bbd55ca 100644 --- a/src/hasp/hasp_event.h +++ b/src/hasp/hasp_event.h @@ -27,6 +27,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); void calendar_event_handler(lv_obj_t* obj, lv_event_t event); void textarea_event_handler(lv_obj_t* obj, lv_event_t event); +void alarm_event_handler(lv_obj_t* obj, lv_event_t event); // Other functions void event_reset_last_value_sent(); diff --git a/src/hasp/hasp_object.cpp b/src/hasp/hasp_object.cpp index 724bfb2b..2b262d77 100644 --- a/src/hasp/hasp_object.cpp +++ b/src/hasp/hasp_object.cpp @@ -278,13 +278,23 @@ void hasp_new_object(const JsonObject& config, uint8_t& saved_page_id) } switch(sdbm) { + /* ----- Custom Objects ------ */ + case LV_HASP_ALARM: + case HASP_OBJ_ALARM: + obj = lv_obj_create(parent_obj, NULL); + if(obj) obj->user_data.objid = LV_HASP_ALARM; + break; + /* ----- Basic Objects ------ */ case LV_HASP_BTNMATRIX: case HASP_OBJ_BTNMATRIX: obj = lv_btnmatrix_create(parent_obj, NULL); if(obj) { lv_btnmatrix_set_recolor(obj, true); - lv_obj_set_event_cb(obj, btnmatrix_event_handler); + if(obj_check_type(parent_obj, LV_HASP_ALARM)) + lv_obj_set_event_cb(obj, alarm_event_handler); + else + lv_obj_set_event_cb(obj, btnmatrix_event_handler); lv_btnmatrix_ext_t* ext = (lv_btnmatrix_ext_t*)lv_obj_get_ext_attr(obj); btnmatrix_default_map = ext->map_p; // store the static pointer to the default lvgl btnmap diff --git a/src/hasp/hasp_object.h b/src/hasp/hasp_object.h index 3c93444f..76374802 100644 --- a/src/hasp/hasp_object.h +++ b/src/hasp/hasp_object.h @@ -77,6 +77,9 @@ enum lv_hasp_obj_type_t { LV_HASP_IMAGE = 37, // placeholder LV_HASP_CANVAS = 38, // placeholder LV_HASP_MASK = 39, // placeholder + + /* Custom */ + LV_HASP_ALARM = 60, }; void hasp_new_object(const JsonObject& config, uint8_t& saved_page_id); @@ -112,7 +115,7 @@ inline lv_hasp_obj_type_t obj_get_type(const lv_obj_t* obj) */ inline const char* obj_get_type_name(const lv_obj_t* obj) { - if (obj_get_type(obj) == LV_HASP_TAB) return "tab"; // LVGL reports tab objects as "lv_page" + if(obj_get_type(obj) == LV_HASP_TAB) return "tab"; // LVGL reports tab objects as "lv_page" lv_obj_type_t list; lv_obj_get_type(obj, &list); @@ -175,5 +178,6 @@ inline bool obj_check_type(const lv_obj_t* obj, lv_hasp_obj_type_t haspobjtype) #define HASP_OBJ_TABVIEW 63226 #define HASP_OBJ_TAB 7861 #define HASP_OBJ_ARC 64594 +#define HASP_OBJ_ALARM 3153 #endif \ No newline at end of file