From 304e876c02d46f9fd8db6b49ae0eee937358e453 Mon Sep 17 00:00:00 2001 From: jgromes Date: Wed, 18 Aug 2021 17:23:08 +0200 Subject: [PATCH] [CC1101] Fixed blocking receive always returning timeout (#348) --- examples/CC1101/CC1101_Receive/CC1101_Receive.ino | 4 ++++ src/modules/CC1101/CC1101.cpp | 14 +------------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/examples/CC1101/CC1101_Receive/CC1101_Receive.ino b/examples/CC1101/CC1101_Receive/CC1101_Receive.ino index b51bdf20..4ff62359 100644 --- a/examples/CC1101/CC1101_Receive/CC1101_Receive.ino +++ b/examples/CC1101/CC1101_Receive/CC1101_Receive.ino @@ -77,6 +77,10 @@ void loop() { Serial.print(F("[CC1101] LQI:\t\t")); Serial.println(radio.getLQI()); + } else if (state == ERR_RX_TIMEOUT) { + // timeout occurred while waiting for a packet + Serial.println(F("timeout!")); + } else if (state == ERR_CRC_MISMATCH) { // packet was received, but is malformed Serial.println(F("CRC error!")); diff --git a/src/modules/CC1101/CC1101.cpp b/src/modules/CC1101/CC1101.cpp index 638a5def..9c143ad9 100644 --- a/src/modules/CC1101/CC1101.cpp +++ b/src/modules/CC1101/CC1101.cpp @@ -144,7 +144,7 @@ int16_t CC1101::receive(uint8_t* data, size_t len) { int16_t state = startReceive(); RADIOLIB_ASSERT(state); - // wait for sync word or timeout + // wait for packet or timeout uint32_t start = Module::micros(); while(!Module::digitalRead(_mod->getIrq())) { Module::yield(); @@ -156,18 +156,6 @@ int16_t CC1101::receive(uint8_t* data, size_t len) { } } - // wait for packet end or timeout - start = Module::micros(); - while(Module::digitalRead(_mod->getIrq())) { - Module::yield(); - - if(Module::micros() - start > timeout) { - standby(); - SPIsendCommand(CC1101_CMD_FLUSH_TX); - return(ERR_RX_TIMEOUT); - } - } - // read packet data return(readData(data, len)); }