RN2483/RN2903 LoRa module driver

High-level driver for the RN2483/RN2903 LoRa modules. More...

Detailed Description

High-level driver for the RN2483/RN2903 LoRa modules.

Modules

 RN2483/RN2903 Radio driver compile configuration
 

Files

file  rn2xx3.h
 High-level driver for the RN2483/RN2903 LoRa modules.
 
file  rn2xx3_internal.h
 Internal driver definitions for the RN2483/RN2903 LoRa modules.
 
file  rn2xx3_params.h
 Default configuration for RN2483/RN2903 devices.
 

Data Structures

struct  loramac_settings_t
 LoRaMAC communication settings. More...
 
struct  rn2xx3_params_t
 Configuration parameters for RN2483/RN2903 devices. More...
 
struct  rn2xx3_t
 RN2483/RN2903 device descriptor. More...
 

Macros

#define RN2XX3_MAX_BUF   (40U)
 Maximum length of an exchanged messages with commands.
 
#define RN2XX3_RX_MAX_BUF   (250U)
 Maximum length of an RX message. More...
 
#define RN2XX3_REPLY_DELAY_TIMEOUT   (60U)
 Maximum delay in second to receive a reply from server.
 
#define RN2XX3_SLEEP_MIN   (100U)
 Minimum sleep duration (in ms)
 

Enumerations

enum  {
  RN2XX3_OK, RN2XX3_DATA, RN2XX3_TIMEOUT, RN2XX3_ERR_MAC_INIT,
  RN2XX3_ERR_INVALID_PARAM, RN2XX3_ERR_NOT_JOINED, RN2XX3_ERR_NO_FREE_CH, RN2XX3_ERR_SILENT,
  RN2XX3_ERR_FR_CNT_REJOIN_NEEDED, RN2XX3_ERR_BUSY, RN2XX3_ERR_MAC_PAUSED, RN2XX3_ERR_INVALID_DATA_LENGTH,
  RN2XX3_ERR_KEYS_NOT_INIT, RN2XX3_ERR_SLEEP_MODE, RN2XX3_REPLY_TX_MAC_OK, RN2XX3_REPLY_TX_MAC_ERR,
  RN2XX3_REPLY_TX_INVALID_DATA_LEN, RN2XX3_REPLY_TX_MAC_RX, RN2XX3_REPLY_JOIN_ACCEPTED, RN2XX3_REPLY_JOIN_DENIED,
  RN2XX3_REPLY_TIMEOUT, RN2XX3_REPLY_OTHER
}
 Command responses and server replies status codes. More...
 
enum  {
  RN2XX3_INT_STATE_RESET, RN2XX3_INT_STATE_CMD, RN2XX3_INT_STATE_IDLE, RN2XX3_INT_STATE_SLEEP,
  RN2XX3_INT_STATE_MAC_JOIN, RN2XX3_INT_STATE_MAC_TX, RN2XX3_INT_STATE_MAC_RX_PORT, RN2XX3_INT_STATE_MAC_RX_MESSAGE
}
 Internal states of the device. More...
 

Functions

void rn2xx3_setup (rn2xx3_t *dev, const rn2xx3_params_t *params)
 Prepares the given RN2XX3 device. More...
 
int rn2xx3_init (rn2xx3_t *dev)
 Initializes the RN2XX3 device. More...
 
int rn2xx3_sys_reset (rn2xx3_t *dev)
 Restarts the RN2XX2 device. More...
 
int rn2xx3_sys_factory_reset (rn2xx3_t *dev)
 Performs a factory reset of the module. More...
 
int rn2xx3_sys_sleep (rn2xx3_t *dev)
 Puts the RN2XX2 device in sleep mode. More...
 
int rn2xx3_mac_init (rn2xx3_t *dev)
 Initializes the RN2XX3 device MAC layer. More...
 
int rn2xx3_write_cmd (rn2xx3_t *dev)
 Writes a command to the RN2XX3 device. More...
 
int rn2xx3_write_cmd_no_wait (rn2xx3_t *dev)
 Writes a command to the RN2XX3 device but don't wait for timeout or response. More...
 
