diff --git a/src/Braccio++.cpp b/src/Braccio++.cpp index 2440967..5cca79d 100644 --- a/src/Braccio++.cpp +++ b/src/Braccio++.cpp @@ -25,6 +25,7 @@ BraccioClass::BraccioClass() , _motors_connected_mtx{} , _motors_connected_thd{} , _customMenu{nullptr} +, _gfx{} { } @@ -120,10 +121,10 @@ bool BraccioClass::begin(voidFuncPtr customMenu) lv_style_init(&_lv_style); - gfx.init(); - gfx.setRotation(4); - gfx.fillScreen(TFT_WHITE); - gfx.setAddrWindow(0, 0, 240, 240); + _gfx.init(); + _gfx.setRotation(4); + _gfx.fillScreen(TFT_WHITE); + _gfx.setAddrWindow(0, 0, 240, 240); p_objGroup = lv_group_create(); lv_group_set_default(p_objGroup); @@ -232,6 +233,19 @@ void BraccioClass::connectJoystickTo(lv_obj_t* obj) { lv_indev_set_group(kb_indev, p_objGroup); } +void BraccioClass::lvgl_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p) +{ + uint32_t w = (area->x2 - area->x1 + 1); + uint32_t h = (area->y2 - area->y1 + 1); + + _gfx.startWrite(); + _gfx.setAddrWindow(area->x1, area->y1, w, h); + _gfx.pushColors(&color_p->full, w * h, true); + _gfx.endWrite(); + + lv_disp_flush_ready(disp); +} + void BraccioClass::pd_thread() { start_pd_burst = millis(); size_t last_time_ask_pps = 0; @@ -374,15 +388,7 @@ int BraccioClass::getKey() { /* Display flushing */ extern "C" void braccio_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p) { - uint32_t w = (area->x2 - area->x1 + 1); - uint32_t h = (area->y2 - area->y1 + 1); - - Braccio.gfx.startWrite(); - Braccio.gfx.setAddrWindow(area->x1, area->y1, w, h); - Braccio.gfx.pushColors(&color_p->full, w * h, true); - Braccio.gfx.endWrite(); - - lv_disp_flush_ready(disp); + Braccio.lvgl_disp_flush(disp, area, color_p); } /* Reading input device (simulated encoder here) */ diff --git a/src/Braccio++.h b/src/Braccio++.h index 1ca2c37..f5f9fcc 100644 --- a/src/Braccio++.h +++ b/src/Braccio++.h @@ -67,13 +67,13 @@ class BraccioClass inline bool isJoystickPressed_DOWN() { return (digitalRead(BTN_DOWN) == LOW); } inline bool isButtonPressed_ENTER() { return (digitalRead(BTN_ENTER) == LOW); } - TFT_eSPI gfx = TFT_eSPI(); - static BraccioClass& get_default_instance() { static BraccioClass dev; return dev; } + void lvgl_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p); + protected: // ioexpander APIs void digitalWrite(int pin, uint8_t value); @@ -114,6 +114,7 @@ class BraccioClass const int BTN_SEL = A0; const int BTN_ENTER = A1; + TFT_eSPI _gfx; lv_disp_drv_t disp_drv; lv_indev_drv_t indev_drv; lv_disp_draw_buf_t disp_buf;