GNRC LoRaWAN stack implementation. More...

Detailed Description

GNRC LoRaWAN stack implementation.

Modules

 GNRC LoRaWAN compile configurations
 

Files

file  region.h
 GNRC LoRaWAN region specific functions.
 
file  lorawan.h
 GNRC LoRaWAN API definition.
 
file  gnrc_lorawan_internal.h
 GNRC LoRaWAN internal header.
 

Data Structures

struct  mlme_mib_t
 MAC Information Base descriptor for MLME Request-Confirm. More...
 
struct  mlme_request_t
 MAC (sub) Layer Management Entity (MLME) request representation. More...
 
struct  mcps_request_t
 Mac Common Part Sublayer (MCPS) request representation. More...
 
struct  mlme_confirm_t
 MAC (sub) Layer Management Entity (MLME) confirm representation. More...
 
struct  mcps_confirm_t
 Mac Common Part Sublayer (MCPS) confirm representation. More...
 
struct  mcps_indication_t
 Mac Common Part Sublayer (MCPS) indication representation. More...
 
struct  mlme_indication_t
 MAC (sub) Layer Management Entity (MLME) indication representation. More...
 

Macros

#define GNRC_LORAWAN_REQ_STATUS_SUCCESS   (0)
 MLME or MCPS request successful status.
 
#define GNRC_LORAWAN_REQ_STATUS_DEFERRED   (1)
 the MLME or MCPS confirm message is asynchronous
 

Enumerations

enum  mcps_event_t { MCPS_EVENT_RX, MCPS_EVENT_NO_RX }
 MCPS events. More...
 
enum  mlme_activation_t { MLME_ACTIVATION_NONE, MLME_ACTIVATION_ABP, MLME_ACTIVATION_OTAA }
 LoRaWAN activation mechanism. More...
 
enum  mlme_mib_type_t { MIB_ACTIVATION_METHOD, MIB_DEV_ADDR, MIB_RX2_DR }
 MAC Information Base attributes. More...
 
enum  mlme_type_t {
  MLME_JOIN, MLME_LINK_CHECK, MLME_RESET, MLME_SET,
  MLME_GET, MLME_SCHEDULE_UPLINK
}
 MLME primitive types. More...
 
enum  mcps_type_t { MCPS_CONFIRMED, MCPS_UNCONFIRMED }
 MCPS primitive types. More...
 

Functions

void gnrc_lorawan_radio_rx_timeout_cb (gnrc_lorawan_t *mac)
 Indicate the MAC layer there was a timeout event. More...
 
void gnrc_lorawan_radio_tx_done_cb (gnrc_lorawan_t *mac)
 Indicate the MAC layer when the transmission finished. More...
 
static void gnrc_lorawan_radio_rx_error_cb (gnrc_lorawan_t *mac)
 Indicate the MAC layer reception of a frame went wrong. More...
 
void gnrc_lorawan_timeout_cb (gnrc_lorawan_t *mac)
 Indicate the MAC layer that the timer was fired. More...
 
void gnrc_lorawan_init (gnrc_lorawan_t *mac, uint8_t *nwkskey, uint8_t *appskey)
 Init GNRC LoRaWAN. More...
 
void gnrc_lorawan_mlme_request (gnrc_lorawan_t *mac, const mlme_request_t *mlme_request, mlme_confirm_t *mlme_confirm)
 Perform a MLME request. More...
 
void gnrc_lorawan_mcps_request (gnrc_lorawan_t *mac, const mcps_request_t *mcps_request, mcps_confirm_t *mcps_confirm)
 Perform a MCPS request. More...
 
void gnrc_lorawan_radio_rx_done_cb (gnrc_lorawan_t *mac, uint8_t *data, size_t size)
 Fetch a LoRaWAN packet from the radio. More...
 
void gnrc_lorawan_mcps_indication (gnrc_lorawan_t *mac, mcps_indication_t *ind)
 MCPS indication callback. More...
 
void gnrc_lorawan_mlme_indication (gnrc_lorawan_t *mac, mlme_indication_t *ind)
 MLME indication callback. More...
 
void gnrc_lorawan_mcps_confirm (gnrc_lorawan_t *mac, mcps_confirm_t *confirm)
 MCPS Confirm callback. More...
 
void gnrc_lorawan_mlme_confirm (gnrc_lorawan_t *mac, mlme_confirm_t *confirm)
 MLME confirm callback. More...
 
netdev_tgnrc_lorawan_get_netdev (gnrc_lorawan_t *mac)
 Get netdev pointer from mac descriptor. More...
 
