From 562b505b26c693fe08ff68e41897f2710e011e21 Mon Sep 17 00:00:00 2001 From: artemen Date: Fri, 31 Jan 2020 12:53:19 -0800 Subject: [PATCH 1/7] Add files via upload --- src/LoRa.cpp | 24 +++++++++++++++++++++++- src/LoRa.h | 2 ++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/LoRa.cpp b/src/LoRa.cpp index 6980f5a..bafa0e2 100644 --- a/src/LoRa.cpp +++ b/src/LoRa.cpp @@ -71,7 +71,8 @@ LoRaClass::LoRaClass() : _packetIndex(0), _implicitHeaderMode(0), _onReceive(NULL), - _onTxDone(NULL) + _onTxDone(NULL), + _onError(NULL) { // overide Stream timeout value setTimeout(0); @@ -385,6 +386,23 @@ void LoRaClass::onTxDone(void(*callback)()) } } +void LoRaClass::onError(void(*callback)()){ + _onError = callback; + + if (callback) { + pinMode(_dio0, INPUT); +#ifdef SPI_HAS_NOTUSINGINTERRUPT + SPI.usingInterrupt(digitalPinToInterrupt(_dio0)); +#endif + attachInterrupt(digitalPinToInterrupt(_dio0), LoRaClass::onDio0Rise, RISING); + } else { + detachInterrupt(digitalPinToInterrupt(_dio0)); +#ifdef SPI_HAS_NOTUSINGINTERRUPT + SPI.notUsingInterrupt(digitalPinToInterrupt(_dio0)); +#endif + } +} + void LoRaClass::receive(int size) { @@ -684,6 +702,10 @@ void LoRaClass::handleDio0Rise() _onTxDone(); } } + } else { + if (_onError) { + _onError(); + } } } diff --git a/src/LoRa.h b/src/LoRa.h index c1671c1..bdb65ac 100644 --- a/src/LoRa.h +++ b/src/LoRa.h @@ -58,6 +58,7 @@ class LoRaClass : public Stream { #ifndef ARDUINO_SAMD_MKRWAN1300 void onReceive(void(*callback)(int)); void onTxDone(void(*callback)()); + void onError(void(*callback)()); void receive(int size = 0); #endif @@ -119,6 +120,7 @@ class LoRaClass : public Stream { int _implicitHeaderMode; void (*_onReceive)(int); void (*_onTxDone)(); + void (*_onError)(); }; extern LoRaClass LoRa; From 9479c5ad01c66c80fe4d1b566b4eca91bf20e370 Mon Sep 17 00:00:00 2001 From: artemen Date: Mon, 24 Feb 2020 10:04:52 -0800 Subject: [PATCH 2/7] Update LoRa.cpp --- src/LoRa.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LoRa.cpp b/src/LoRa.cpp index bafa0e2..61f72eb 100644 --- a/src/LoRa.cpp +++ b/src/LoRa.cpp @@ -72,7 +72,7 @@ LoRaClass::LoRaClass() : _implicitHeaderMode(0), _onReceive(NULL), _onTxDone(NULL), - _onError(NULL) + _onCrcError(NULL) { // overide Stream timeout value setTimeout(0); From 5bab624cd073ec5a66cc99d8c60365b3bf0c6bda Mon Sep 17 00:00:00 2001 From: artemen Date: Mon, 24 Feb 2020 10:06:36 -0800 Subject: [PATCH 3/7] Update LoRa.h --- src/LoRa.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/LoRa.h b/src/LoRa.h index bdb65ac..424b65a 100644 --- a/src/LoRa.h +++ b/src/LoRa.h @@ -58,7 +58,7 @@ class LoRaClass : public Stream { #ifndef ARDUINO_SAMD_MKRWAN1300 void onReceive(void(*callback)(int)); void onTxDone(void(*callback)()); - void onError(void(*callback)()); + void onCrcError(void(*callback)()); void receive(int size = 0); #endif @@ -120,7 +120,7 @@ class LoRaClass : public Stream { int _implicitHeaderMode; void (*_onReceive)(int); void (*_onTxDone)(); - void (*_onError)(); + void (*_onCrcError(); }; extern LoRaClass LoRa; From 5c1ecbf4db122d681fb5a9542b359742c2a11791 Mon Sep 17 00:00:00 2001 From: artemen Date: Mon, 24 Feb 2020 10:11:34 -0800 Subject: [PATCH 4/7] Update LoRa.cpp --- src/LoRa.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/LoRa.cpp b/src/LoRa.cpp index 61f72eb..c7a24b5 100644 --- a/src/LoRa.cpp +++ b/src/LoRa.cpp @@ -386,8 +386,8 @@ void LoRaClass::onTxDone(void(*callback)()) } } -void LoRaClass::onError(void(*callback)()){ - _onError = callback; +void LoRaClass::onCrcError(void(*callback)()){ + _onCrcError = callback; if (callback) { pinMode(_dio0, INPUT); @@ -703,8 +703,8 @@ void LoRaClass::handleDio0Rise() } } } else { - if (_onError) { - _onError(); + if (_onCrcError) { + _onCrcError(); } } } From 45cee5aaea3b5d1f53ed10758666ea8acce52e13 Mon Sep 17 00:00:00 2001 From: artemen Date: Sat, 29 Feb 2020 01:06:15 -0800 Subject: [PATCH 5/7] Update LoRa.h --- src/LoRa.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LoRa.h b/src/LoRa.h index 424b65a..c8e1dee 100644 --- a/src/LoRa.h +++ b/src/LoRa.h @@ -120,7 +120,7 @@ class LoRaClass : public Stream { int _implicitHeaderMode; void (*_onReceive)(int); void (*_onTxDone)(); - void (*_onCrcError(); + void (*_onCrcError)(); }; extern LoRaClass LoRa; From 5aa200d4e7f37637e19c7517da3d1faf6f3170d7 Mon Sep 17 00:00:00 2001 From: artemen Date: Sat, 29 Feb 2020 01:35:48 -0800 Subject: [PATCH 6/7] Update keywords.txt --- keywords.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/keywords.txt b/keywords.txt index 63e0e9a..7bfe14b 100644 --- a/keywords.txt +++ b/keywords.txt @@ -32,6 +32,8 @@ flush KEYWORD2 onReceive KEYWORD2 onTxDone KEYWORD2 +onCrcError KEYWORD2 + receive KEYWORD2 idle KEYWORD2 sleep KEYWORD2 From 0ce6446d0415721321ad59791d4cd0b5a280727e Mon Sep 17 00:00:00 2001 From: artemen Date: Sat, 29 Feb 2020 01:58:39 -0800 Subject: [PATCH 7/7] Update API.md --- API.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/API.md b/API.md index 78f054d..b7a0e4f 100644 --- a/API.md +++ b/API.md @@ -188,6 +188,25 @@ LoRa.receive(int size); The `onReceive` callback will be called when a packet is received. + +### onCrcError + +**WARNING**: onCrcError callback uses the interrupt pin on the `dio0`, check `setPins` function! + +#### Register callback + +Register a callback function for when a received packet failed CRC check. + +```arduino +LoRa.onCrcError(onCrcError); + +void onCrcError() { + // ... +} +``` + +The `onCrcError` - function to call when a received packet failed CRC check. + ### Packet RSSI ```arduino