upm  1.7.1
Sensor/Actuator repository for libmraa (v2.0.0)
Public Member Functions | Protected Member Functions | Protected Attributes

API for the Microchip RN2903 LoRa radio. More...

Detailed Description

The Microchip RN2903 Low-Power Long Range LoRa Technology Transceiver module provides an easy to use, low-power solution for long range wireless data transmission. The advanced command interface offers rapid time to market.

The RN2903 module complies with the LoRaWAN Class A protocol specifications. It integrates RF, a baseband controller, and a command Application Programming Interface (API) processor, making it a complete long range solution.

Most of the effort in this driver has been geared to supporting operation within a LoRaWAN network, however methods are provided to allow you to control the device directly so that you can implement whatever solution you require.

string defaultDev = "/dev/ttyUSB0";
if (argc > 1)
defaultDev = argv[1];
cout << "Using device: " << defaultDev << endl;
// Instantiate a RN2903 sensor on defaultDev at 57600 baud.
upm::RN2903 sensor(defaultDev, RN2903_DEFAULT_BAUDRATE);
// To use an internal UART understood by MRAA, use the following
// to inititialize rather than the above, which by default uses a
// tty path.
//
// upm::RN2903 sensor = upm::RN2903(0, RN2903_DEFAULT_BAUDRATE);
// enable debugging
// sensor.setDebug(true);
// get version
if (sensor.command("sys get ver")) {
cout << "Failed to retrieve device version string" << endl;
return 1;
}
cout << "Firmware version: " << sensor.getResponse() << endl;
cout << "Hardware EUI: " << sensor.getHardwareEUI() << endl;
// we can support two types of join, OTAA and ABP. Each requires
// that certain parameters be set first. We will only attempt ABP
// joining with this example since it's the only one that can
// succeed without actual configuration. In both cases, if you
// are actually attempting to join a real LoRaWAN network, you
// must change the parameters below to match the network you are
// attempting to join.
// For OTAA, you need to supply valid Device EUI, Application EUI,
// and Application key:
//
// sensor.setDeviceEUI("0011223344556677");
// sensor.setApplicationEUI("0011223344556677");
// sensor.setApplicationKey("01234567012345670123456701234567");
//
// RN2903_JOIN_STATUS_T rv = sensor.join(RN2903_JOIN_TYPE_OTAA);
// A successful join will return RN2903_JOIN_STATUS_ACCEPTED (0).
// cout << "JOIN: got rv " << int(rv) << endl;
// Try an ABP join. Note, these parameters are made up. For a
// real network, you will want to use the correct values
// obviously. For an ABP join, you need to supply the Device
// Address, Network Session Key, and the Application Session Key.
sensor.setDeviceAddr("00112233");
sensor.setNetworkSessionKey("00112233001122330011223300112233");
sensor.setApplicationSessionKey("00112233001122330011223300112233");
RN2903_JOIN_STATUS_T rv = sensor.join(RN2903_JOIN_TYPE_ABP);
if (rv == RN2903_JOIN_STATUS_ACCEPTED) {
cout << "Join successful." << endl;
// All transmit payloads must be hex encoded strings, so
// pretend we have a temperature sensor that gave us a value
// of 25.6 C, and we want to transmit it.
string faketemp = "25.6";
cout << "Transmitting a packet..." << endl;
RN2903_MAC_TX_STATUS_T trv;
trv = sensor.macTx(RN2903_MAC_MSG_TYPE_UNCONFIRMED,
1, // port number
sensor.toHex(faketemp));
if (trv == RN2903_MAC_TX_STATUS_TX_OK)
cout << "Transmit successful." << endl;
else {
// check to see if we got a downlink packet
if (trv == RN2903_MAC_TX_STATUS_RX_RECEIVED) {
cout << "Transmit successful, downlink packet received: " << sensor.getResponse();
} else {
cout << "Transmit failed with code " << int(trv) << endl;
}
}
} else {
cout << "Join failed with code " << int(rv) << endl;
}
cout << "Exiting" << endl;
string defaultDev = "/dev/ttyUSB0";
if (argc > 1)
defaultDev = argv[1];
cout << "Using device: " << defaultDev << endl;
// Instantiate a RN2903 sensor on defaultDev at 57600 baud.
upm::RN2903 sensor(defaultDev, RN2903_DEFAULT_BAUDRATE);
// To use an internal UART understood by MRAA, use the following
// to inititialize rather than the above, which by default uses a
// tty path.
//
// upm::RN2903 sensor = upm::RN2903(0, RN2903_DEFAULT_BAUDRATE);
// enable debugging
// sensor.setDebug(true);
// get version
if (sensor.command("sys get ver")) {
cout << "Failed to retrieve device version string" << endl;
return 1;
}
cout << "Firmware version: " << sensor.getResponse() << endl;
cout << "Hardware EUI: " << sensor.getHardwareEUI() << endl;
// For this example, we will just try transmitting a packet over
// LoRa. We reset the device to defaults, and we do not make any
// adjustments to the radio configuration. You will probably want
// to do so for a real life application.
// The first thing to do is to suspend the LoRaWAN stack on the device.
sensor.macPause();
// the default radio watchdog timer is set for 15 seconds, so we
// will send a packet every 10 seconds. In reality, local
// restrictions limit the amount of time on the air, so in a real
// implementation, you would not want to send packets that
// frequently.
int count = 0;
while (shouldRun) {
std::ostringstream output;
output << "Ping " << count++;
// All payloads must be hex encoded
string payload = sensor.toHex(output.str());
cout << "Transmitting a packet, data: '" << output.str() << "' -> hex: '" << payload << "'"
<< endl;
RN2903_RESPONSE_T rv;
rv = sensor.radioTx(payload);
if (rv == RN2903_RESPONSE_OK)
cout << "Transmit successful." << endl;
else
cout << "Transmit failed with code " << int(rv) << endl;
cout << endl;
upm_delay(10);
}
cout << "Exiting" << endl;
string defaultDev = "/dev/ttyUSB0";
if (argc > 1)
defaultDev = argv[1];
cout << "Using device: " << defaultDev << endl;
// Instantiate a RN2903 sensor on defaultDev at 57600 baud.
upm::RN2903 sensor(defaultDev, RN2903_DEFAULT_BAUDRATE);
// To use an internal UART understood by MRAA, use the following
// to inititialize rather than the above, which by default uses a
// tty path.
//
// upm::RN2903 sensor = upm::RN2903(0, RN2903_DEFAULT_BAUDRATE);
// enable debugging
// sensor.setDebug(true);
// get version
if (sensor.command("sys get ver")) {
cout << "Failed to retrieve device version string" << endl;
return 1;
}
cout << "Firmware version: " << sensor.getResponse() << endl;
cout << "Hardware EUI: " << sensor.getHardwareEUI() << endl;
// For this example, we will just try to receive a packet
// transmitted by the p2p-tx rn2903 example. We reset the
// device to defaults, and we do not make any adjustments to the
// radio configuration. You will probably want to do so for a
// real life application.
// The first thing to do is to suspend the LoRaWAN stack on the device.
sensor.macPause();
// We will use continuous mode (window_size 0), though the default
// radio watch dog timer will expire every 15 seconds. We will
// just loop here.
while (shouldRun) {
cout << "Waiting for packet..." << endl;
RN2903_RESPONSE_T rv;
rv = sensor.radioRx(0);
if (rv) {
cout << "radioRx() failed with code " << int(rv) << endl;
} else {
string resp = sensor.getResponse();
string payload = sensor.getRadioRxPayload();
if (!payload.size())
cout << "Got response: '" << resp << "'" << endl;
else
cout << "Got payload: '" << sensor.fromHex(payload) << "'" << endl;
}
cout << endl;
}
cout << "Exiting" << endl;

