66
77#include " mbed.h"
88
9- void my_print ( const char * dsc )
9+ #if LV_USE_LOG
10+ void lvgl_my_print (const char * dsc)
1011{
11- Serial.println (dsc);
12+ Serial.println (dsc);
1213}
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+ };
1320
1421using namespace std ::chrono_literals;
1522
1623BraccioClass::BraccioClass ()
1724: serial485{Serial1, 0 , 7 , 8 } /* TX, DE, RE */
1825, servos{serial485}
1926, PD_UFP{PD_LOG_LEVEL_VERBOSE}
20- , expander{TCA6424A_ADDRESS_ADDR_HIGH}
21- , bl{}
22- , _display_thd{}
27+ , _expander{TCA6424A_ADDRESS_ADDR_HIGH}
2328, _is_ping_allowed{true }
2429, _is_motor_connected{false }
2530, _motors_connected_mtx{}
2631, _motors_connected_thd{}
27- , _customMenu{ nullptr }
32+ , _bl{ }
2833, _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{}
2941{
3042
3143}
3244
33- bool BraccioClass::begin (voidFuncPtr customMenu )
45+ bool BraccioClass::begin (voidFuncPtr custom_menu )
3446{
3547 Wire.begin ();
3648 Serial.begin (115200 );
@@ -57,33 +69,33 @@ bool BraccioClass::begin(voidFuncPtr customMenu)
5769 SPI.begin ();
5870
5971 i2c_mutex.lock ();
60- bl .begin ();
61- if (bl .getChipID () != 0xCE ) {
72+ _bl .begin ();
73+ if (_bl .getChipID () != 0xCE ) {
6274 return false ;
6375 }
64- bl .setColor (red);
76+ _bl .setColor (red);
6577
66- int ret = expander .testConnection ();
78+ int ret = _expander .testConnection ();
6779
6880 if (ret == false ) {
6981 return ret;
7082 }
7183
7284 for (int i = 0 ; i < 14 ; i++) {
73- expander .setPinDirection (i, 0 );
85+ _expander .setPinDirection (i, 0 );
7486 }
7587
7688 // 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 );
7991
8092 // 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 );
8395
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
8799
88100 /* Set all motor status LEDs to red. */
89101 for (int id = SmartServoClass::MIN_MOTOR_ID; id <= SmartServoClass::MAX_MOTOR_ID; id++) {
@@ -99,25 +111,25 @@ bool BraccioClass::begin(voidFuncPtr customMenu)
99111 pinMode (BTN_ENTER, INPUT_PULLUP);
100112
101113#if LV_USE_LOG
102- lv_log_register_print_cb ( my_print );
114+ lv_log_register_print_cb (lvgl_my_print );
103115#endif
104116
105117 lv_init ();
106118
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 );
108120
109121 /* 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 );
121133
122134 lv_style_init (&_lv_style);
123135
@@ -126,8 +138,8 @@ bool BraccioClass::begin(voidFuncPtr customMenu)
126138 _gfx.fillScreen (TFT_WHITE);
127139 _gfx.setAddrWindow (0 , 0 , 240 , 240 );
128140
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 );
131143
132144 _display_thd.start (mbed::callback (this , &BraccioClass::display_thread_func));
133145
@@ -154,11 +166,10 @@ bool BraccioClass::begin(voidFuncPtr customMenu)
154166 check_power_func ();
155167 lv_obj_clean (lv_scr_act ());
156168
157- if (customMenu) {
158- customMenu ();
159- } else {
160- defaultMenu ();
161- }
169+ if (custom_menu)
170+ custom_menu ();
171+ else
172+ lvgl_defaultMenu ();
162173
163174 servos.begin ();
164175 servos.setTime (SmartServoClass::BROADCAST, SLOW);
@@ -228,9 +239,10 @@ void BraccioClass::positions(float & a1, float & a2, float & a3, float & a4, flo
228239 a6 = servos.getPosition (6 );
229240}
230241
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);
234246}
235247
236248void 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()
282294 }
283295}
284296
285- #include < extra/libs/gif/lv_gif.h>
286-
287297void BraccioClass::lvgl_splashScreen (unsigned long const duration_ms, std::function<void ()> check_power_func)
288298{
299+ extern const lv_img_dsc_t img_bulb_gif;
300+
289301 LV_IMG_DECLARE (img_bulb_gif);
290302 lv_obj_t * img = lv_gif_create (lv_scr_act ());
291303 lv_gif_set_src (img, &img_bulb_gif);
@@ -314,7 +326,7 @@ void BraccioClass::lvgl_pleaseConnectPower()
314326 lv_obj_set_pos (label1, 0 , 0 );
315327}
316328
317- void BraccioClass::defaultMenu ()
329+ void BraccioClass::lvgl_defaultMenu ()
318330{
319331 // TODO: create a meaningful default menu
320332 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
392404}
393405
394406/* 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)
396408{
397409 static uint32_t last_key = 0 ;
398410
0 commit comments