
#pragma once
#include <LovyanGFX.hpp>

#define TFT_BL 6  // Broche de rétroéclairage (PWM)

class LGFX_ST7796 : public lgfx::LGFX_Device {
public:
  lgfx::Bus_SPI      _bus;
  lgfx::Panel_ST7796 _panel;
  lgfx::Light_PWM    _light;   // Contrôle du rétroéclairage

  LGFX_ST7796(void) {
    { // === Configuration du bus SPI ===
      auto cfg = _bus.config();
      cfg.spi_host   = SPI2_HOST;
      cfg.spi_mode   = 0;
      cfg.freq_write = 40000000;
      cfg.freq_read  = 16000000;
      cfg.spi_3wire  = false;
      cfg.use_lock   = true;
      cfg.dma_channel = 1;

      // PINOUT ESP32-S3 
      cfg.pin_sclk = 14;
      cfg.pin_mosi = 15;
      cfg.pin_miso = 16;   
      cfg.pin_dc   = 9;

      _bus.config(cfg);
      _panel.setBus(&_bus);
    }

    { // === Configuration du panneau ST7796 ===
      auto pcfg = _panel.config();
      pcfg.pin_cs        = 8;
      pcfg.pin_rst       = 7;
      pcfg.pin_busy      = -1;

      pcfg.panel_width   = 320;
      pcfg.panel_height  = 480;
      pcfg.memory_width  = 320;
      pcfg.memory_height = 480;

      pcfg.offset_x = 0;
      pcfg.offset_y = 0;
      pcfg.offset_rotation = 0;

      pcfg.dlen_16bit = false;
      pcfg.bus_shared = false;

      _panel.config(pcfg);
    }

    { // === Rétroéclairage PWM ===
      auto lcfg = _light.config();
      lcfg.pin_bl = TFT_BL;      // broche 6
      lcfg.freq   = 12000;       // fréquence PWM stable
      lcfg.pwm_channel = 7;      
      _light.config(lcfg);
      _panel.setLight(&_light);
    }

    setPanel(&_panel);

    // Luminosité à fond
    setBrightness(255);
  }
};