int rn2xx3_wait_response (rn2xx3_t *dev)
 Waits for a response to a command from the device. More...
 
int rn2xx3_wait_reply (rn2xx3_t *dev, uint8_t timeout)
 Waits for a reply from the LoRaWAN network. More...
 
int rn2xx3_mac_tx (rn2xx3_t *dev, uint8_t *payload, uint8_t payload_len)
 Sends data to LoRaWAN server. More...
 
int rn2xx3_mac_join_network (rn2xx3_t *dev, loramac_join_mode_t mode)
 Starts network activation procedure. More...
 
int rn2xx3_mac_save (rn2xx3_t *dev)
 Saves current LoRaMAC configuration to internal EEPROM. More...
 
void rn2xx3_mac_get_deveui (rn2xx3_t *dev, uint8_t *eui)
 Gets the rn2xx3 LoRaMAC device EUI. More...
 
void rn2xx3_mac_set_deveui (rn2xx3_t *dev, const uint8_t *eui)
 Sets the rn2xx3 LoRaMAC device EUI. More...
 
void rn2xx3_mac_get_appeui (rn2xx3_t *dev, uint8_t *eui)
 Gets the rn2xx3 LoRaMAC application EUI. More...
 
void rn2xx3_mac_set_appeui (rn2xx3_t *dev, const uint8_t *eui)
 Sets the rn2xx3 LoRaMAC application EUI. More...
 
void rn2xx3_mac_set_appkey (rn2xx3_t *dev, const uint8_t *key)
 Sets the rn2xx3 LoRaMAC application key. More...
 
void rn2xx3_mac_set_appskey (rn2xx3_t *dev, const uint8_t *key)
 Sets the rn2xx3 LoRaMAC application session key. More...
 
void rn2xx3_mac_set_nwkskey (rn2xx3_t *dev, const uint8_t *key)
 Sets the rn2xx3 LoRaMAC network session key. More...
 
void rn2xx3_mac_get_devaddr (rn2xx3_t *dev, uint8_t *addr)
 Gets the rn2xx3 LoRaMAC device address. More...
 
void rn2xx3_mac_set_devaddr (rn2xx3_t *dev, const uint8_t *addr)
 Sets the rn2xx3 LoRaMAC device address. More...
 
loramac_tx_pwr_idx_t rn2xx3_mac_get_tx_power (rn2xx3_t *dev)
 Gets the rn2xx3 LoRaMAC TX radio power index. More...
 
void rn2xx3_mac_set_tx_power (rn2xx3_t *dev, loramac_tx_pwr_idx_t power)
 Sets the rn2xx3 LoRaMAC transmission power index. More...
 
loramac_dr_idx_t rn2xx3_mac_get_dr (rn2xx3_t *dev)
 Gets the rn2xx3 LoRaMAC datarate. More...
 
void rn2xx3_mac_set_dr (rn2xx3_t *dev, loramac_dr_idx_t dr)
 Sets the rn2xx3 LoRaMAC datarate. More...
 
uint16_t rn2xx3_mac_get_band (rn2xx3_t *dev)
 Gets the rn2xx3 LoRaMAC frequency band in operation. More...
 
bool rn2xx3_mac_get_adr (rn2xx3_t *dev)
 Checks if the rn2xx3 LoRaMAC adaptive datarate is enabled/disabled. More...
 
void rn2xx3_mac_set_adr (rn2xx3_t *dev, bool adr)
 Enables/disables the rn2xx3 LoRaMAC adaptive datarate. More...
 
void rn2xx3_mac_set_battery (rn2xx3_t *dev, uint8_t battery)
 Sets the rn2xx3 battery level measured by the end device. More...
 
uint8_t rn2xx3_mac_get_retx (rn2xx3_t *dev)
 Gets the rn2xx3 LoRaMAC uplink retransmission retries number. More...
 
void rn2xx3_mac_set_retx (rn2xx3_t *dev, uint8_t retx)
 Sets the rn2xx3 LoRaMAC uplink retransmission retries number. More...
 
void rn2xx3_mac_set_linkchk_interval (rn2xx3_t *dev, uint16_t linkchk)
 Sets the rn2xx3 LoRaMAC link check interval (in seconds) More...
 
