Skip to content

Commit fe8cf18

Browse files
committed
feat(drivers): update1
1 parent d4bfd88 commit fe8cf18

File tree

6 files changed

+75
-74
lines changed

6 files changed

+75
-74
lines changed

src/board/esp_panel_board.cpp

Lines changed: 48 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -39,80 +39,71 @@ bool Board::init(void)
3939
std::shared_ptr<drivers::LCD> lcd_device = nullptr;
4040
if (_config.flags.use_lcd) {
4141
ESP_UTILS_LOGI("Initialize LCD");
42-
std::shared_ptr<drivers::Bus> lcd_bus = nullptr;
43-
ESP_UTILS_CHECK_EXCEPTION_RETURN(
44-
(lcd_bus = drivers::BusFactory::create(_config.lcd.bus_type, _config.lcd.bus_config)),
45-
false, "Create LCD bus failed"
46-
);
42+
std::shared_ptr<drivers::Bus> lcd_bus = drivers::BusFactory::create(
43+
_config.lcd.bus_type, _config.lcd.bus_config);
44+
ESP_UTILS_CHECK_NULL_RETURN(lcd_bus, false, "Create LCD bus failed");
4745
ESP_UTILS_CHECK_FALSE_RETURN(lcd_bus->init(), false, "LCD bus init failed");
48-
// #if ESP_PANEL_BOARD_USE_DEFAULT && defined(ESP_PANEL_BOARD_LCD_CONTROLLER)
49-
// if (_flags.use_default_config) {
50-
// ESP_UTILS_CHECK_EXCEPTION_RETURN(
51-
// (lcd_device = esp_utils::make_shared<LCD_NAME_CLASS(ESP_PANEL_BOARD_LCD_CONTROLLER)>(
52-
// lcd_bus, _config.lcd.device_config
53-
// )), false, "Create LCD device failed"
54-
// );
55-
// }
56-
// #endif
57-
// if (!_flags.use_default_config) {
58-
lcd_device = drivers::LCD_Factory::create(_config.lcd.device_name, lcd_bus, _config.lcd.device_config);
59-
ESP_UTILS_CHECK_NULL_RETURN(lcd_device, false, "Create LCD device failed");
60-
// }
46+
#if ESP_PANEL_BOARD_USE_DEFAULT && defined(ESP_PANEL_BOARD_LCD_CONTROLLER)
47+
if (_flags.use_default_config) {
48+
ESP_UTILS_CHECK_EXCEPTION_RETURN(
49+
(lcd_device = esp_utils::make_shared<LCD_NAME_CLASS(ESP_PANEL_BOARD_LCD_CONTROLLER)>(
50+
lcd_bus, _config.lcd.device_config
51+
)), false, "Create LCD device failed"
52+
);
53+
}
54+
#endif // ESP_PANEL_BOARD_LCD_CONTROLLER
55+
if (!_flags.use_default_config) {
56+
lcd_device = drivers::LCD_Factory::create(_config.lcd.device_name, lcd_bus, _config.lcd.device_config);
57+
ESP_UTILS_CHECK_NULL_RETURN(lcd_device, false, "Create LCD device failed");
58+
}
6159
}
6260

