From 534978df138a8bbf4a6dd7ee44d4d0adc762ba2c Mon Sep 17 00:00:00 2001 From: smarq8 Date: Sun, 13 Mar 2022 17:19:45 +0100 Subject: [PATCH 01/22] fixing beginTransaction() thread safety --- libraries/SPI/src/SPI.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index b9225f4f29e..58b21193c8c 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -133,6 +133,7 @@ void SPIClass::setBitOrder(uint8_t bitOrder) void SPIClass::beginTransaction(SPISettings settings) { + spiLock(_spi); //check if last freq changed uint32_t cdiv = spiGetClockDiv(_spi); if(_freq != settings._clock || _div != cdiv) { @@ -148,6 +149,7 @@ void SPIClass::endTransaction() if(_inTransaction){ _inTransaction = false; spiEndTransaction(_spi); + spiUnlock(_spi); } } From 957f81879a9b701c179e98beb377c79952a824cf Mon Sep 17 00:00:00 2001 From: smarq8 Date: Sun, 13 Mar 2022 17:22:45 +0100 Subject: [PATCH 02/22] fixing beginTransaction thread safety --- cores/esp32/esp32-hal-spi.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/cores/esp32/esp32-hal-spi.c b/cores/esp32/esp32-hal-spi.c index c9a7c1289c8..f20fafb17ae 100644 --- a/cores/esp32/esp32-hal-spi.c +++ b/cores/esp32/esp32-hal-spi.c @@ -888,13 +888,23 @@ void spiTransferBits(spi_t * spi, uint32_t data, uint32_t * out, uint8_t bits) #define MSB_24_SET(var, val) { uint8_t * d = (uint8_t *)&(val); (var) = d[2] | (d[1] << 8) | (d[0] << 16); } #define MSB_16_SET(var, val) { (var) = (((val) & 0xFF00) >> 8) | (((val) & 0xFF) << 8); } #define MSB_PIX_SET(var, val) { uint8_t * d = (uint8_t *)&(val); (var) = d[1] | (d[0] << 8) | (d[3] << 16) | (d[2] << 24); } - +void spiLock(spi_t * spi){ + if(!spi) { + return; + } + SPI_MUTEX_LOCK(); +} +void spiUnlock(spi_t * spi){ + if(!spi) { + return; + } + SPI_MUTEX_UNLOCK(); +} void spiTransaction(spi_t * spi, uint32_t clockDiv, uint8_t dataMode, uint8_t bitOrder) { if(!spi) { return; } - SPI_MUTEX_LOCK(); spi->dev->clock.val = clockDiv; switch (dataMode) { case SPI_MODE1: @@ -945,7 +955,6 @@ void spiSimpleTransaction(spi_t * spi) if(!spi) { return; } - SPI_MUTEX_LOCK(); } void spiEndTransaction(spi_t * spi) From db409b94c221830304a9b1bacf4103d8ba14e96c Mon Sep 17 00:00:00 2001 From: smarq8 Date: Sun, 13 Mar 2022 17:23:54 +0100 Subject: [PATCH 03/22] fixing beginTransaction() --- cores/esp32/esp32-hal-spi.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cores/esp32/esp32-hal-spi.h b/cores/esp32/esp32-hal-spi.h index 835e5faf0a6..19cce2d8314 100644 --- a/cores/esp32/esp32-hal-spi.h +++ b/cores/esp32/esp32-hal-spi.h @@ -114,6 +114,8 @@ void spiTransferBits(spi_t * spi, uint32_t data, uint32_t * out, uint8_t bits); /* * New (EXPERIMENTAL) Transaction lock based API (lock once until endTransaction) * */ +void spiLock(spi_t * spi); +void spiUnlock(spi_t * spi); void spiTransaction(spi_t * spi, uint32_t clockDiv, uint8_t dataMode, uint8_t bitOrder); void spiSimpleTransaction(spi_t * spi); void spiEndTransaction(spi_t * spi); From 7c2d808d920ef2d0c7c1b761a1aa5f669cd6d118 Mon Sep 17 00:00:00 2001 From: dobijasek Date: Mon, 14 Mar 2022 17:03:44 +0100 Subject: [PATCH 04/22] fixing beginTransaction() by protecting _freq and _div by additional mutex --- cores/esp32/esp32-hal-spi.c | 15 +++------------ cores/esp32/esp32-hal-spi.h | 4 +--- libraries/SPI/src/SPI.cpp | 14 +++++++++----- libraries/SPI/src/SPI.h | 7 +++++++ 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/cores/esp32/esp32-hal-spi.c b/cores/esp32/esp32-hal-spi.c index 68f2b9164bb..fd5e6723b7e 100644 --- a/cores/esp32/esp32-hal-spi.c +++ b/cores/esp32/esp32-hal-spi.c @@ -1002,23 +1002,13 @@ void spiTransferBits(spi_t * spi, uint32_t data, uint32_t * out, uint8_t bits) #define MSB_24_SET(var, val) { uint8_t * d = (uint8_t *)&(val); (var) = d[2] | (d[1] << 8) | (d[0] << 16); } #define MSB_16_SET(var, val) { (var) = (((val) & 0xFF00) >> 8) | (((val) & 0xFF) << 8); } #define MSB_PIX_SET(var, val) { uint8_t * d = (uint8_t *)&(val); (var) = d[1] | (d[0] << 8) | (d[3] << 16) | (d[2] << 24); } -void spiLock(spi_t * spi){ - if(!spi) { - return; - } - SPI_MUTEX_LOCK(); -} -void spiUnlock(spi_t * spi){ - if(!spi) { - return; - } - SPI_MUTEX_UNLOCK(); -} + void spiTransaction(spi_t * spi, uint32_t clockDiv, uint8_t dataMode, uint8_t bitOrder) { if(!spi) { return; } + SPI_MUTEX_LOCK(); spi->dev->clock.val = clockDiv; switch (dataMode) { case SPI_MODE1: @@ -1069,6 +1059,7 @@ void spiSimpleTransaction(spi_t * spi) if(!spi) { return; } + SPI_MUTEX_UNLOCK(); } void spiEndTransaction(spi_t * spi) diff --git a/cores/esp32/esp32-hal-spi.h b/cores/esp32/esp32-hal-spi.h index bc090cff88e..b71ff6f6ea4 100644 --- a/cores/esp32/esp32-hal-spi.h +++ b/cores/esp32/esp32-hal-spi.h @@ -1,4 +1,4 @@ -// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +SPI_MUTEX_LOCK();// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -119,8 +119,6 @@ void spiTransferBits(spi_t * spi, uint32_t data, uint32_t * out, uint8_t bits); /* * New (EXPERIMENTAL) Transaction lock based API (lock once until endTransaction) * */ -void spiLock(spi_t * spi); -void spiUnlock(spi_t * spi); void spiTransaction(spi_t * spi, uint32_t clockDiv, uint8_t dataMode, uint8_t bitOrder); void spiSimpleTransaction(spi_t * spi); void spiEndTransaction(spi_t * spi); diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index 00360345215..e01c2a2a787 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -106,19 +106,23 @@ void SPIClass::setHwCs(bool use) void SPIClass::setFrequency(uint32_t freq) { - //check if last freq changed + SPI_PARAM_LOCK(); + //check if last freq changed uint32_t cdiv = spiGetClockDiv(_spi); if(_freq != freq || _div != cdiv) { _freq = freq; _div = spiFrequencyToClockDiv(_freq); spiSetClockDiv(_spi, _div); } + SPI_PARAM_UNLOCK(); } void SPIClass::setClockDivider(uint32_t clockDiv) { - _div = clockDiv; + SPI_PARAM_LOCK(); + _div = clockDiv; spiSetClockDiv(_spi, _div); + SPI_PARAM_UNLOCK(); } uint32_t SPIClass::getClockDivider() @@ -138,8 +142,8 @@ void SPIClass::setBitOrder(uint8_t bitOrder) void SPIClass::beginTransaction(SPISettings settings) { - spiLock(_spi); - //check if last freq changed + SPI_PARAM_LOCK(); + //check if last freq changed uint32_t cdiv = spiGetClockDiv(_spi); if(_freq != settings._clock || _div != cdiv) { _freq = settings._clock; @@ -147,6 +151,7 @@ void SPIClass::beginTransaction(SPISettings settings) } spiTransaction(_spi, _div, settings._dataMode, settings._bitOrder); _inTransaction = true; + SPI_PARAM_UNLOCK(); } void SPIClass::endTransaction() @@ -154,7 +159,6 @@ void SPIClass::endTransaction() if(_inTransaction){ _inTransaction = false; spiEndTransaction(_spi); - spiUnlock(_spi); } } diff --git a/libraries/SPI/src/SPI.h b/libraries/SPI/src/SPI.h index 45e432b1041..bc4ed75d43a 100644 --- a/libraries/SPI/src/SPI.h +++ b/libraries/SPI/src/SPI.h @@ -25,6 +25,10 @@ #include "pins_arduino.h" #include "esp32-hal-spi.h" +#if !CONFIG_DISABLE_HAL_LOCKS +#include "FreeRTOS.h" +#endif + #define SPI_HAS_TRANSACTION class SPISettings @@ -49,6 +53,9 @@ class SPIClass int8_t _ss; uint32_t _div; uint32_t _freq; + #if !CONFIG_DISABLE_HAL_LOCKS + xSemaphoreHandle paramLock=NULL; + #endif bool _inTransaction; void writePattern_(const uint8_t * data, uint8_t size, uint8_t repeat); From 5f4bc38fccdd4ba9ec1ec0f7bf8eb0191b946ff7 Mon Sep 17 00:00:00 2001 From: smarq8 Date: Mon, 14 Mar 2022 17:08:02 +0100 Subject: [PATCH 05/22] Update esp32-hal-spi.h --- cores/esp32/esp32-hal-spi.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cores/esp32/esp32-hal-spi.h b/cores/esp32/esp32-hal-spi.h index b71ff6f6ea4..6fbb7b3dca7 100644 --- a/cores/esp32/esp32-hal-spi.h +++ b/cores/esp32/esp32-hal-spi.h @@ -1,4 +1,4 @@ -SPI_MUTEX_LOCK();// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD +// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. From 70431bb63ce11de855b3fd6bacfbf53ddd8e783f Mon Sep 17 00:00:00 2001 From: smarq8 Date: Mon, 14 Mar 2022 17:09:29 +0100 Subject: [PATCH 06/22] Update SPI.cpp --- libraries/SPI/src/SPI.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index e01c2a2a787..f713d4159b6 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -21,6 +21,14 @@ #include "SPI.h" +#if !CONFIG_DISABLE_HAL_LOCKS +#define SPI_PARAM_LOCK() do {} while (xSemaphoreTake(paramLock, portMAX_DELAY) != pdPASS) +#define SPI_PARAM_UNLOCK() xSemaphoreGive(paramLock) +#else +#define SPI_PARAM_LOCK() +#define SPI_PARAM_UNLOCK() +#endif + SPIClass::SPIClass(uint8_t spi_bus) :_spi_num(spi_bus) ,_spi(NULL) From 5b2e387451289f6eb1c9578bb21b5e68dea00032 Mon Sep 17 00:00:00 2001 From: smarq8 Date: Mon, 14 Mar 2022 17:19:20 +0100 Subject: [PATCH 07/22] add missing code --- libraries/SPI/src/SPI.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index f713d4159b6..60f1a219f29 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -56,6 +56,12 @@ void SPIClass::begin(int8_t sck, int8_t miso, int8_t mosi, int8_t ss) if(!_spi) { return; } + #if !CONFIG_DISABLE_HAL_LOCKS + if(paramLock==NULL){ + paramLock = xSemaphoreCreateMutex(); + if(paramLock==NULL) return; // fail to create mutex so abort initialization + } + #endif if(sck == -1 && miso == -1 && mosi == -1 && ss == -1) { #if CONFIG_IDF_TARGET_ESP32S2 From 8be51a44b8d3eb6ab4462079d8da383a9598e4fc Mon Sep 17 00:00:00 2001 From: smarq8 Date: Mon, 14 Mar 2022 17:27:56 +0100 Subject: [PATCH 08/22] ensure to lock params for whole transaction --- libraries/SPI/src/SPI.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index 60f1a219f29..280f672e4c7 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -165,7 +165,6 @@ void SPIClass::beginTransaction(SPISettings settings) } spiTransaction(_spi, _div, settings._dataMode, settings._bitOrder); _inTransaction = true; - SPI_PARAM_UNLOCK(); } void SPIClass::endTransaction() @@ -173,6 +172,7 @@ void SPIClass::endTransaction() if(_inTransaction){ _inTransaction = false; spiEndTransaction(_spi); + SPI_PARAM_UNLOCK(); } } From 41be2fc239eadabf189764f8aeb9b479af5eba16 Mon Sep 17 00:00:00 2001 From: dobijasek Date: Tue, 29 Mar 2022 15:59:33 +0200 Subject: [PATCH 09/22] fix incorrect mutex macro at spiSimpleTransaction --- cores/esp32/esp32-hal-spi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cores/esp32/esp32-hal-spi.c b/cores/esp32/esp32-hal-spi.c index fd5e6723b7e..327def9df87 100644 --- a/cores/esp32/esp32-hal-spi.c +++ b/cores/esp32/esp32-hal-spi.c @@ -1059,7 +1059,7 @@ void spiSimpleTransaction(spi_t * spi) if(!spi) { return; } - SPI_MUTEX_UNLOCK(); + SPI_MUTEX_LOCK(); } void spiEndTransaction(spi_t * spi) From 2d1098fb4b0e6a563c1ffdb75c8259b5ec563b81 Mon Sep 17 00:00:00 2001 From: dobijasek Date: Tue, 29 Mar 2022 16:00:00 +0200 Subject: [PATCH 10/22] added paramLock destructor --- libraries/SPI/src/SPI.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index 280f672e4c7..b077df17b63 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -103,6 +103,9 @@ void SPIClass::end() spiDetachMOSI(_spi, _mosi); setHwCs(false); spiStopBus(_spi); + if(paramLock!=NULL){ // not sure if that statement is mandatory + vSemaphoreDelete(paramLock); + } _spi = NULL; } @@ -172,7 +175,7 @@ void SPIClass::endTransaction() if(_inTransaction){ _inTransaction = false; spiEndTransaction(_spi); - SPI_PARAM_UNLOCK(); + SPI_PARAM_UNLOCK(); // <-- Im not sure should it be here or right after spiTransaction() } } From 15fcc21fb5253008ee336fd65a4f11ffd7ca931d Mon Sep 17 00:00:00 2001 From: dobijasek Date: Tue, 29 Mar 2022 16:41:24 +0200 Subject: [PATCH 11/22] move create/delete to contructor/destructor --- libraries/SPI/src/SPI.cpp | 24 +++++++++++++++++------- libraries/SPI/src/SPI.h | 1 + 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index b077df17b63..8cb11a1db4e 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -40,7 +40,21 @@ SPIClass::SPIClass(uint8_t spi_bus) ,_div(0) ,_freq(1000000) ,_inTransaction(false) -{} +{ + #if !CONFIG_DISABLE_HAL_LOCKS + if(paramLock==NULL){ + paramLock = xSemaphoreCreateMutex(); + if(paramLock==NULL){ + log_e("xSemaphoreCreateMutex failed"); + return; + } + #endif +} + +SPIClass::~SPIClass() +{ + end(); +} void SPIClass::begin(int8_t sck, int8_t miso, int8_t mosi, int8_t ss) { @@ -56,12 +70,6 @@ void SPIClass::begin(int8_t sck, int8_t miso, int8_t mosi, int8_t ss) if(!_spi) { return; } - #if !CONFIG_DISABLE_HAL_LOCKS - if(paramLock==NULL){ - paramLock = xSemaphoreCreateMutex(); - if(paramLock==NULL) return; // fail to create mutex so abort initialization - } - #endif if(sck == -1 && miso == -1 && mosi == -1 && ss == -1) { #if CONFIG_IDF_TARGET_ESP32S2 @@ -103,9 +111,11 @@ void SPIClass::end() spiDetachMOSI(_spi, _mosi); setHwCs(false); spiStopBus(_spi); + #if !CONFIG_DISABLE_HAL_LOCKS if(paramLock!=NULL){ // not sure if that statement is mandatory vSemaphoreDelete(paramLock); } + #endif _spi = NULL; } diff --git a/libraries/SPI/src/SPI.h b/libraries/SPI/src/SPI.h index bc4ed75d43a..2945a0f46c6 100644 --- a/libraries/SPI/src/SPI.h +++ b/libraries/SPI/src/SPI.h @@ -61,6 +61,7 @@ class SPIClass public: SPIClass(uint8_t spi_bus=HSPI); + ~SPIClass(void); void begin(int8_t sck=-1, int8_t miso=-1, int8_t mosi=-1, int8_t ss=-1); void end(); From 28943f4c776b92c453463e8a2dada500a9337027 Mon Sep 17 00:00:00 2001 From: dobijasek Date: Tue, 29 Mar 2022 17:49:44 +0200 Subject: [PATCH 12/22] moving paramLock' delete from end() to destructor --- libraries/SPI/src/SPI.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index 8cb11a1db4e..12f69344bd1 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -54,6 +54,11 @@ SPIClass::SPIClass(uint8_t spi_bus) SPIClass::~SPIClass() { end(); + #if !CONFIG_DISABLE_HAL_LOCKS + if(paramLock!=NULL){ + vSemaphoreDelete(paramLock); + } + #endif } void SPIClass::begin(int8_t sck, int8_t miso, int8_t mosi, int8_t ss) @@ -111,11 +116,6 @@ void SPIClass::end() spiDetachMOSI(_spi, _mosi); setHwCs(false); spiStopBus(_spi); - #if !CONFIG_DISABLE_HAL_LOCKS - if(paramLock!=NULL){ // not sure if that statement is mandatory - vSemaphoreDelete(paramLock); - } - #endif _spi = NULL; } From 5a30b8a32d44569e25ab65d539765dacdd955090 Mon Sep 17 00:00:00 2001 From: dobijasek Date: Tue, 29 Mar 2022 17:49:44 +0200 Subject: [PATCH 13/22] . --- libraries/SPI/src/SPI.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index 8cb11a1db4e..12f69344bd1 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -54,6 +54,11 @@ SPIClass::SPIClass(uint8_t spi_bus) SPIClass::~SPIClass() { end(); + #if !CONFIG_DISABLE_HAL_LOCKS + if(paramLock!=NULL){ + vSemaphoreDelete(paramLock); + } + #endif } void SPIClass::begin(int8_t sck, int8_t miso, int8_t mosi, int8_t ss) @@ -111,11 +116,6 @@ void SPIClass::end() spiDetachMOSI(_spi, _mosi); setHwCs(false); spiStopBus(_spi); - #if !CONFIG_DISABLE_HAL_LOCKS - if(paramLock!=NULL){ // not sure if that statement is mandatory - vSemaphoreDelete(paramLock); - } - #endif _spi = NULL; } From eaca28f9d4ffe5dc5196c07e98095857ff44a4c4 Mon Sep 17 00:00:00 2001 From: dobijasek Date: Tue, 29 Mar 2022 17:57:26 +0200 Subject: [PATCH 14/22] paramLock assign to null --- libraries/SPI/src/SPI.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index 12f69344bd1..3feb74929ac 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -57,6 +57,7 @@ SPIClass::~SPIClass() #if !CONFIG_DISABLE_HAL_LOCKS if(paramLock!=NULL){ vSemaphoreDelete(paramLock); + paramLock = NULL; } #endif } From cf1363a6b1eeb35068ef6534297b68b3facf220a Mon Sep 17 00:00:00 2001 From: dobijasek Date: Tue, 29 Mar 2022 19:27:38 +0200 Subject: [PATCH 15/22] fix type typo and include files --- libraries/SPI/src/SPI.h | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/libraries/SPI/src/SPI.h b/libraries/SPI/src/SPI.h index 2945a0f46c6..b494835ed15 100644 --- a/libraries/SPI/src/SPI.h +++ b/libraries/SPI/src/SPI.h @@ -24,10 +24,8 @@ #include #include "pins_arduino.h" #include "esp32-hal-spi.h" - -#if !CONFIG_DISABLE_HAL_LOCKS -#include "FreeRTOS.h" -#endif +#include "freertos/FreeRTOS.h" +#include "freertos/semphr.h" #define SPI_HAS_TRANSACTION @@ -54,7 +52,7 @@ class SPIClass uint32_t _div; uint32_t _freq; #if !CONFIG_DISABLE_HAL_LOCKS - xSemaphoreHandle paramLock=NULL; + xSemaphoreHandle_t paramLock=NULL; #endif bool _inTransaction; void writePattern_(const uint8_t * data, uint8_t size, uint8_t repeat); From 3e42a878c81a15200f42e0c7cac3d236fb0bf0bb Mon Sep 17 00:00:00 2001 From: dobijasek Date: Tue, 29 Mar 2022 19:32:32 +0200 Subject: [PATCH 16/22] added paramLock initializer --- libraries/SPI/src/SPI.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index 3feb74929ac..cae1b194ab6 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -40,6 +40,9 @@ SPIClass::SPIClass(uint8_t spi_bus) ,_div(0) ,_freq(1000000) ,_inTransaction(false) + #if !CONFIG_DISABLE_HAL_LOCKS + ,paramLock(NULL) + #endif { #if !CONFIG_DISABLE_HAL_LOCKS if(paramLock==NULL){ From b4a6329d27016085a0ee0640d2f3a9deee604ad6 Mon Sep 17 00:00:00 2001 From: dobijasek Date: Tue, 29 Mar 2022 19:38:00 +0200 Subject: [PATCH 17/22] fix type typo --- libraries/SPI/src/SPI.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/SPI/src/SPI.h b/libraries/SPI/src/SPI.h index b494835ed15..18fad8f0704 100644 --- a/libraries/SPI/src/SPI.h +++ b/libraries/SPI/src/SPI.h @@ -52,7 +52,7 @@ class SPIClass uint32_t _div; uint32_t _freq; #if !CONFIG_DISABLE_HAL_LOCKS - xSemaphoreHandle_t paramLock=NULL; + SemaphoreHandle_t paramLock=NULL; #endif bool _inTransaction; void writePattern_(const uint8_t * data, uint8_t size, uint8_t repeat); From 22e2881482f7e027258ca418d04caceaf4867186 Mon Sep 17 00:00:00 2001 From: dobijasek Date: Tue, 29 Mar 2022 19:56:49 +0200 Subject: [PATCH 18/22] missing include for log_e --- libraries/SPI/src/SPI.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index cae1b194ab6..cc4a5ace9fd 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -20,6 +20,7 @@ */ #include "SPI.h" +#include "esp32-hal-log.h" #if !CONFIG_DISABLE_HAL_LOCKS #define SPI_PARAM_LOCK() do {} while (xSemaphoreTake(paramLock, portMAX_DELAY) != pdPASS) From 64cb9c8c174d70bfb8a0523f8b3c3695c62934e8 Mon Sep 17 00:00:00 2001 From: dobijasek Date: Tue, 29 Mar 2022 20:04:26 +0200 Subject: [PATCH 19/22] fix destructor declaration --- libraries/SPI/src/SPI.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/SPI/src/SPI.h b/libraries/SPI/src/SPI.h index 18fad8f0704..8aaf99ad785 100644 --- a/libraries/SPI/src/SPI.h +++ b/libraries/SPI/src/SPI.h @@ -59,7 +59,7 @@ class SPIClass public: SPIClass(uint8_t spi_bus=HSPI); - ~SPIClass(void); + ~SPIClass(); void begin(int8_t sck=-1, int8_t miso=-1, int8_t mosi=-1, int8_t ss=-1); void end(); From d157e52f2521cca5b3f3a31c7dcd174057b7a176 Mon Sep 17 00:00:00 2001 From: dobijasek Date: Tue, 29 Mar 2022 21:04:27 +0200 Subject: [PATCH 20/22] missing paranthases --- libraries/SPI/src/SPI.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index cc4a5ace9fd..3c64767f301 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -52,6 +52,7 @@ SPIClass::SPIClass(uint8_t spi_bus) log_e("xSemaphoreCreateMutex failed"); return; } + } #endif } From beda8cd7af7252564ba3d40f5d0ff36b13bd488c Mon Sep 17 00:00:00 2001 From: dobijasek Date: Tue, 29 Mar 2022 21:04:27 +0200 Subject: [PATCH 21/22] missing paranthases --- libraries/SPI/src/SPI.cpp | 1 + libraries/SPI/src/SPI.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index cc4a5ace9fd..3c64767f301 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -52,6 +52,7 @@ SPIClass::SPIClass(uint8_t spi_bus) log_e("xSemaphoreCreateMutex failed"); return; } + } #endif } diff --git a/libraries/SPI/src/SPI.h b/libraries/SPI/src/SPI.h index 8aaf99ad785..19c7a1b8247 100644 --- a/libraries/SPI/src/SPI.h +++ b/libraries/SPI/src/SPI.h @@ -51,10 +51,10 @@ class SPIClass int8_t _ss; uint32_t _div; uint32_t _freq; + bool _inTransaction; #if !CONFIG_DISABLE_HAL_LOCKS SemaphoreHandle_t paramLock=NULL; #endif - bool _inTransaction; void writePattern_(const uint8_t * data, uint8_t size, uint8_t repeat); public: From 1b3c34a8708f19b9d19230212f026801b8e85943 Mon Sep 17 00:00:00 2001 From: Me No Dev Date: Mon, 9 May 2022 23:10:21 +0300 Subject: [PATCH 22/22] Fix indentation --- cores/esp32/esp32-hal-spi.c | 4 ++-- libraries/SPI/src/SPI.cpp | 24 ++++++++++++------------ libraries/SPI/src/SPI.h | 4 ++-- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/cores/esp32/esp32-hal-spi.c b/cores/esp32/esp32-hal-spi.c index e350fcaee9b..39ad027be55 100644 --- a/cores/esp32/esp32-hal-spi.c +++ b/cores/esp32/esp32-hal-spi.c @@ -1091,7 +1091,7 @@ void spiTransaction(spi_t * spi, uint32_t clockDiv, uint8_t dataMode, uint8_t bi if(!spi) { return; } - SPI_MUTEX_LOCK(); + SPI_MUTEX_LOCK(); spi->dev->clock.val = clockDiv; switch (dataMode) { case SPI_MODE1: @@ -1142,7 +1142,7 @@ void spiSimpleTransaction(spi_t * spi) if(!spi) { return; } - SPI_MUTEX_LOCK(); + SPI_MUTEX_LOCK(); } void spiEndTransaction(spi_t * spi) diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index 6164e2f90c3..c3f095e523a 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -41,11 +41,9 @@ SPIClass::SPIClass(uint8_t spi_bus) ,_div(0) ,_freq(1000000) ,_inTransaction(false) - #if !CONFIG_DISABLE_HAL_LOCKS +#if !CONFIG_DISABLE_HAL_LOCKS ,paramLock(NULL) - #endif { - #if !CONFIG_DISABLE_HAL_LOCKS if(paramLock==NULL){ paramLock = xSemaphoreCreateMutex(); if(paramLock==NULL){ @@ -53,18 +51,20 @@ SPIClass::SPIClass(uint8_t spi_bus) return; } } - #endif } +#else +{} +#endif SPIClass::~SPIClass() { end(); - #if !CONFIG_DISABLE_HAL_LOCKS +#if !CONFIG_DISABLE_HAL_LOCKS if(paramLock!=NULL){ vSemaphoreDelete(paramLock); paramLock = NULL; } - #endif +#endif } void SPIClass::begin(int8_t sck, int8_t miso, int8_t mosi, int8_t ss) @@ -140,22 +140,22 @@ void SPIClass::setHwCs(bool use) void SPIClass::setFrequency(uint32_t freq) { SPI_PARAM_LOCK(); - //check if last freq changed + //check if last freq changed uint32_t cdiv = spiGetClockDiv(_spi); if(_freq != freq || _div != cdiv) { _freq = freq; _div = spiFrequencyToClockDiv(_freq); spiSetClockDiv(_spi, _div); } - SPI_PARAM_UNLOCK(); + SPI_PARAM_UNLOCK(); } void SPIClass::setClockDivider(uint32_t clockDiv) { SPI_PARAM_LOCK(); - _div = clockDiv; + _div = clockDiv; spiSetClockDiv(_spi, _div); - SPI_PARAM_UNLOCK(); + SPI_PARAM_UNLOCK(); } uint32_t SPIClass::getClockDivider() @@ -176,7 +176,7 @@ void SPIClass::setBitOrder(uint8_t bitOrder) void SPIClass::beginTransaction(SPISettings settings) { SPI_PARAM_LOCK(); - //check if last freq changed + //check if last freq changed uint32_t cdiv = spiGetClockDiv(_spi); if(_freq != settings._clock || _div != cdiv) { _freq = settings._clock; @@ -191,7 +191,7 @@ void SPIClass::endTransaction() if(_inTransaction){ _inTransaction = false; spiEndTransaction(_spi); - SPI_PARAM_UNLOCK(); // <-- Im not sure should it be here or right after spiTransaction() + SPI_PARAM_UNLOCK(); // <-- Im not sure should it be here or right after spiTransaction() } } diff --git a/libraries/SPI/src/SPI.h b/libraries/SPI/src/SPI.h index 19c7a1b8247..97bfcdab30b 100644 --- a/libraries/SPI/src/SPI.h +++ b/libraries/SPI/src/SPI.h @@ -52,9 +52,9 @@ class SPIClass uint32_t _div; uint32_t _freq; bool _inTransaction; - #if !CONFIG_DISABLE_HAL_LOCKS +#if !CONFIG_DISABLE_HAL_LOCKS SemaphoreHandle_t paramLock=NULL; - #endif +#endif void writePattern_(const uint8_t * data, uint8_t size, uint8_t repeat); public: