#pragma once #include "Display.h" #include "Display_Backend.h" #include #define SSD1306_COLUMNS 128 // display columns #define SSD1306_ROWS 64 // display rows #define SSD1306_ROWS_PER_PAGE 8 class Display_SSD1306_I2C: public Display_Backend { public: Display_SSD1306_I2C(AP_HAL::OwnPtr dev); bool hw_init() override; void hw_update() override; void set_pixel(uint16_t x, uint16_t y) override; void clear_pixel(uint16_t x, uint16_t y) override; void clear_screen() override; private: void _timer(); AP_HAL::OwnPtr _dev; uint8_t _displaybuffer[SSD1306_COLUMNS * SSD1306_ROWS_PER_PAGE]; AP_HAL::Semaphore *_displaybuffer_sem; bool _need_hw_update; };