uint16_t rn2xx3_mac_get_rx1_delay (rn2xx3_t *dev)
 Gets the rn2xx3 LoRaMAC interval delay before the first reception window (in ms) More...
 
void rn2xx3_mac_set_rx1_delay (rn2xx3_t *dev, uint16_t rx1)
 Sets the rn2xx3 LoRaMAC interval delay before the first reception window (in ms) More...
 
uint16_t rn2xx3_mac_get_rx2_delay (rn2xx3_t *dev)
 Gets the rn2xx3 LoRaMAC interval delay before the second reception window (in ms) More...
 
bool rn2xx3_mac_get_ar (rn2xx3_t *dev)
 Checks the rn2xx3 LoRaMAC automatic reply state. More...
 
void rn2xx3_mac_set_ar (rn2xx3_t *dev, bool ar)
 Enables/disables LoRaMAC rn2xx3 MAC automatic reply state. More...
 
loramac_dr_idx_t rn2xx3_mac_get_rx2_dr (rn2xx3_t *dev)
 Gets the rn2xx3 LoRaMAC datarate used for second receive window. More...
 
void rn2xx3_mac_set_rx2_dr (rn2xx3_t *dev, loramac_dr_idx_t dr)
 Sets the rn2xx3 LoRaMAC datarate used for second receive window. More...
 
uint32_t rn2xx3_mac_get_rx2_freq (rn2xx3_t *dev)
 Gets the rn2xx3 LoRaMAC frequency used during second receive window (in Hz) More...
 
void rn2xx3_mac_set_rx2_freq (rn2xx3_t *dev, uint32_t freq)
 Sets the rn2xx3 LoRaMAC frequency used during second receive window (in Hz) More...
 
uint8_t rn2xx3_mac_get_tx_port (rn2xx3_t *dev)
 Gets the rn2xx3 LoRaMAC TX port. More...
 
void rn2xx3_mac_set_tx_port (rn2xx3_t *dev, uint8_t port)
 Sets the rn2xx3 LoRaMAC TX port. More...
 
loramac_tx_mode_t rn2xx3_mac_get_tx_mode (rn2xx3_t *dev)
 Gets the rn2xx3 LoRaMAC TX mode. More...
 
void rn2xx3_mac_set_tx_mode (rn2xx3_t *dev, loramac_tx_mode_t mode)
 Sets the rn2xx3 LoRaMAC TX mode. More...
 
uint8_t rn2xx3_mac_get_rx_port (rn2xx3_t *dev)
 Parses the response buffer to get the LoRaWAN RX port. More...
 
void rn2xx3_sys_set_sleep_duration (rn2xx3_t *dev, uint32_t sleep)
 Sets the rn2xx3 sleep mode duration (in ms) More...
 

Macro Definition Documentation

◆ RN2XX3_RX_MAX_BUF

#define RN2XX3_RX_MAX_BUF   (250U)

Maximum length of an RX message.

     LoRaMAC payload can be up to 250 bytes.

Definition at line 47 of file rn2xx3.h.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

Command responses and server replies status codes.

Enumerator
RN2XX3_OK 

Command is valid.

RN2XX3_DATA 

Command returned data.

RN2XX3_TIMEOUT 

Command timeout.

RN2XX3_ERR_MAC_INIT 

Device mac initialization failed.

RN2XX3_ERR_INVALID_PARAM 

Wrong command given.

RN2XX3_ERR_NOT_JOINED 

Network is not joined.

RN2XX3_ERR_NO_FREE_CH 

All channels are busy.

RN2XX3_ERR_SILENT 

Device is in Silent Immediately state.

RN2XX3_ERR_FR_CNT_REJOIN_NEEDED 

Frame counter rolled over.

RN2XX3_ERR_BUSY 

MAC is not in Idle state.

RN2XX3_ERR_MAC_PAUSED 

MAC was paused.

RN2XX3_ERR_INVALID_DATA_LENGTH 

Wrong payload given.

RN2XX3_ERR_KEYS_NOT_INIT 

Keys not configured ("mac join" command)

RN2XX3_ERR_SLEEP_MODE 