Public Member Functions

 RN2903 (unsigned int uart, unsigned int baudrate=RN2903_DEFAULT_BAUDRATE)
 
 RN2903 (std::string uart_path, unsigned int baudrate=RN2903_DEFAULT_BAUDRATE)
 
virtual ~RN2903 ()
 
void setResponseWaitTime (unsigned int wait_ms=RN2903_DEFAULT_RESP_DELAY)
 
void setResponse2WaitTime (unsigned int wait_ms=RN2903_DEFAULT_RESP2_DELAY)
 
bool dataAvailable (unsigned int millis)
 
void drain ()
 
RN2903_RESPONSE_T command (const std::string cmd)
 
RN2903_RESPONSE_T commandWithArg (const std::string cmd, const std::string arg)
 
RN2903_RESPONSE_T waitForResponse (int wait_ms)
 
std::string getResponse ()
 
int getResponseLen ()
 
void setDeviceEUI (const std::string str)
 
void getDeviceEUI ()
 
void setDeviceAddr (std::string str)
 
void getDeviceAddr ()
 
void setNetworkSessionKey (std::string str)
 
void setApplicationSessionKey (std::string str)
 
void setApplicationEUI (const std::string str)
 
void getApplicationEUI ()
 
void setApplicationKey (const std::string str)
 
