diff options
Diffstat (limited to 'src/drivers/St7789.h')
| -rw-r--r-- | src/drivers/St7789.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/drivers/St7789.h b/src/drivers/St7789.h new file mode 100644 index 0000000..bd7f979 --- /dev/null +++ b/src/drivers/St7789.h @@ -0,0 +1,59 @@ +#pragma once +#include <cstddef> + +namespace Pinetime { + namespace Drivers { + class SpiMaster; + class St7789 { + public: + explicit St7789(SpiMaster& spiMaster, uint8_t pinDataCommand); + void Init(); + void Uninit(); + void DrawPixel(uint16_t x, uint16_t y, uint32_t color); + void FillRectangle(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint16_t color); + + + private: + SpiMaster& spi; + uint8_t pinDataCommand; + + void SoftwareReset(); + void SleepOut(); + void ColMod(); + void MemoryDataAccessControl(); + void DisplayInversionOn(); + void NormalModeOn(); + void WriteToRam(); + void DisplayOn(); + void DisplayOff(); + + void SetAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1); + + void WriteCommand(uint8_t cmd); + void WriteSpi(const uint8_t* data, size_t size); + + enum class Commands : uint8_t { + SoftwareReset = 0x01, + SleepOut = 0x11, + NormalModeOn = 0x13, + DisplayInversionOn = 0x21, + DisplayOff = 0x28, + DisplayOn = 0x29, + ColumnAddressSet = 0x2a, + RowAddressSet = 0x2b, + WriteToRam = 0x2c, + MemoryDataAccessControl = 036, + ColMod = 0x3a, + }; + void WriteData(uint8_t data); + void ColumnAddressSet(); + + static constexpr uint16_t Width = 240; + static constexpr uint16_t Height = 240; + void RowAddressSet(); + + }; + } +} + + |
