[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;
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) {

View file

@ -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