void getApplicationKey ()
 
std::string toHex (const std::string src)
 
std::string fromHex (const std::string src)
 
RN2903_JOIN_STATUS_T join (RN2903_JOIN_TYPE_T type)
 
RN2903_MAC_TX_STATUS_T macTx (RN2903_MAC_MSG_TYPE_T type, int port, std::string payload)
 
RN2903_RESPONSE_T radioTx (const std::string payload)
 
RN2903_RESPONSE_T radioRx (int window_size)
 
std::string getHardwareEUI ()
 
void updateMacStatus ()
 
int getMacStatusWord ()
 
RN2903_MAC_STATUS_T getMacStatus ()
 
void macSave ()
 
void macPause ()
 
void macResume ()
 
void reset ()
 
void macSetBattery (int level)
 
void setDebug (bool enable)
 
void setBaudrate (unsigned int baudrate)
 
void setFlowControl (RN2903_FLOW_CONTROL_T fc)
 
bool find (const std::string str)
 
std::string getRadioRxPayload ()
 
bool autobaud (int retries)
 

Protected Member Functions

std::string read (int size)
 
int write (std::string buffer)
 

Protected Attributes

rn2903_context m_rn2903
 

Constructor & Destructor Documentation

RN2903 ( unsigned int  uart,
unsigned int  baudrate = RN2903_DEFAULT_BAUDRATE 
)

RN2903 object constructor for a UART specified by MRAA number.

Parameters
uartSpecify which uart to use.
baudrateSpecify the baudrate to use. The default is 57600.

Here is the call graph for this function:

RN2903 ( std::string  uart_path,
unsigned int  baudrate = RN2903_DEFAULT_BAUDRATE 
)

RN2903 object constructor for a UART specified by PATH (ex: /dev/ttyUSB0)

Parameters
uart_pathSpecify path of UART device.
baudrateSpecify the baudrate to use. The default is 57600.
~RN2903 ( )
virtual

RN2903 object destructor

Here is the call graph for this function:

Member Function Documentation

void setResponseWaitTime ( unsigned int  wait_ms = RN2903_DEFAULT_RESP_DELAY)

Set the default time, in milliseconds, to wait for a response after sending a command. All commands return at least one response immediately after issuing the command. This delay sets the maximum amount of time to wait for it.

Parameters
wait_msThe response delay to set, in milliseconds. The default is 1 second (1000ms).

Here is the call graph for this function:

void setResponse2WaitTime ( unsigned int  wait_ms = RN2903_DEFAULT_RESP2_DELAY)

