
#include "panel.h"

Panel::Panel(IPanelDevice *device) :
    device_(device),
    io_handle_(nullptr),
    esp_panel_(nullptr),
    panel_config_(
        (esp_lcd_panel_dev_config_t) {
            .reset_gpio_num = device_->rst_num_,
            .bits_per_pixel = 1,
            // .vendor_config should be set in IPanelDevice::init_panel override
        }
    )
{
  ESP_LOGI(TAG, "Install panel IO");
  ESP_ERROR_CHECK(esp_lcd_new_panel_io_i2c(
      device_->i2c_bus_, &device_->io_config_, &io_handle_));

  device_->create_panel(panel_config_, io_handle_, 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));
}
