mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-27 05:06:44 +00:00
Fix memory corruption with memcpy(), support musl libc
This commit is contained in:
parent
ed6b17cfd7
commit
f36dd66a05
@ -1360,7 +1360,7 @@ void dispatch_idle_state(uint8_t state)
|
|||||||
{
|
{
|
||||||
char topic[8];
|
char topic[8];
|
||||||
char buffer[8];
|
char buffer[8];
|
||||||
memcpy_P(topic, PSTR("idle"), 8);
|
memcpy_P(topic, PSTR("idle"), 5);
|
||||||
hasp_get_sleep_payload(state, buffer);
|
hasp_get_sleep_payload(state, buffer);
|
||||||
dispatch_state_subtopic(topic, buffer);
|
dispatch_state_subtopic(topic, buffer);
|
||||||
}
|
}
|
||||||
|
@ -176,9 +176,9 @@ void event_timer_clock(lv_task_t* task)
|
|||||||
timeval curTime;
|
timeval curTime;
|
||||||
int rslt = gettimeofday(&curTime, NULL);
|
int rslt = gettimeofday(&curTime, NULL);
|
||||||
(void)rslt; // unused
|
(void)rslt; // unused
|
||||||
time_t seconds = curTime.tv_sec;
|
time_t seconds = curTime.tv_sec;
|
||||||
useconds_t tv_msec = curTime.tv_usec / 1000;
|
auto tv_msec = curTime.tv_usec / 1000;
|
||||||
tm* timeinfo = localtime(&seconds);
|
tm* timeinfo = localtime(&seconds);
|
||||||
lv_task_set_period(task, data->interval - tv_msec);
|
lv_task_set_period(task, data->interval - tv_msec);
|
||||||
|
|
||||||
char buffer[128] = {0};
|
char buffer[128] = {0};
|
||||||
@ -835,7 +835,7 @@ void cpicker_event_handler(lv_obj_t* obj, lv_event_t event)
|
|||||||
if(!translate_event(obj, event, hasp_event_id) || event == LV_EVENT_VALUE_CHANGED) return;
|
if(!translate_event(obj, event, hasp_event_id) || event == LV_EVENT_VALUE_CHANGED) return;
|
||||||
|
|
||||||
/* Get the new value */
|
/* Get the new value */
|
||||||
lv_color_t color = lv_cpicker_get_color(obj);
|
lv_color_t color = lv_cpicker_get_color(obj);
|
||||||
lv_cpicker_color_mode_t mode = lv_cpicker_get_color_mode(obj);
|
lv_cpicker_color_mode_t mode = lv_cpicker_get_color_mode(obj);
|
||||||
|
|
||||||
if(hasp_event_id == HASP_EVENT_CHANGED && last_color_sent.full == color.full) return; // same value as before
|
if(hasp_event_id == HASP_EVENT_CHANGED && last_color_sent.full == color.full) return; // same value as before
|
||||||
@ -853,12 +853,16 @@ void cpicker_event_handler(lv_obj_t* obj, lv_event_t event)
|
|||||||
|
|
||||||
if(const char* tag = my_obj_get_tag(obj))
|
if(const char* tag = my_obj_get_tag(obj))
|
||||||
snprintf_P(data, sizeof(data),
|
snprintf_P(data, sizeof(data),
|
||||||
PSTR("{\"event\":\"%s\",\"color\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d,\"h\":%d,\"s\":%d,\"v\":%d,\"tag\":%s}"),
|
PSTR("{\"event\":\"%s\",\"color\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d,\"h\":%d,\"s\":%"
|
||||||
eventname, c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue, hsv.h, hsv.s, hsv.v, tag);
|
"d,\"v\":%d,\"tag\":%s}"),
|
||||||
|
eventname, c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue, hsv.h,
|
||||||
|
hsv.s, hsv.v, tag);
|
||||||
else
|
else
|
||||||
snprintf_P(data, sizeof(data),
|
snprintf_P(data, sizeof(data),
|
||||||
PSTR("{\"event\":\"%s\",\"color\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d,\"h\":%d,\"s\":%d,\"v\":%d}"), eventname,
|
PSTR("{\"event\":\"%s\",\"color\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d,\"h\":%d,\"s\":%"
|
||||||
c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue, hsv.h, hsv.s, hsv.v);
|
"d,\"v\":%d}"),
|
||||||
|
eventname, c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue, hsv.h,
|
||||||
|
hsv.s, hsv.v);
|
||||||
}
|
}
|
||||||
event_send_object_data(obj, data);
|
event_send_object_data(obj, data);
|
||||||
|
|
||||||
|
@ -136,34 +136,34 @@ void Parser::get_event_name(uint8_t eventid, char* buffer, size_t size)
|
|||||||
{
|
{
|
||||||
switch(eventid) {
|
switch(eventid) {
|
||||||
case HASP_EVENT_ON:
|
case HASP_EVENT_ON:
|
||||||
memcpy_P(buffer, PSTR("on"), size);
|
memcpy_P(buffer, PSTR("on"), 3);
|
||||||
break;
|
break;
|
||||||
case HASP_EVENT_OFF:
|
case HASP_EVENT_OFF:
|
||||||
memcpy_P(buffer, PSTR("off"), size);
|
memcpy_P(buffer, PSTR("off"), 4);
|
||||||
break;
|
break;
|
||||||
case HASP_EVENT_UP:
|
case HASP_EVENT_UP:
|
||||||
memcpy_P(buffer, PSTR("up"), size);
|
memcpy_P(buffer, PSTR("up"), 3);
|
||||||
break;
|
break;
|
||||||
case HASP_EVENT_DOWN:
|
case HASP_EVENT_DOWN:
|
||||||
memcpy_P(buffer, PSTR("down"), size);
|
memcpy_P(buffer, PSTR("down"), 5);
|
||||||
break;
|
break;
|
||||||
case HASP_EVENT_RELEASE:
|
case HASP_EVENT_RELEASE:
|
||||||
memcpy_P(buffer, PSTR("release"), size);
|
memcpy_P(buffer, PSTR("release"), 8);
|
||||||
break;
|
break;
|
||||||
case HASP_EVENT_LONG:
|
case HASP_EVENT_LONG:
|
||||||
memcpy_P(buffer, PSTR("long"), size);
|
memcpy_P(buffer, PSTR("long"), 5);
|
||||||
break;
|
break;
|
||||||
case HASP_EVENT_HOLD:
|
case HASP_EVENT_HOLD:
|
||||||
memcpy_P(buffer, PSTR("hold"), size);
|
memcpy_P(buffer, PSTR("hold"), 5);
|
||||||
break;
|
break;
|
||||||
case HASP_EVENT_LOST:
|
case HASP_EVENT_LOST:
|
||||||
memcpy_P(buffer, PSTR("lost"), size);
|
memcpy_P(buffer, PSTR("lost"), 5);
|
||||||
break;
|
break;
|
||||||
case HASP_EVENT_CHANGED:
|
case HASP_EVENT_CHANGED:
|
||||||
memcpy_P(buffer, PSTR("changed"), size);
|
memcpy_P(buffer, PSTR("changed"), 8);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
memcpy_P(buffer, PSTR("unknown"), size);
|
memcpy_P(buffer, PSTR("unknown"), 8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user