aboutsummaryrefslogtreecommitdiffstats
path: root/src/drivers/St7789.cpp
diff options
context:
space:
mode:
authormark9064 <30447455+mark9064@users.noreply.github.com>2024-02-11 00:44:06 +0000
committerJF <JF002@users.noreply.github.com>2024-05-01 16:13:47 +0200
commit079e676baf70a943d31317afde47b759ca69ca2d (patch)
tree9768d7347ba10ed2e05753e8752f0969967f7075 /src/drivers/St7789.cpp
parent6b5235c3013bf8ecbd1568669f48efce3508e8c0 (diff)
SPI transaction hooks
Diffstat (limited to 'src/drivers/St7789.cpp')
-rw-r--r--src/drivers/St7789.cpp42
1 files changed, 26 insertions, 16 deletions
diff --git a/src/drivers/St7789.cpp b/src/drivers/St7789.cpp
index e583aac8..6824acd8 100644
--- a/src/drivers/St7789.cpp
+++ b/src/drivers/St7789.cpp
@@ -3,16 +3,17 @@
#include <libraries/delay/nrf_delay.h>
#include <nrfx_log.h>
#include "drivers/Spi.h"
+#include "drivers/PinMap.h"
using namespace Pinetime::Drivers;
-St7789::St7789(Spi& spi, uint8_t pinDataCommand, uint8_t pinReset) : spi {spi}, pinDataCommand {pinDataCommand}, pinReset {pinReset} {
+St7789::St7789(Spi& spi) : spi {spi} {
}
void St7789::Init() {
- nrf_gpio_cfg_output(pinDataCommand);
- nrf_gpio_cfg_output(pinReset);
- nrf_gpio_pin_set(pinReset);
+ nrf_gpio_cfg_output(PinMap::LcdDataCommand);
+ nrf_gpio_cfg_output(PinMap::LcdReset);
+ nrf_gpio_pin_set(PinMap::LcdReset);
HardwareReset();
SoftwareReset();
SleepOut();
@@ -29,18 +30,28 @@ void St7789::Init() {
DisplayOn();
}
+void St7789::EnableDataMode(bool isStart) {
+ if (isStart) {
+ nrf_gpio_pin_set(PinMap::LcdDataCommand);
+ }
+}
+
+void St7789::EnableCommandMode(bool isStart) {
+ if (isStart) {
+ nrf_gpio_pin_clear(PinMap::LcdDataCommand);
+ }
+}
+
void St7789::WriteCommand(uint8_t cmd) {
- nrf_gpio_pin_clear(pinDataCommand);
- WriteSpi(&cmd, 1);
+ WriteSpi(&cmd, 1, EnableCommandMode);
}
void St7789::WriteData(uint8_t data) {
- nrf_gpio_pin_set(pinDataCommand);
- WriteSpi(&data, 1);
+ WriteSpi(&data, 1, EnableDataMode);
}
-void St7789::WriteSpi(const uint8_t* data, size_t size) {
- spi.Write(data, size);
+void St7789::WriteSpi(const uint8_t* data, size_t size, void (*TransactionHook)(bool)) {
+ spi.Write(data, size, TransactionHook);
}
void St7789::SoftwareReset() {
@@ -152,24 +163,23 @@ void St7789::Uninit() {
void St7789::DrawBuffer(uint16_t x, uint16_t y, uint16_t width, uint16_t height, const uint8_t* data, size_t size) {
SetAddrWindow(x, y, x + width - 1, y + height - 1);
- nrf_gpio_pin_set(pinDataCommand);
- WriteSpi(data, size);
+ WriteSpi(data, size, EnableDataMode);
}
void St7789::HardwareReset() {
- nrf_gpio_pin_clear(pinReset);
+ nrf_gpio_pin_clear(PinMap::LcdReset);
nrf_delay_ms(10);
- nrf_gpio_pin_set(pinReset);
+ nrf_gpio_pin_set(PinMap::LcdReset);
}
void St7789::Sleep() {
SleepIn();
- nrf_gpio_cfg_default(pinDataCommand);
+ nrf_gpio_cfg_default(PinMap::LcdDataCommand);
NRF_LOG_INFO("[LCD] Sleep");
}
void St7789::Wakeup() {
- nrf_gpio_cfg_output(pinDataCommand);
+ nrf_gpio_cfg_output(PinMap::LcdDataCommand);
SleepOut();
VerticalScrollStartAddress(verticalScrollingStartAddress);
DisplayOn();