6
6
7
7
#include " mbed.h"
8
8
9
- void my_print ( const char * dsc )
9
+ #if LV_USE_LOG
10
+ void lvgl_my_print (const char * dsc)
10
11
{
11
- Serial.println (dsc);
12
+ Serial.println (dsc);
12
13
}
14
+ #endif /* #if LV_USE_LOG */
15
+
16
+ extern " C" {
17
+ void braccio_disp_flush (lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p);
18
+ void braccio_read_keypad (lv_indev_drv_t * indev, lv_indev_data_t * data);
19
+ };
13
20
14
21
using namespace std ::chrono_literals;
15
22
16
23
BraccioClass::BraccioClass ()
17
24
: serial485{Serial1, 0 , 7 , 8 } /* TX, DE, RE */
18
25
, servos{serial485}
19
26
, PD_UFP{PD_LOG_LEVEL_VERBOSE}
20
- , expander{TCA6424A_ADDRESS_ADDR_HIGH}
21
- , bl{}
22
- , _display_thd{}
27
+ , _expander{TCA6424A_ADDRESS_ADDR_HIGH}
23
28
, _is_ping_allowed{true }
24
29
, _is_motor_connected{false }
25
30
, _motors_connected_mtx{}
26
31
, _motors_connected_thd{}
27
- , _customMenu{ nullptr }
32
+ , _bl{ }
28
33
, _gfx{}
34
+ , _lvgl_disp_drv{}
35
+ , _lvgl_indev_drv{}
36
+ , _lvgl_disp_buf{}
37
+ , _lvgl_draw_buf{}
38
+ , _lvgl_p_obj_group{nullptr }
39
+ , _lvgl_kb_indev{nullptr }
40
+ , _display_thd{}
29
41
{
30
42
31
43
}
32
44
33
- bool BraccioClass::begin (voidFuncPtr customMenu )
45
+ bool BraccioClass::begin (voidFuncPtr custom_menu )
34
46
{
35
47
Wire.begin ();
36
48
Serial.begin (115200 );
@@ -57,33 +69,33 @@ bool BraccioClass::begin(voidFuncPtr customMenu)
57
69
SPI.begin ();
58
70
59
71
i2c_mutex.lock ();
60
- bl .begin ();
61
- if (bl .getChipID () != 0xCE ) {
72
+ _bl .begin ();
73
+ if (_bl .getChipID () != 0xCE ) {
62
74
return false ;
63
75
}
64
- bl .setColor (red);
76
+ _bl .setColor (red);
65
77
66
- int ret = expander .testConnection ();
78
+ int ret = _expander .testConnection ();
67
79
68
80
if (ret == false ) {
69
81
return ret;
70
82
}
71
83
72
84
for (int i = 0 ; i < 14 ; i++) {
73
- expander .setPinDirection (i, 0 );
85
+ _expander .setPinDirection (i, 0 );
74
86
}
75
87
76
88
// Set SLEW to low
77
- expander .setPinDirection (21 , 0 ); // P25 = 8 * 2 + 5
78
- expander .writePin (21 , 0 );
89
+ _expander .setPinDirection (21 , 0 ); // P25 = 8 * 2 + 5
90
+ _expander .writePin (21 , 0 );
79
91
80
92
// Set TERM to HIGH (default)
81
- expander .setPinDirection (19 , 0 ); // P23 = 8 * 2 + 3
82
- expander .writePin (19 , 1 );
93
+ _expander .setPinDirection (19 , 0 ); // P23 = 8 * 2 + 3
94
+ _expander .writePin (19 , 1 );
83
95
84
- expander .setPinDirection (18 , 0 ); // P22 = 8 * 2 + 2
85
- expander .writePin (18 , 0 ); // reset LCD
86
- expander .writePin (18 , 1 ); // LCD out of reset
96
+ _expander .setPinDirection (18 , 0 ); // P22 = 8 * 2 + 2
97
+ _expander .writePin (18 , 0 ); // reset LCD
98
+ _expander .writePin (18 , 1 ); // LCD out of reset
87
99
88
100
/* Set all motor status LEDs to red. */
89
101
for (int id = SmartServoClass::MIN_MOTOR_ID; id <= SmartServoClass::MAX_MOTOR_ID; id++) {
@@ -99,25 +111,25 @@ bool BraccioClass::begin(voidFuncPtr customMenu)
99
111
pinMode (BTN_ENTER, INPUT_PULLUP);
100
112
101
113
#if LV_USE_LOG
102
- lv_log_register_print_cb ( my_print );
114
+ lv_log_register_print_cb (lvgl_my_print );
103
115
#endif
104
116
105
117
lv_init ();
106
118
107
- lv_disp_draw_buf_init (&disp_buf, buf , NULL , 240 * 240 / 10 );
119
+ lv_disp_draw_buf_init (&_lvgl_disp_buf, _lvgl_draw_buf , NULL , LVGL_DRAW_BUFFER_SIZE );
108
120
109
121
/* Initialize the display*/
110
- lv_disp_drv_init (&disp_drv );
111
- disp_drv .hor_res = 240 ;
112
- disp_drv .ver_res = 240 ;
113
- disp_drv .flush_cb = braccio_disp_flush;
114
- disp_drv .draw_buf = &disp_buf ;
115
- lv_disp_drv_register (&disp_drv );
116
-
117
- lv_indev_drv_init (&indev_drv );
118
- indev_drv .type = LV_INDEV_TYPE_KEYPAD;
119
- indev_drv .read_cb = read_keypad ;
120
- kb_indev = lv_indev_drv_register (&indev_drv );
122
+ lv_disp_drv_init (&_lvgl_disp_drv );
123
+ _lvgl_disp_drv .hor_res = 240 ;
124
+ _lvgl_disp_drv .ver_res = 240 ;
125
+ _lvgl_disp_drv .flush_cb = braccio_disp_flush;
126
+ _lvgl_disp_drv .draw_buf = &_lvgl_disp_buf ;
127
+ lv_disp_drv_register (&_lvgl_disp_drv );
128
+
129
+ lv_indev_drv_init (&_lvgl_indev_drv );
130
+ _lvgl_indev_drv .type = LV_INDEV_TYPE_KEYPAD;
131
+ _lvgl_indev_drv .read_cb = braccio_read_keypad ;
132
+ _lvgl_kb_indev = lv_indev_drv_register (&_lvgl_indev_drv );
121
133
122
134
lv_style_init (&_lv_style);
123
135
@@ -126,8 +138,8 @@ bool BraccioClass::begin(voidFuncPtr customMenu)
126
138
_gfx.fillScreen (TFT_WHITE);
127
139
_gfx.setAddrWindow (0 , 0 , 240 , 240 );
128
140
129
- p_objGroup = lv_group_create ();
130
- lv_group_set_default (p_objGroup );
141
+ _lvgl_p_obj_group = lv_group_create ();
142
+ lv_group_set_default (_lvgl_p_obj_group );
131
143
132
144
_display_thd.start (mbed::callback (this , &BraccioClass::display_thread_func));
133
145
@@ -154,11 +166,10 @@ bool BraccioClass::begin(voidFuncPtr customMenu)
154
166
check_power_func ();
155
167
lv_obj_clean (lv_scr_act ());
156
168
157
- if (customMenu) {
158
- customMenu ();
159
- } else {
160
- defaultMenu ();
161
- }
169
+ if (custom_menu)
170
+ custom_menu ();
171
+ else
172
+ lvgl_defaultMenu ();
162
173
163
174
servos.begin ();
164
175
servos.setTime (SmartServoClass::BROADCAST, SLOW);
@@ -228,9 +239,10 @@ void BraccioClass::positions(float & a1, float & a2, float & a3, float & a4, flo
228
239
a6 = servos.getPosition (6 );
229
240
}
230
241
231
- void BraccioClass::connectJoystickTo (lv_obj_t * obj) {
232
- lv_group_add_obj (p_objGroup, obj);
233
- lv_indev_set_group (kb_indev, p_objGroup);
242
+ void BraccioClass::connectJoystickTo (lv_obj_t * obj)
243
+ {
244
+ lv_group_add_obj (_lvgl_p_obj_group, obj);
245
+ lv_indev_set_group (_lvgl_kb_indev, _lvgl_p_obj_group);
234
246
}
235
247
236
248
void BraccioClass::lvgl_disp_flush (lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p)
@@ -282,10 +294,10 @@ void BraccioClass::display_thread_func()
282
294
}
283
295
}
284
296
285
- #include < extra/libs/gif/lv_gif.h>
286
-
287
297
void BraccioClass::lvgl_splashScreen (unsigned long const duration_ms, std::function<void ()> check_power_func)
288
298
{
299
+ extern const lv_img_dsc_t img_bulb_gif;
300
+
289
301
LV_IMG_DECLARE (img_bulb_gif);
290
302
lv_obj_t * img = lv_gif_create (lv_scr_act ());
291
303
lv_gif_set_src (img, &img_bulb_gif);
@@ -314,7 +326,7 @@ void BraccioClass::lvgl_pleaseConnectPower()
314
326
lv_obj_set_pos (label1, 0 , 0 );
315
327
}
316
328
317
- void BraccioClass::defaultMenu ()
329
+ void BraccioClass::lvgl_defaultMenu ()
318
330
{
319
331
// TODO: create a meaningful default menu
320
332
lv_style_set_text_font (&_lv_style, &lv_font_montserrat_32);
@@ -392,7 +404,7 @@ extern "C" void braccio_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, l
392
404
}
393
405
394
406
/* Reading input device (simulated encoder here) */
395
- extern " C" void read_keypad (lv_indev_drv_t * drv, lv_indev_data_t * data)
407
+ extern " C" void braccio_read_keypad (lv_indev_drv_t * drv, lv_indev_data_t * data)
396
408
{
397
409
static uint32_t last_key = 0 ;
398
410
0 commit comments