Failure because device is in sleep mode.

RN2XX3_REPLY_TX_MAC_OK 

MAC transmission successful.

RN2XX3_REPLY_TX_MAC_ERR 

MAC transmission failed.

RN2XX3_REPLY_TX_INVALID_DATA_LEN 

Application payload too large.

RN2XX3_REPLY_TX_MAC_RX 

Data received from server.

RN2XX3_REPLY_JOIN_ACCEPTED 

Join procedure successful.

RN2XX3_REPLY_JOIN_DENIED 

Join procedure failed.

RN2XX3_REPLY_TIMEOUT 

No MAC reply received from server.

RN2XX3_REPLY_OTHER 

Unknown reply.

Definition at line 83 of file rn2xx3.h.

◆ anonymous enum

anonymous enum

Internal states of the device.

Enumerator
RN2XX3_INT_STATE_RESET 

the device is being reset or initialized

RN2XX3_INT_STATE_CMD 

waiting command response

RN2XX3_INT_STATE_IDLE 

waiting for incoming commands

RN2XX3_INT_STATE_SLEEP 

sleep mode

RN2XX3_INT_STATE_MAC_JOIN 

waiting for mac join procedure reply

RN2XX3_INT_STATE_MAC_TX 

waiting for mac tx reply

RN2XX3_INT_STATE_MAC_RX_PORT 

waiting for mac rx port

RN2XX3_INT_STATE_MAC_RX_MESSAGE 

waiting for mac rx message

Definition at line 113 of file rn2xx3.h.

Function Documentation

◆ rn2xx3_init()

int rn2xx3_init ( rn2xx3_t dev)

Initializes the RN2XX3 device.

Parameters
[in]devRN2XX3 device descriptor
Returns
RN2XX3_OK on success
-ENXIO if UART initialization failed
RN2XX3_TIMEOUT if UART communication failed

◆ rn2xx3_mac_get_adr()

bool rn2xx3_mac_get_adr ( rn2xx3_t dev)

Checks if the rn2xx3 LoRaMAC adaptive datarate is enabled/disabled.

Parameters
[in]devThe rn2xx3 device descriptor
Returns
true if adaptive datarate is set, false otherwise

◆ rn2xx3_mac_get_appeui()

void rn2xx3_mac_get_appeui ( rn2xx3_t dev,
uint8_t *  eui 
)

Gets the rn2xx3 LoRaMAC application EUI.

The application EUI is an array of 8 bytes.

Parameters
[in]devThe rn2xx3 device descriptor
[out]euiThe application EUI

◆ rn2xx3_mac_get_ar()

bool rn2xx3_mac_get_ar ( rn2xx3_t dev)

Checks the rn2xx3 LoRaMAC automatic reply state.

Parameters
[in]devThe rn2xx3 device descriptor
Returns
The automatic reply state

◆ rn2xx3_mac_get_band()

uint16_t rn2xx3_mac_get_band ( rn2xx3_t dev)

Gets the rn2xx3 LoRaMAC frequency band in operation.

Parameters
[in]devThe rn2xx3 device descriptor
Returns
The frequency band

◆ rn2xx3_mac_get_devaddr()

void rn2xx3_mac_get_devaddr ( rn2xx3_t dev,
uint8_t *  addr 
)

Gets the rn2xx3 LoRaMAC device address.

The device address is an array of 4 bytes.

Parameters
[in]devThe rn2xx3 device descriptor
[out]addrThe device address

◆ rn2xx3_mac_get_deveui()

void rn2xx3_mac_get_deveui ( rn2xx3_t dev,
uint8_t *  eui 
)

Gets the rn2xx3 LoRaMAC device EUI.

The device EUI is an array of 8 bytes.

Parameters
[in]devThe rn2xx3 device descriptor
[out]euiThe device EUI

◆ rn2xx3_mac_get_dr()

loramac_dr_idx_t rn2xx3_mac_get_dr ( rn2xx3_t dev)

Gets the rn2xx3 LoRaMAC datarate.

Parameters
[in]devThe rn2xx3 device descriptor
Returns
The datarate

◆ rn2xx3_mac_get_retx()

