[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));
|
||||
}
|
||||
|
||||
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) {
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Add table
Reference in a new issue