6361
std::shared_ptr<drivers::Touch> touch_device = nullptr;
6462
if (_config.flags.use_touch) {
6563
ESP_UTILS_LOGI("Initialize touch");
66-
std::shared_ptr<drivers::Bus> touch_bus = nullptr;
67-
ESP_UTILS_CHECK_EXCEPTION_RETURN(
68-
(touch_bus = drivers::BusFactory::create(_config.touch.bus_type, _config.touch.bus_config)),
69-
false, "Create touch bus failed"
70-
);
64+
std::shared_ptr<drivers::Bus> touch_bus = drivers::BusFactory::create(
65+
_config.touch.bus_type, _config.touch.bus_config);
66+
ESP_UTILS_CHECK_NULL_RETURN(touch_bus, false, "Create touch bus failed");
7167
ESP_UTILS_CHECK_FALSE_RETURN(touch_bus->init(), false, "Touch bus init failed");
72-
// #if ESP_PANEL_BOARD_USE_DEFAULT && defined(ESP_PANEL_BOARD_TOUCH_CONTROLLER)
73-
// if (_flags.use_default_config) {
74-
// ESP_UTILS_CHECK_EXCEPTION_RETURN(
75-
// (touch_device = esp_utils::make_shared<TOUCH_NAME_CLASS(ESP_PANEL_BOARD_TOUCH_CONTROLLER)>(
76-
// touch_bus, _config.touch.device_config
77-
// )), false, "Create LCD device failed"
78-
// );
79-
// }
80-
// #endif
81-
// if (!_flags.use_default_config) {
82-
ESP_UTILS_CHECK_EXCEPTION_RETURN(
83-
(touch_device = drivers::TouchFactory::create(
84-
_config.touch.device_name, touch_bus, _config.touch.device_config
85-
)), false, "Create touch device failed"
86-
);
87-
// }
68+
#if ESP_PANEL_BOARD_USE_DEFAULT && defined(ESP_PANEL_BOARD_TOUCH_CONTROLLER)
69+
if (_flags.use_default_config) {
70+
ESP_UTILS_CHECK_EXCEPTION_RETURN(
71+
(touch_device = esp_utils::make_shared<TOUCH_NAME_CLASS(ESP_PANEL_BOARD_TOUCH_CONTROLLER)>(
72+
touch_bus, _config.touch.device_config
73+
)), false, "Create LCD device failed"
74+
);
75+
}
76+
#endif // ESP_PANEL_BOARD_TOUCH_CONTROLLER
77+
if (!_flags.use_default_config) {
78+
touch_device = drivers::TouchFactory::create(
79+
_config.touch.device_name, touch_bus, _config.touch.device_config
80+
);
81+
ESP_UTILS_CHECK_NULL_RETURN(touch_device, false, "Create touch device failed");
82+
}
8883
}
8984

9085
std::shared_ptr<drivers::Backlight> backlight = nullptr;
9186
if (_config.flags.use_backlight) {
9287
ESP_UTILS_LOGI("Initialize Backlight");
93-
#if ESP_PANEL_BOARD_BACKLIGHT_TYPE == ESP_PANEL_BACKLIGHT_TYPE_CUSTOM
94-
using BacklightConfig = drivers::BacklightCustom::Config;
95-
ESP_UTILS_CHECK_FALSE_RETURN(
96-
std::holds_alternative<BacklightConfig>(_config.backlight.config), false,
97-
"Backlight config is not a custom backlight config"
98-
);
99-
auto &config = std::get<BacklightConfig>(_config.backlight.config);
100-
config.user_data = this;
101-
#endif // ESP_PANEL_BOARD_BACKLIGHT_TYPE
102-
ESP_UTILS_CHECK_EXCEPTION_RETURN(
103-
(backlight = drivers::BacklightFactory::create(
104-
_config.backlight.type, &_config.backlight.config
105-
)), false, "Create backlight device failed"
106-
);
88+
// If the backlight is a custom backlight, the user data should be set to the board instance `this`
89+
if (_config.backlight.type == ESP_PANEL_BACKLIGHT_TYPE_CUSTOM) {
90+
using BacklightConfig = drivers::BacklightCustom::Config;
91+
ESP_UTILS_CHECK_FALSE_RETURN(
92+
std::holds_alternative<BacklightConfig>(_config.backlight.config), false,
93+
"Backlight config is not a custom backlight config"
94+
);
95+
auto &config = std::get<BacklightConfig>(_config.backlight.config);
96+
config.user_data = this;
97+
}
98+
backlight = drivers::BacklightFactory::create(_config.backlight.type, _config.backlight.config);
99+
ESP_UTILS_CHECK_NULL_RETURN(backlight, false, "Create backlight device failed");
107100
}
108101