uint8_t rn2xx3_mac_get_retx ( rn2xx3_t dev)

Gets the rn2xx3 LoRaMAC uplink retransmission retries number.

Parameters
[in]devThe rn2xx3 device descriptor
Returns
The number of uplink retransmission retries

◆ rn2xx3_mac_get_rx1_delay()

uint16_t rn2xx3_mac_get_rx1_delay ( rn2xx3_t dev)

Gets the rn2xx3 LoRaMAC interval delay before the first reception window (in ms)

Parameters
[in]devThe rn2xx3 device descriptor
Returns
The delay in ms

◆ rn2xx3_mac_get_rx2_delay()

uint16_t rn2xx3_mac_get_rx2_delay ( rn2xx3_t dev)

Gets the rn2xx3 LoRaMAC interval delay before the second reception window (in ms)

Parameters
[in]devThe rn2xx3 device descriptor
Returns
The delay in ms

◆ rn2xx3_mac_get_rx2_dr()

loramac_dr_idx_t rn2xx3_mac_get_rx2_dr ( rn2xx3_t dev)

Gets the rn2xx3 LoRaMAC datarate used for second receive window.

Parameters
[in]devThe rn2xx3 device descriptor
Returns
The datarate during second receive window

◆ rn2xx3_mac_get_rx2_freq()

uint32_t rn2xx3_mac_get_rx2_freq ( rn2xx3_t dev)

Gets the rn2xx3 LoRaMAC frequency used during second receive window (in Hz)

Parameters
[in]devThe rn2xx3 device descriptor
Returns
The frequency during second receive window

◆ rn2xx3_mac_get_rx_port()

uint8_t rn2xx3_mac_get_rx_port ( rn2xx3_t dev)

Parses the response buffer to get the LoRaWAN RX port.

Parameters
[in]devThe rn2xx3 device descriptor
Returns
The RX port (between 1 and 223)

◆ rn2xx3_mac_get_tx_mode()

loramac_tx_mode_t rn2xx3_mac_get_tx_mode ( rn2xx3_t dev)

Gets the rn2xx3 LoRaMAC TX mode.

Parameters
[in]devThe rn2xx3 device descriptor
Returns
The TX mode, either confirmable or unconfirmable

◆ rn2xx3_mac_get_tx_port()

uint8_t rn2xx3_mac_get_tx_port ( rn2xx3_t dev)

Gets the rn2xx3 LoRaMAC TX port.

Parameters
[in]devThe rn2xx3 device descriptor
Returns
The TX port

◆ rn2xx3_mac_get_tx_power()

loramac_tx_pwr_idx_t rn2xx3_mac_get_tx_power ( rn2xx3_t dev)

Gets the rn2xx3 LoRaMAC TX radio power index.

Parameters
[in]devThe rn2xx3 device descriptor
Returns
The radio power index

◆ rn2xx3_mac_init()

int rn2xx3_mac_init ( rn2xx3_t dev)

Initializes the RN2XX3 device MAC layer.

Parameters
[in]devRN2XX3 device descriptor
Returns
RN2XX3_OK on success
RN2XX3_TIMEOUT if UART communication failed

◆ rn2xx3_mac_join_network()

int rn2xx3_mac_join_network ( rn2xx3_t dev,
loramac_join_mode_t  mode 
)

Starts network activation procedure.

Parameters
[in]devRN2XX3 device descriptor
[in]modeActivation procedure type
Returns
RN2XX3_ERR_KEYS_NOT_INIT if the loramac params are not configured
RN2XX3_ERR_NO_FREE_CH if channels are busy
RN2XX3_ERR_SILENT if device is in Silent state
RN2XX3_ERR_BUSY if MAC layer is in idle state
RN2XX3_ERR_MAC_PAUSED if MAC layer is paused
RN2XX3_REPLY_JOIN_ACCEPTED when the join procedure succeeded
RN2XX3_REPLY_JOIN_DENIED when the join procedure failed

◆ rn2xx3_mac_save()

int rn2xx3_mac_save ( rn2xx3_t dev)

Saves current LoRaMAC configuration to internal EEPROM.

