From cf561733d254b29d559972d00e8c288445c11f36 Mon Sep 17 00:00:00 2001 From: jgromes Date: Sat, 2 Mar 2024 18:09:56 +0100 Subject: [PATCH] [Pager] Minor fixes --- src/protocols/Pager/Pager.cpp | 42 ++++++++++++++++++++--------------- src/protocols/Pager/Pager.h | 3 ++- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/protocols/Pager/Pager.cpp b/src/protocols/Pager/Pager.cpp index e1682de6..989338c8 100644 --- a/src/protocols/Pager/Pager.cpp +++ b/src/protocols/Pager/Pager.cpp @@ -248,22 +248,24 @@ int16_t PagerClient::startReceive(uint32_t pin, uint32_t addr, uint32_t mask) { readBitPin = pin; filterAddr = addr; filterMask = mask; - - return startReceiveCommon(); + filterAddresses = NULL; + filterMasks = NULL; + filterNumAddresses = 0; + return(startReceiveCommon()); } int16_t PagerClient::startReceive(uint32_t pin, uint32_t *addrs, uint32_t *masks, size_t numAddresses) { // save the variables readBitPin = pin; - + filterAddr = 0; + filterMask = 0; filterAddresses = addrs; filterMasks = masks; filterNumAddresses = numAddresses; - - return startReceiveCommon(); + return(startReceiveCommon()); } -uint16_t PagerClient::startReceiveCommon() { +int16_t PagerClient::startReceiveCommon() { // set the carrier frequency int16_t state = phyLayer->setFrequency(baseFreq); RADIOLIB_ASSERT(state); @@ -478,19 +480,23 @@ int16_t PagerClient::readData(uint8_t* data, size_t* len, uint32_t* addr) { #endif bool PagerClient::addressMatched(uint32_t addr) { - if (filterNumAddresses == 0) { - return ((addr & filterMask) == (filterAddr & filterMask)); - } else { - if (filterAddresses == NULL || filterMasks == NULL) { - return false; - } - for (size_t i = 0; i < filterNumAddresses; i++) { - if ((filterAddresses[i] & filterMasks[i]) == (addr & filterMasks[i])) { - return true; - } - } - return false; + // check whether to match single or multiple addresses/masks + if(filterNumAddresses == 0) { + return((addr & filterMask) == (filterAddr & filterMask)); } + + // multiple addresses, check there are some to match + if((filterAddresses == NULL) || (filterMasks == NULL)) { + return(false); + } + + for(size_t i = 0; i < filterNumAddresses; i++) { + if((filterAddresses[i] & filterMasks[i]) == (addr & filterMasks[i])) { + return(true); + } + } + + return(false); } void PagerClient::write(uint32_t* data, size_t len) { diff --git a/src/protocols/Pager/Pager.h b/src/protocols/Pager/Pager.h index db372613..f5cdb819 100644 --- a/src/protocols/Pager/Pager.h +++ b/src/protocols/Pager/Pager.h @@ -135,6 +135,7 @@ class PagerClient { \param pin Pin to receive digital data on (e.g., DIO2 for SX127x). \param addrs Array of addresses to receive. \param masks Array of address masks to use for filtering. Masks will be applied to corresponding addresses in addr array. + \param numAddress Number of addresses/masks to match. \returns \ref status_codes */ int16_t startReceive(uint32_t pin, uint32_t *addrs, uint32_t *masks, size_t numAddress); @@ -191,7 +192,7 @@ class PagerClient { void write(uint32_t* data, size_t len); void write(uint32_t codeWord); - uint16_t startReceiveCommon(); + int16_t startReceiveCommon(); bool addressMatched(uint32_t addr); #if !RADIOLIB_EXCLUDE_DIRECT_RECEIVE