63 lines
1.7 KiB
C++
63 lines
1.7 KiB
C++
#ifndef PANEL_H
|
|
#define PANEL_H
|
|
|
|
#include "panel_device.h"
|
|
|
|
/**
|
|
* Encapsulates esp_lcd_panel handles and operations.
|
|
* The only exception is esp_lcd_panel_io_i2c_config_t owned by IPanelDevice.
|
|
* This structure requires details specific to the implementing device.
|
|
*
|
|
* Panel is an implementation detail of Display, not meant to be used directly.
|
|
*/
|
|
struct Panel {
|
|
/**
|
|
* Construct a new Panel using an object that implements IPanelDevice.
|
|
*
|
|
* @param device An object that implements the IPanelDevice interface.
|
|
*/
|
|
explicit Panel(IPanelDevice &device) :
|
|
device_(&device),
|
|
esp_io_(nullptr),
|
|
esp_panel_(nullptr),
|
|
esp_panel_config_(
|
|
(esp_lcd_panel_dev_config_t) {
|
|
.reset_gpio_num = device_->rst_num_,
|
|
.bits_per_pixel = 1,
|
|
.vendor_config = device_->vendor_config(),
|
|
}
|
|
)
|
|
{
|
|
esp_io_ = device_->create_io_handle();
|
|
|
|
device_->create_panel(esp_panel_config_, esp_io_, esp_panel_);
|
|
|
|
ESP_LOGI(TAG, "Resetting panel display");
|
|
ESP_ERROR_CHECK(esp_lcd_panel_reset(esp_panel_));
|
|
ESP_LOGI(TAG, "Initializing panel display");
|
|
ESP_ERROR_CHECK(esp_lcd_panel_init(esp_panel_));
|
|
ESP_LOGI(TAG, "Turning on panel display");
|
|
ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(esp_panel_, true));
|
|
}
|
|
|
|
~Panel() = default;
|
|
|
|
/// Pointer to object using known interface for IPanelDevice.
|
|
IPanelDevice *device_;
|
|
|
|
/// ESP LCD panel IO handle.
|
|
esp_lcd_panel_io_handle_t esp_io_;
|
|
|
|
/// ESP LCD panel handle.
|
|
esp_lcd_panel_handle_t esp_panel_;
|
|
|
|
/// ESP LCD panel configuration structure.
|
|
esp_lcd_panel_dev_config_t esp_panel_config_;
|
|
|
|
private:
|
|
/// Tag used for ESP logging.
|
|
const char * TAG = "Panel";
|
|
};
|
|
|
|
#endif //PANEL_H
|