int gnrc_lorawan_phy_set_channel_mask (gnrc_lorawan_t *mac, uint16_t channel_mask)
 Set the channel mask in order to enable or disable LoRaWAN channels. More...
 
void gnrc_lorawan_set_timer (gnrc_lorawan_t *mac, uint32_t us)
 Set a timer with the given time. More...
 
void gnrc_lorawan_remove_timer (gnrc_lorawan_t *mac)
 Remove the current timer. More...
 
static void gnrc_lorawan_set_uncnf_redundancy (gnrc_lorawan_t *mac, uint8_t redundancy)
 Set unconfirmed uplink redundancy. More...
 

Enumeration Type Documentation

◆ mcps_event_t

MCPS events.

Enumerator
MCPS_EVENT_RX 

MCPS RX event.

MCPS_EVENT_NO_RX 

MCPS no RX event.

Definition at line 52 of file lorawan.h.

◆ mcps_type_t

MCPS primitive types.

Enumerator
MCPS_CONFIRMED 

confirmed data

MCPS_UNCONFIRMED 

unconfirmed data

Definition at line 90 of file lorawan.h.

◆ mlme_activation_t

LoRaWAN activation mechanism.

Enumerator
MLME_ACTIVATION_NONE 

MAC layer is not activated.

MLME_ACTIVATION_ABP 

MAC layer activated by ABP.

MLME_ACTIVATION_OTAA 

MAC layer activated by OTAA.

Definition at line 60 of file lorawan.h.

◆ mlme_mib_type_t

MAC Information Base attributes.

Enumerator
MIB_ACTIVATION_METHOD 

type is activation method

MIB_DEV_ADDR 

type is dev addr

MIB_RX2_DR 

type is rx2 DR

Definition at line 69 of file lorawan.h.

◆ mlme_type_t

MLME primitive types.

Enumerator
MLME_JOIN 

join a LoRaWAN network

MLME_LINK_CHECK 

perform a Link Check

MLME_RESET 

reset the MAC layer

MLME_SET 

set the MIB

MLME_GET 

get the MIB

MLME_SCHEDULE_UPLINK 

schedule uplink indication

Definition at line 78 of file lorawan.h.

Function Documentation

◆ gnrc_lorawan_get_netdev()

netdev_t* gnrc_lorawan_get_netdev ( gnrc_lorawan_t mac)

Get netdev pointer from mac descriptor.

Note
Supposed to be implemented by the user of GNRC LoRaWAN
Parameters
[in]macpointer to the MAC descriptor
Returns
pointer to the netdev_t structure

◆ gnrc_lorawan_init()

void gnrc_lorawan_init ( gnrc_lorawan_t mac,
uint8_t *  nwkskey,
uint8_t *  appskey 
)

Init GNRC LoRaWAN.

Parameters
[in]macpointer to the MAC descriptor
[in]nwkskeybuffer to store the NwkSKey. Should be at least 16 bytes long
[in]appskeybuffer to store the AppsKey. Should be at least 16 bytes long

◆ gnrc_lorawan_mcps_confirm()

void gnrc_lorawan_mcps_confirm ( gnrc_lorawan_t mac,
mcps_confirm_t confirm 
)

MCPS Confirm callback.

Note
Supposed to be implemented by the user of GNRC LoRaWAN
Parameters
[in]macpointer to the MAC descriptor
[in]confirmpointer to the confirm (see mcps_confirm_t)

◆ gnrc_lorawan_mcps_indication()

void gnrc_lorawan_mcps_indication ( gnrc_lorawan_t mac,
mcps_indication_t ind 
)

MCPS indication callback.

Note
Supposed to be implemented by the user of GNRC LoRaWAN
Parameters
[in]macpointer to the MAC descriptor
[in]indpointer of the indication (see mcps_indication_t)

◆ gnrc_lorawan_mcps_request()

void gnrc_lorawan_mcps_request ( gnrc_lorawan_t mac,
const mcps_request_t mcps_request,
mcps_confirm_t mcps_confirm 
)

Perform a MCPS request.

Parameters
[in]macpointer to the MAC descriptor
[in]mcps_requestthe MCPS request
[out]mcps_confirmthe MCPS confirm. mlme_confirm->status could either be GNRC_LORAWAN_REQ_STATUS_SUCCESS if the request was OK, GNRC_LORAWAN_REQ_STATUS_DEFERRED if the confirmation is deferred or an standard error number

◆ gnrc_lorawan_mlme_confirm()