The configuration parameters saved are: frequency band, end device EUI, application EUI, application key, network session key, application session key, end device EUI and all channel parameters.

Parameters
[in]devRN2XX3 device descriptor
Returns
RN2XX3_OK if all is ok
RN2XX3_TIMEOUT if the device didn't reply

◆ rn2xx3_mac_set_adr()

void rn2xx3_mac_set_adr ( rn2xx3_t dev,
bool  adr 
)

Enables/disables the rn2xx3 LoRaMAC adaptive datarate.

Parameters
[in]devThe rn2xx3 device descriptor
[in]adrThe adaptive datarate mode

◆ rn2xx3_mac_set_appeui()

void rn2xx3_mac_set_appeui ( rn2xx3_t dev,
const uint8_t *  eui 
)

Sets the rn2xx3 LoRaMAC application EUI.

The application key is an array of 8 bytes.

Parameters
[in]devThe rn2xx3 device descriptor
[in]euiThe application EUI

◆ rn2xx3_mac_set_appkey()

void rn2xx3_mac_set_appkey ( rn2xx3_t dev,
const uint8_t *  key 
)

Sets the rn2xx3 LoRaMAC application key.

The application key is an array of 16 bytes.

Parameters
[in]devThe rn2xx3 device descriptor
[in]keyThe application key

◆ rn2xx3_mac_set_appskey()

void rn2xx3_mac_set_appskey ( rn2xx3_t dev,
const uint8_t *  key 
)

Sets the rn2xx3 LoRaMAC application session key.

The application session key is an array of 16 bytes.

Parameters
[in]devThe rn2xx3 device descriptor
[in]keyThe application session key

◆ rn2xx3_mac_set_ar()

void rn2xx3_mac_set_ar ( rn2xx3_t dev,
bool  ar 
)

Enables/disables LoRaMAC rn2xx3 MAC automatic reply state.

Parameters
[in]devThe rn2xx3 device descriptor
[in]arThe automatic reply state

◆ rn2xx3_mac_set_battery()

void rn2xx3_mac_set_battery ( rn2xx3_t dev,
uint8_t  battery 
)

Sets the rn2xx3 battery level measured by the end device.

Parameters
[in]devThe rn2xx3 device descriptor
[in]batteryThe battery level:
  • 0 means external power,
  • 1 means low level,
  • 254 high level,
  • 255 means the battery level couldn't be measured by the device.

◆ rn2xx3_mac_set_devaddr()

void rn2xx3_mac_set_devaddr ( rn2xx3_t dev,
const uint8_t *  addr 
)

Sets the rn2xx3 LoRaMAC device address.

The device address is an array of 4 bytes.

Parameters
[in]devThe rn2xx3 device descriptor
[in]addrThe device address

◆ rn2xx3_mac_set_deveui()

void rn2xx3_mac_set_deveui ( rn2xx3_t dev,
const uint8_t *  eui 
)

Sets the rn2xx3 LoRaMAC device EUI.

The device EUI is an array of 8 bytes.

Parameters
[in]devThe rn2xx3 device descriptor
[in]euiThe device EUI

◆ rn2xx3_mac_set_dr()

void rn2xx3_mac_set_dr ( rn2xx3_t dev,
loramac_dr_idx_t  dr 
)

Sets the rn2xx3 LoRaMAC datarate.

Parameters
[in]devThe rn2xx3 device descriptor
[in]drThe datarate

◆ rn2xx3_mac_set_linkchk_interval()

void rn2xx3_mac_set_linkchk_interval ( rn2xx3_t dev,
uint16_t  linkchk 
)

Sets the rn2xx3 LoRaMAC link check interval (in seconds)

Parameters
[in]devThe rn2xx3 device descriptor
[in]linkchkThe link check interval in seconds

◆ rn2xx3_mac_set_nwkskey()

void rn2xx3_mac_set_nwkskey ( rn2xx3_t dev,
const uint8_t *  key 
)

Sets the rn2xx3 LoRaMAC network session key.

The network session key is an array of 16 bytes.

Parameters
[in]devThe rn2xx3 device descriptor
[in]keyThe network session key

◆ rn2xx3_mac_set_retx()

