@@ -42,8 +42,8 @@ extern "C"
42
42
{
43
43
void braccio_disp_flush (lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p);
44
44
void braccio_read_keypad (lv_indev_drv_t * indev, lv_indev_data_t * data);
45
- void braccio_unlock_pd_semaphore_irq ();
46
- void braccio_unlock_pd_semaphore ();
45
+ void braccio_onPowerIrqEvent ();
46
+ void braccio_onPowerTimerEvent ();
47
47
};
48
48
49
49
/* *************************************************************************************
@@ -77,7 +77,6 @@ BraccioClass::BraccioClass()
77
77
, _display_thd{}
78
78
, _pd_events{}
79
79
, _pd_timer{}
80
- , _start_pd_burst{0xFFFFFFFF }
81
80
, _pd_thd{osPriorityHigh}
82
81
{
83
82
@@ -99,9 +98,9 @@ bool BraccioClass::begin(voidFuncPtr custom_menu)
99
98
pinMode (RS485_RX_PIN, INPUT_PULLUP);
100
99
101
100
_PD_UFP.init_PPS (_i2c_mtx, PPS_V (7.2 ), PPS_A (2.0 ));
101
+ attachInterrupt (PIN_FUSB302_INT, braccio_onPowerIrqEvent, FALLING);
102
102
_pd_thd.start (mbed::callback (this , &BraccioClass::pd_thread_func));
103
- attachInterrupt (PIN_FUSB302_INT, braccio_unlock_pd_semaphore_irq, FALLING);
104
- _pd_timer.attach (braccio_unlock_pd_semaphore, 10ms);
103
+ _pd_timer.attach (braccio_onPowerTimerEvent, 10ms);
105
104
106
105
button_init ();
107
106
@@ -112,26 +111,15 @@ bool BraccioClass::begin(voidFuncPtr custom_menu)
112
111
lvgl_init ();
113
112
_display_thd.start (mbed::callback (this , &BraccioClass::display_thread_func));
114
113
115
-
116
- auto check_power_func = [this ]()
117
- {
118
- if (!_PD_UFP.is_PPS_ready ())
119
- {
120
- _PD_UFP.print_status (Serial);
121
- _PD_UFP.set_PPS (PPS_V (7.2 ), PPS_A (2.0 ));
122
- delay (10 );
123
- }
124
- };
125
-
126
- lvgl_splashScreen (2000 , check_power_func);
114
+ lvgl_splashScreen (2000 );
127
115
lv_obj_clean (lv_scr_act ());
128
116
129
117
if (!_PD_UFP.is_PPS_ready ())
130
118
lvgl_pleaseConnectPower ();
131
119
132
120
/* Loop forever, if no power is attached. */
133
- while (!_PD_UFP.is_PPS_ready ())
134
- check_power_func ();
121
+ while (!_PD_UFP.is_PPS_ready ()) { }
122
+ /* check_power_func(); */
135
123
lv_obj_clean (lv_scr_act ());
136
124
137
125
if (custom_menu)
@@ -248,15 +236,14 @@ void BraccioClass::lvgl_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, l
248
236
lv_disp_flush_ready (disp);
249
237
}
250
238
251
- void BraccioClass::unlock_pd_semaphore_irq ()
239
+ void BraccioClass::onPowerIrqEvent ()
252
240
{
253
- _start_pd_burst = millis ();
254
- _pd_events.set (2 );
241
+ _pd_events.set (PD_IRQ_EVENT_FLAG);
255
242
}
256
243
257
- void BraccioClass::unlock_pd_semaphore ()
244
+ void BraccioClass::onPowerTimerEvent ()
258
245
{
259
- _pd_events.set (1 );
246
+ _pd_events.set (PD_TIMER_EVENT_FLAG );
260
247
}
261
248
262
249
/* *************************************************************************************
@@ -411,7 +398,7 @@ void BraccioClass::display_thread_func()
411
398
}
412
399
}
413
400
414
- void BraccioClass::lvgl_splashScreen (unsigned long const duration_ms, std::function< void ()> check_power_func )
401
+ void BraccioClass::lvgl_splashScreen (unsigned long const duration_ms)
415
402
{
416
403
extern const lv_img_dsc_t img_bulb_gif;
417
404
@@ -420,14 +407,8 @@ void BraccioClass::lvgl_splashScreen(unsigned long const duration_ms, std::funct
420
407
lv_gif_set_src (img, &img_bulb_gif);
421
408
lv_obj_align (img, LV_ALIGN_CENTER, 0 , 0 );
422
409
423
- /* Wait until the splash screen duration is over.
424
- * Meanwhile use the wait time for checking the
425
- * power.
426
- */
427
- for (unsigned long const start = millis (); millis () - start < duration_ms;)
428
- {
429
- check_power_func ();
430
- }
410
+ /* Wait until the splash screen duration is over. */
411
+ for (unsigned long const start = millis (); millis () - start < duration_ms; delay (10 )) { }
431
412
432
413
lv_obj_del (img);
433
414
}
@@ -457,27 +438,32 @@ void BraccioClass::lvgl_defaultMenu()
457
438
458
439
void BraccioClass::pd_thread_func ()
459
440
{
460
- _start_pd_burst = millis ();
461
441
size_t last_time_ask_pps = 0 ;
462
442
463
443
for (;;)
464
444
{
465
- auto ret = _pd_events.wait_any (0xFF );
466
- if ((ret & 1 ) && (millis () - _start_pd_burst > 1000 )) {
445
+ uint32_t const flags = _pd_events.wait_any (0xFF );
446
+
447
+ if (flags & PD_IRQ_EVENT_FLAG)
448
+ {
467
449
_pd_timer.detach ();
468
- _pd_timer.attach (braccio_unlock_pd_semaphore, 5s );
450
+ _pd_timer.attach (braccio_onPowerTimerEvent, 10ms );
469
451
}
470
- if (ret & 2 ) {
452
+
453
+ if (flags & PD_TIMER_EVENT_FLAG)
454
+ {
471
455
_pd_timer.detach ();
472
- _pd_timer.attach (braccio_unlock_pd_semaphore, 50ms );
456
+ _pd_timer.attach (braccio_onPowerTimerEvent, 10ms );
473
457
}
474
- if (millis () - last_time_ask_pps > 5000 ) {
458
+
459
+ _PD_UFP.run ();
460
+ _PD_UFP.print_status (Serial);
461
+
462
+ if ((millis () - last_time_ask_pps) > 5000 )
463
+ {
475
464
_PD_UFP.set_PPS (PPS_V (7.2 ), PPS_A (2.0 ));
476
465
last_time_ask_pps = millis ();
477
466
}
478
- _PD_UFP.run ();
479
- if (_PD_UFP.is_power_ready () && _PD_UFP.is_PPS_ready ()) {
480
- }
481
467
}
482
468
}
483
469
@@ -538,12 +524,12 @@ extern "C" void braccio_read_keypad(lv_indev_drv_t * drv, lv_indev_data_t* data)
538
524
data->key = last_key;
539
525
}
540
526
541
- void braccio_unlock_pd_semaphore_irq ()
527
+ void braccio_onPowerIrqEvent ()
542
528
{
543
- Braccio.unlock_pd_semaphore_irq ();
529
+ Braccio.onPowerIrqEvent ();
544
530
}
545
531
546
- void braccio_unlock_pd_semaphore ()
532
+ void braccio_onPowerTimerEvent ()
547
533
{
548
- Braccio.unlock_pd_semaphore ();
534
+ Braccio.onPowerTimerEvent ();
549
535
}
0 commit comments