@@ -94,7 +94,7 @@ BraccioClass::BraccioClass()
94
94
* PUBLIC MEMBER FUNCTIONS
95
95
**************************************************************************************/
96
96
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)
98
98
{
99
99
static int constexpr RS485_RX_PIN = 1 ;
100
100
@@ -130,10 +130,12 @@ bool BraccioClass::begin(voidFuncPtr custom_menu, bool const wait_for_all_motor_
130
130
while (!_PD_UFP.is_PPS_ready ()) { delay (10 ); }
131
131
lv_obj_clean (lv_scr_act ());
132
132
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 ();
137
139
138
140
_servos.begin ();
139
141
_servos.setTime (SLOW);
@@ -237,11 +239,19 @@ int BraccioClass::getKey() {
237
239
return 0 ;
238
240
}
239
241
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)
241
249
{
242
- mbed::ScopedLock<rtos::Mutex> lock (_display_mtx);
243
250
lv_group_add_obj (_lvgl_p_obj_group, obj);
244
251
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 );
245
255
}
246
256
247
257
void 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()
424
434
{
425
435
for (;; delay (LV_DISP_DEF_REFR_PERIOD))
426
436
{
427
- mbed::ScopedLock<rtos::Mutex> lock (_display_mtx );
437
+ _display_mtx. lock ();
428
438
lv_task_handler ();
439
+ _display_mtx.unlock ();
429
440
lv_tick_inc (LV_DISP_DEF_REFR_PERIOD);
430
441
}
431
442
}
@@ -465,10 +476,13 @@ void BraccioClass::lvgl_pleaseConnectPower()
465
476
lv_obj_set_pos (label1, 0 , 0 );
466
477
}
467
478
479
+ void BraccioClass::drawMenu () {
480
+ mbed::ScopedLock<rtos::Mutex> lock (_display_mtx);
481
+ _draw_menu ();
482
+ }
483
+
468
484
void BraccioClass::lvgl_defaultMenu ()
469
485
{
470
- mbed::ScopedLock<rtos::Mutex> lock (_display_mtx);
471
-
472
486
lv_style_set_text_font (&_lv_style, &lv_font_montserrat_32);
473
487
lv_obj_t * label1 = lv_label_create (lv_scr_act ());
474
488
lv_obj_add_style (label1, &_lv_style, 0 );
0 commit comments