[Pager] Added option to retrieve matched address on reception

This commit is contained in:
jgromes 2022-11-14 21:19:16 +01:00
parent 00fc7cd5b9
commit a848cf281b
2 changed files with 14 additions and 7 deletions

View file

@ -244,7 +244,7 @@ size_t PagerClient::available() {
return(_phy->available() + sizeof(uint32_t))/(sizeof(uint32_t) * (RADIOLIB_PAGER_BATCH_LEN + 1));
}
int16_t PagerClient::readData(String& str, size_t len) {
int16_t PagerClient::readData(String& str, size_t len, uint32_t* addr) {
int16_t state = RADIOLIB_ERR_NONE;
// determine the message length, based on user input or the amount of received data
@ -265,7 +265,7 @@ int16_t PagerClient::readData(String& str, size_t len) {
#endif
// read the received data
state = readData(data, &length);
state = readData(data, &length, addr);
if(state == RADIOLIB_ERR_NONE) {
// check tone-only tramsissions
@ -289,7 +289,7 @@ int16_t PagerClient::readData(String& str, size_t len) {
return(state);
}
int16_t PagerClient::readData(uint8_t* data, size_t* len) {
int16_t PagerClient::readData(uint8_t* data, size_t* len, uint32_t* addr) {
// find the correct address
bool match = false;
uint8_t framePos = 0;
@ -316,10 +316,13 @@ int16_t PagerClient::readData(uint8_t* data, size_t* len) {
}
// should be an address code word, extract the address
uint32_t addr = ((cw & RADIOLIB_PAGER_ADDRESS_BITS_MASK) >> (RADIOLIB_PAGER_ADDRESS_POS - 3)) | (framePos/2);
if((addr & _filterMask) == (_filterAddr & _filterMask)) {
uint32_t addr_found = ((cw & RADIOLIB_PAGER_ADDRESS_BITS_MASK) >> (RADIOLIB_PAGER_ADDRESS_POS - 3)) | (framePos/2);
if((addr_found & _filterMask) == (_filterAddr & _filterMask)) {
// we have a match!
match = true;
if(addr) {
*addr = addr_found;
}
// determine the encoding from the function bits
if((cw & RADIOLIB_PAGER_FUNCTION_BITS_MASK) == RADIOLIB_PAGER_FUNC_BITS_NUMERIC) {

View file

@ -166,9 +166,11 @@ class PagerClient {
\param len Expected number of characters in the message. When set to 0, the message length will be retreived automatically.
When more bytes than received are requested, only the number of bytes requested will be returned.
\param addr Pointer to variable holding the address of the received pager message. Set to NULL to not retrieve address.
\returns \ref status_codes
*/
int16_t readData(String& str, size_t len = 0);
int16_t readData(String& str, size_t len = 0, uint32_t* addr = NULL);
/*!
\brief Reads data that was received after calling startReceive method.
@ -179,9 +181,11 @@ class PagerClient {
When more bytes than received are requested, only the number of bytes requested will be returned.
Upon completion, the number of bytes received will be written to this variable.
\param addr Pointer to variable holding the address of the received pager message. Set to NULL to not retrieve address.
\returns \ref status_codes
*/
int16_t readData(uint8_t* data, size_t* len);
int16_t readData(uint8_t* data, size_t* len, uint32_t* addr = NULL);
#if !defined(RADIOLIB_GODMODE)
private: