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