@@ -94,7 +94,7 @@ BraccioClass::BraccioClass()
9494 * PUBLIC MEMBER FUNCTIONS
9595 **************************************************************************************/
9696
97- bool BraccioClass::begin (voidFuncPtr custom_menu, bool const wait_for_all_motor_connected)
97+ bool BraccioClass::begin (mbed::Callback< void ( void )> custom_menu, bool const wait_for_all_motor_connected)
9898{
9999 static int constexpr RS485_RX_PIN = 1 ;
100100
@@ -130,10 +130,12 @@ bool BraccioClass::begin(voidFuncPtr custom_menu, bool const wait_for_all_motor_
130130 while (!_PD_UFP.is_PPS_ready ()) { delay (10 ); }
131131 lv_obj_clean (lv_scr_act ());
132132
133- if (custom_menu)
134- custom_menu ();
135- else
136- lvgl_defaultMenu ();
133+ if (custom_menu) {
134+ _draw_menu = custom_menu;
135+ } else {
136+ _draw_menu = mbed::Callback<void (void )>(this , &BraccioClass::lvgl_defaultMenu);
137+ }
138+ drawMenu ();
137139
138140 _servos.begin ();
139141 _servos.setTime (SLOW);
@@ -237,11 +239,19 @@ int BraccioClass::getKey() {
237239 return 0 ;
238240}
239241
240- void BraccioClass::connectJoystickTo (lv_obj_t * obj)
242+ static BraccioClass* _braccio_static_instance = nullptr ;
243+ void BraccioClass::onJoystickEvent (lv_event_t * e) {
244+ mbed::ScopedLock<rtos::Mutex> lock (_braccio_static_instance->_display_mtx );
245+ _braccio_static_instance->event_cb (e);
246+ }
247+
248+ void BraccioClass::connectJoystickTo (lv_obj_t * obj, lv_event_cb_t _event_cb)
241249{
242- mbed::ScopedLock<rtos::Mutex> lock (_display_mtx);
243250 lv_group_add_obj (_lvgl_p_obj_group, obj);
244251 lv_indev_set_group (_lvgl_kb_indev, _lvgl_p_obj_group);
252+ event_cb = _event_cb;
253+ _braccio_static_instance = this ;
254+ lv_obj_add_event_cb (obj, &(BraccioClass::onJoystickEvent), LV_EVENT_ALL, NULL );
245255}
246256
247257void BraccioClass::lvgl_disp_flush (lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p)
@@ -424,8 +434,9 @@ void BraccioClass::display_thread_func()
424434{
425435 for (;; delay (LV_DISP_DEF_REFR_PERIOD))
426436 {
427- mbed::ScopedLock<rtos::Mutex> lock (_display_mtx );
437+ _display_mtx. lock ();
428438 lv_task_handler ();
439+ _display_mtx.unlock ();
429440 lv_tick_inc (LV_DISP_DEF_REFR_PERIOD);
430441 }
431442}
@@ -465,10 +476,13 @@ void BraccioClass::lvgl_pleaseConnectPower()
465476 lv_obj_set_pos (label1, 0 , 0 );
466477}
467478
479+ void BraccioClass::drawMenu () {
480+ mbed::ScopedLock<rtos::Mutex> lock (_display_mtx);
481+ _draw_menu ();
482+ }
483+
468484void BraccioClass::lvgl_defaultMenu ()
469485{
470- mbed::ScopedLock<rtos::Mutex> lock (_display_mtx);
471-
472486 lv_style_set_text_font (&_lv_style, &lv_font_montserrat_32);
473487 lv_obj_t * label1 = lv_label_create (lv_scr_act ());
474488 lv_obj_add_style (label1, &_lv_style, 0 );
0 commit comments