删除了多余的屏幕操控任务
This commit is contained in:
@@ -31,7 +31,6 @@ typedef enum {
|
||||
APP_COMPOSITION_BOOT_STAGE_AUDIO_RELEASE,
|
||||
APP_COMPOSITION_BOOT_STAGE_LCD_DEVICE,
|
||||
APP_COMPOSITION_BOOT_STAGE_LCD_RENDER_LOOP,
|
||||
APP_COMPOSITION_BOOT_STAGE_BOOT_EXPRESSION,
|
||||
APP_COMPOSITION_BOOT_STAGE_PLATFORM_DOMAIN,
|
||||
APP_COMPOSITION_BOOT_STAGE_TURNTABLE_CALIBRATION,
|
||||
APP_COMPOSITION_BOOT_STAGE_STORAGE_PREPARE,
|
||||
@@ -107,21 +106,11 @@ static esp_err_t app_composition_run_plan_a_boot_sequence(void)
|
||||
lcd_worker_err);
|
||||
if (lcd_worker_err != ESP_OK) {
|
||||
lcd_ready = false;
|
||||
app_composition_log_stage_skipped(APP_COMPOSITION_BOOT_STAGE_BOOT_EXPRESSION,
|
||||
"boot_expression",
|
||||
"lcd_render_worker_unavailable");
|
||||
} else {
|
||||
app_composition_log_stage(APP_COMPOSITION_BOOT_STAGE_BOOT_EXPRESSION,
|
||||
"boot_expression",
|
||||
"deferred_until_runtime_worker_started");
|
||||
}
|
||||
} else {
|
||||
app_composition_log_stage_skipped(APP_COMPOSITION_BOOT_STAGE_LCD_RENDER_LOOP,
|
||||
"lcd_render_loop",
|
||||
"lcd_device_unavailable");
|
||||
app_composition_log_stage_skipped(APP_COMPOSITION_BOOT_STAGE_BOOT_EXPRESSION,
|
||||
"boot_expression",
|
||||
"lcd_device_unavailable");
|
||||
}
|
||||
#else
|
||||
app_composition_log_stage_skipped(APP_COMPOSITION_BOOT_STAGE_LCD_DEVICE,
|
||||
@@ -130,9 +119,6 @@ static esp_err_t app_composition_run_plan_a_boot_sequence(void)
|
||||
app_composition_log_stage_skipped(APP_COMPOSITION_BOOT_STAGE_LCD_RENDER_LOOP,
|
||||
"lcd_render_loop",
|
||||
"disabled_by_config");
|
||||
app_composition_log_stage_skipped(APP_COMPOSITION_BOOT_STAGE_BOOT_EXPRESSION,
|
||||
"boot_expression",
|
||||
"disabled_by_config");
|
||||
#endif
|
||||
|
||||
app_composition_log_stage(APP_COMPOSITION_BOOT_STAGE_PLATFORM_DOMAIN,
|
||||
@@ -189,19 +175,6 @@ static esp_err_t app_composition_run_plan_a_boot_sequence(void)
|
||||
return err;
|
||||
}
|
||||
|
||||
#if CONFIG_TQ_SCREEN_ENABLE
|
||||
if (lcd_ready) {
|
||||
vTaskDelay(pdMS_TO_TICKS(200));
|
||||
app_composition_log_stage(APP_COMPOSITION_BOOT_STAGE_BOOT_EXPRESSION,
|
||||
"boot_expression",
|
||||
"control_plane_request_boot_expression");
|
||||
esp_err_t expression_err = control_plane_request_boot_expression();
|
||||
if (expression_err != ESP_OK) {
|
||||
ESP_LOGW(TAG, "Boot expression request failed: %s", esp_err_to_name(expression_err));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
app_composition_log_stage(APP_COMPOSITION_BOOT_STAGE_NETWORK_SERVICES,
|
||||
"network_services",
|
||||
"started_by_runtime_workers_after_readiness");
|
||||
|
||||
@@ -322,7 +322,6 @@ esp_err_t platform_multimodal_audio_register_downstream_playback_callbacks(
|
||||
const platform_multimodal_downstream_playback_callbacks_t *callbacks);
|
||||
|
||||
esp_err_t platform_init_lcd_device(void);
|
||||
void platform_run_lcd_blocking_test(void);
|
||||
|
||||
/**
|
||||
* @brief Start LCD render loop.
|
||||
|
||||
@@ -10,7 +10,6 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
esp_err_t lcd_direct_init_device(void);
|
||||
void lcd_direct_run_blocking_test(void);
|
||||
void lcd_direct_start_render_loop(void);
|
||||
esp_err_t lcd_direct_stop_render_loop(int timeout_ms);
|
||||
esp_err_t lcd_direct_request_presentation(const platform_lcd_presentation_request_t *request);
|
||||
|
||||
@@ -31,16 +31,7 @@
|
||||
#define LCD_DIRECT_PIXELS_PER_TRANSFER (LCD_DIRECT_WIDTH * LCD_DIRECT_ROWS_PER_TRANSFER)
|
||||
#define LCD_DIRECT_PRESENTATION_WAIT_POLL_MS 20U
|
||||
|
||||
#define LCD_CMD_SWRESET 0x01
|
||||
#define LCD_CMD_SLPOUT 0x11
|
||||
#define LCD_CMD_COLMOD 0x3A
|
||||
#define LCD_CMD_MADCTL 0x36
|
||||
#define LCD_CMD_CASET 0x2A
|
||||
#define LCD_CMD_RASET 0x2B
|
||||
#define LCD_CMD_RAMWR 0x2C
|
||||
#define LCD_CMD_INVON 0x21
|
||||
#define LCD_CMD_INVOFF 0x20
|
||||
#define LCD_CMD_DISPON 0x29
|
||||
#define LCD_CMD_RAMCTRL 0xB0
|
||||
#define LCD_RAMCTRL_LE_BIT (1U << 3)
|
||||
|
||||
@@ -79,7 +70,6 @@ static const lcd_direct_init_cmd_t s_st7789_init_cmds[] = {
|
||||
{0, {0}, 0xFF},
|
||||
};
|
||||
|
||||
static spi_device_handle_t s_spi;
|
||||
static esp_lcd_panel_io_handle_t s_panel_io;
|
||||
static esp_lcd_panel_handle_t s_panel;
|
||||
static SemaphoreHandle_t s_lock;
|
||||
@@ -103,55 +93,6 @@ static uint16_t lcd_direct_swap_color(uint16_t color)
|
||||
#endif
|
||||
}
|
||||
|
||||
static void lcd_direct_delay_ms(uint32_t ms)
|
||||
{
|
||||
vTaskDelay(pdMS_TO_TICKS(ms));
|
||||
}
|
||||
|
||||
static esp_err_t lcd_direct_spi_write(const void *data, uint32_t length)
|
||||
{
|
||||
spi_transaction_t transaction = {
|
||||
.length = length * 8U,
|
||||
.tx_buffer = data,
|
||||
};
|
||||
return spi_device_polling_transmit(s_spi, &transaction);
|
||||
}
|
||||
|
||||
static esp_err_t lcd_direct_write(uint8_t dc_level, uint16_t value, uint8_t length)
|
||||
{
|
||||
uint8_t bytes[2] = {
|
||||
(uint8_t)(value >> 8),
|
||||
(uint8_t)value,
|
||||
};
|
||||
const uint8_t *data = length == 1U ? &bytes[1] : bytes;
|
||||
|
||||
gpio_set_level(CONFIG_TQ_SCREEN_DC_GPIO, dc_level);
|
||||
return lcd_direct_spi_write(data, length);
|
||||
}
|
||||
|
||||
static esp_err_t lcd_direct_write_bytes(uint8_t dc_level, const uint8_t *data, uint32_t length)
|
||||
{
|
||||
gpio_set_level(CONFIG_TQ_SCREEN_DC_GPIO, dc_level);
|
||||
return lcd_direct_spi_write(data, length);
|
||||
}
|
||||
|
||||
static esp_err_t lcd_direct_set_window(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1)
|
||||
{
|
||||
ESP_RETURN_ON_ERROR(lcd_direct_write(0, LCD_CMD_CASET, 1), TAG, "CASET failed");
|
||||
ESP_RETURN_ON_ERROR(lcd_direct_write(1, x0, 2), TAG, "CASET x0 failed");
|
||||
ESP_RETURN_ON_ERROR(lcd_direct_write(1, x1, 2), TAG, "CASET x1 failed");
|
||||
ESP_RETURN_ON_ERROR(lcd_direct_write(0, LCD_CMD_RASET, 1), TAG, "RASET failed");
|
||||
ESP_RETURN_ON_ERROR(lcd_direct_write(1, y0, 2), TAG, "RASET y0 failed");
|
||||
ESP_RETURN_ON_ERROR(lcd_direct_write(1, y1, 2), TAG, "RASET y1 failed");
|
||||
return lcd_direct_write(0, LCD_CMD_RAMWR, 1);
|
||||
}
|
||||
|
||||
static esp_err_t lcd_direct_write_pixels(const void *data, uint32_t length)
|
||||
{
|
||||
gpio_set_level(CONFIG_TQ_SCREEN_DC_GPIO, 1);
|
||||
return lcd_direct_spi_write(data, length);
|
||||
}
|
||||
|
||||
static esp_err_t lcd_direct_draw_rows(uint16_t row_start, uint16_t row_count)
|
||||
{
|
||||
ESP_RETURN_ON_FALSE(s_panel != NULL, ESP_ERR_INVALID_STATE, TAG, "panel is not ready");
|
||||
@@ -189,35 +130,6 @@ static esp_err_t lcd_direct_gpio_init(void)
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
static esp_err_t lcd_direct_spi_init(void)
|
||||
{
|
||||
spi_bus_config_t bus_config = {
|
||||
.mosi_io_num = CONFIG_TQ_SCREEN_SPI_MOSI_GPIO,
|
||||
.miso_io_num = CONFIG_TQ_SCREEN_SPI_MISO_GPIO,
|
||||
.sclk_io_num = CONFIG_TQ_SCREEN_SPI_CLK_GPIO,
|
||||
.quadwp_io_num = -1,
|
||||
.quadhd_io_num = -1,
|
||||
.max_transfer_sz = LCD_DIRECT_WIDTH * LCD_DIRECT_ROWS_PER_TRANSFER * sizeof(uint16_t),
|
||||
};
|
||||
|
||||
esp_err_t err = spi_bus_initialize(LCD_DIRECT_SPI_HOST, &bus_config, SPI_DMA_CH_AUTO);
|
||||
if (err != ESP_OK && err != ESP_ERR_INVALID_STATE) {
|
||||
ESP_LOGE(TAG, "spi bus init failed: %s", esp_err_to_name(err));
|
||||
return err;
|
||||
}
|
||||
|
||||
spi_device_interface_config_t device_config = {
|
||||
.clock_speed_hz = CONFIG_TQ_SCREEN_SPI_PIXEL_CLOCK_HZ,
|
||||
.mode = 0,
|
||||
.spics_io_num = CONFIG_TQ_SCREEN_SPI_CS_GPIO,
|
||||
.queue_size = 8,
|
||||
};
|
||||
ESP_RETURN_ON_ERROR(spi_bus_add_device(LCD_DIRECT_SPI_HOST, &device_config, &s_spi),
|
||||
TAG,
|
||||
"spi add device failed");
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
static esp_err_t lcd_direct_panel_init(void)
|
||||
{
|
||||
spi_bus_config_t bus_config = {
|
||||
@@ -318,69 +230,6 @@ static esp_err_t lcd_direct_panel_init(void)
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
static void lcd_direct_reset(void)
|
||||
{
|
||||
if (CONFIG_TQ_SCREEN_RESET_PIN < 0) {
|
||||
return;
|
||||
}
|
||||
gpio_set_level(CONFIG_TQ_SCREEN_RESET_PIN, 1);
|
||||
lcd_direct_delay_ms(20);
|
||||
gpio_set_level(CONFIG_TQ_SCREEN_RESET_PIN, 0);
|
||||
lcd_direct_delay_ms(20);
|
||||
gpio_set_level(CONFIG_TQ_SCREEN_RESET_PIN, 1);
|
||||
lcd_direct_delay_ms(120);
|
||||
}
|
||||
|
||||
static uint8_t lcd_direct_madctl_value(void)
|
||||
{
|
||||
uint8_t value = 0;
|
||||
if (CONFIG_TQ_SCREEN_MIRROR_X) {
|
||||
value |= 0x40;
|
||||
}
|
||||
if (CONFIG_TQ_SCREEN_SWAP_XY) {
|
||||
value |= 0x20;
|
||||
}
|
||||
#if CONFIG_TQ_SCREEN_COLOR_ORDER_BGR
|
||||
value |= 0x08;
|
||||
#endif
|
||||
return value;
|
||||
}
|
||||
|
||||
static esp_err_t lcd_direct_controller_init(void)
|
||||
{
|
||||
ESP_RETURN_ON_ERROR(lcd_direct_write(0, LCD_CMD_SWRESET, 1), TAG, "SWRESET failed");
|
||||
lcd_direct_delay_ms(150);
|
||||
|
||||
for (size_t i = 0; s_st7789_init_cmds[i].databytes != 0xFFU; ++i) {
|
||||
const lcd_direct_init_cmd_t *cmd = &s_st7789_init_cmds[i];
|
||||
ESP_RETURN_ON_ERROR(lcd_direct_write(0, cmd->cmd, 1), TAG, "custom init cmd failed");
|
||||
if (cmd->databytes > 0U) {
|
||||
ESP_RETURN_ON_ERROR(lcd_direct_write_bytes(1, cmd->data, cmd->databytes),
|
||||
TAG,
|
||||
"custom init param failed");
|
||||
}
|
||||
}
|
||||
|
||||
ESP_RETURN_ON_ERROR(lcd_direct_write(0, LCD_CMD_MADCTL, 1), TAG, "MADCTL failed");
|
||||
ESP_RETURN_ON_ERROR(lcd_direct_write(1, lcd_direct_madctl_value(), 1), TAG, "MADCTL param failed");
|
||||
|
||||
uint8_t ramctrl[] = {0x00, 0xF0};
|
||||
#if CONFIG_TQ_SCREEN_SWAP_COLOR_BYTES
|
||||
ramctrl[1] |= LCD_RAMCTRL_LE_BIT;
|
||||
#endif
|
||||
ESP_RETURN_ON_ERROR(lcd_direct_write(0, LCD_CMD_RAMCTRL, 1), TAG, "RAMCTRL failed");
|
||||
ESP_RETURN_ON_ERROR(lcd_direct_write_bytes(1, ramctrl, sizeof(ramctrl)), TAG, "RAMCTRL param failed");
|
||||
|
||||
ESP_RETURN_ON_ERROR(lcd_direct_write(0,
|
||||
CONFIG_TQ_SCREEN_INVERT_COLOR ? LCD_CMD_INVON : LCD_CMD_INVOFF,
|
||||
1),
|
||||
TAG,
|
||||
"invert command failed");
|
||||
ESP_RETURN_ON_ERROR(lcd_direct_write(0, LCD_CMD_DISPON, 1), TAG, "DISPON failed");
|
||||
lcd_direct_delay_ms(120);
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
static uint16_t lcd_direct_color_for_row(uint16_t row, const lcd_direct_request_t *request)
|
||||
{
|
||||
uint16_t band = row / 40U;
|
||||
@@ -567,29 +416,6 @@ static esp_err_t lcd_direct_draw_default_image(void)
|
||||
return lcd_direct_draw_rle_image(lcd_direct_default_image(), icons, icon_count);
|
||||
}
|
||||
|
||||
void lcd_direct_run_blocking_test(void)
|
||||
{
|
||||
if (!s_initialized) {
|
||||
ESP_LOGW(TAG, "Direct LCD is not initialized, skip blocking test");
|
||||
return;
|
||||
}
|
||||
|
||||
ESP_LOGI(TAG, "Direct LCD blocking test started");
|
||||
lcd_direct_request_t color_test = {
|
||||
.kind = PLATFORM_LCD_PRESENTATION_SLOT_REELS,
|
||||
};
|
||||
esp_err_t color_err = lcd_direct_draw_test_pattern(&color_test);
|
||||
ESP_LOGI(TAG, "Direct LCD color test draw result=%s", esp_err_to_name(color_err));
|
||||
lcd_direct_delay_ms(1000);
|
||||
|
||||
esp_err_t image_err = lcd_direct_draw_default_image();
|
||||
ESP_LOGI(TAG, "Direct LCD default image draw result=%s", esp_err_to_name(image_err));
|
||||
|
||||
while (true) {
|
||||
lcd_direct_delay_ms(1000);
|
||||
}
|
||||
}
|
||||
|
||||
static void lcd_direct_signal_completion(void)
|
||||
{
|
||||
portENTER_CRITICAL(&s_state_lock);
|
||||
|
||||
@@ -12,11 +12,6 @@ esp_err_t platform_init_lcd_device(void)
|
||||
return lcd_direct_init_device();
|
||||
}
|
||||
|
||||
void platform_run_lcd_blocking_test(void)
|
||||
{
|
||||
lcd_direct_run_blocking_test();
|
||||
}
|
||||
|
||||
void platform_start_lcd_render_loop(void)
|
||||
{
|
||||
lcd_direct_start_render_loop();
|
||||
|
||||
Reference in New Issue
Block a user