summaryrefslogtreecommitdiff
path: root/src/drivers/St7789.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/St7789.h')
-rw-r--r--src/drivers/St7789.h59
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();
+
+ };
+ }
+}
+
+