void gnrc_lorawan_mlme_confirm ( gnrc_lorawan_t mac,
mlme_confirm_t confirm 
)

MLME confirm callback.

Note
Supposed to be implemented by the user of GNRC LoRaWAN
Parameters
[in]macpointer to the MAC descriptor
[in]confirmpointer to the confirm (see mlme_confirm_t)

◆ gnrc_lorawan_mlme_indication()

void gnrc_lorawan_mlme_indication ( gnrc_lorawan_t mac,
mlme_indication_t ind 
)

MLME indication callback.

Note
Supposed to be implemented by the user of GNRC LoRaWAN
Parameters
[in]macpointer to the MAC descriptor
[in]indpointer of the indication (see mlme_indication_t)

◆ gnrc_lorawan_mlme_request()

void gnrc_lorawan_mlme_request ( gnrc_lorawan_t mac,
const mlme_request_t mlme_request,
mlme_confirm_t mlme_confirm 
)

Perform a MLME request.

Parameters
[in]macpointer to the MAC descriptor
[in]mlme_requestthe MLME request
[out]mlme_confirmthe MLME confirm. mlme_confirm->status could either be GNRC_LORAWAN_REQ_STATUS_SUCCESS if the request was OK, GNRC_LORAWAN_REQ_STATUS_DEFERRED if the confirmation is deferred or an standard error number

◆ gnrc_lorawan_phy_set_channel_mask()

int gnrc_lorawan_phy_set_channel_mask ( gnrc_lorawan_t mac,
uint16_t  channel_mask 
)

Set the channel mask in order to enable or disable LoRaWAN channels.

Parameters
[in]macpointer to the MAC descriptor
[in]channel_maskthe channel mask. LSB maps to channel 0
Returns
0 on success
-EINVAL if channel_mask is zero or if the channel mask tries to enable an undefined channel

◆ gnrc_lorawan_radio_rx_done_cb()

void gnrc_lorawan_radio_rx_done_cb ( gnrc_lorawan_t mac,
uint8_t *  data,
size_t  size 
)

Fetch a LoRaWAN packet from the radio.

To be called on radio RX done event.

Parameters
[in]macpointer to the MAC descriptor
[in]datapointer to the psdu. Must not be NULL. Use gnrc_lorawan_radio_rx_error_cb instead if the reception was not successful.
[in]sizesize of the PSDU

◆ gnrc_lorawan_radio_rx_error_cb()

static void gnrc_lorawan_radio_rx_error_cb ( gnrc_lorawan_t mac)
inlinestatic

Indicate the MAC layer reception of a frame went wrong.

Parameters
[in]macpointer to the MAC descriptor

Definition at line 185 of file lorawan.h.

◆ gnrc_lorawan_radio_rx_timeout_cb()

void gnrc_lorawan_radio_rx_timeout_cb ( gnrc_lorawan_t mac)

Indicate the MAC layer there was a timeout event.

Parameters
[in]macpointer to the MAC descriptor

◆ gnrc_lorawan_radio_tx_done_cb()

void gnrc_lorawan_radio_tx_done_cb ( gnrc_lorawan_t mac)

Indicate the MAC layer when the transmission finished.

Parameters
[in]macpointer to the MAC descriptor

◆ gnrc_lorawan_remove_timer()

void gnrc_lorawan_remove_timer ( gnrc_lorawan_t mac)

Remove the current timer.

Note
Supposed to be implemented by the user of GNRC LoRaWAN
Parameters
[in]macpointer to the MAC descriptor

◆ gnrc_lorawan_set_timer()

void gnrc_lorawan_set_timer ( gnrc_lorawan_t mac,
uint32_t  us 
)

Set a timer with the given time.

Note
Supposed to be implemented by the user of GNRC LoRaWAN
Parameters
[in]macpointer to the MAC descriptor
ustimeout microseconds

◆ gnrc_lorawan_set_uncnf_redundancy()

static void gnrc_lorawan_set_uncnf_redundancy ( gnrc_lorawan_t mac,
uint8_t  redundancy 
)
inlinestatic

Set unconfirmed uplink redundancy.

Precondition
redundancy <= 14
Parameters
[in]macpointer to the MAC descriptor
[in]redundancynumber of unconfirmed uplink retransmissions

Definition at line 332 of file lorawan.h.

◆ gnrc_lorawan_timeout_cb()

void gnrc_lorawan_timeout_cb ( gnrc_lorawan_t mac)

Indicate the MAC layer that the timer was fired.

Parameters
[in]macpointer to the MAC descriptor