aboutsummaryrefslogtreecommitdiffstats
path: root/src/drivers/St7789.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/St7789.h')
-rw-r--r--src/drivers/St7789.h46
1 files changed, 37 insertions, 9 deletions
diff --git a/src/drivers/St7789.h b/src/drivers/St7789.h
index 8a1bdfca..9c778905 100644
--- a/src/drivers/St7789.h
+++ b/src/drivers/St7789.h
@@ -1,6 +1,9 @@
#pragma once
#include <cstddef>
#include <cstdint>
+#include <functional>
+
+#include <FreeRTOS.h>
namespace Pinetime {
namespace Drivers {
@@ -8,7 +11,7 @@ namespace Pinetime {
class St7789 {
public:
- explicit St7789(Spi& spi, uint8_t pinDataCommand);
+ explicit St7789(Spi& spi, uint8_t pinDataCommand, uint8_t pinReset);
St7789(const St7789&) = delete;
St7789& operator=(const St7789&) = delete;
St7789(St7789&&) = delete;
@@ -16,37 +19,51 @@ namespace Pinetime {
void Init();
void Uninit();
- void DrawPixel(uint16_t x, uint16_t y, uint32_t color);
- void VerticalScrollDefinition(uint16_t topFixedLines, uint16_t scrollLines, uint16_t bottomFixedLines);
void VerticalScrollStartAddress(uint16_t line);
void DrawBuffer(uint16_t x, uint16_t y, uint16_t width, uint16_t height, const uint8_t* data, size_t size);
+ void LowPowerOn();
+ void LowPowerOff();
void Sleep();
void Wakeup();
private:
Spi& spi;
uint8_t pinDataCommand;
+ uint8_t pinReset;
uint8_t verticalScrollingStartAddress = 0;
+ bool sleepIn;
+ TickType_t lastSleepExit;
void HardwareReset();
void SoftwareReset();
+ void Command2Enable();
void SleepOut();
+ void EnsureSleepOutPostDelay();
void SleepIn();
- void ColMod();
+ void PixelFormat();
void MemoryDataAccessControl();
void DisplayInversionOn();
void NormalModeOn();
- void WriteToRam();
+ void WriteToRam(const uint8_t* data, size_t size);
+ void IdleModeOn();
+ void IdleModeOff();
+ void FrameRateNormalSet();
+ void IdleFrameRateOff();
+ void IdleFrameRateOn();
void DisplayOn();
void DisplayOff();
+ void PowerControl();
+ void GateControl();
+ void PorchSet();
void SetAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1);
void SetVdv();
void WriteCommand(uint8_t cmd);
- void WriteSpi(const uint8_t* data, size_t size);
+ void WriteCommand(const uint8_t* data, size_t size);
+ void WriteSpi(const uint8_t* data, size_t size, const std::function<void()>& preTransactionHook);
enum class Commands : uint8_t {
SoftwareReset = 0x01,
@@ -62,15 +79,26 @@ namespace Pinetime {
MemoryDataAccessControl = 0x36,
VerticalScrollDefinition = 0x33,
VerticalScrollStartAddress = 0x37,
- ColMod = 0x3a,
+ IdleModeOff = 0x38,
+ IdleModeOn = 0x39,
+ PixelFormat = 0x3a,
+ FrameRateIdle = 0xb3,
+ FrameRateNormal = 0xc6,
VdvSet = 0xc4,
+ Command2Enable = 0xdf,
+ PowerControl1 = 0xd0,
+ PowerControl2 = 0xe8,
+ GateControl = 0xb7,
+ Porch = 0xb2,
};
void WriteData(uint8_t data);
- void ColumnAddressSet();
+ void WriteData(const uint8_t* data, size_t size);
static constexpr uint16_t Width = 240;
static constexpr uint16_t Height = 320;
- void RowAddressSet();
+
+ uint8_t addrWindowArgs[4];
+ uint8_t verticalScrollArgs[2];
};
}
}