Avoid storing lambda

This commit is contained in:
mark9064 2024-04-11 00:03:36 +01:00 committed by JF
parent 9a7ba405e1
commit 24e6a2f8ab
6 changed files with 14 additions and 29 deletions

View File

@ -9,8 +9,8 @@ Spi::Spi(SpiMaster& spiMaster, uint8_t pinCsn) : spiMaster {spiMaster}, pinCsn {
nrf_gpio_pin_set(pinCsn); nrf_gpio_pin_set(pinCsn);
} }
bool Spi::Write(const uint8_t* data, size_t size, std::function<void(bool)> TransactionHook) { bool Spi::Write(const uint8_t* data, size_t size, const std::function<void()>& transactionHook) {
return spiMaster.Write(pinCsn, data, size, TransactionHook); return spiMaster.Write(pinCsn, data, size, transactionHook);
} }
bool Spi::Read(uint8_t* cmd, size_t cmdSize, uint8_t* data, size_t dataSize) { bool Spi::Read(uint8_t* cmd, size_t cmdSize, uint8_t* data, size_t dataSize) {

View File

@ -15,7 +15,7 @@ namespace Pinetime {
Spi& operator=(Spi&&) = delete; Spi& operator=(Spi&&) = delete;
bool Init(); bool Init();
bool Write(const uint8_t* data, size_t size, std::function<void(bool)> TransactionHook); bool Write(const uint8_t* data, size_t size, const std::function<void()>& transactionHook);
bool Read(uint8_t* cmd, size_t cmdSize, uint8_t* data, size_t dataSize); bool Read(uint8_t* cmd, size_t cmdSize, uint8_t* data, size_t dataSize);
bool WriteCmdAndBuffer(const uint8_t* cmd, size_t cmdSize, const uint8_t* data, size_t dataSize); bool WriteCmdAndBuffer(const uint8_t* cmd, size_t cmdSize, const uint8_t* data, size_t dataSize);
void Sleep(); void Sleep();

View File

@ -137,9 +137,6 @@ void SpiMaster::OnEndEvent() {
spiBaseAddress->TASKS_START = 1; spiBaseAddress->TASKS_START = 1;
} else { } else {
nrf_gpio_pin_set(this->pinCsn); nrf_gpio_pin_set(this->pinCsn);
if (this->TransactionHook != nullptr) {
this->TransactionHook(false);
}
currentBufferAddr = 0; currentBufferAddr = 0;
BaseType_t xHigherPriorityTaskWoken = pdFALSE; BaseType_t xHigherPriorityTaskWoken = pdFALSE;
xSemaphoreGiveFromISR(mutex, &xHigherPriorityTaskWoken); xSemaphoreGiveFromISR(mutex, &xHigherPriorityTaskWoken);
@ -170,13 +167,12 @@ void SpiMaster::PrepareRx(const uint32_t bufferAddress, const size_t size) {
spiBaseAddress->EVENTS_END = 0; spiBaseAddress->EVENTS_END = 0;
} }
bool SpiMaster::Write(uint8_t pinCsn, const uint8_t* data, size_t size, std::function<void(bool)> TransactionHook) { bool SpiMaster::Write(uint8_t pinCsn, const uint8_t* data, size_t size, const std::function<void()>& transactionHook) {
if (data == nullptr) if (data == nullptr)
return false; return false;
auto ok = xSemaphoreTake(mutex, portMAX_DELAY); auto ok = xSemaphoreTake(mutex, portMAX_DELAY);
ASSERT(ok == true); ASSERT(ok == true);
this->TransactionHook = TransactionHook;
this->pinCsn = pinCsn; this->pinCsn = pinCsn;
if (size == 1) { if (size == 1) {
@ -185,8 +181,8 @@ bool SpiMaster::Write(uint8_t pinCsn, const uint8_t* data, size_t size, std::fun
DisableWorkaroundForFtpan58(spiBaseAddress, 0, 0); DisableWorkaroundForFtpan58(spiBaseAddress, 0, 0);
} }
if (this->TransactionHook != nullptr) { if (transactionHook != nullptr) {
this->TransactionHook(true); transactionHook();
} }
nrf_gpio_pin_clear(this->pinCsn); nrf_gpio_pin_clear(this->pinCsn);
@ -203,9 +199,6 @@ bool SpiMaster::Write(uint8_t pinCsn, const uint8_t* data, size_t size, std::fun
while (spiBaseAddress->EVENTS_END == 0) while (spiBaseAddress->EVENTS_END == 0)
; ;
nrf_gpio_pin_set(this->pinCsn); nrf_gpio_pin_set(this->pinCsn);
if (this->TransactionHook != nullptr) {
this->TransactionHook(false);
}
currentBufferAddr = 0; currentBufferAddr = 0;
DisableWorkaroundForFtpan58(spiBaseAddress, 0, 0); DisableWorkaroundForFtpan58(spiBaseAddress, 0, 0);
@ -219,7 +212,6 @@ bool SpiMaster::Write(uint8_t pinCsn, const uint8_t* data, size_t size, std::fun
bool SpiMaster::Read(uint8_t pinCsn, uint8_t* cmd, size_t cmdSize, uint8_t* data, size_t dataSize) { bool SpiMaster::Read(uint8_t pinCsn, uint8_t* cmd, size_t cmdSize, uint8_t* data, size_t dataSize) {
xSemaphoreTake(mutex, portMAX_DELAY); xSemaphoreTake(mutex, portMAX_DELAY);
this->TransactionHook = nullptr;
this->pinCsn = pinCsn; this->pinCsn = pinCsn;
DisableWorkaroundForFtpan58(spiBaseAddress, 0, 0); DisableWorkaroundForFtpan58(spiBaseAddress, 0, 0);
spiBaseAddress->INTENCLR = (1 << 6); spiBaseAddress->INTENCLR = (1 << 6);
@ -267,8 +259,6 @@ void SpiMaster::Wakeup() {
bool SpiMaster::WriteCmdAndBuffer(uint8_t pinCsn, const uint8_t* cmd, size_t cmdSize, const uint8_t* data, size_t dataSize) { bool SpiMaster::WriteCmdAndBuffer(uint8_t pinCsn, const uint8_t* cmd, size_t cmdSize, const uint8_t* data, size_t dataSize) {
xSemaphoreTake(mutex, portMAX_DELAY); xSemaphoreTake(mutex, portMAX_DELAY);
this->TransactionHook = nullptr;
this->pinCsn = pinCsn; this->pinCsn = pinCsn;
DisableWorkaroundForFtpan58(spiBaseAddress, 0, 0); DisableWorkaroundForFtpan58(spiBaseAddress, 0, 0);
spiBaseAddress->INTENCLR = (1 << 6); spiBaseAddress->INTENCLR = (1 << 6);

View File

@ -32,7 +32,7 @@ namespace Pinetime {
SpiMaster& operator=(SpiMaster&&) = delete; SpiMaster& operator=(SpiMaster&&) = delete;
bool Init(); bool Init();
bool Write(uint8_t pinCsn, const uint8_t* data, size_t size, std::function<void(bool)> TransactionHook); bool Write(uint8_t pinCsn, const uint8_t* data, size_t size, const std::function<void()>& transactionHook);
bool Read(uint8_t pinCsn, uint8_t* cmd, size_t cmdSize, uint8_t* data, size_t dataSize); bool Read(uint8_t pinCsn, uint8_t* cmd, size_t cmdSize, uint8_t* data, size_t dataSize);
bool WriteCmdAndBuffer(uint8_t pinCsn, const uint8_t* cmd, size_t cmdSize, const uint8_t* data, size_t dataSize); bool WriteCmdAndBuffer(uint8_t pinCsn, const uint8_t* cmd, size_t cmdSize, const uint8_t* data, size_t dataSize);
@ -51,7 +51,6 @@ namespace Pinetime {
NRF_SPIM_Type* spiBaseAddress; NRF_SPIM_Type* spiBaseAddress;
uint8_t pinCsn; uint8_t pinCsn;
std::function<void(bool)> TransactionHook;
SpiMaster::SpiModule spi; SpiMaster::SpiModule spi;
SpiMaster::Parameters params; SpiMaster::Parameters params;

View File

@ -34,10 +34,8 @@ void St7789::WriteData(uint8_t data) {
} }
void St7789::WriteData(const uint8_t* data, size_t size) { void St7789::WriteData(const uint8_t* data, size_t size) {
WriteSpi(data, size, [pinDataCommand = pinDataCommand](bool isStart) { WriteSpi(data, size, [pinDataCommand = pinDataCommand]() {
if (isStart) { nrf_gpio_pin_set(pinDataCommand);
nrf_gpio_pin_set(pinDataCommand);
}
}); });
} }
@ -46,15 +44,13 @@ void St7789::WriteCommand(uint8_t data) {
} }
void St7789::WriteCommand(const uint8_t* data, size_t size) { void St7789::WriteCommand(const uint8_t* data, size_t size) {
WriteSpi(data, size, [pinDataCommand = pinDataCommand](bool isStart) { WriteSpi(data, size, [pinDataCommand = pinDataCommand]() {
if (isStart) { nrf_gpio_pin_clear(pinDataCommand);
nrf_gpio_pin_clear(pinDataCommand);
}
}); });
} }
void St7789::WriteSpi(const uint8_t* data, size_t size, std::function<void(bool)> TransactionHook) { void St7789::WriteSpi(const uint8_t* data, size_t size, const std::function<void()>& transactionHook) {
spi.Write(data, size, TransactionHook); spi.Write(data, size, transactionHook);
} }
void St7789::SoftwareReset() { void St7789::SoftwareReset() {

View File

@ -47,7 +47,7 @@ namespace Pinetime {
void SetVdv(); void SetVdv();
void WriteCommand(uint8_t cmd); void WriteCommand(uint8_t cmd);
void WriteCommand(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, std::function<void(bool)> TransactionHook); void WriteSpi(const uint8_t* data, size_t size, const std::function<void()>& transactionHook);
enum class Commands : uint8_t { enum class Commands : uint8_t {
SoftwareReset = 0x01, SoftwareReset = 0x01,