[Pager] Minor fixes

This commit is contained in:
jgromes 2024-03-02 18:09:56 +01:00
parent 268e2d704f
commit cf561733d2
2 changed files with 26 additions and 19 deletions

View file

@ -248,22 +248,24 @@ int16_t PagerClient::startReceive(uint32_t pin, uint32_t addr, uint32_t mask) {
readBitPin = pin; readBitPin = pin;
filterAddr = addr; filterAddr = addr;
filterMask = mask; filterMask = mask;
filterAddresses = NULL;
return startReceiveCommon(); filterMasks = NULL;
filterNumAddresses = 0;
return(startReceiveCommon());
} }
int16_t PagerClient::startReceive(uint32_t pin, uint32_t *addrs, uint32_t *masks, size_t numAddresses) { int16_t PagerClient::startReceive(uint32_t pin, uint32_t *addrs, uint32_t *masks, size_t numAddresses) {
// save the variables // save the variables
readBitPin = pin; readBitPin = pin;
filterAddr = 0;
filterMask = 0;
filterAddresses = addrs; filterAddresses = addrs;
filterMasks = masks; filterMasks = masks;
filterNumAddresses = numAddresses; filterNumAddresses = numAddresses;
return(startReceiveCommon());
return startReceiveCommon();
} }
uint16_t PagerClient::startReceiveCommon() { int16_t PagerClient::startReceiveCommon() {
// set the carrier frequency // set the carrier frequency
int16_t state = phyLayer->setFrequency(baseFreq); int16_t state = phyLayer->setFrequency(baseFreq);
RADIOLIB_ASSERT(state); RADIOLIB_ASSERT(state);
@ -478,19 +480,23 @@ int16_t PagerClient::readData(uint8_t* data, size_t* len, uint32_t* addr) {
#endif #endif
bool PagerClient::addressMatched(uint32_t addr) { bool PagerClient::addressMatched(uint32_t addr) {
if (filterNumAddresses == 0) { // check whether to match single or multiple addresses/masks
return ((addr & filterMask) == (filterAddr & filterMask)); if(filterNumAddresses == 0) {
} else { return((addr & filterMask) == (filterAddr & filterMask));
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;
} }
// 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) { void PagerClient::write(uint32_t* data, size_t len) {

View file

@ -135,6 +135,7 @@ class PagerClient {
\param pin Pin to receive digital data on (e.g., DIO2 for SX127x). \param pin Pin to receive digital data on (e.g., DIO2 for SX127x).
\param addrs Array of addresses to receive. \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 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 \returns \ref status_codes
*/ */
int16_t startReceive(uint32_t pin, uint32_t *addrs, uint32_t *masks, size_t numAddress); 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* data, size_t len);
void write(uint32_t codeWord); void write(uint32_t codeWord);
uint16_t startReceiveCommon(); int16_t startReceiveCommon();
bool addressMatched(uint32_t addr); bool addressMatched(uint32_t addr);
#if !RADIOLIB_EXCLUDE_DIRECT_RECEIVE #if !RADIOLIB_EXCLUDE_DIRECT_RECEIVE