From 940cd3459f95073e60c61b37519486f569aac840 Mon Sep 17 00:00:00 2001 From: mark9064 <30447455+mark9064@users.noreply.github.com> Date: Mon, 1 Apr 2024 17:14:33 +0100 Subject: Use functional abstraction for hooks --- src/drivers/St7789.cpp | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) (limited to 'src/drivers/St7789.cpp') diff --git a/src/drivers/St7789.cpp b/src/drivers/St7789.cpp index 78ad3a66..6e5d13b1 100644 --- a/src/drivers/St7789.cpp +++ b/src/drivers/St7789.cpp @@ -3,17 +3,16 @@ #include #include #include "drivers/Spi.h" -#include "drivers/PinMap.h" using namespace Pinetime::Drivers; -St7789::St7789(Spi& spi) : spi {spi} { +St7789::St7789(Spi& spi, uint8_t pinDataCommand, uint8_t pinReset) : spi {spi}, pinDataCommand {pinDataCommand}, pinReset {pinReset} { } void St7789::Init() { - nrf_gpio_cfg_output(PinMap::LcdDataCommand); - nrf_gpio_cfg_output(PinMap::LcdReset); - nrf_gpio_pin_set(PinMap::LcdReset); + nrf_gpio_cfg_output(pinDataCommand); + nrf_gpio_cfg_output(pinReset); + nrf_gpio_pin_set(pinReset); HardwareReset(); SoftwareReset(); SleepOut(); @@ -32,25 +31,29 @@ void St7789::Init() { void St7789::EnableDataMode(bool isStart) { if (isStart) { - nrf_gpio_pin_set(PinMap::LcdDataCommand); + nrf_gpio_pin_set(pinDataCommand); } } void St7789::EnableCommandMode(bool isStart) { if (isStart) { - nrf_gpio_pin_clear(PinMap::LcdDataCommand); + nrf_gpio_pin_clear(pinDataCommand); } } -void St7789::WriteCommand(uint8_t cmd) { - WriteSpi(&cmd, 1, EnableCommandMode); +void St7789::WriteData(uint8_t data) { + WriteSpi(&data, 1, [this](bool isStart) { + EnableDataMode(isStart); + }); } -void St7789::WriteData(uint8_t data) { - WriteSpi(&data, 1, EnableDataMode); +void St7789::WriteCommand(uint8_t cmd) { + WriteSpi(&cmd, 1, [this](bool isStart) { + EnableCommandMode(isStart); + }); } -void St7789::WriteSpi(const uint8_t* data, size_t size, void (*TransactionHook)(bool)) { +void St7789::WriteSpi(const uint8_t* data, size_t size, std::function TransactionHook) { spi.Write(data, size, TransactionHook); } @@ -135,7 +138,9 @@ void St7789::SetAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) { void St7789::WriteToRam(const uint8_t* data, size_t size) { WriteCommand(static_cast(Commands::WriteToRam)); - WriteSpi(data, size, EnableDataMode); + WriteSpi(data, size, [this](bool isStart) { + EnableDataMode(isStart); + }); } void St7789::SetVdv() { @@ -166,19 +171,19 @@ void St7789::DrawBuffer(uint16_t x, uint16_t y, uint16_t width, uint16_t height, } void St7789::HardwareReset() { - nrf_gpio_pin_clear(PinMap::LcdReset); + nrf_gpio_pin_clear(pinReset); nrf_delay_ms(10); - nrf_gpio_pin_set(PinMap::LcdReset); + nrf_gpio_pin_set(pinReset); } void St7789::Sleep() { SleepIn(); - nrf_gpio_cfg_default(PinMap::LcdDataCommand); + nrf_gpio_cfg_default(pinDataCommand); NRF_LOG_INFO("[LCD] Sleep"); } void St7789::Wakeup() { - nrf_gpio_cfg_output(PinMap::LcdDataCommand); + nrf_gpio_cfg_output(pinDataCommand); SleepOut(); VerticalScrollStartAddress(verticalScrollingStartAddress); DisplayOn(); -- cgit v1.2.3-70-g09d2