Set the default time, in milliseconds, to wait for the second response data to arrive. Some commands will have a second response emitted after the first response. This delay sets the maximum amount of time to wait for it.

Parameters
wait_msThe response delay to set, in milliseconds. The default is 60 seconds (60000ms).

Here is the call graph for this function:

bool dataAvailable ( unsigned int  millis)

Determine whether there is data available to be read. This function will wait up to "millis" milliseconds for data to become available.

Parameters
millisThe number of milliseconds to wait for data to become available.
Returns
true if data is available to be read, false otherwise.

Here is the call graph for this function:

void drain ( )

Read and throw away any data currently available to be read. This is useful to avoid reading data that might have been the result of a previous command interfering with data you currently want to read.

Here is the call graph for this function:

RN2903_RESPONSE_T command ( const std::string  cmd)

Send a command, wait for a response using waitForResponse(), and return the status. The response itself will be stored internally, and can be retrieved using getResponse() and getResponseLen(). Every command will return at least one response, and this function will always wait for it and store it into the internal response buffer after sending the command.

Parameters
cmdA character string containing the command to send
Returns
One of the RN2903_RESPONSE_T values

Here is the call graph for this function:

RN2903_RESPONSE_T commandWithArg ( const std::string  cmd,
const std::string  arg 
)

Build a command string with the supplied command and string argument. Then call command() with the result, and return the result. This is just a convenience function.

Parameters
cmdA character string containing the command to send
argA string argument for the command
Returns
One of the RN2903_RESPONSE_T values

Here is the call graph for this function:

RN2903_RESPONSE_T waitForResponse ( int  wait_ms)

Wait up to wait_ms milliseconds for a response.

In the case of errors ("invalid_param" received, timeout occurred, or other UPM specific error), this will be indicated by the return value.

Otherwise, an "ok" or other data value will not be considered an error and will return RN2903_RESPONSE_OK. The response itself will be stored internally, and can be retrieved using getResponse() and getResponseLen().

NOTE: the response buffer is overwritten whenever this function is called, so if there is data in there that you need to save, copy it somewhere else before calling any other methods in this driver to be safe.

Parameters
wait_msThe maximum number of milliseconds to wait for a response.
Returns
One of the RN2903_RESPONSE_T values

Here is the call graph for this function:

std::string getResponse ( )

Return a string containing a copy of the last response saved in the response buffer

Returns
A string containing a copy of the response buffer

Here is the call graph for this function:

int getResponseLen ( )

Return the length in bytes of the string containing the last response.

Returns
The length of the last response in bytes

Here is the call graph for this function:

void setDeviceEUI ( const std::string  str)

Set the MAC device EUI for LoRaWAN communications. The device EUI must be a hex encoded string of 16 bytes. This value must be set for LoRaWAN OTAA joining.

Parameters
strThe 16-byte hex encoded device EUI
Exceptions
std::runtime_errorif the EUI is invalid or the mac set command failed

Here is the call graph for this function:

void getDeviceEUI ( )

Retrieve the device EUI from the device. If this function succeeds, you can then use getResponse() to get the value.

Returns
UPM result
Exceptions
std::runtime_errorif the mac get command failed

Here is the call graph for this function:

void setDeviceAddr ( std::string  str)

Set the MAC device address for LoRaWAN communications. The device address must be a hex encoded string of 8 bytes. This value must be set for LoRaWAN ABP joining.

For OTAA joining, this value will be overwritten once the join has completed, and therefore must not be set if performing an OTAA join.

Parameters
strThe 8-byte hex encoded device address
Exceptions
std::runtime_errorif the mac set command failed or the hex string is invalid

Here is the call graph for this function:

void getDeviceAddr ( )

Retrieve the device address from the device. If this function succeeds, you can then use getResponse() to get the value.

Exceptions
std::runtime_errorif the mac get failed