void rn2xx3_mac_set_retx ( rn2xx3_t dev,
uint8_t  retx 
)

Sets the rn2xx3 LoRaMAC uplink retransmission retries number.

Parameters
[in]devThe rn2xx3 device descriptor
[in]retxThe number of uplink retransmission retries

◆ rn2xx3_mac_set_rx1_delay()

void rn2xx3_mac_set_rx1_delay ( rn2xx3_t dev,
uint16_t  rx1 
)

Sets the rn2xx3 LoRaMAC interval delay before the first reception window (in ms)

Parameters
[in]devThe rn2xx3 device descriptor
[in]rx1The delay in ms

◆ rn2xx3_mac_set_rx2_dr()

void rn2xx3_mac_set_rx2_dr ( rn2xx3_t dev,
loramac_dr_idx_t  dr 
)

Sets the rn2xx3 LoRaMAC datarate used for second receive window.

Parameters
[in]devThe rn2xx3 device descriptor
[in]drThe datarate during second receive window

◆ rn2xx3_mac_set_rx2_freq()

void rn2xx3_mac_set_rx2_freq ( rn2xx3_t dev,
uint32_t  freq 
)

Sets the rn2xx3 LoRaMAC frequency used during second receive window (in Hz)

Parameters
[in]devThe rn2xx3 device descriptor
[in]freqThe frequency during second receive window

◆ rn2xx3_mac_set_tx_mode()

void rn2xx3_mac_set_tx_mode ( rn2xx3_t dev,
loramac_tx_mode_t  mode 
)

Sets the rn2xx3 LoRaMAC TX mode.

Parameters
[in]devThe rn2xx3 device descriptor
[in]modeThe TX mode, either confirmable or unconfirmable

◆ rn2xx3_mac_set_tx_port()

void rn2xx3_mac_set_tx_port ( rn2xx3_t dev,
uint8_t  port 
)

Sets the rn2xx3 LoRaMAC TX port.

Parameters
[in]devThe rn2xx3 device descriptor
[in]portThe TX port (from 1 to 223)

◆ rn2xx3_mac_set_tx_power()

void rn2xx3_mac_set_tx_power ( rn2xx3_t dev,
loramac_tx_pwr_idx_t  power 
)

Sets the rn2xx3 LoRaMAC transmission power index.

Parameters
[in]devThe rn2xx3 device descriptor
[in]powerThe TX power index

◆ rn2xx3_mac_tx()

int rn2xx3_mac_tx ( rn2xx3_t dev,
uint8_t *  payload,
uint8_t  payload_len 
)

Sends data to LoRaWAN server.

Parameters
[in]devRN2XX3 device descriptor
[in]payloadPayload to transmit
[in]payload_lenPayload length to transmit
Returns
RN2XX3_ERR_KEYS_NOT_INIT if the loramac params are not configured
RN2XX3_ERR_NO_FREE_CH if channels are busy
RN2XX3_ERR_SILENT if device is in Silent state
RN2XX3_ERR_BUSY if MAC layer is in idle state
RN2XX3_ERR_MAC_PAUSED if MAC laid is paused
RN2XX3_REPLY_TX_INVALID_DATA_LEN if payload is too large
RN2XX3_REPLY_TX_MAC_ERR when MAC transmission failed
RN2XX3_REPLY_TX_MAC_RX when received downlink data from server
RN2XX3_REPLY_TX_MAC_OK when MAC transmission succeeded

◆ rn2xx3_setup()

void rn2xx3_setup ( rn2xx3_t dev,
const rn2xx3_params_t params 
)

Prepares the given RN2XX3 device.

Parameters
[out]devRN2XX3 device to initialize
[in]paramsparameters for device initialization

◆ rn2xx3_sys_factory_reset()

int rn2xx3_sys_factory_reset ( rn2xx3_t dev)

Performs a factory reset of the module.

The configuration data and user EEPPROM are reinitialized to factory default values and the module reboots

After calling this function, dev->resp_buf contains the module name and version string.

Parameters
[in]devRN2XX3 device descriptor
Returns
RN2XX3_OK on success
RN2XX3_TIMEOUT if UART communication failed

◆ rn2xx3_sys_reset()

