[Pager] Added option to retrieve matched address on reception
This commit is contained in:
parent
00fc7cd5b9
commit
a848cf281b
2 changed files with 14 additions and 7 deletions
|
@ -244,7 +244,7 @@ size_t PagerClient::available() {
|
||||||
return(_phy->available() + sizeof(uint32_t))/(sizeof(uint32_t) * (RADIOLIB_PAGER_BATCH_LEN + 1));
|
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;
|
int16_t state = RADIOLIB_ERR_NONE;
|
||||||
|
|
||||||
// determine the message length, based on user input or the amount of received data
|
// 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
|
#endif
|
||||||
|
|
||||||
// read the received data
|
// read the received data
|
||||||
state = readData(data, &length);
|
state = readData(data, &length, addr);
|
||||||
|
|
||||||
if(state == RADIOLIB_ERR_NONE) {
|
if(state == RADIOLIB_ERR_NONE) {
|
||||||
// check tone-only tramsissions
|
// check tone-only tramsissions
|
||||||
|
@ -289,7 +289,7 @@ int16_t PagerClient::readData(String& str, size_t len) {
|
||||||
return(state);
|
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
|
// find the correct address
|
||||||
bool match = false;
|
bool match = false;
|
||||||
uint8_t framePos = 0;
|
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
|
// 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);
|
uint32_t addr_found = ((cw & RADIOLIB_PAGER_ADDRESS_BITS_MASK) >> (RADIOLIB_PAGER_ADDRESS_POS - 3)) | (framePos/2);
|
||||||
if((addr & _filterMask) == (_filterAddr & _filterMask)) {
|
if((addr_found & _filterMask) == (_filterAddr & _filterMask)) {
|
||||||
// we have a match!
|
// we have a match!
|
||||||
match = true;
|
match = true;
|
||||||
|
if(addr) {
|
||||||
|
*addr = addr_found;
|
||||||
|
}
|
||||||
|
|
||||||
// determine the encoding from the function bits
|
// determine the encoding from the function bits
|
||||||
if((cw & RADIOLIB_PAGER_FUNCTION_BITS_MASK) == RADIOLIB_PAGER_FUNC_BITS_NUMERIC) {
|
if((cw & RADIOLIB_PAGER_FUNCTION_BITS_MASK) == RADIOLIB_PAGER_FUNC_BITS_NUMERIC) {
|
||||||
|
|
|
@ -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.
|
\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.
|
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
|
\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.
|
\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.
|
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.
|
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
|
\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)
|
#if !defined(RADIOLIB_GODMODE)
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Add table
Reference in a new issue