mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-29 06:06:40 +00:00
Add event_timer_calendar, calendar_event_handler and IRAM_ATTR
This commit is contained in:
parent
99a83c2f3c
commit
5706483d50
@ -22,6 +22,9 @@
|
|||||||
*
|
*
|
||||||
******************************************************************************************** */
|
******************************************************************************************** */
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
#include "hasplib.h"
|
#include "hasplib.h"
|
||||||
|
|
||||||
#include "lv_core/lv_obj.h" // for tabview ext
|
#include "lv_core/lv_obj.h" // for tabview ext
|
||||||
@ -29,7 +32,7 @@
|
|||||||
static lv_style_int_t last_value_sent;
|
static lv_style_int_t last_value_sent;
|
||||||
static lv_color_t last_color_sent;
|
static lv_color_t last_color_sent;
|
||||||
|
|
||||||
void swipe_event_handler(lv_obj_t* obj, lv_event_t event);
|
void IRAM_ATTR swipe_event_handler(lv_obj_t* obj, lv_event_t event);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clean-up allocated memory before an object is deleted
|
* Clean-up allocated memory before an object is deleted
|
||||||
@ -54,6 +57,73 @@ static void event_delete_object(lv_obj_t* obj)
|
|||||||
my_obj_set_value_str_text(obj, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, NULL);
|
my_obj_set_value_str_text(obj, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ============================== Timer Event ============================ */
|
||||||
|
void event_timer_calendar(lv_task_t* task)
|
||||||
|
{
|
||||||
|
lv_obj_t* obj = (lv_obj_t*)task->user_data;
|
||||||
|
|
||||||
|
if(!obj) return lv_task_del(task); // the calendar object for this task was deleted
|
||||||
|
|
||||||
|
lv_calendar_date_t date;
|
||||||
|
|
||||||
|
timeval curTime;
|
||||||
|
int rslt = gettimeofday(&curTime, NULL);
|
||||||
|
time_t t = curTime.tv_sec;
|
||||||
|
tm* timeinfo = localtime(&t);
|
||||||
|
(void*)rslt;
|
||||||
|
|
||||||
|
if(timeinfo->tm_year < 120) {
|
||||||
|
lv_task_set_period(task, 60000); // try again in a minute
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
uint32_t next_hour = (3600 - (t % 3600)) * 1000; // ms to next top of hour
|
||||||
|
lv_task_set_period(task, next_hour + 128); // small offset so all tasks don't run at once
|
||||||
|
}
|
||||||
|
|
||||||
|
date.day = timeinfo->tm_mday;
|
||||||
|
date.month = timeinfo->tm_mon + 1; // months since January 0-11
|
||||||
|
date.year = timeinfo->tm_year + 1900; // years since 1900
|
||||||
|
|
||||||
|
LOG_VERBOSE(TAG_EVENT, "event_timer_calendar called with user %d:%d:%d", timeinfo->tm_hour, timeinfo->tm_min,
|
||||||
|
timeinfo->tm_sec);
|
||||||
|
|
||||||
|
lv_calendar_set_today_date(obj, &date);
|
||||||
|
}
|
||||||
|
|
||||||
|
void event_timer_clock(lv_task_t* task)
|
||||||
|
{
|
||||||
|
lv_obj_t* obj = (lv_obj_t*)task->user_data;
|
||||||
|
|
||||||
|
if(!obj) return lv_task_del(task); // the calendar object for this task was deleted
|
||||||
|
|
||||||
|
timeval curTime;
|
||||||
|
int rslt = gettimeofday(&curTime, NULL);
|
||||||
|
time_t seconds = curTime.tv_sec;
|
||||||
|
tm* timeinfo = localtime(&seconds);
|
||||||
|
(void*)rslt;
|
||||||
|
|
||||||
|
if(timeinfo->tm_year < 120) {
|
||||||
|
lv_task_set_period(task, 60000); // try again in a minute
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG_VERBOSE(TAG_EVENT, "event_timer_clock called with user %d:%d%s", timeinfo->tm_hour, timeinfo->tm_min,
|
||||||
|
timeinfo->tm_sec);
|
||||||
|
|
||||||
|
uint16_t interval;
|
||||||
|
lv_task_set_period(task, (interval - (seconds % interval)) * 1000 + 64); // ms to next interval
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ============================== Timer Event ============================ */
|
||||||
|
void event_timer_refresh(lv_task_t* task)
|
||||||
|
{
|
||||||
|
lv_obj_t* obj = (lv_obj_t*)task->user_data;
|
||||||
|
printf("event_timer_refresh called with user data\n");
|
||||||
|
if(!obj) return;
|
||||||
|
|
||||||
|
lv_obj_invalidate(obj);
|
||||||
|
}
|
||||||
|
|
||||||
/* ============================== Event Senders ============================ */
|
/* ============================== Event Senders ============================ */
|
||||||
|
|
||||||
/* Takes and lv_obj and finds the pageid and objid
|
/* Takes and lv_obj and finds the pageid and objid
|
||||||
@ -67,7 +137,7 @@ static void event_delete_object(lv_obj_t* obj)
|
|||||||
* @param event type of event that occured
|
* @param event type of event that occured
|
||||||
* @param eventid returns the hasp eventid
|
* @param eventid returns the hasp eventid
|
||||||
*/
|
*/
|
||||||
static bool translate_event(lv_obj_t* obj, lv_event_t event, uint8_t& eventid)
|
static bool IRAM_ATTR translate_event(lv_obj_t* obj, lv_event_t event, uint8_t& eventid)
|
||||||
{
|
{
|
||||||
switch(event) {
|
switch(event) {
|
||||||
case LV_EVENT_GESTURE:
|
case LV_EVENT_GESTURE:
|
||||||
@ -103,7 +173,7 @@ static bool translate_event(lv_obj_t* obj, lv_event_t event, uint8_t& eventid)
|
|||||||
|
|
||||||
// ##################### Value Senders ########################################################
|
// ##################### Value Senders ########################################################
|
||||||
|
|
||||||
static void event_send_object_data(lv_obj_t* obj, const char* data)
|
static void IRAM_ATTR event_send_object_data(lv_obj_t* obj, const char* data)
|
||||||
{
|
{
|
||||||
uint8_t pageid;
|
uint8_t pageid;
|
||||||
uint8_t objid;
|
uint8_t objid;
|
||||||
@ -117,7 +187,7 @@ static void event_send_object_data(lv_obj_t* obj, const char* data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Send out events with a val attribute
|
// Send out events with a val attribute
|
||||||
static void event_object_val_event(lv_obj_t* obj, uint8_t eventid, int16_t val)
|
static void IRAM_ATTR event_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];
|
||||||
@ -128,7 +198,7 @@ static void event_object_val_event(lv_obj_t* obj, uint8_t eventid, int16_t val)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Send out events with a val and text attribute
|
// Send out events with a val and text attribute
|
||||||
static void event_object_selection_changed(lv_obj_t* obj, uint8_t eventid, int16_t val, const char* text)
|
static void IRAM_ATTR event_object_selection_changed(lv_obj_t* obj, uint8_t eventid, int16_t val, const char* text)
|
||||||
{
|
{
|
||||||
char data[200];
|
char data[200];
|
||||||
char eventname[8];
|
char eventname[8];
|
||||||
@ -141,7 +211,7 @@ static void event_object_selection_changed(lv_obj_t* obj, uint8_t eventid, int16
|
|||||||
// ##################### Event Handlers ########################################################
|
// ##################### Event Handlers ########################################################
|
||||||
|
|
||||||
#if HASP_USE_GPIO > 0
|
#if HASP_USE_GPIO > 0
|
||||||
void event_gpio_input(uint8_t pin, uint8_t group, uint8_t eventid)
|
void IRAM_ATTR event_gpio_input(uint8_t pin, uint8_t group, uint8_t eventid)
|
||||||
{
|
{
|
||||||
char payload[64];
|
char payload[64];
|
||||||
char topic[8];
|
char topic[8];
|
||||||
@ -219,7 +289,7 @@ static void log_event(const char* name, lv_event_t event)
|
|||||||
* @param obj pointer to a button matrix
|
* @param obj pointer to a button matrix
|
||||||
* @param event type of event that occured
|
* @param event type of event that occured
|
||||||
*/
|
*/
|
||||||
void wakeup_event_handler(lv_obj_t* obj, lv_event_t event)
|
void IRAM_ATTR wakeup_event_handler(lv_obj_t* obj, lv_event_t event)
|
||||||
{
|
{
|
||||||
log_event("wakeup", event);
|
log_event("wakeup", event);
|
||||||
|
|
||||||
@ -232,7 +302,7 @@ void wakeup_event_handler(lv_obj_t* obj, lv_event_t event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void swipe_event_handler(lv_obj_t* obj, lv_event_t event)
|
void IRAM_ATTR swipe_event_handler(lv_obj_t* obj, lv_event_t event)
|
||||||
{
|
{
|
||||||
if(!obj || obj->user_data.swipeid == 0) return;
|
if(!obj || obj->user_data.swipeid == 0) return;
|
||||||
|
|
||||||
@ -260,7 +330,7 @@ void swipe_event_handler(lv_obj_t* obj, lv_event_t event)
|
|||||||
* @param obj pointer to a button object
|
* @param obj pointer to a button object
|
||||||
* @param event type of event that occured
|
* @param event type of event that occured
|
||||||
*/
|
*/
|
||||||
void generic_event_handler(lv_obj_t* obj, lv_event_t event)
|
void IRAM_ATTR generic_event_handler(lv_obj_t* obj, lv_event_t event)
|
||||||
{
|
{
|
||||||
log_event("generic", event);
|
log_event("generic", event);
|
||||||
|
|
||||||
@ -359,7 +429,7 @@ void generic_event_handler(lv_obj_t* obj, lv_event_t event)
|
|||||||
* @param obj pointer to a switch object
|
* @param obj pointer to a switch object
|
||||||
* @param event type of event that occured
|
* @param event type of event that occured
|
||||||
*/
|
*/
|
||||||
void toggle_event_handler(lv_obj_t* obj, lv_event_t event)
|
void IRAM_ATTR toggle_event_handler(lv_obj_t* obj, lv_event_t event)
|
||||||
{
|
{
|
||||||
log_event("toggle", event);
|
log_event("toggle", event);
|
||||||
|
|
||||||
@ -402,7 +472,7 @@ void toggle_event_handler(lv_obj_t* obj, lv_event_t event)
|
|||||||
* @param obj pointer to a dropdown list or roller
|
* @param obj pointer to a dropdown list or roller
|
||||||
* @param event type of event that occured
|
* @param event type of event that occured
|
||||||
*/
|
*/
|
||||||
void selector_event_handler(lv_obj_t* obj, lv_event_t event)
|
void IRAM_ATTR selector_event_handler(lv_obj_t* obj, lv_event_t event)
|
||||||
{
|
{
|
||||||
log_event("selector", event);
|
log_event("selector", event);
|
||||||
|
|
||||||
@ -474,7 +544,7 @@ void selector_event_handler(lv_obj_t* obj, lv_event_t event)
|
|||||||
* @param obj pointer to a dropdown list or roller
|
* @param obj pointer to a dropdown list or roller
|
||||||
* @param event type of event that occured
|
* @param event type of event that occured
|
||||||
*/
|
*/
|
||||||
void btnmatrix_event_handler(lv_obj_t* obj, lv_event_t event)
|
void IRAM_ATTR btnmatrix_event_handler(lv_obj_t* obj, lv_event_t event)
|
||||||
{
|
{
|
||||||
log_event("btnmatrix", event);
|
log_event("btnmatrix", event);
|
||||||
|
|
||||||
@ -509,7 +579,7 @@ void btnmatrix_event_handler(lv_obj_t* obj, lv_event_t event)
|
|||||||
* @param obj pointer to a dropdown list or roller
|
* @param obj pointer to a dropdown list or roller
|
||||||
* @param event type of event that occured
|
* @param event type of event that occured
|
||||||
*/
|
*/
|
||||||
void msgbox_event_handler(lv_obj_t* obj, lv_event_t event)
|
void IRAM_ATTR msgbox_event_handler(lv_obj_t* obj, lv_event_t event)
|
||||||
{
|
{
|
||||||
log_event("msgbox", event);
|
log_event("msgbox", event);
|
||||||
|
|
||||||
@ -541,7 +611,7 @@ void msgbox_event_handler(lv_obj_t* obj, lv_event_t event)
|
|||||||
* @param obj pointer to a slider
|
* @param obj pointer to a slider
|
||||||
* @param event type of event that occured
|
* @param event type of event that occured
|
||||||
*/
|
*/
|
||||||
void slider_event_handler(lv_obj_t* obj, lv_event_t event)
|
void IRAM_ATTR slider_event_handler(lv_obj_t* obj, lv_event_t event)
|
||||||
{
|
{
|
||||||
log_event("slider", event);
|
log_event("slider", event);
|
||||||
|
|
||||||
@ -581,7 +651,7 @@ void slider_event_handler(lv_obj_t* obj, lv_event_t event)
|
|||||||
* @param obj pointer to a color picker
|
* @param obj pointer to a color picker
|
||||||
* @param event type of event that occured
|
* @param event type of event that occured
|
||||||
*/
|
*/
|
||||||
void cpicker_event_handler(lv_obj_t* obj, lv_event_t event)
|
void IRAM_ATTR cpicker_event_handler(lv_obj_t* obj, lv_event_t event)
|
||||||
{
|
{
|
||||||
log_event("cpicker", event);
|
log_event("cpicker", event);
|
||||||
|
|
||||||
@ -601,8 +671,40 @@ void cpicker_event_handler(lv_obj_t* obj, lv_event_t event)
|
|||||||
c32.full = lv_color_to32(color);
|
c32.full = lv_color_to32(color);
|
||||||
last_color_sent = color;
|
last_color_sent = color;
|
||||||
|
|
||||||
snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"color\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d}"),
|
snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"color\":\"#\",\"r\":%d,\"g\":%d,\"b\":%d}"), eventname,
|
||||||
eventname, c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue);
|
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_values(obj->user_data.groupid, obj, val, min, max);
|
||||||
|
}
|
||||||
|
|
||||||
|
void IRAM_ATTR calendar_event_handler(lv_obj_t* obj, lv_event_t event)
|
||||||
|
{
|
||||||
|
log_event("calendar", event);
|
||||||
|
|
||||||
|
uint8_t hasp_event_id;
|
||||||
|
if(event != LV_EVENT_PRESSED && event != LV_EVENT_RELEASED && event != LV_EVENT_VALUE_CHANGED) return;
|
||||||
|
if(!translate_event(obj, event, hasp_event_id)) return; // Use LV_EVENT_VALUE_CHANGED
|
||||||
|
|
||||||
|
/* Get the new value */
|
||||||
|
lv_calendar_date_t* date;
|
||||||
|
if(hasp_event_id == HASP_EVENT_CHANGED)
|
||||||
|
date = lv_calendar_get_pressed_date(obj); // pressed date
|
||||||
|
else
|
||||||
|
date = lv_calendar_get_showed_date(obj); // current month
|
||||||
|
if(!date) return;
|
||||||
|
|
||||||
|
lv_style_int_t val = date->day + date->month * 31;
|
||||||
|
if(hasp_event_id == HASP_EVENT_CHANGED && last_value_sent == val) return; // same value as before
|
||||||
|
|
||||||
|
char data[100];
|
||||||
|
char eventname[8];
|
||||||
|
Parser::get_event_name(hasp_event_id, eventname, sizeof(eventname));
|
||||||
|
|
||||||
|
last_value_sent = val;
|
||||||
|
|
||||||
|
snprintf_P(data, sizeof(data), PSTR("{\"event\":\"%s\",\"val\":\"%d\",\"text\":\"%04d-%02d-%02dT00:00:00Z\"}"),
|
||||||
|
eventname, date->day, date->year, date->month, date->day);
|
||||||
event_send_object_data(obj, data);
|
event_send_object_data(obj, data);
|
||||||
|
|
||||||
// dispatch_normalized_group_values(obj->user_data.groupid, obj, val, min, max);
|
// dispatch_normalized_group_values(obj->user_data.groupid, obj, val, min, max);
|
||||||
|
@ -11,19 +11,23 @@
|
|||||||
#define HASP_NUM_PAGE_BACK (HASP_NUM_PAGES + 2)
|
#define HASP_NUM_PAGE_BACK (HASP_NUM_PAGES + 2)
|
||||||
#define HASP_NUM_PAGE_NEXT (HASP_NUM_PAGES + 3)
|
#define HASP_NUM_PAGE_NEXT (HASP_NUM_PAGES + 3)
|
||||||
|
|
||||||
|
// Timer event Handlers
|
||||||
|
void event_timer_calendar(lv_task_t* task);
|
||||||
|
|
||||||
// Object event Handlers
|
// Object event Handlers
|
||||||
void wakeup_event_handler(lv_obj_t* obj, lv_event_t event);
|
void IRAM_ATTR wakeup_event_handler(lv_obj_t* obj, lv_event_t event);
|
||||||
void generic_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 toggle_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 slider_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 selector_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 btnmatrix_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 msgbox_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 cpicker_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);
|
||||||
|
|
||||||
#if HASP_USE_GPIO > 0
|
#if HASP_USE_GPIO > 0
|
||||||
// GPIO event Handler
|
// GPIO event Handler
|
||||||
void event_gpio_input(uint8_t pin, uint8_t group, uint8_t eventid);
|
void IRAM_ATTR event_gpio_input(uint8_t pin, uint8_t group, uint8_t eventid);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif // HASP_EVENT_H
|
#endif // HASP_EVENT_H
|
Loading…
x
Reference in New Issue
Block a user