How to access lv_meter_indicator from cb function

Hello and thank you for lvgl.

meter = lv_meter_create(lv_scr_act());
lv_meter_indicator_t * indic = lv_meter_add_needle_line(meter, scale, 12, lv_palette_main(LV_PALETTE_GREY), -30);

lv_obj_add_event_cb(
      meter,
      [](lv_event_t *e) {
        lv_obj_t *mete = lv_event_get_target(e);
        lv_msg_t *m = lv_event_get_msg(e);

        How to acess or update indic (or other lv_meter_indicator_t) value here?

      },
      LV_EVENT_MSG_RECEIVED, NULL);
  lv_msg_subsribe_obj(MSG_INDIC_UPDATE, meter, NULL);

You can make your lv_meter_indication_t* indic global,
or you pass the indic per user data when calling lv_obj_add_event_cb.
It’s the last parameter (in your example the NULL).

In your event call back function you can access the user data with the function lv_event_get_user_data.

1 Like

Thank you!
Solution with user data looks simple but no luck with it:

#define LV_USE_USER_DATA 1
static lv_meter_indicator_t * indic = lv_meter_add_needle_line(meter, scale, 12, lv_palette_main(LV_PALETTE_GREY), -30);

    lv_obj_add_event_cb(
      meter,
      [](lv_event_t *e) {
        lv_obj_t * m = lv_event_get_target(e);
        lv_meter_indicator_t * i = (lv_meter_indicator_t *)lv_event_get_user_data(e);
        lv_msg_t *msg = lv_event_get_msg(e);
        const char *v = (const char *)lv_msg_get_payload(msg);
        const uint16_t value = atoi(v);
            Serial.print(String(value));
//            lv_meter_set_indicator_value(m, i, value);

      },
      LV_EVENT_MSG_RECEIVED, &indic);
  lv_msg_subsribe_obj(MSG_INDIC_UPDATE, meter, &indic);

Board (ESP32S3) rebooting on lv_meter_set_indicator_value(m, i, value);

Not &indic but indic

1 Like

Thank you a lot!