Here is the call graph for this function:

void setNetworkSessionKey ( std::string  str)

Set the MAC network session key for LoRaWAN communications. The network session key must be a hex encoded string of 32 bytes. This value must be set for LoRaWAN ABP joining. It it not possible to retrieve this key.

For OTAA joining, this value will be overwritten once the join has completed, and therefore must not be set if performing an OTAA join.

Parameters
strThe 32-byte hex encoded network session key
Exceptions
std::runtime_errorif the mac set command failed or the hex string is invalid

Here is the call graph for this function:

void setApplicationSessionKey ( std::string  str)

Set the MAC application session key for LoRaWAN communications. The application session key must be a hex encoded string of 32 bytes. This value must be set for LoRaWAN ABP joining. It it not possible to retrieve this key.

For OTAA joining, this value will be overwritten once the join has completed, and therefore must not be set if performing an OTAA join.

Parameters
strThe 32-byte hex encoded application session key
Exceptions
std::runtime_errorif the mac set command failed or the hex string is invalid

Here is the call graph for this function:

void setApplicationEUI ( const std::string  str)

Set the MAC application EUI for LoRaWAN communications. The application EUI must be a hex encoded string of 16 bytes. This value must be set for LoRaWAN OTAA joining.

Parameters
strThe 16-byte hex encoded application EUI
Exceptions
std::runtime_errorif the EUI is invalid, or if the mac set command failed

Here is the call graph for this function:

void getApplicationEUI ( )

Retrieve the application EUI from the device. If this function succeeds, you can then use getResponse() to get the value.

Exceptions
std::runtime_errorif the mac get command failed

Here is the call graph for this function:

void setApplicationKey ( const std::string  str)

Set the MAC application key for LoRaWAN communications. The application key must be a hex encoded string of 32 bytes. This value must be set for LoRaWAN OTAA joining.

Parameters
strThe 32-byte hex encoded application key
Exceptions
std::runtime_errorif the key is invalid, or if the mac set command failed

Here is the call graph for this function:

void getApplicationKey ( )

Retrieve the application key from the device. If this function succeeds, you can then use rn2903_get_response() to get the value.

Exceptions
std::runtime_errorif the mac get command failed

Here is the call graph for this function:

std::string toHex ( const std::string  src)

Convert src into a hex byte string. All non-command related data such as keys, and payload sent to the device must be hex encoded.

Parameters
srcA string to encode
Returns
A string containing the hex encoded version of str. In the event of an error, the return string will be empty.

Here is the call graph for this function:

std::string fromHex ( const std::string  src)

Decode a hex byte string into the original string. The hex string must have a length that is a multiple of two, and all characters in the string must be valid hex characters.

Returns
A string containing the decoded contents of the hex string passed, or an empty string if there was an error.

Here is the call graph for this function:

RN2903_JOIN_STATUS_T join ( RN2903_JOIN_TYPE_T  type)

Join a LoRaWAN network. There are two types of joins possible - Over The Air Activation (OTAA) and Activation by Personalization (ABP). Each join method requires that certain items have been configured first.

For OTAA activation, the Device Extended Unique Identifier (EUI), the Application EUI, and Application Key must be set.

For ABP activation, The Device Address, Network Session Key, and the Application Session Key must be set.

Parameters
typeThe LoRaWAN join activation type, one of the RN2903_JOIN_TYPE_T values
Returns
The status of the join, one of the RN2903_JOIN_STATUS_T values

Here is the call graph for this function:

RN2903_MAC_TX_STATUS_T macTx ( RN2903_MAC_MSG_TYPE_T  type,
int  port,
std::string  payload 
)

Transmit a packet in a LoRaWAN network. You must already be joined to a LoRaWAN network for this command to succeed, and the MAC stack must be in the idle (RN2903_MAC_STAT_IDLE) state.

The packet payload must be a valid hex encoded string.

