#pragma once
#include <LovyanGFX.hpp>

class LGFX_Portal : public lgfx::LGFX_Device {
public:
    lgfx::Bus_SPI      _bus;
    lgfx::Panel_GC9A01 _panel;

    LGFX_Portal(int csPin) {

        {   // SPI3 (HSPI-like)
            auto cfg = _bus.config();
            cfg.spi_host   = SPI3_HOST;      
            cfg.spi_mode   = 0;
            cfg.freq_write = 20000000;
            cfg.freq_read  = 16000000;

            cfg.pin_sclk = 10;
            cfg.pin_mosi = 13;
            cfg.pin_miso = -1;
            cfg.pin_dc   = 5;

            cfg.use_lock = true;
            cfg.dma_channel = 1;

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

        {  // GC9A01 panel
            auto pcfg = _panel.config();
            pcfg.pin_cs  = csPin;
            pcfg.pin_rst = -1;
            pcfg.panel_width   = 240;
            pcfg.panel_height  = 240;
            pcfg.memory_width  = 240;
            pcfg.memory_height = 240;
            pcfg.invert = true;         
            pcfg.rgb_order = false;     
            pcfg.bus_shared = false;

            _panel.config(pcfg);
        }

        setPanel(&_panel);
    }
};
