From 46e1af764e7c40ee5cd37b3ed5b7b12051e3456f Mon Sep 17 00:00:00 2001 From: jgromes Date: Wed, 21 Jun 2023 22:17:48 +0200 Subject: [PATCH] [Si443x] Implemented generic IRQ actions --- .../Si443x_Receive_Interrupt.ino | 2 +- .../Si443x_Transmit_Interrupt.ino | 2 +- src/modules/Si443x/Si443x.cpp | 16 ++++++++++++++ src/modules/Si443x/Si443x.h | 22 +++++++++++++++++++ 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/examples/Si443x/Si443x_Receive_Interrupt/Si443x_Receive_Interrupt.ino b/examples/Si443x/Si443x_Receive_Interrupt/Si443x_Receive_Interrupt.ino index cb9c2d69..2ef80c69 100644 --- a/examples/Si443x/Si443x_Receive_Interrupt/Si443x_Receive_Interrupt.ino +++ b/examples/Si443x/Si443x_Receive_Interrupt/Si443x_Receive_Interrupt.ino @@ -43,7 +43,7 @@ void setup() { // set the function that will be called // when new packet is received - radio.setIrqAction(setFlag); + radio.setPacketReceivedAction(setFlag); // start listening for packets Serial.print(F("[Si4432] Starting to listen ... ")); diff --git a/examples/Si443x/Si443x_Transmit_Interrupt/Si443x_Transmit_Interrupt.ino b/examples/Si443x/Si443x_Transmit_Interrupt/Si443x_Transmit_Interrupt.ino index d2edc6c8..b13bcafc 100644 --- a/examples/Si443x/Si443x_Transmit_Interrupt/Si443x_Transmit_Interrupt.ino +++ b/examples/Si443x/Si443x_Transmit_Interrupt/Si443x_Transmit_Interrupt.ino @@ -48,7 +48,7 @@ void setup() { // set the function that will be called // when packet transmission is finished - radio.setIrqAction(setFlag); + radio.setPacketSentAction(setFlag); // start transmitting the first packet Serial.print(F("[Si4432] Sending first packet ... ")); diff --git a/src/modules/Si443x/Si443x.cpp b/src/modules/Si443x/Si443x.cpp index 6498518a..62695fc4 100644 --- a/src/modules/Si443x/Si443x.cpp +++ b/src/modules/Si443x/Si443x.cpp @@ -214,6 +214,22 @@ void Si443x::clearIrqAction() { this->mod->hal->detachInterrupt(this->mod->hal->pinToInterrupt(this->mod->getIrq())); } +void Si443x::setPacketReceivedAction(void (*func)(void)) { + this->setIrqAction(func); +} + +void Si443x::clearPacketReceivedAction() { + this->clearIrqAction(); +} + +void Si443x::setPacketSentAction(void (*func)(void)) { + this->setIrqAction(func); +} + +void Si443x::clearPacketSentAction() { + this->clearIrqAction(); +} + int16_t Si443x::startTransmit(uint8_t* data, size_t len, uint8_t addr) { // check packet length if(len > RADIOLIB_SI443X_MAX_PACKET_LENGTH) { diff --git a/src/modules/Si443x/Si443x.h b/src/modules/Si443x/Si443x.h index e708204c..c2841b9d 100644 --- a/src/modules/Si443x/Si443x.h +++ b/src/modules/Si443x/Si443x.h @@ -656,6 +656,28 @@ class Si443x: public PhysicalLayer { */ void clearIrqAction(); + /*! + \brief Sets interrupt service routine to call when a packet is received. + \param func ISR to call. + */ + void setPacketReceivedAction(void (*func)(void)); + + /*! + \brief Clears interrupt service routine to call when a packet is received. + */ + void clearPacketReceivedAction(); + + /*! + \brief Sets interrupt service routine to call when a packet is sent. + \param func ISR to call. + */ + void setPacketSentAction(void (*func)(void)); + + /*! + \brief Clears interrupt service routine to call when a packet is sent. + */ + void clearPacketSentAction(); + /*! \brief Interrupt-driven binary transmit method. Will start transmitting arbitrary binary data up to 64 bytes long. \param data Binary data that will be transmitted.