feat(msg): allow using variable address as msg_id
This commit is contained in:
@@ -1,18 +1,13 @@
|
||||
#include "../../lv_examples.h"
|
||||
#if LV_USE_MSG && LV_USE_SLIDER && LV_USE_LABEL && LV_BUILD_EXAMPLES
|
||||
|
||||
/*Define a message ID*/
|
||||
#define MSG_INC 1
|
||||
#define MSG_DEC 2
|
||||
#define MSG_SET 3
|
||||
#define MSG_UPDATE 4
|
||||
#define MSG_UPDATE_REQUEST 5
|
||||
|
||||
static void value_handler(lv_msg_t * m);
|
||||
static int32_t limit_value(int32_t v);
|
||||
static void btn_event_cb(lv_event_t * e);
|
||||
static void label_event_cb(lv_event_t * e);
|
||||
static void slider_event_cb(lv_event_t * e);
|
||||
|
||||
static int32_t power_value;
|
||||
|
||||
/**
|
||||
* Show how an increment button, a decrement button, as slider can set a value
|
||||
* and a label display it.
|
||||
@@ -22,12 +17,6 @@ static void slider_event_cb(lv_event_t * e);
|
||||
void lv_example_msg_3(void)
|
||||
{
|
||||
|
||||
lv_msg_subscribe(MSG_INC, value_handler, NULL);
|
||||
lv_msg_subscribe(MSG_DEC, value_handler, NULL);
|
||||
lv_msg_subscribe(MSG_SET, value_handler, NULL);
|
||||
lv_msg_subscribe(MSG_UPDATE, value_handler, NULL);
|
||||
lv_msg_subscribe(MSG_UPDATE_REQUEST, value_handler, NULL);
|
||||
|
||||
lv_obj_t * panel = lv_obj_create(lv_scr_act());
|
||||
lv_obj_set_size(panel, 250, LV_SIZE_CONTENT);
|
||||
lv_obj_center(panel);
|
||||
@@ -50,7 +39,7 @@ void lv_example_msg_3(void)
|
||||
lv_obj_set_flex_grow(label, 2);
|
||||
lv_obj_set_style_text_align(label, LV_TEXT_ALIGN_CENTER, 0);
|
||||
lv_label_set_text(label, "?");
|
||||
lv_msg_subscribe_obj(MSG_UPDATE, label, NULL);
|
||||
lv_msg_subscribe_obj((lv_msg_id_t)&power_value, label, NULL);
|
||||
lv_obj_add_event_cb(label, label_event_cb, LV_EVENT_MSG_RECEIVED, NULL);
|
||||
|
||||
/*Down button*/
|
||||
@@ -65,42 +54,16 @@ void lv_example_msg_3(void)
|
||||
lv_obj_t * slider = lv_slider_create(panel);
|
||||
lv_obj_set_flex_grow(slider, 1);
|
||||
lv_obj_add_flag(slider, LV_OBJ_FLAG_FLEX_IN_NEW_TRACK);
|
||||
lv_msg_subscribe_obj((lv_msg_id_t)&power_value, slider, NULL);
|
||||
lv_obj_add_event_cb(slider, slider_event_cb, LV_EVENT_ALL, NULL);
|
||||
lv_msg_subscribe_obj(MSG_UPDATE, slider, NULL);
|
||||
|
||||
|
||||
/* As there are new UI elements that don't know the system's state
|
||||
* send an UPDATE REQUEST message which will trigger an UPDATE message with the current value*/
|
||||
lv_msg_send(MSG_UPDATE_REQUEST, NULL);
|
||||
power_value = 30;
|
||||
lv_msg_update_value(&power_value);
|
||||
}
|
||||
|
||||
|
||||
static void value_handler(lv_msg_t * m)
|
||||
static int32_t limit_value(int32_t v)
|
||||
{
|
||||
static int32_t value = 10;
|
||||
int32_t old_value = value;
|
||||
switch(lv_msg_get_id(m)) {
|
||||
case MSG_INC:
|
||||
if(value < 100) value++;
|
||||
break;
|
||||
case MSG_DEC:
|
||||
if(value > 0) value--;
|
||||
break;
|
||||
case MSG_SET: {
|
||||
const int32_t * new_value = lv_msg_get_payload(m);
|
||||
value = *new_value;
|
||||
}
|
||||
break;
|
||||
case MSG_UPDATE_REQUEST:
|
||||
lv_msg_send(MSG_UPDATE, &value);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if(value != old_value) {
|
||||
lv_msg_send(MSG_UPDATE, &value);
|
||||
}
|
||||
return LV_CLAMP(30, v, 80);
|
||||
}
|
||||
|
||||
|
||||
@@ -110,10 +73,12 @@ static void btn_event_cb(lv_event_t * e)
|
||||
lv_event_code_t code = lv_event_get_code(e);
|
||||
if(code == LV_EVENT_CLICKED || code == LV_EVENT_LONG_PRESSED_REPEAT) {
|
||||
if(lv_obj_get_index(btn) == 0) { /*First object is the dec. button*/
|
||||
lv_msg_send(MSG_DEC, NULL);
|
||||
power_value = limit_value(power_value - 1);
|
||||
lv_msg_update_value(&power_value);
|
||||
}
|
||||
else {
|
||||
lv_msg_send(MSG_INC, NULL);
|
||||
power_value = limit_value(power_value + 1);
|
||||
lv_msg_update_value(&power_value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -124,10 +89,8 @@ static void label_event_cb(lv_event_t * e)
|
||||
lv_event_code_t code = lv_event_get_code(e);
|
||||
if(code == LV_EVENT_MSG_RECEIVED) {
|
||||
lv_msg_t * m = lv_event_get_msg(e);
|
||||
if(lv_msg_get_id(m) == MSG_UPDATE) {
|
||||
const int32_t * v = lv_msg_get_payload(m);
|
||||
lv_label_set_text_fmt(label, "%d %%", *v);
|
||||
}
|
||||
const int32_t * v = lv_msg_get_payload(m);
|
||||
lv_label_set_text_fmt(label, "%d %%", *v);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -136,15 +99,13 @@ static void slider_event_cb(lv_event_t * e)
|
||||
lv_obj_t * slider = lv_event_get_target(e);
|
||||
lv_event_code_t code = lv_event_get_code(e);
|
||||
if(code == LV_EVENT_VALUE_CHANGED) {
|
||||
int32_t v = lv_slider_get_value(slider);
|
||||
lv_msg_send(MSG_SET, &v);
|
||||
power_value = limit_value(lv_slider_get_value(slider));
|
||||
lv_msg_update_value(&power_value);
|
||||
}
|
||||
else if(code == LV_EVENT_MSG_RECEIVED) {
|
||||
lv_msg_t * m = lv_event_get_msg(e);
|
||||
if(lv_msg_get_id(m) == MSG_UPDATE) {
|
||||
const int32_t * v = lv_msg_get_payload(m);
|
||||
lv_slider_set_value(slider, *v, LV_ANIM_OFF);
|
||||
}
|
||||
const int32_t * v = lv_msg_get_payload(m);
|
||||
lv_slider_set_value(slider, *v, LV_ANIM_OFF);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user