There is the possibility of receiving a downlink message after transmitting a packet. If this occurs, this function will return RN2903_MAC_TX_STATUS_RX_RECEIVED, and the returned data will be stored in the response buffer.

Parameters
typeThe type of message to send - confirmed or unconfirmed. One of the RN2903_MAC_MSG_TYPE_T values.
portAn integer in the range 1-223
payloadA valid hex encoded string that makes up the payload of the message
Returns
The status of the transmit request, one of the RN2903_MAC_TX_STATUS_T values

Here is the call graph for this function:

RN2903_RESPONSE_T radioTx ( const std::string  payload)

Transmit a packet. This method uses the radio directly without the LoRaWAN stack running. For this reason, you must call macPause() before trying to transmit using this function. You should also configure any radio parameters (frequency, etc), before calling this function.

Parameters
payloadA valid hex encoded string that makes up the payload of the message
Returns
The status of the transmit request, one of the RN2903_RESPONSE_T values

Here is the call graph for this function:

RN2903_RESPONSE_T radioRx ( int  window_size)

Receive a packet. This method uses the radio directly without the LoRaWAN stack running. For this reason, you must call macPause() before trying to receive using this function. You should also configure any parameters (frequency, etc) to match the transmitter before calling this function.

Parameters
window_sizeAn integer that represents the number of symbols to wait for (lora) or the maximum number of milliseconds to wait (fsk). This parameter is passed to the "radio rx" command. Passing 0 causes the radio to enter continuous receive mode which will return when either a packet is received, or the radio watchdog timer expires. See the RN2903 Command Reference for details.
Returns
The status of the transmit request, one of the RN2903_RESPONSE_T values

Here is the call graph for this function:

std::string getHardwareEUI ( )

Return the Hardware Extended Unique Identifier (EUI). The is a 16 byte hex encoded string representing the 64b hardware EUI. This value cannot be changed, and is globally unique to each device. It is obtained from the device at initialization time.

Returns
A const string pointer to the hex encoded Hardware EUI

Here is the call graph for this function:

void updateMacStatus ( )

Retrieve the device MAC status, decode it, and store it internally. This function must be called prior to calling getMacStatusWord() or getMacStatus().

Exceptions
std::runtime_errorif the mac get command failed

Here is the call graph for this function:

int getMacStatusWord ( )

Retrieve the MAC status word. updateMacStatus() must have been called prior to calling this function.

Returns
The MAC status word. This is a bitmask of RN2903_MAC_STATUS_BITS_T bits.

Here is the call graph for this function:

RN2903_MAC_STATUS_T getMacStatus ( )

Retrieve the MAC status. updateMacStatus() must have been called prior to calling this function. The MAC status is a bitfield embedded in the mac status word. It provides information on the status of the internal MAC state machine.

Returns
The MAC status, one of the RN2903_MAC_STATUS_T values.

Here is the call graph for this function:

void macSave ( )

Save the configurable device values to EEPROM. These values will be reloaded automatically on a reset or power up.

The data that can be saved are: deveui, appeui, appkey, nwkskey (Network Session Key), appskey, devaddr, channels, upctr (Uplink Counter), dnctr (Downlink Counter), adr (automatic data-rate) state, and rx2 (the RX2 receive window parameters).

Exceptions
std::runtime_errorif the mac save command failed

Here is the call graph for this function:

void macPause ( )

Pause the MAC LoRaWAN stack. This device can operate in one of two modes.

The most common mode is used to join and participate in a LoRaWAN network as a Class A End Device. This is handled by the MAC LoRaWAN stack on the device dealing with the details of LoRaWAN participation automatically.

The other mode disables MAC LoRaWAN stack functionality and allows you to issue commands directly to the radio to set frequencies, data rates, modulation and many other parameters.

Calling this function disables the MAC LoRaWAN stack and allows you to issue radio commands that are otherwise handled automatically.

