#ifndef _UDISPLAY_I2C_PANEL_H_ #define _UDISPLAY_I2C_PANEL_H_ #include #include #include "uDisplay_panel.h" /** * Configuration for I2C displays (typically OLED like SSD1306) */ struct I2CPanelConfig { // ===== Display Dimensions ===== uint16_t width; uint16_t height; uint8_t bpp; // bits per pixel (typically 1 for OLED) // ===== I2C Configuration ===== uint8_t i2c_address; // I2C device address TwoWire* wire; // I2C bus instance // ===== Display Commands ===== uint8_t cmd_set_addr_x; // Set column address command uint8_t cmd_set_addr_y; // Set page address command uint8_t cmd_write_ram; // Write data command // ===== Display Control Commands ===== uint8_t cmd_display_on; uint8_t cmd_display_off; uint8_t cmd_invert_on; uint8_t cmd_invert_off; // ===== Address Range ===== uint8_t page_start; // Starting page uint8_t page_end; // Ending page uint8_t col_start; // Starting column uint8_t col_end; // Ending column // ===== Initialization ===== uint8_t* init_commands; uint16_t init_commands_count; }; class i2c_panel : public UniversalPanel { public: /** * Constructor - receives configuration struct and framebuffer */ i2c_panel(const I2CPanelConfig& config, uint8_t* framebuffer); bool updateFrame() override; bool displayOnff(int8_t on) override; bool invertDisplay(bool invert) override; bool setRotation(uint8_t rotation) override { return true; } bool drawPixel(int16_t x, int16_t y, uint16_t color) override { return false; } bool fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) override { return false; } bool pushColors(uint16_t *data, uint16_t len, bool first = false) override { return false; } bool setAddrWindow(int16_t x0, int16_t y0, int16_t x1, int16_t y1) override { return false; } bool drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color) override { return false; } bool drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color) override { return false; } uint8_t* framebuffer = nullptr; private: // ===== Hardware & Configuration ===== I2CPanelConfig cfg; // Copy of config // ===== Internal Helpers ===== void i2c_command(uint8_t val); }; #endif // _UDISPLAY_I2C_PANEL_H_