int rn2xx3_sys_reset ( rn2xx3_t dev)

Restarts the RN2XX2 device.

After calling this function, dev->resp_buf contains the module name and version string.

Parameters
[in]devRN2XX3 device descriptor
Returns
RN2XX3_OK on success
RN2XX3_TIMEOUT if UART communication failed

◆ rn2xx3_sys_set_sleep_duration()

void rn2xx3_sys_set_sleep_duration ( rn2xx3_t dev,
uint32_t  sleep 
)

Sets the rn2xx3 sleep mode duration (in ms)

Parameters
[in]devThe rn2xx3 device descriptor
[in]sleepThe sleep mode duration (ms)

◆ rn2xx3_sys_sleep()

int rn2xx3_sys_sleep ( rn2xx3_t dev)

Puts the RN2XX2 device in sleep mode.

Parameters
[in]devRN2XX3 device descriptor
Returns
RN2XX3_OK on success
RN2XX3_TIMEOUT if UART communication failed

◆ rn2xx3_wait_reply()

int rn2xx3_wait_reply ( rn2xx3_t dev,
uint8_t  timeout 
)

Waits for a reply from the LoRaWAN network.

Parameters
[in]devLoRaBee device descriptor
[in]timeoutReply wait timeout in seconds
Returns
RN2XX3_REPLY_TIMEOUT when no MAC reply is received from server
RN2XX3_REPLY_TX_MAC_OK when MAC transmission succeeded
RN2XX3_REPLY_TX_MAC_ERR when MAC transmission failed
RN2XX3_REPLY_TX_MAC_RX when received downlink data from server
RN2XX3_REPLY_TX_INVALID_DATA_LEN when Application payload is too large
RN2XX3_REPLY_JOIN_ACCEPTED when the join procedure succeeded
RN2XX3_REPLY_JOIN_DENIED when the join procedure failed
RN2XX3_REPLY_OTHER when an unknown reply is received

◆ rn2xx3_wait_response()

int rn2xx3_wait_response ( rn2xx3_t dev)

Waits for a response to a command from the device.

Parameters
[in]devRN2XX3 device descriptor
Returns
RN2XX3_OK on success
RN2XX3_TIMEOUT if no response is received from the module
RN2XX3_ERR_INVALID_PARAM if command is invalid
RN2XX3_ERR_NOT_JOINED if network is not joined
RN2XX3_ERR_NO_FREE_CH if no free channel
RN2XX3_ERR_SILENT if device is in Silent state
RN2XX3_ERR_FR_CNT_REJOIN_NEEDED if frame counter rolled over
RN2XX3_ERR_BUSY if MAC is not in Idle state
RN2XX3_ERR_INVALID_DATA_LENGTH if payload is too large
RN2XX3_ERR_KEYS_NOT_INIT if keys are not configured

◆ rn2xx3_write_cmd()

int rn2xx3_write_cmd ( rn2xx3_t dev)

Writes a command to the RN2XX3 device.

The module will immediately reply with a meaningful message if the command is valid or not.

Parameters
[in]devRN2XX3 device descriptor
Returns
RN2XX3_OK on success
RN2XX3_TIMEOUT if no response is received from the module
RN2XX3_ERR_INVALID_PARAM if command is invalid
RN2XX3_ERR_NOT_JOINED if network is not joined
RN2XX3_ERR_NO_FREE_CH if no free channel
RN2XX3_ERR_SILENT if device is in Silent state
RN2XX3_ERR_FR_CNT_REJOIN_NEEDED if frame counter rolled over
RN2XX3_ERR_BUSY if MAC is not in Idle state
RN2XX3_ERR_INVALID_DATA_LENGTH if payload is too large
RN2XX3_ERR_KEYS_NOT_INIT if keys are not configured

◆ rn2xx3_write_cmd_no_wait()

int rn2xx3_write_cmd_no_wait ( rn2xx3_t dev)

Writes a command to the RN2XX3 device but don't wait for timeout or response.

The response can be checked in the dev->resp_buf buffer after a small delay (for example 1ms).

Parameters
[in]devRN2XX3 device descriptor
Returns
RN2XX3_OK on success