When pausing, the maximum allowable pause time in milliseconds will be returned in the response buffer. You can grab this value by calling getResponse() after this function completes successfully.

When the MAC is idle (getMacStatus()), you can pause the stack indefinitely.

Exceptions
std::runtime_errorif the mac pause command failed

Here is the call graph for this function:

void macResume ( )

Resume the MAC LoRaWAN stack. Call this to resume MAC LoRaWAN operation after having called macPause(), to resume participation in a LoRaWAN network.

Parameters
devDevice context
Returns
UPM result
Exceptions
std::runtime_errorif the mac resume command failed

Here is the call graph for this function:

void reset ( )

Reset the device. Any configuration is lost, as well as the current join status. This method also calls setBaudrate() after the reset to re-establish communications with the device in the event you are not using the default baudrate (which the device will revert to after a reset).

Exceptions
std::runtime_errorif the mac reset, or setBaudrate() command fails

Here is the call graph for this function:

void macSetBattery ( int  level)

LoRaWAN communications allows for the reporting of current battery charge remaining to the LoRaWAN gateway/network server. This function allows you to specify the value that should be reported.

The valid values are from 0 to 255. 0 = using external power 1(low) to 254(high) = battery power 255 = unable to measure battery level

Parameters
levelThe battery level value from 0-255
Exceptions
std::runtime_errorif the mac set bat command failed, or if the battery level is invalid

Here is the call graph for this function:

void setDebug ( bool  enable)

Enable debugging. If enabled, commands will be printed out before being sent to the device. Any responses will be printed out after retrieval. Other miscellaneous debug output will also be printed.

Parameters
enabletrue to enable debugging, false otherwise

Here is the call graph for this function:

void setBaudrate ( unsigned int  baudrate)

Set the baudrate of the device. Auto-bauding is currently only supported on Linux (due to the need to send a break signal) and only on a recent MRAA which supports it (> 1.6.1). If on a non-linux OS, you should not try to change the baudrate to anything other than the default 57600 or you will lose control of the device.

Parameters
baudrateThe baud rate to set for the device
Exceptions
std::runtime_errorif the autobaud test command failed

Here is the call graph for this function:

void setFlowControl ( RN2903_FLOW_CONTROL_T  fc)

Set a flow control method for the UART. By default, during initialization, flow control is disabled. The device MAY support hardware flow control, but MRAA does not (at least for UART numbers), so we can't either. We leave the option here though so that if you are using a TTY (as opposed to a UART instance) it might work if the device is also configured to use hardware flow control.

Parameters
fcOne of the RN2903_FLOW_CONTROL_T values
Exceptions
std::runtime_erroron failure

Here is the call graph for this function:

bool find ( const std::string  str)

This is a utility function that can be used to indicate if a given string is present at the beginning of the response buffer. The search is case sensitive.

Parameters
strThe string to search for
Returns
true if the string was found at the beginning of the response buffer, false otherwise

Here is the call graph for this function:

std::string getRadioRxPayload ( )

This is a utility function that can be used to return the hex encoded payload string for radio_rx messages received.

Returns
A string representing the hex encoded payload, or an empty string if there was an error

Here is the call graph for this function:

bool autobaud ( int  retries)

This function attempts to sync the device to the current baudrate. It tries retries times, to send an autobaud sequence to the device and run a test command.

Parameters
retriesThe number of times to retry autobaud detection
Returns
true if the test command succeeded, false otherwise

Here is the call graph for this function:

std::string read ( int  size)
protected

Read character data from the device

Parameters
sizeThe maximum number of characters to read
Returns
string containing the data read

Here is the call graph for this function:

int write ( std::string  buffer)
protected

Write character data to the device

Parameters
bufferThe string containing the data to write
Returns
The number of bytes written

Here is the call graph for this function:

Collaboration diagram for RN2903:
Collaboration graph
[legend]

The documentation for this class was generated from the following files: