From b1fe60d8d42aad48bd94c20b6e93db691f159935 Mon Sep 17 00:00:00 2001 From: Andrea Gilardoni Date: Tue, 21 Jan 2025 15:09:31 +0100 Subject: [PATCH 1/3] codestyle unification --- src/utility/spi_drv.cpp | 98 ++++++++++++++++++++--------------------- src/utility/spi_drv.h | 22 ++++----- 2 files changed, 60 insertions(+), 60 deletions(-) diff --git a/src/utility/spi_drv.cpp b/src/utility/spi_drv.cpp index 2673112d..abf94240 100644 --- a/src/utility/spi_drv.cpp +++ b/src/utility/spi_drv.cpp @@ -73,52 +73,52 @@ extern WiFiClass WiFi; void SpiDrv::begin() { #ifdef ARDUINO_SAMD_MKRVIDOR4000 - FPGA.begin(); +FPGA.begin(); #endif #ifdef SPIWIFI_SS - SLAVESELECT = SPIWIFI_SS; + SLAVESELECT = SPIWIFI_SS; #endif #ifdef SPIWIFI_ACK - SLAVEREADY = SPIWIFI_ACK; + SLAVEREADY = SPIWIFI_ACK; #endif #ifdef SPIWIFI_RESET - SLAVERESET = (uint8_t)SPIWIFI_RESET; + SLAVERESET = (uint8_t)SPIWIFI_RESET; #endif #ifdef ARDUINO_SAMD_MKRVIDOR4000 - inverted_reset = false; + inverted_reset = false; #else - if (SLAVERESET > PINS_COUNT) { + if (SLAVERESET > PINS_COUNT) { inverted_reset = true; SLAVERESET = ~SLAVERESET; - } + } #endif - pinMode(SLAVESELECT, OUTPUT); - pinMode(SLAVEREADY, INPUT); - pinMode(SLAVERESET, OUTPUT); - pinMode(NINA_GPIO0, OUTPUT); + pinMode(SLAVESELECT, OUTPUT); + pinMode(SLAVEREADY, INPUT); + pinMode(SLAVERESET, OUTPUT); + pinMode(NINA_GPIO0, OUTPUT); - digitalWrite(NINA_GPIO0, HIGH); - digitalWrite(SLAVESELECT, HIGH); - digitalWrite(SLAVERESET, inverted_reset ? HIGH : LOW); - delay(10); - digitalWrite(SLAVERESET, inverted_reset ? LOW : HIGH); - delay(750); + digitalWrite(NINA_GPIO0, HIGH); + digitalWrite(SLAVESELECT, HIGH); + digitalWrite(SLAVERESET, inverted_reset ? HIGH : LOW); + delay(10); + digitalWrite(SLAVERESET, inverted_reset ? LOW : HIGH); + delay(750); - digitalWrite(NINA_GPIO0, LOW); - pinMode(NINA_GPIOIRQ, INPUT); + digitalWrite(NINA_GPIO0, LOW); + pinMode(NINA_GPIOIRQ, INPUT); - SPIWIFI.begin(); + SPIWIFI.begin(); #ifdef _DEBUG_ - INIT_TRIGGER() + INIT_TRIGGER() #endif - initialized = true; + initialized = true; } void SpiDrv::end() { @@ -165,8 +165,8 @@ int SpiDrv::waitSpiChar(unsigned char waitChar) _readChar = readChar(); //get data byte if (_readChar == ERR_CMD) { - WARN("Err cmd received\n"); - return -1; + WARN("Err cmd received\n"); + return -1; } }while((timeout-- > 0) && (_readChar != waitChar)); return (_readChar == waitChar); @@ -199,7 +199,7 @@ char SpiDrv::readChar() #define CHECK_DATA(check, x) \ if (!readAndCheckChar(check, &x)) \ { \ - TOGGLE_TRIGGER() \ + TOGGLE_TRIGGER() \ WARN("Reply error"); \ INFO2(check, (uint8_t)x); \ return 0; \ @@ -252,12 +252,12 @@ int SpiDrv::waitResponseCmd(uint8_t cmd, uint8_t numParam, uint8_t* param, uint8 // Get Params data //param[ii] = spiTransfer(DUMMY_DATA); getParam(¶m[ii]); - } - } + } + } readAndCheckChar(END_CMD, &_data); - } - + } + return 1; } /* @@ -277,12 +277,12 @@ int SpiDrv::waitResponse(uint8_t cmd, uint8_t numParam, uint8_t* param, uint16_t { // Get Params data param[ii] = spiTransfer(DUMMY_DATA); - } - } + } + } readAndCheckChar(END_CMD, &_data); - } - + } + return 1; } */ @@ -298,18 +298,18 @@ int SpiDrv::waitResponseData16(uint8_t cmd, uint8_t* param, uint16_t* param_len) uint8_t numParam = readChar(); if (numParam != 0) - { + { readParamLen16(param_len); for (ii=0; ii<(*param_len); ++ii) { // Get Params data param[ii] = spiTransfer(DUMMY_DATA); - } - } + } + } readAndCheckChar(END_CMD, &_data); - } - + } + return 1; } @@ -324,18 +324,18 @@ int SpiDrv::waitResponseData8(uint8_t cmd, uint8_t* param, uint8_t* param_len) uint8_t numParam = readChar(); if (numParam != 0) - { + { readParamLen8(param_len); for (ii=0; ii<(*param_len); ++ii) { // Get Params data param[ii] = spiTransfer(DUMMY_DATA); - } - } + } + } readAndCheckChar(END_CMD, &_data); - } - + } + return 1; } @@ -351,7 +351,7 @@ int SpiDrv::waitResponseParams(uint8_t cmd, uint8_t numParam, tParam* params) uint8_t _numParam = readChar(); if (_numParam != 0) - { + { for (i=0; i<_numParam; ++i) { params[i].paramLen = readParamLen8(); @@ -359,7 +359,7 @@ int SpiDrv::waitResponseParams(uint8_t cmd, uint8_t numParam, tParam* params) { // Get Params data params[i].param[ii] = spiTransfer(DUMMY_DATA); - } + } } } else { @@ -374,7 +374,7 @@ int SpiDrv::waitResponseParams(uint8_t cmd, uint8_t numParam, tParam* params) } readAndCheckChar(END_CMD, &_data); - } + } return 1; } @@ -405,7 +405,7 @@ int SpiDrv::waitResponse(uint8_t cmd, tParam* params, uint8_t* numParamRead, uin { // Get Params data params[i].param[ii] = spiTransfer(DUMMY_DATA); - } + } } } else { @@ -414,7 +414,7 @@ int SpiDrv::waitResponse(uint8_t cmd, tParam* params, uint8_t* numParamRead, uin return 0; } readAndCheckChar(END_CMD, &_data); - } + } return 1; } */ @@ -444,7 +444,7 @@ int SpiDrv::waitResponse(uint8_t cmd, uint8_t* numParamRead, uint8_t** params, u { for (i=0; i Date: Tue, 21 Jan 2025 15:13:26 +0100 Subject: [PATCH 2/3] removing feed_watchdog boolean --- src/utility/spi_drv.cpp | 8 +++----- src/utility/spi_drv.h | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/utility/spi_drv.cpp b/src/utility/spi_drv.cpp index abf94240..a48a367a 100644 --- a/src/utility/spi_drv.cpp +++ b/src/utility/spi_drv.cpp @@ -215,15 +215,13 @@ void SpiDrv::waitForSlaveSign() while (!waitSlaveSign()); } -void SpiDrv::waitForSlaveReady(bool const feed_watchdog) +void SpiDrv::waitForSlaveReady() { unsigned long const start = millis(); while (!waitSlaveReady()) { - if (feed_watchdog) { - if ((millis() - start) < 10000) { - WiFi.feedWatchdog(); - } + if ((millis() - start) < 10000) { + WiFi.feedWatchdog(); } } } diff --git a/src/utility/spi_drv.h b/src/utility/spi_drv.h index 975c4c43..3cd583d3 100644 --- a/src/utility/spi_drv.h +++ b/src/utility/spi_drv.h @@ -59,7 +59,7 @@ class SpiDrv static char spiTransfer(volatile char data); - static void waitForSlaveReady(bool const feed_watchdog = false); + static void waitForSlaveReady(); //static int waitSpiChar(char waitChar, char* readChar); From 32afe720c05b2b2cf8d09e2b0ff42f86548b825e Mon Sep 17 00:00:00 2001 From: Andrea Gilardoni Date: Tue, 21 Jan 2025 15:35:04 +0100 Subject: [PATCH 3/3] SPIDrv improved waitForSlaveReady function fixed beahviour of waitForSlaveReady: now watchdog timeout is calculated correctly. A timeout is added for the readiness call, that is defaulted to 0 (no timeout). --- src/utility/spi_drv.cpp | 11 +++++++---- src/utility/spi_drv.h | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/utility/spi_drv.cpp b/src/utility/spi_drv.cpp index a48a367a..e075f312 100644 --- a/src/utility/spi_drv.cpp +++ b/src/utility/spi_drv.cpp @@ -215,13 +215,16 @@ void SpiDrv::waitForSlaveSign() while (!waitSlaveSign()); } -void SpiDrv::waitForSlaveReady() +void SpiDrv::waitForSlaveReady(unsigned long timeout) { unsigned long const start = millis(); - while (!waitSlaveReady()) - { - if ((millis() - start) < 10000) { + unsigned long wd_start = millis(); + constexpr long wd_timeout = 2000; + + while (!waitSlaveReady() && (timeout == 0 || (millis() - start) < timeout)) { + if ((millis() - wd_start) < wd_timeout) { WiFi.feedWatchdog(); + wd_start = millis(); } } } diff --git a/src/utility/spi_drv.h b/src/utility/spi_drv.h index 3cd583d3..e8398587 100644 --- a/src/utility/spi_drv.h +++ b/src/utility/spi_drv.h @@ -59,7 +59,7 @@ class SpiDrv static char spiTransfer(volatile char data); - static void waitForSlaveReady(); + static void waitForSlaveReady(unsigned long timeout = 0); // timeout for wait, 0 means no timeout //static int waitSpiChar(char waitChar, char* readChar);