mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2026-04-21 02:12:48 +00:00
103 lines
4.7 KiB
C++
103 lines
4.7 KiB
C++
#ifdef HASP_USE_ARDUINOGFX
|
|
#include "Arduino.h"
|
|
#include "Arduino_DataBus.h"
|
|
#endif
|
|
|
|
#if defined(ESP32) && (CONFIG_IDF_TARGET_ESP32S3)
|
|
|
|
#include "databus/Arduino_ESP32RGBPanel.h" // struct esp_rgb_panel_t
|
|
|
|
#ifndef _ARDUINO_RGBPANEL_MOD_H_
|
|
#define _ARDUINO_RGBPANEL_MOD_H_
|
|
|
|
#include "esp_lcd_panel_io.h"
|
|
#include "esp_lcd_panel_rgb.h"
|
|
#include "esp_lcd_panel_vendor.h"
|
|
#include "esp_lcd_panel_ops.h"
|
|
#include "esp_lcd_panel_interface.h"
|
|
#include "esp_private/gdma.h"
|
|
#include "esp_pm.h"
|
|
#include "hal/dma_types.h"
|
|
|
|
#include "hal/lcd_hal.h"
|
|
#include "hal/lcd_ll.h"
|
|
|
|
#include "esp32s3/rom/cache.h"
|
|
// This function is located in ROM (also see esp_rom/${target}/ld/${target}.rom.ld)
|
|
extern int Cache_WriteBack_Addr(uint32_t addr, uint32_t size);
|
|
|
|
// extract from esp-idf esp_lcd_rgb_panel.c
|
|
/*struct esp_rgb_panel_t
|
|
{
|
|
esp_lcd_panel_t base; // Base class of generic lcd panel
|
|
int panel_id; // LCD panel ID
|
|
lcd_hal_context_t hal; // Hal layer object
|
|
size_t data_width; // Number of data lines (e.g. for RGB565, the data width is 16)
|
|
size_t sram_trans_align; // Alignment for framebuffer that allocated in SRAM
|
|
size_t psram_trans_align; // Alignment for framebuffer that allocated in PSRAM
|
|
int disp_gpio_num; // Display control GPIO, which is used to perform action like "disp_off"
|
|
intr_handle_t intr; // LCD peripheral interrupt handle
|
|
esp_pm_lock_handle_t pm_lock; // Power management lock
|
|
size_t num_dma_nodes; // Number of DMA descriptors that used to carry the frame buffer
|
|
uint8_t *fb; // Frame buffer
|
|
size_t fb_size; // Size of frame buffer
|
|
int data_gpio_nums[SOC_LCD_RGB_DATA_WIDTH]; // GPIOs used for data lines, we keep these GPIOs for action like "invert_color"
|
|
size_t resolution_hz; // Peripheral clock resolution
|
|
esp_lcd_rgb_timing_t timings; // RGB timing parameters (e.g. pclk, sync pulse, porch width)
|
|
gdma_channel_handle_t dma_chan; // DMA channel handle
|
|
esp_lcd_rgb_panel_frame_trans_done_cb_t on_frame_trans_done; // Callback, invoked after frame trans done
|
|
void *user_ctx; // Reserved user's data of callback functions
|
|
int x_gap; // Extra gap in x coordinate, it's used when calculate the flush window
|
|
int y_gap; // Extra gap in y coordinate, it's used when calculate the flush window
|
|
struct
|
|
{
|
|
unsigned int disp_en_level : 1; // The level which can turn on the screen by `disp_gpio_num`
|
|
unsigned int stream_mode : 1; // If set, the LCD transfers data continuously, otherwise, it stops refreshing the LCD when transaction done
|
|
unsigned int fb_in_psram : 1; // Whether the frame buffer is in PSRAM
|
|
} flags;
|
|
dma_descriptor_t dma_nodes[]; // DMA descriptor pool of size `num_dma_nodes`
|
|
};*/
|
|
|
|
class Arduino_RGBPanel_Mod
|
|
{
|
|
public:
|
|
Arduino_RGBPanel_Mod(
|
|
int8_t de, int8_t vsync, int8_t hsync, int8_t pclk,
|
|
int8_t r0, int8_t r1, int8_t r2, int8_t r3, int8_t r4,
|
|
int8_t g0, int8_t g1, int8_t g2, int8_t g3, int8_t g4, int8_t g5,
|
|
int8_t b0, int8_t b1, int8_t b2, int8_t b3, int8_t b4,
|
|
uint16_t hsync_polarity, uint16_t hsync_front_porch, uint16_t hsync_pulse_width, uint16_t hsync_back_porch,
|
|
uint16_t vsync_polarity, uint16_t vsync_front_porch, uint16_t vsync_pulse_width, uint16_t vsync_back_porch,
|
|
uint16_t pclk_active_neg = 0, int32_t prefer_speed = GFX_NOT_DEFINED, bool useBigEndian = false);
|
|
|
|
void begin(int32_t speed = GFX_NOT_DEFINED);
|
|
|
|
uint16_t *getFrameBuffer(int16_t w, int16_t h);
|
|
esp_lcd_panel_handle_t _panel_handle = NULL;
|
|
|
|
protected:
|
|
private:
|
|
int32_t _speed;
|
|
int8_t _de, _vsync, _hsync, _pclk;
|
|
int8_t _r0, _r1, _r2, _r3, _r4;
|
|
int8_t _g0, _g1, _g2, _g3, _g4, _g5;
|
|
int8_t _b0, _b1, _b2, _b3, _b4;
|
|
uint16_t _hsync_polarity;
|
|
uint16_t _hsync_front_porch;
|
|
uint16_t _hsync_pulse_width;
|
|
uint16_t _hsync_back_porch;
|
|
uint16_t _vsync_polarity;
|
|
uint16_t _vsync_front_porch;
|
|
uint16_t _vsync_pulse_width;
|
|
uint16_t _vsync_back_porch;
|
|
uint16_t _pclk_active_neg;
|
|
int32_t _prefer_speed;
|
|
bool _useBigEndian;
|
|
|
|
esp_rgb_panel_t *_rgb_panel;
|
|
};
|
|
|
|
#endif // _ARDUINO_ESP32RGBPANEL_H_
|
|
|
|
#endif // #if defined(ESP32) && (CONFIG_IDF_TARGET_ESP32S3)
|