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

Detailed Description

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

Author
Alexandre Abadie alexa.nosp@m.ndre.nosp@m..abad.nosp@m.ie@i.nosp@m.nria..nosp@m.fr

Definition in file rn2xx3.h.

#include <stdint.h>
#include "xtimer.h"
#include "periph/uart.h"
#include "periph/gpio.h"
#include "net/netdev.h"
#include "net/loramac.h"
+ Include dependency graph for rn2xx3.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

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)
 
#define RN2XX3_DEFAULT_SLEEP   (5000U)
 Default 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...