Skip to content

Watchdog kick #290

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 57 additions & 56 deletions src/utility/spi_drv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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; \
Expand All @@ -215,15 +215,16 @@ void SpiDrv::waitForSlaveSign()
while (!waitSlaveSign());
}

void SpiDrv::waitForSlaveReady(bool const feed_watchdog)
void SpiDrv::waitForSlaveReady(unsigned long timeout)
{
unsigned long const start = millis();
while (!waitSlaveReady())
{
if (feed_watchdog) {
if ((millis() - start) < 10000) {
WiFi.feedWatchdog();
}
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();
}
}
}
Expand Down Expand Up @@ -252,12 +253,12 @@ int SpiDrv::waitResponseCmd(uint8_t cmd, uint8_t numParam, uint8_t* param, uint8
// Get Params data
//param[ii] = spiTransfer(DUMMY_DATA);
getParam(&param[ii]);
}
}
}
}

readAndCheckChar(END_CMD, &_data);
}
}

return 1;
}
/*
Expand All @@ -277,12 +278,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;
}
*/
Expand All @@ -298,18 +299,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;
}

Expand All @@ -324,18 +325,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;
}

Expand All @@ -351,15 +352,15 @@ 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();
for (ii=0; ii<params[i].paramLen; ++ii)
{
// Get Params data
params[i].param[ii] = spiTransfer(DUMMY_DATA);
}
}
}
} else
{
Expand All @@ -374,7 +375,7 @@ int SpiDrv::waitResponseParams(uint8_t cmd, uint8_t numParam, tParam* params)
}

readAndCheckChar(END_CMD, &_data);
}
}
return 1;
}

Expand Down Expand Up @@ -405,7 +406,7 @@ int SpiDrv::waitResponse(uint8_t cmd, tParam* params, uint8_t* numParamRead, uin
{
// Get Params data
params[i].param[ii] = spiTransfer(DUMMY_DATA);
}
}
}
} else
{
Expand All @@ -414,7 +415,7 @@ int SpiDrv::waitResponse(uint8_t cmd, tParam* params, uint8_t* numParamRead, uin
return 0;
}
readAndCheckChar(END_CMD, &_data);
}
}
return 1;
}
*/
Expand Down Expand Up @@ -444,7 +445,7 @@ int SpiDrv::waitResponse(uint8_t cmd, uint8_t* numParamRead, uint8_t** params, u
{
for (i=0; i<numParam; ++i)
{
uint8_t paramLen = readParamLen8();
uint8_t paramLen = readParamLen8();
for (ii=0; ii<paramLen; ++ii)
{
//ssid[ii] = spiTransfer(DUMMY_DATA);
Expand Down
24 changes: 12 additions & 12 deletions src/utility/spi_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,35 +50,35 @@ class SpiDrv
static void begin();

static void end();

static void spiDriverInit();

static void spiSlaveSelect();

static void spiSlaveDeselect();

static char spiTransfer(volatile char data);

static void waitForSlaveReady(bool const feed_watchdog = false);
static void waitForSlaveReady(unsigned long timeout = 0); // timeout for wait, 0 means no timeout

//static int waitSpiChar(char waitChar, char* readChar);

static int waitSpiChar(unsigned char waitChar);

static int readAndCheckChar(char checkChar, char* readChar);

static char readChar();

static int waitResponseParams(uint8_t cmd, uint8_t numParam, tParam* params);

static int waitResponseCmd(uint8_t cmd, uint8_t numParam, uint8_t* param, uint8_t* param_len);

static int waitResponseData8(uint8_t cmd, uint8_t* param, uint8_t* param_len);

static int waitResponseData16(uint8_t cmd, uint8_t* param, uint16_t* param_len);
/*
/*
static int waitResponse(uint8_t cmd, tParam* params, uint8_t* numParamRead, uint8_t maxNumParams);

static int waitResponse(uint8_t cmd, uint8_t numParam, uint8_t* param, uint16_t* param_len);
*/
static int waitResponse(uint8_t cmd, uint8_t* numParamRead, uint8_t** params, uint8_t maxNumParams);
Expand All @@ -98,11 +98,11 @@ class SpiDrv
static void sendBuffer(uint8_t* param, uint16_t param_len, uint8_t lastParam = NO_LAST_PARAM);

static void sendParam(uint16_t param, uint8_t lastParam = NO_LAST_PARAM);

static void sendCmd(uint8_t cmd, uint8_t numParam);

static int available();
};
};

extern SpiDrv spiDrv;

Expand Down
Loading