109102
std::shared_ptr<drivers::IO_Expander> io_expander = nullptr;
110103
if (_config.flags.use_io_expander) {
111104
ESP_UTILS_LOGI("Initialize IO Expander");
112-
ESP_UTILS_CHECK_EXCEPTION_RETURN(
113-
(io_expander = drivers::IO_ExpanderFactory::create(_config.io_expander.name, _config.io_expander.config)),
114-
false, "Create IO expander device failed"
115-
);
105+
io_expander = drivers::IO_ExpanderFactory::create(_config.io_expander.name, _config.io_expander.config);
106+
ESP_UTILS_CHECK_NULL_RETURN(io_expander, false, "Create IO expander device failed");
116107
ESP_UTILS_CHECK_FALSE_RETURN(io_expander->init(), false, "IO expander init failed");
117108
}
118109

src/board/esp_panel_board_config.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,13 +187,15 @@ const BoardConfig BOARD_DEFAULT_CONFIG = {
187187
.scl_io_num = ESP_PANEL_BOARD_TOUCH_I2C_IO_SCL,
188188
.sda_pullup_en = ESP_PANEL_BOARD_TOUCH_I2C_SDA_PULLUP,
189189
.scl_pullup_en = ESP_PANEL_BOARD_TOUCH_I2C_SCL_PULLUP,
190-
.clk_speed = 400000,
190+
.clk_speed = ESP_PANEL_BOARD_TOUCH_I2C_CLK_HZ,
191191
#endif // ESP_PANEL_BOARD_TOUCH_BUS_SKIP_INIT_HOST
192192
// Panel IO
193193
#if ESP_PANEL_BOARD_TOUCH_I2C_ADDRESS == 0
194194
.io_config = ESP_PANEL_TOUCH_I2C_PANEL_IO_CONFIG(ESP_PANEL_BOARD_TOUCH_CONTROLLER),
195195
#else
196-
.io_config = ESP_PANEL_TOUCH_I2C_PANEL_IO_CONFIG_WITH_ADDR(ESP_PANEL_BOARD_TOUCH_CONTROLLER, ESP_PANEL_BOARD_TOUCH_I2C_ADDRESS),
196+
.io_config = ESP_PANEL_TOUCH_I2C_PANEL_IO_CONFIG_WITH_ADDR(
197+
ESP_PANEL_BOARD_TOUCH_CONTROLLER, ESP_PANEL_BOARD_TOUCH_I2C_ADDRESS
198+
),
197199
#endif // ESP_PANEL_BOARD_TOUCH_I2C_ADDRESS
198200
// Extra
199201
.skip_init_host = ESP_PANEL_BOARD_TOUCH_BUS_SKIP_INIT_HOST,
@@ -208,7 +210,9 @@ const BoardConfig BOARD_DEFAULT_CONFIG = {
208210
.sclk_io_num = ESP_PANEL_BOARD_LCD_SPI_IO_SCK,
209211
#endif // ESP_PANEL_BOARD_LCD_BUS_SKIP_INIT_HOST
210212
// Panel IO
211-
.io_config = ESP_PANEL_TOUCH_SPI_PANEL_IO_CONFIG(ESP_PANEL_BOARD_TOUCH_CONTROLLER, ESP_PANEL_BOARD_TOUCH_SPI_IO_CS),
213+
.io_config = ESP_PANEL_TOUCH_SPI_PANEL_IO_CONFIG(
214+
ESP_PANEL_BOARD_TOUCH_CONTROLLER, ESP_PANEL_BOARD_TOUCH_SPI_IO_CS
215+
),
212216
// Extra
213217
.skip_init_host = ESP_PANEL_BOARD_LCD_BUS_SKIP_INIT_HOST,
214218
.use_complete_io_config = true,
@@ -253,7 +257,8 @@ const BoardConfig BOARD_DEFAULT_CONFIG = {
253257
},
254258
#elif ESP_PANEL_BOARD_BACKLIGHT_TYPE == ESP_PANEL_BACKLIGHT_TYPE_CUSTOM
255259
.config = drivers::BacklightCustom::Config{
256-
.callback = [](uint8_t percent, void *user_data) ESP_PANEL_BOARD_BACKLIGHT_CUSTOM_FUNCTION(percent, user_data),
260+
.callback = [](uint8_t percent, void *user_data)
261+
ESP_PANEL_BOARD_BACKLIGHT_CUSTOM_FUNCTION(percent, user_data),
257262
.user_data = nullptr,
258263
},
259264
#endif // ESP_PANEL_BOARD_BACKLIGHT_TYPE

src/board/esp_panel_board_config.hpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
#pragma once
77

88
#include <string>
9-
#include <variant>
10-
#include "esp_panel_types.h"
119
#include "drivers/bus/esp_panel_bus.hpp"
1210
#include "drivers/lcd/esp_panel_lcd.hpp"
1311
#include "drivers/touch/esp_panel_touch.hpp"
@@ -54,11 +52,7 @@ struct BoardConfig {
5452
/* Backlight */
5553
struct {
5654
int type;
57-
std::variant<
58-
drivers::BacklightSwitchGPIO::Config,
59-
drivers::BacklightPWM_LEDC::Config,
60-
drivers::BacklightCustom::Config
61-
> config;
55+
drivers::BacklightFactory::Config config;
6256
struct {
6357
int idle_off: 1;
6458
} pre_process;

src/drivers/backlight/esp_panel_backlight.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@
1010
namespace esp_panel::drivers {
1111

1212
#define CREATE_FUNCTION(type_name) \
13-
[](const void *config) { \
13+
[](const Config &config) { \
1414
std::shared_ptr<Backlight> device = nullptr; \
15+
ESP_UTILS_CHECK_FALSE_RETURN(std::holds_alternative<Backlight ##type_name::Config>(config), device, \
16+
"Config is not a " #type_name " config" \
17+
); \
1518
ESP_UTILS_CHECK_EXCEPTION_RETURN( \
1619
(device = esp_utils::make_shared<Backlight ##type_name>( \
17-
*static_cast<const Backlight ##type_name::Config *>(config)) \
20+
std::get<Backlight ##type_name::Config>(config)) \
1821
), nullptr, "Create " #type_name " failed" \
1922
); \
2023
return device; \
@@ -32,7 +35,7 @@ BacklightFactory::_type_name_function_map = {
3235
ITEM_CONTROLLER(Custom),
3336
};
3437

35-
std::shared_ptr<Backlight> BacklightFactory::create(int type, const void *config)
38+
std::shared_ptr<Backlight> BacklightFactory::create(int type, const Config &config)
3639
{
3740
ESP_UTILS_LOGD("Param: name(%d), config(@%p)", type, &config);
3841

src/drivers/backlight/esp_panel_backlight.hpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <memory>
99
#include <unordered_map>
1010
#include <string>
11+
#include <variant>
1112
#include "esp_panel_types.h"
1213
#include "esp_panel_backlight_base.hpp"
1314
#include "esp_panel_backlight_custom.hpp"
@@ -18,12 +19,17 @@ namespace esp_panel::drivers {
1819

1920
class BacklightFactory {
2021
public:
21-
using CreateFunction = std::shared_ptr<Backlight> (*)(const void *config);
22+
using Config = std::variant <
23+
drivers::BacklightCustom::Config,
24+
drivers::BacklightPWM_LEDC::Config,
25+
drivers::BacklightSwitchGPIO::Config
26+
>;
27+
using CreateFunction = std::shared_ptr<Backlight> (*)(const Config &config);
2228

2329
BacklightFactory() = default;
2430
~BacklightFactory() = default;
2531

26-
static std::shared_ptr<Backlight> create(int type, const void *config);
32+
static std::shared_ptr<Backlight> create(int type, const Config &config);
2733

2834
private:
2935
static const std::unordered_map<int, std::pair<std::string, CreateFunction>> _type_name_function_map;

src/drivers/bus/esp_panel_bus.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ namespace esp_panel::drivers {
2323
class BusFactory {
2424
public:
2525
using Config = std::variant <
26-
BusI2C::Config, BusSPI::Config, BusQSPI::Config
26+
BusI2C::Config,
27+
BusSPI::Config,
28+
BusQSPI::Config
2729
#if SOC_LCD_RGB_SUPPORTED
2830
, BusRGB::Config
2931
#endif // SOC_LCD_RGB_SUPPORTED

0 commit comments

Comments
 (0)