From 3bd67462f072e8d8fa8e3c0e57e2b81c1ec5e847 Mon Sep 17 00:00:00 2001 From: Andrea Greco Date: Sun, 8 Oct 2023 11:52:28 +0200 Subject: [PATCH] feat(esp_lcd): Add API to sleep and wakeup the LCD panel --- components/esp_lcd/include/esp_lcd_panel_ops.h | 13 ++++++++++++- .../esp_lcd/interface/esp_lcd_panel_interface.h | 13 ++++++++++++- components/esp_lcd/src/esp_lcd_panel_ops.c | 9 ++++++++- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/components/esp_lcd/include/esp_lcd_panel_ops.h b/components/esp_lcd/include/esp_lcd_panel_ops.h index fcea1db00b..56b21a1ad4 100644 --- a/components/esp_lcd/include/esp_lcd_panel_ops.h +++ b/components/esp_lcd/include/esp_lcd_panel_ops.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -133,6 +133,17 @@ esp_err_t esp_lcd_panel_disp_on_off(esp_lcd_panel_handle_t panel, bool on_off); esp_err_t esp_lcd_panel_disp_off(esp_lcd_panel_handle_t panel, bool off) __attribute__((deprecated("use esp_lcd_panel_disp_on_off instead"))); +/** + * @brief Enter or exit sleep mode + * + * @param[in] panel LCD panel handle, which is created by other factory API like `esp_lcd_new_panel_st7789()` + * @param[in] sleep True to enter sleep mode, False to wake up + * @return + * - ESP_OK on success + * - ESP_ERR_NOT_SUPPORTED if this function is not supported by the panel + */ +esp_err_t esp_lcd_panel_disp_sleep(esp_lcd_panel_handle_t panel, bool sleep); + #ifdef __cplusplus } #endif diff --git a/components/esp_lcd/interface/esp_lcd_panel_interface.h b/components/esp_lcd/interface/esp_lcd_panel_interface.h index 463b2d0325..ff5d289d79 100644 --- a/components/esp_lcd/interface/esp_lcd_panel_interface.h +++ b/components/esp_lcd/interface/esp_lcd_panel_interface.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -120,6 +120,17 @@ struct esp_lcd_panel_t { */ esp_err_t (*disp_on_off)(esp_lcd_panel_t *panel, bool on_off); + /** + * @brief Enter or exit sleep mode + * + * @param[in] panel LCD panel handle, which is created by other factory API like `esp_lcd_new_panel_st7789()` + * @param[in] sleep True to enter sleep mode, False to wake up + * @return + * - ESP_OK on success + * - ESP_ERR_NOT_SUPPORTED if this function is not supported by the panel + */ + esp_err_t (*disp_sleep)(esp_lcd_panel_t *panel, bool sleep); + void *user_data; /*!< User data, used to store externally customized data */ }; diff --git a/components/esp_lcd/src/esp_lcd_panel_ops.c b/components/esp_lcd/src/esp_lcd_panel_ops.c index b70611e246..1e03be92d2 100644 --- a/components/esp_lcd/src/esp_lcd_panel_ops.c +++ b/components/esp_lcd/src/esp_lcd_panel_ops.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -68,3 +68,10 @@ esp_err_t esp_lcd_panel_disp_off(esp_lcd_panel_handle_t panel, bool off) { return esp_lcd_panel_disp_on_off(panel, !off); } + +esp_err_t esp_lcd_panel_disp_sleep(esp_lcd_panel_handle_t panel, bool sleep) +{ + ESP_RETURN_ON_FALSE(panel, ESP_ERR_INVALID_ARG, TAG, "invalid panel handle"); + ESP_RETURN_ON_FALSE(panel->disp_sleep, ESP_ERR_NOT_SUPPORTED, TAG, "sleep is not supported by this panel"); + return panel->disp_sleep(panel, sleep); +}