Semtech / LoRaWAN-lib-dev

LoRAWAN-lib is a port of the GitHub LoRaMac-node develop branch LoRaWAN MAC layer implementation.

This library depends on the SX1276Lib or SX1272Lib radio drivers depending on the used mbed component shield.

This library depends also on some cryptographic helper functions as well as helper functions for the timers management. These can be found on the example projects under the system directory.

The example projects are:

  1. LoRaWAN-demo-72
  2. LoRaWAN-demo-76
  3. LoRaWAN-demo-NAMote72

The LoRaWAN specification specifies different ISM bands operating parameters. These are all implemented under the LoRaMac-board.h file.

In order to select which band to use, please change line 24 of board.h file provided on the examples projects as follows:


EU868

board.h

#define USE_BAND_868


US915

board.h

#define USE_BAND_915


US915 - Hybrid

board.h

#define USE_BAND_915_HYBRID


CN780

board.h

#define USE_BAND_780


EU433

board.h

#define USE_BAND_433
Committer:
mluis
Date:
Tue Jul 05 15:12:50 2016 +0000
Revision:
1:4820e04b066c
Parent:
0:66f12acb8acb
Child:
2:76f59096e3a7
Synchronized with https://github.com/Lora-net/LoRaMac-node develop branch git revision c09c3101e64d7c7f1ca5061faf470d709122c8d0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mluis 0:66f12acb8acb 1 /*!
mluis 0:66f12acb8acb 2 * \file LoRaMac.h
mluis 0:66f12acb8acb 3 *
mluis 0:66f12acb8acb 4 * \brief LoRa MAC layer implementation
mluis 0:66f12acb8acb 5 *
mluis 0:66f12acb8acb 6 * \copyright Revised BSD License, see section \ref LICENSE.
mluis 0:66f12acb8acb 7 *
mluis 0:66f12acb8acb 8 * \code
mluis 0:66f12acb8acb 9 * ______ _
mluis 0:66f12acb8acb 10 * / _____) _ | |
mluis 0:66f12acb8acb 11 * ( (____ _____ ____ _| |_ _____ ____| |__
mluis 0:66f12acb8acb 12 * \____ \| ___ | (_ _) ___ |/ ___) _ \
mluis 0:66f12acb8acb 13 * _____) ) ____| | | || |_| ____( (___| | | |
mluis 0:66f12acb8acb 14 * (______/|_____)_|_|_| \__)_____)\____)_| |_|
mluis 0:66f12acb8acb 15 * (C)2013 Semtech
mluis 0:66f12acb8acb 16 *
mluis 0:66f12acb8acb 17 * ___ _____ _ ___ _ _____ ___ ___ ___ ___
mluis 0:66f12acb8acb 18 * / __|_ _/_\ / __| |/ / __/ _ \| _ \/ __| __|
mluis 0:66f12acb8acb 19 * \__ \ | |/ _ \ (__| ' <| _| (_) | / (__| _|
mluis 0:66f12acb8acb 20 * |___/ |_/_/ \_\___|_|\_\_| \___/|_|_\\___|___|
mluis 0:66f12acb8acb 21 * embedded.connectivity.solutions===============
mluis 0:66f12acb8acb 22 *
mluis 0:66f12acb8acb 23 * \endcode
mluis 0:66f12acb8acb 24 *
mluis 0:66f12acb8acb 25 * \author Miguel Luis ( Semtech )
mluis 0:66f12acb8acb 26 *
mluis 0:66f12acb8acb 27 * \author Gregory Cristian ( Semtech )
mluis 0:66f12acb8acb 28 *
mluis 0:66f12acb8acb 29 * \author Daniel Jäckle ( STACKFORCE )
mluis 0:66f12acb8acb 30 *
mluis 0:66f12acb8acb 31 * \defgroup LORAMAC LoRa MAC layer implementation
mluis 0:66f12acb8acb 32 * This module specifies the API implementation of the LoRaMAC layer.
mluis 0:66f12acb8acb 33 * This is a placeholder for a detailed description of the LoRaMac
mluis 0:66f12acb8acb 34 * layer and the supported features.
mluis 0:66f12acb8acb 35 * \{
mluis 0:66f12acb8acb 36 *
mluis 0:66f12acb8acb 37 * \example classA/LoRaMote/main.c
mluis 0:66f12acb8acb 38 * LoRaWAN class A application example for the LoRaMote.
mluis 0:66f12acb8acb 39 *
mluis 0:66f12acb8acb 40 * \example classB/LoRaMote/main.c
mluis 0:66f12acb8acb 41 * LoRaWAN class B application example for the LoRaMote.
mluis 0:66f12acb8acb 42 *
mluis 0:66f12acb8acb 43 * \example classC/LoRaMote/main.c
mluis 0:66f12acb8acb 44 * LoRaWAN class C application example for the LoRaMote.
mluis 0:66f12acb8acb 45 */
mluis 0:66f12acb8acb 46 #ifndef __LORAMAC_H__
mluis 0:66f12acb8acb 47 #define __LORAMAC_H__
mluis 0:66f12acb8acb 48
mluis 0:66f12acb8acb 49 // Includes board dependent definitions such as channels frequencies
mluis 1:4820e04b066c 50 #include "LoRaMac-definitions.h"
mluis 0:66f12acb8acb 51
mluis 0:66f12acb8acb 52 /*!
mluis 1:4820e04b066c 53 * Beacon interval in us
mluis 0:66f12acb8acb 54 */
mluis 1:4820e04b066c 55 #define BEACON_INTERVAL 128000000
mluis 0:66f12acb8acb 56
mluis 0:66f12acb8acb 57 /*!
mluis 1:4820e04b066c 58 * Class A&B receive delay 1 in us
mluis 0:66f12acb8acb 59 */
mluis 1:4820e04b066c 60 #define RECEIVE_DELAY1 1000000
mluis 0:66f12acb8acb 61
mluis 0:66f12acb8acb 62 /*!
mluis 1:4820e04b066c 63 * Class A&B receive delay 2 in us
mluis 0:66f12acb8acb 64 */
mluis 1:4820e04b066c 65 #define RECEIVE_DELAY2 2000000
mluis 0:66f12acb8acb 66
mluis 0:66f12acb8acb 67 /*!
mluis 1:4820e04b066c 68 * Join accept receive delay 1 in us
mluis 0:66f12acb8acb 69 */
mluis 1:4820e04b066c 70 #define JOIN_ACCEPT_DELAY1 5000000
mluis 0:66f12acb8acb 71
mluis 0:66f12acb8acb 72 /*!
mluis 1:4820e04b066c 73 * Join accept receive delay 2 in us
mluis 0:66f12acb8acb 74 */
mluis 1:4820e04b066c 75 #define JOIN_ACCEPT_DELAY2 6000000
mluis 0:66f12acb8acb 76
mluis 0:66f12acb8acb 77 /*!
mluis 1:4820e04b066c 78 * Class A&B maximum receive window delay in us
mluis 0:66f12acb8acb 79 */
mluis 1:4820e04b066c 80 #define MAX_RX_WINDOW 3000000
mluis 0:66f12acb8acb 81
mluis 0:66f12acb8acb 82 /*!
mluis 0:66f12acb8acb 83 * Maximum allowed gap for the FCNT field
mluis 0:66f12acb8acb 84 */
mluis 0:66f12acb8acb 85 #define MAX_FCNT_GAP 16384
mluis 0:66f12acb8acb 86
mluis 0:66f12acb8acb 87 /*!
mluis 0:66f12acb8acb 88 * ADR acknowledgement counter limit
mluis 0:66f12acb8acb 89 */
mluis 0:66f12acb8acb 90 #define ADR_ACK_LIMIT 64
mluis 0:66f12acb8acb 91
mluis 0:66f12acb8acb 92 /*!
mluis 0:66f12acb8acb 93 * Number of ADR acknowledgement requests before returning to default datarate
mluis 0:66f12acb8acb 94 */
mluis 0:66f12acb8acb 95 #define ADR_ACK_DELAY 32
mluis 0:66f12acb8acb 96
mluis 0:66f12acb8acb 97 /*!
mluis 0:66f12acb8acb 98 * Number of seconds after the start of the second reception window without
mluis 0:66f12acb8acb 99 * receiving an acknowledge.
mluis 0:66f12acb8acb 100 * AckTimeout = \ref ACK_TIMEOUT + Random( -\ref ACK_TIMEOUT_RND, \ref ACK_TIMEOUT_RND )
mluis 0:66f12acb8acb 101 */
mluis 1:4820e04b066c 102 #define ACK_TIMEOUT 2000000
mluis 0:66f12acb8acb 103
mluis 0:66f12acb8acb 104 /*!
mluis 0:66f12acb8acb 105 * Random number of seconds after the start of the second reception window without
mluis 0:66f12acb8acb 106 * receiving an acknowledge
mluis 0:66f12acb8acb 107 * AckTimeout = \ref ACK_TIMEOUT + Random( -\ref ACK_TIMEOUT_RND, \ref ACK_TIMEOUT_RND )
mluis 0:66f12acb8acb 108 */
mluis 1:4820e04b066c 109 #define ACK_TIMEOUT_RND 1000000
mluis 0:66f12acb8acb 110
mluis 0:66f12acb8acb 111 /*!
mluis 1:4820e04b066c 112 * Check the Mac layer state every MAC_STATE_CHECK_TIMEOUT in us
mluis 0:66f12acb8acb 113 */
mluis 1:4820e04b066c 114 #define MAC_STATE_CHECK_TIMEOUT 1000000
mluis 0:66f12acb8acb 115
mluis 0:66f12acb8acb 116 /*!
mluis 0:66f12acb8acb 117 * Maximum number of times the MAC layer tries to get an acknowledge.
mluis 0:66f12acb8acb 118 */
mluis 0:66f12acb8acb 119 #define MAX_ACK_RETRIES 8
mluis 0:66f12acb8acb 120
mluis 0:66f12acb8acb 121 /*!
mluis 0:66f12acb8acb 122 * RSSI free threshold [dBm]
mluis 0:66f12acb8acb 123 */
mluis 0:66f12acb8acb 124 #define RSSI_FREE_TH ( int8_t )( -90 )
mluis 0:66f12acb8acb 125
mluis 0:66f12acb8acb 126 /*!
mluis 0:66f12acb8acb 127 * Frame direction definition for up-link communications
mluis 0:66f12acb8acb 128 */
mluis 0:66f12acb8acb 129 #define UP_LINK 0
mluis 0:66f12acb8acb 130
mluis 0:66f12acb8acb 131 /*!
mluis 0:66f12acb8acb 132 * Frame direction definition for down-link communications
mluis 0:66f12acb8acb 133 */
mluis 0:66f12acb8acb 134 #define DOWN_LINK 1
mluis 0:66f12acb8acb 135
mluis 0:66f12acb8acb 136 /*!
mluis 0:66f12acb8acb 137 * Sets the length of the LoRaMAC footer field.
mluis 0:66f12acb8acb 138 * Mainly indicates the MIC field length
mluis 0:66f12acb8acb 139 */
mluis 0:66f12acb8acb 140 #define LORAMAC_MFR_LEN 4
mluis 0:66f12acb8acb 141
mluis 0:66f12acb8acb 142 /*!
mluis 0:66f12acb8acb 143 * Syncword for Private LoRa networks
mluis 0:66f12acb8acb 144 */
mluis 0:66f12acb8acb 145 #define LORA_MAC_PRIVATE_SYNCWORD 0x12
mluis 0:66f12acb8acb 146
mluis 0:66f12acb8acb 147 /*!
mluis 0:66f12acb8acb 148 * Syncword for Public LoRa networks
mluis 0:66f12acb8acb 149 */
mluis 0:66f12acb8acb 150 #define LORA_MAC_PUBLIC_SYNCWORD 0x34
mluis 0:66f12acb8acb 151
mluis 0:66f12acb8acb 152 /*!
mluis 0:66f12acb8acb 153 * LoRaWAN devices classes definition
mluis 0:66f12acb8acb 154 */
mluis 0:66f12acb8acb 155 typedef enum eDeviceClass
mluis 0:66f12acb8acb 156 {
mluis 0:66f12acb8acb 157 /*!
mluis 0:66f12acb8acb 158 * LoRaWAN device class A
mluis 0:66f12acb8acb 159 *
mluis 0:66f12acb8acb 160 * LoRaWAN Specification V1.0.1, chapter 3ff
mluis 0:66f12acb8acb 161 */
mluis 0:66f12acb8acb 162 CLASS_A,
mluis 0:66f12acb8acb 163 /*!
mluis 0:66f12acb8acb 164 * LoRaWAN device class B
mluis 0:66f12acb8acb 165 *
mluis 0:66f12acb8acb 166 * LoRaWAN Specification V1.0.1, chapter 8ff
mluis 0:66f12acb8acb 167 */
mluis 0:66f12acb8acb 168 CLASS_B,
mluis 0:66f12acb8acb 169 /*!
mluis 0:66f12acb8acb 170 * LoRaWAN device class C
mluis 0:66f12acb8acb 171 *
mluis 0:66f12acb8acb 172 * LoRaWAN Specification V1.0.1, chapter 17ff
mluis 0:66f12acb8acb 173 */
mluis 0:66f12acb8acb 174 CLASS_C,
mluis 0:66f12acb8acb 175 }DeviceClass_t;
mluis 0:66f12acb8acb 176
mluis 0:66f12acb8acb 177 /*!
mluis 0:66f12acb8acb 178 * LoRaMAC channels parameters definition
mluis 0:66f12acb8acb 179 */
mluis 0:66f12acb8acb 180 typedef union uDrRange
mluis 0:66f12acb8acb 181 {
mluis 0:66f12acb8acb 182 /*!
mluis 0:66f12acb8acb 183 * Byte-access to the bits
mluis 0:66f12acb8acb 184 */
mluis 0:66f12acb8acb 185 int8_t Value;
mluis 0:66f12acb8acb 186 /*!
mluis 0:66f12acb8acb 187 * Structure to store the minimum and the maximum datarate
mluis 0:66f12acb8acb 188 */
mluis 0:66f12acb8acb 189 struct sFields
mluis 0:66f12acb8acb 190 {
mluis 0:66f12acb8acb 191 /*!
mluis 0:66f12acb8acb 192 * Minimum data rate
mluis 0:66f12acb8acb 193 *
mluis 0:66f12acb8acb 194 * EU868 - [DR_0, DR_1, DR_2, DR_3, DR_4, DR_5, DR_6, DR_7]
mluis 0:66f12acb8acb 195 *
mluis 0:66f12acb8acb 196 * US915 - [DR_0, DR_1, DR_2, DR_3, DR_4]
mluis 0:66f12acb8acb 197 */
mluis 0:66f12acb8acb 198 int8_t Min : 4;
mluis 0:66f12acb8acb 199 /*!
mluis 0:66f12acb8acb 200 * Maximum data rate
mluis 0:66f12acb8acb 201 *
mluis 0:66f12acb8acb 202 * EU868 - [DR_0, DR_1, DR_2, DR_3, DR_4, DR_5, DR_6, DR_7]
mluis 0:66f12acb8acb 203 *
mluis 0:66f12acb8acb 204 * US915 - [DR_0, DR_1, DR_2, DR_3, DR_4]
mluis 0:66f12acb8acb 205 */
mluis 0:66f12acb8acb 206 int8_t Max : 4;
mluis 0:66f12acb8acb 207 }Fields;
mluis 0:66f12acb8acb 208 }DrRange_t;
mluis 0:66f12acb8acb 209
mluis 0:66f12acb8acb 210 /*!
mluis 0:66f12acb8acb 211 * LoRaMAC band parameters definition
mluis 0:66f12acb8acb 212 */
mluis 0:66f12acb8acb 213 typedef struct sBand
mluis 0:66f12acb8acb 214 {
mluis 0:66f12acb8acb 215 /*!
mluis 0:66f12acb8acb 216 * Duty cycle
mluis 0:66f12acb8acb 217 */
mluis 0:66f12acb8acb 218 uint16_t DCycle;
mluis 0:66f12acb8acb 219 /*!
mluis 0:66f12acb8acb 220 * Maximum Tx power
mluis 0:66f12acb8acb 221 */
mluis 0:66f12acb8acb 222 int8_t TxMaxPower;
mluis 0:66f12acb8acb 223 /*!
mluis 0:66f12acb8acb 224 * Time stamp of the last Tx frame
mluis 0:66f12acb8acb 225 */
mluis 0:66f12acb8acb 226 TimerTime_t LastTxDoneTime;
mluis 0:66f12acb8acb 227 /*!
mluis 0:66f12acb8acb 228 * Holds the time where the device is off
mluis 0:66f12acb8acb 229 */
mluis 0:66f12acb8acb 230 TimerTime_t TimeOff;
mluis 0:66f12acb8acb 231 }Band_t;
mluis 0:66f12acb8acb 232
mluis 0:66f12acb8acb 233 /*!
mluis 0:66f12acb8acb 234 * LoRaMAC channel definition
mluis 0:66f12acb8acb 235 */
mluis 0:66f12acb8acb 236 typedef struct sChannelParams
mluis 0:66f12acb8acb 237 {
mluis 0:66f12acb8acb 238 /*!
mluis 0:66f12acb8acb 239 * Frequency in Hz
mluis 0:66f12acb8acb 240 */
mluis 0:66f12acb8acb 241 uint32_t Frequency;
mluis 0:66f12acb8acb 242 /*!
mluis 0:66f12acb8acb 243 * Data rate definition
mluis 0:66f12acb8acb 244 */
mluis 0:66f12acb8acb 245 DrRange_t DrRange;
mluis 0:66f12acb8acb 246 /*!
mluis 0:66f12acb8acb 247 * Band index
mluis 0:66f12acb8acb 248 */
mluis 0:66f12acb8acb 249 uint8_t Band;
mluis 0:66f12acb8acb 250 }ChannelParams_t;
mluis 0:66f12acb8acb 251
mluis 0:66f12acb8acb 252 /*!
mluis 0:66f12acb8acb 253 * LoRaMAC receive window 2 channel parameters
mluis 0:66f12acb8acb 254 */
mluis 0:66f12acb8acb 255 typedef struct sRx2ChannelParams
mluis 0:66f12acb8acb 256 {
mluis 0:66f12acb8acb 257 /*!
mluis 0:66f12acb8acb 258 * Frequency in Hz
mluis 0:66f12acb8acb 259 */
mluis 0:66f12acb8acb 260 uint32_t Frequency;
mluis 0:66f12acb8acb 261 /*!
mluis 0:66f12acb8acb 262 * Data rate
mluis 0:66f12acb8acb 263 *
mluis 0:66f12acb8acb 264 * EU868 - [DR_0, DR_1, DR_2, DR_3, DR_4, DR_5, DR_6, DR_7]
mluis 0:66f12acb8acb 265 *
mluis 0:66f12acb8acb 266 * US915 - [DR_8, DR_9, DR_10, DR_11, DR_12, DR_13]
mluis 0:66f12acb8acb 267 */
mluis 0:66f12acb8acb 268 uint8_t Datarate;
mluis 0:66f12acb8acb 269 }Rx2ChannelParams_t;
mluis 0:66f12acb8acb 270
mluis 0:66f12acb8acb 271 /*!
mluis 1:4820e04b066c 272 * Global MAC layer parameters
mluis 1:4820e04b066c 273 */
mluis 1:4820e04b066c 274 typedef struct sLoRaMacParams
mluis 1:4820e04b066c 275 {
mluis 1:4820e04b066c 276 /*!
mluis 1:4820e04b066c 277 * Channels TX power
mluis 1:4820e04b066c 278 */
mluis 1:4820e04b066c 279 int8_t ChannelsTxPower;
mluis 1:4820e04b066c 280 /*!
mluis 1:4820e04b066c 281 * Channels data rate
mluis 1:4820e04b066c 282 */
mluis 1:4820e04b066c 283 int8_t ChannelsDatarate;
mluis 1:4820e04b066c 284 /*!
mluis 1:4820e04b066c 285 * LoRaMac maximum time a reception window stays open
mluis 1:4820e04b066c 286 */
mluis 1:4820e04b066c 287 uint32_t MaxRxWindow;
mluis 1:4820e04b066c 288 /*!
mluis 1:4820e04b066c 289 * Receive delay 1
mluis 1:4820e04b066c 290 */
mluis 1:4820e04b066c 291 uint32_t ReceiveDelay1;
mluis 1:4820e04b066c 292 /*!
mluis 1:4820e04b066c 293 * Receive delay 2
mluis 1:4820e04b066c 294 */
mluis 1:4820e04b066c 295 uint32_t ReceiveDelay2;
mluis 1:4820e04b066c 296 /*!
mluis 1:4820e04b066c 297 * Join accept delay 1
mluis 1:4820e04b066c 298 */
mluis 1:4820e04b066c 299 uint32_t JoinAcceptDelay1;
mluis 1:4820e04b066c 300 /*!
mluis 1:4820e04b066c 301 * Join accept delay 1
mluis 1:4820e04b066c 302 */
mluis 1:4820e04b066c 303 uint32_t JoinAcceptDelay2;
mluis 1:4820e04b066c 304 /*!
mluis 1:4820e04b066c 305 * Number of uplink messages repetitions [1:15] (unconfirmed messages only)
mluis 1:4820e04b066c 306 */
mluis 1:4820e04b066c 307 uint8_t ChannelsNbRep;
mluis 1:4820e04b066c 308 /*!
mluis 1:4820e04b066c 309 * Datarate offset between uplink and downlink on first window
mluis 1:4820e04b066c 310 */
mluis 1:4820e04b066c 311 uint8_t Rx1DrOffset;
mluis 1:4820e04b066c 312 /*!
mluis 1:4820e04b066c 313 * LoRaMAC 2nd reception window settings
mluis 1:4820e04b066c 314 */
mluis 1:4820e04b066c 315 Rx2ChannelParams_t Rx2Channel;
mluis 1:4820e04b066c 316 /*!
mluis 1:4820e04b066c 317 * Mask indicating which channels are enabled
mluis 1:4820e04b066c 318 */
mluis 1:4820e04b066c 319 uint16_t ChannelsMask[6];
mluis 1:4820e04b066c 320 }LoRaMacParams_t;
mluis 1:4820e04b066c 321
mluis 1:4820e04b066c 322 /*!
mluis 0:66f12acb8acb 323 * LoRaMAC multicast channel parameter
mluis 0:66f12acb8acb 324 */
mluis 0:66f12acb8acb 325 typedef struct sMulticastParams
mluis 0:66f12acb8acb 326 {
mluis 0:66f12acb8acb 327 /*!
mluis 0:66f12acb8acb 328 * Address
mluis 0:66f12acb8acb 329 */
mluis 0:66f12acb8acb 330 uint32_t Address;
mluis 0:66f12acb8acb 331 /*!
mluis 0:66f12acb8acb 332 * Network session key
mluis 0:66f12acb8acb 333 */
mluis 0:66f12acb8acb 334 uint8_t NwkSKey[16];
mluis 0:66f12acb8acb 335 /*!
mluis 0:66f12acb8acb 336 * Application session key
mluis 0:66f12acb8acb 337 */
mluis 0:66f12acb8acb 338 uint8_t AppSKey[16];
mluis 0:66f12acb8acb 339 /*!
mluis 0:66f12acb8acb 340 * Downlink counter
mluis 0:66f12acb8acb 341 */
mluis 0:66f12acb8acb 342 uint32_t DownLinkCounter;
mluis 0:66f12acb8acb 343 /*!
mluis 0:66f12acb8acb 344 * Reference pointer to the next multicast channel parameters in the list
mluis 0:66f12acb8acb 345 */
mluis 0:66f12acb8acb 346 struct sMulticastParams *Next;
mluis 0:66f12acb8acb 347 }MulticastParams_t;
mluis 0:66f12acb8acb 348
mluis 0:66f12acb8acb 349 /*!
mluis 0:66f12acb8acb 350 * LoRaMAC frame types
mluis 0:66f12acb8acb 351 *
mluis 0:66f12acb8acb 352 * LoRaWAN Specification V1.0.1, chapter 4.2.1, table 1
mluis 0:66f12acb8acb 353 */
mluis 0:66f12acb8acb 354 typedef enum eLoRaMacFrameType
mluis 0:66f12acb8acb 355 {
mluis 0:66f12acb8acb 356 /*!
mluis 0:66f12acb8acb 357 * LoRaMAC join request frame
mluis 0:66f12acb8acb 358 */
mluis 0:66f12acb8acb 359 FRAME_TYPE_JOIN_REQ = 0x00,
mluis 0:66f12acb8acb 360 /*!
mluis 0:66f12acb8acb 361 * LoRaMAC join accept frame
mluis 0:66f12acb8acb 362 */
mluis 0:66f12acb8acb 363 FRAME_TYPE_JOIN_ACCEPT = 0x01,
mluis 0:66f12acb8acb 364 /*!
mluis 0:66f12acb8acb 365 * LoRaMAC unconfirmed up-link frame
mluis 0:66f12acb8acb 366 */
mluis 0:66f12acb8acb 367 FRAME_TYPE_DATA_UNCONFIRMED_UP = 0x02,
mluis 0:66f12acb8acb 368 /*!
mluis 0:66f12acb8acb 369 * LoRaMAC unconfirmed down-link frame
mluis 0:66f12acb8acb 370 */
mluis 0:66f12acb8acb 371 FRAME_TYPE_DATA_UNCONFIRMED_DOWN = 0x03,
mluis 0:66f12acb8acb 372 /*!
mluis 0:66f12acb8acb 373 * LoRaMAC confirmed up-link frame
mluis 0:66f12acb8acb 374 */
mluis 0:66f12acb8acb 375 FRAME_TYPE_DATA_CONFIRMED_UP = 0x04,
mluis 0:66f12acb8acb 376 /*!
mluis 0:66f12acb8acb 377 * LoRaMAC confirmed down-link frame
mluis 0:66f12acb8acb 378 */
mluis 0:66f12acb8acb 379 FRAME_TYPE_DATA_CONFIRMED_DOWN = 0x05,
mluis 0:66f12acb8acb 380 /*!
mluis 0:66f12acb8acb 381 * LoRaMAC RFU frame
mluis 0:66f12acb8acb 382 */
mluis 0:66f12acb8acb 383 FRAME_TYPE_RFU = 0x06,
mluis 0:66f12acb8acb 384 /*!
mluis 0:66f12acb8acb 385 * LoRaMAC proprietary frame
mluis 0:66f12acb8acb 386 */
mluis 0:66f12acb8acb 387 FRAME_TYPE_PROPRIETARY = 0x07,
mluis 0:66f12acb8acb 388 }LoRaMacFrameType_t;
mluis 0:66f12acb8acb 389
mluis 0:66f12acb8acb 390 /*!
mluis 0:66f12acb8acb 391 * LoRaMAC mote MAC commands
mluis 0:66f12acb8acb 392 *
mluis 0:66f12acb8acb 393 * LoRaWAN Specification V1.0.1, chapter 5, table 4
mluis 0:66f12acb8acb 394 */
mluis 0:66f12acb8acb 395 typedef enum eLoRaMacMoteCmd
mluis 0:66f12acb8acb 396 {
mluis 0:66f12acb8acb 397 /*!
mluis 0:66f12acb8acb 398 * LinkCheckReq
mluis 0:66f12acb8acb 399 */
mluis 0:66f12acb8acb 400 MOTE_MAC_LINK_CHECK_REQ = 0x02,
mluis 0:66f12acb8acb 401 /*!
mluis 0:66f12acb8acb 402 * LinkADRAns
mluis 0:66f12acb8acb 403 */
mluis 0:66f12acb8acb 404 MOTE_MAC_LINK_ADR_ANS = 0x03,
mluis 0:66f12acb8acb 405 /*!
mluis 0:66f12acb8acb 406 * DutyCycleAns
mluis 0:66f12acb8acb 407 */
mluis 0:66f12acb8acb 408 MOTE_MAC_DUTY_CYCLE_ANS = 0x04,
mluis 0:66f12acb8acb 409 /*!
mluis 0:66f12acb8acb 410 * RXParamSetupAns
mluis 0:66f12acb8acb 411 */
mluis 0:66f12acb8acb 412 MOTE_MAC_RX_PARAM_SETUP_ANS = 0x05,
mluis 0:66f12acb8acb 413 /*!
mluis 0:66f12acb8acb 414 * DevStatusAns
mluis 0:66f12acb8acb 415 */
mluis 0:66f12acb8acb 416 MOTE_MAC_DEV_STATUS_ANS = 0x06,
mluis 0:66f12acb8acb 417 /*!
mluis 0:66f12acb8acb 418 * NewChannelAns
mluis 0:66f12acb8acb 419 */
mluis 0:66f12acb8acb 420 MOTE_MAC_NEW_CHANNEL_ANS = 0x07,
mluis 0:66f12acb8acb 421 /*!
mluis 0:66f12acb8acb 422 * RXTimingSetupAns
mluis 0:66f12acb8acb 423 */
mluis 0:66f12acb8acb 424 MOTE_MAC_RX_TIMING_SETUP_ANS = 0x08,
mluis 0:66f12acb8acb 425 }LoRaMacMoteCmd_t;
mluis 0:66f12acb8acb 426
mluis 0:66f12acb8acb 427 /*!
mluis 0:66f12acb8acb 428 * LoRaMAC server MAC commands
mluis 0:66f12acb8acb 429 *
mluis 0:66f12acb8acb 430 * LoRaWAN Specification V1.0.1 chapter 5, table 4
mluis 0:66f12acb8acb 431 */
mluis 0:66f12acb8acb 432 typedef enum eLoRaMacSrvCmd
mluis 0:66f12acb8acb 433 {
mluis 0:66f12acb8acb 434 /*!
mluis 0:66f12acb8acb 435 * LinkCheckAns
mluis 0:66f12acb8acb 436 */
mluis 0:66f12acb8acb 437 SRV_MAC_LINK_CHECK_ANS = 0x02,
mluis 0:66f12acb8acb 438 /*!
mluis 0:66f12acb8acb 439 * LinkADRReq
mluis 0:66f12acb8acb 440 */
mluis 0:66f12acb8acb 441 SRV_MAC_LINK_ADR_REQ = 0x03,
mluis 0:66f12acb8acb 442 /*!
mluis 0:66f12acb8acb 443 * DutyCycleReq
mluis 0:66f12acb8acb 444 */
mluis 0:66f12acb8acb 445 SRV_MAC_DUTY_CYCLE_REQ = 0x04,
mluis 0:66f12acb8acb 446 /*!
mluis 0:66f12acb8acb 447 * RXParamSetupReq
mluis 0:66f12acb8acb 448 */
mluis 0:66f12acb8acb 449 SRV_MAC_RX_PARAM_SETUP_REQ = 0x05,
mluis 0:66f12acb8acb 450 /*!
mluis 0:66f12acb8acb 451 * DevStatusReq
mluis 0:66f12acb8acb 452 */
mluis 0:66f12acb8acb 453 SRV_MAC_DEV_STATUS_REQ = 0x06,
mluis 0:66f12acb8acb 454 /*!
mluis 0:66f12acb8acb 455 * NewChannelReq
mluis 0:66f12acb8acb 456 */
mluis 0:66f12acb8acb 457 SRV_MAC_NEW_CHANNEL_REQ = 0x07,
mluis 0:66f12acb8acb 458 /*!
mluis 0:66f12acb8acb 459 * RXTimingSetupReq
mluis 0:66f12acb8acb 460 */
mluis 0:66f12acb8acb 461 SRV_MAC_RX_TIMING_SETUP_REQ = 0x08,
mluis 0:66f12acb8acb 462 }LoRaMacSrvCmd_t;
mluis 0:66f12acb8acb 463
mluis 0:66f12acb8acb 464 /*!
mluis 0:66f12acb8acb 465 * LoRaMAC Battery level indicator
mluis 0:66f12acb8acb 466 */
mluis 0:66f12acb8acb 467 typedef enum eLoRaMacBatteryLevel
mluis 0:66f12acb8acb 468 {
mluis 0:66f12acb8acb 469 /*!
mluis 0:66f12acb8acb 470 * External power source
mluis 0:66f12acb8acb 471 */
mluis 0:66f12acb8acb 472 BAT_LEVEL_EXT_SRC = 0x00,
mluis 0:66f12acb8acb 473 /*!
mluis 0:66f12acb8acb 474 * Battery level empty
mluis 0:66f12acb8acb 475 */
mluis 0:66f12acb8acb 476 BAT_LEVEL_EMPTY = 0x01,
mluis 0:66f12acb8acb 477 /*!
mluis 0:66f12acb8acb 478 * Battery level full
mluis 0:66f12acb8acb 479 */
mluis 0:66f12acb8acb 480 BAT_LEVEL_FULL = 0xFE,
mluis 0:66f12acb8acb 481 /*!
mluis 0:66f12acb8acb 482 * Battery level - no measurement available
mluis 0:66f12acb8acb 483 */
mluis 0:66f12acb8acb 484 BAT_LEVEL_NO_MEASURE = 0xFF,
mluis 0:66f12acb8acb 485 }LoRaMacBatteryLevel_t;
mluis 0:66f12acb8acb 486
mluis 0:66f12acb8acb 487 /*!
mluis 0:66f12acb8acb 488 * LoRaMAC header field definition (MHDR field)
mluis 0:66f12acb8acb 489 *
mluis 0:66f12acb8acb 490 * LoRaWAN Specification V1.0.1, chapter 4.2
mluis 0:66f12acb8acb 491 */
mluis 0:66f12acb8acb 492 typedef union uLoRaMacHeader
mluis 0:66f12acb8acb 493 {
mluis 0:66f12acb8acb 494 /*!
mluis 0:66f12acb8acb 495 * Byte-access to the bits
mluis 0:66f12acb8acb 496 */
mluis 0:66f12acb8acb 497 uint8_t Value;
mluis 0:66f12acb8acb 498 /*!
mluis 0:66f12acb8acb 499 * Structure containing single access to header bits
mluis 0:66f12acb8acb 500 */
mluis 0:66f12acb8acb 501 struct sHdrBits
mluis 0:66f12acb8acb 502 {
mluis 0:66f12acb8acb 503 /*!
mluis 0:66f12acb8acb 504 * Major version
mluis 0:66f12acb8acb 505 */
mluis 0:66f12acb8acb 506 uint8_t Major : 2;
mluis 0:66f12acb8acb 507 /*!
mluis 0:66f12acb8acb 508 * RFU
mluis 0:66f12acb8acb 509 */
mluis 0:66f12acb8acb 510 uint8_t RFU : 3;
mluis 0:66f12acb8acb 511 /*!
mluis 0:66f12acb8acb 512 * Message type
mluis 0:66f12acb8acb 513 */
mluis 0:66f12acb8acb 514 uint8_t MType : 3;
mluis 0:66f12acb8acb 515 }Bits;
mluis 0:66f12acb8acb 516 }LoRaMacHeader_t;
mluis 0:66f12acb8acb 517
mluis 0:66f12acb8acb 518 /*!
mluis 0:66f12acb8acb 519 * LoRaMAC frame control field definition (FCtrl)
mluis 0:66f12acb8acb 520 *
mluis 0:66f12acb8acb 521 * LoRaWAN Specification V1.0.1, chapter 4.3.1
mluis 0:66f12acb8acb 522 */
mluis 0:66f12acb8acb 523 typedef union uLoRaMacFrameCtrl
mluis 0:66f12acb8acb 524 {
mluis 0:66f12acb8acb 525 /*!
mluis 0:66f12acb8acb 526 * Byte-access to the bits
mluis 0:66f12acb8acb 527 */
mluis 0:66f12acb8acb 528 uint8_t Value;
mluis 0:66f12acb8acb 529 /*!
mluis 0:66f12acb8acb 530 * Structure containing single access to bits
mluis 0:66f12acb8acb 531 */
mluis 0:66f12acb8acb 532 struct sCtrlBits
mluis 0:66f12acb8acb 533 {
mluis 0:66f12acb8acb 534 /*!
mluis 0:66f12acb8acb 535 * Frame options length
mluis 0:66f12acb8acb 536 */
mluis 0:66f12acb8acb 537 uint8_t FOptsLen : 4;
mluis 0:66f12acb8acb 538 /*!
mluis 0:66f12acb8acb 539 * Frame pending bit
mluis 0:66f12acb8acb 540 */
mluis 0:66f12acb8acb 541 uint8_t FPending : 1;
mluis 0:66f12acb8acb 542 /*!
mluis 0:66f12acb8acb 543 * Message acknowledge bit
mluis 0:66f12acb8acb 544 */
mluis 0:66f12acb8acb 545 uint8_t Ack : 1;
mluis 0:66f12acb8acb 546 /*!
mluis 0:66f12acb8acb 547 * ADR acknowledgment request bit
mluis 0:66f12acb8acb 548 */
mluis 0:66f12acb8acb 549 uint8_t AdrAckReq : 1;
mluis 0:66f12acb8acb 550 /*!
mluis 0:66f12acb8acb 551 * ADR control in frame header
mluis 0:66f12acb8acb 552 */
mluis 0:66f12acb8acb 553 uint8_t Adr : 1;
mluis 0:66f12acb8acb 554 }Bits;
mluis 0:66f12acb8acb 555 }LoRaMacFrameCtrl_t;
mluis 0:66f12acb8acb 556
mluis 0:66f12acb8acb 557 /*!
mluis 0:66f12acb8acb 558 * Enumeration containing the status of the operation of a MAC service
mluis 0:66f12acb8acb 559 */
mluis 0:66f12acb8acb 560 typedef enum eLoRaMacEventInfoStatus
mluis 0:66f12acb8acb 561 {
mluis 0:66f12acb8acb 562 /*!
mluis 0:66f12acb8acb 563 * Service performed successfully
mluis 0:66f12acb8acb 564 */
mluis 0:66f12acb8acb 565 LORAMAC_EVENT_INFO_STATUS_OK = 0,
mluis 0:66f12acb8acb 566 /*!
mluis 0:66f12acb8acb 567 * An error occured during the execution of the service
mluis 0:66f12acb8acb 568 */
mluis 0:66f12acb8acb 569 LORAMAC_EVENT_INFO_STATUS_ERROR,
mluis 0:66f12acb8acb 570 /*!
mluis 0:66f12acb8acb 571 * A Tx timeouit occured
mluis 0:66f12acb8acb 572 */
mluis 0:66f12acb8acb 573 LORAMAC_EVENT_INFO_STATUS_TX_TIMEOUT,
mluis 0:66f12acb8acb 574 /*!
mluis 0:66f12acb8acb 575 * An Rx timeout occured on receive window 2
mluis 0:66f12acb8acb 576 */
mluis 0:66f12acb8acb 577 LORAMAC_EVENT_INFO_STATUS_RX2_TIMEOUT,
mluis 0:66f12acb8acb 578 /*!
mluis 0:66f12acb8acb 579 * An Rx error occured on receive window 2
mluis 0:66f12acb8acb 580 */
mluis 0:66f12acb8acb 581 LORAMAC_EVENT_INFO_STATUS_RX2_ERROR,
mluis 0:66f12acb8acb 582 /*!
mluis 0:66f12acb8acb 583 * An error occured in the join procedure
mluis 0:66f12acb8acb 584 */
mluis 0:66f12acb8acb 585 LORAMAC_EVENT_INFO_STATUS_JOIN_FAIL,
mluis 0:66f12acb8acb 586 /*!
mluis 0:66f12acb8acb 587 * A frame with an invalid downlink counter was received. The
mluis 0:66f12acb8acb 588 * downlink counter of the frame was equal to the local copy
mluis 0:66f12acb8acb 589 * of the downlink counter of the node.
mluis 0:66f12acb8acb 590 */
mluis 0:66f12acb8acb 591 LORAMAC_EVENT_INFO_STATUS_DOWNLINK_REPEATED,
mluis 0:66f12acb8acb 592 /*!
mluis 0:66f12acb8acb 593 * The node has lost MAX_FCNT_GAP or more frames.
mluis 0:66f12acb8acb 594 */
mluis 0:66f12acb8acb 595 LORAMAC_EVENT_INFO_STATUS_DOWNLINK_TOO_MANY_FRAMES_LOSS,
mluis 0:66f12acb8acb 596 /*!
mluis 0:66f12acb8acb 597 * An address error occured
mluis 0:66f12acb8acb 598 */
mluis 0:66f12acb8acb 599 LORAMAC_EVENT_INFO_STATUS_ADDRESS_FAIL,
mluis 0:66f12acb8acb 600 /*!
mluis 0:66f12acb8acb 601 * message integrity check failure
mluis 0:66f12acb8acb 602 */
mluis 0:66f12acb8acb 603 LORAMAC_EVENT_INFO_STATUS_MIC_FAIL,
mluis 0:66f12acb8acb 604 }LoRaMacEventInfoStatus_t;
mluis 0:66f12acb8acb 605
mluis 0:66f12acb8acb 606 /*!
mluis 0:66f12acb8acb 607 * LoRaMac tx/rx operation state
mluis 0:66f12acb8acb 608 */
mluis 0:66f12acb8acb 609 typedef union eLoRaMacFlags_t
mluis 0:66f12acb8acb 610 {
mluis 0:66f12acb8acb 611 /*!
mluis 0:66f12acb8acb 612 * Byte-access to the bits
mluis 0:66f12acb8acb 613 */
mluis 0:66f12acb8acb 614 uint8_t Value;
mluis 0:66f12acb8acb 615 /*!
mluis 0:66f12acb8acb 616 * Structure containing single access to bits
mluis 0:66f12acb8acb 617 */
mluis 0:66f12acb8acb 618 struct sMacFlagBits
mluis 0:66f12acb8acb 619 {
mluis 0:66f12acb8acb 620 /*!
mluis 0:66f12acb8acb 621 * MCPS-Req pending
mluis 0:66f12acb8acb 622 */
mluis 0:66f12acb8acb 623 uint8_t McpsReq : 1;
mluis 0:66f12acb8acb 624 /*!
mluis 0:66f12acb8acb 625 * MCPS-Ind pending
mluis 0:66f12acb8acb 626 */
mluis 0:66f12acb8acb 627 uint8_t McpsInd : 1;
mluis 0:66f12acb8acb 628 /*!
mluis 0:66f12acb8acb 629 * MLME-Req pending
mluis 0:66f12acb8acb 630 */
mluis 0:66f12acb8acb 631 uint8_t MlmeReq : 1;
mluis 0:66f12acb8acb 632 /*!
mluis 0:66f12acb8acb 633 * MAC cycle done
mluis 0:66f12acb8acb 634 */
mluis 0:66f12acb8acb 635 uint8_t MacDone : 1;
mluis 0:66f12acb8acb 636 }Bits;
mluis 0:66f12acb8acb 637 }LoRaMacFlags_t;
mluis 0:66f12acb8acb 638
mluis 0:66f12acb8acb 639 /*!
mluis 0:66f12acb8acb 640 *
mluis 0:66f12acb8acb 641 * \brief LoRaMAC data services
mluis 0:66f12acb8acb 642 *
mluis 0:66f12acb8acb 643 * \details The following table list the primitives which are supported by the
mluis 0:66f12acb8acb 644 * specific MAC data service:
mluis 0:66f12acb8acb 645 *
mluis 0:66f12acb8acb 646 * Name | Request | Indication | Response | Confirm
mluis 0:66f12acb8acb 647 * --------------------- | :-----: | :--------: | :------: | :-----:
mluis 0:66f12acb8acb 648 * \ref MCPS_UNCONFIRMED | YES | YES | NO | YES
mluis 0:66f12acb8acb 649 * \ref MCPS_CONFIRMED | YES | YES | NO | YES
mluis 0:66f12acb8acb 650 * \ref MCPS_MULTICAST | NO | YES | NO | NO
mluis 0:66f12acb8acb 651 * \ref MCPS_PROPRIETARY | YES | YES | NO | YES
mluis 0:66f12acb8acb 652 *
mluis 0:66f12acb8acb 653 * The following table provides links to the function implementations of the
mluis 0:66f12acb8acb 654 * related MCPS primitives:
mluis 0:66f12acb8acb 655 *
mluis 0:66f12acb8acb 656 * Primitive | Function
mluis 0:66f12acb8acb 657 * ---------------- | :---------------------:
mluis 0:66f12acb8acb 658 * MCPS-Request | \ref LoRaMacMlmeRequest
mluis 0:66f12acb8acb 659 * MCPS-Confirm | MacMcpsConfirm in \ref LoRaMacPrimitives_t
mluis 0:66f12acb8acb 660 * MCPS-Indication | MacMcpsIndication in \ref LoRaMacPrimitives_t
mluis 0:66f12acb8acb 661 */
mluis 0:66f12acb8acb 662 typedef enum eMcps
mluis 0:66f12acb8acb 663 {
mluis 0:66f12acb8acb 664 /*!
mluis 0:66f12acb8acb 665 * Unconfirmed LoRaMAC frame
mluis 0:66f12acb8acb 666 */
mluis 0:66f12acb8acb 667 MCPS_UNCONFIRMED,
mluis 0:66f12acb8acb 668 /*!
mluis 0:66f12acb8acb 669 * Confirmed LoRaMAC frame
mluis 0:66f12acb8acb 670 */
mluis 0:66f12acb8acb 671 MCPS_CONFIRMED,
mluis 0:66f12acb8acb 672 /*!
mluis 0:66f12acb8acb 673 * Multicast LoRaMAC frame
mluis 0:66f12acb8acb 674 */
mluis 0:66f12acb8acb 675 MCPS_MULTICAST,
mluis 0:66f12acb8acb 676 /*!
mluis 0:66f12acb8acb 677 * Proprietary frame
mluis 0:66f12acb8acb 678 */
mluis 0:66f12acb8acb 679 MCPS_PROPRIETARY,
mluis 0:66f12acb8acb 680 }Mcps_t;
mluis 0:66f12acb8acb 681
mluis 0:66f12acb8acb 682 /*!
mluis 0:66f12acb8acb 683 * LoRaMAC MCPS-Request for an unconfirmed frame
mluis 0:66f12acb8acb 684 */
mluis 0:66f12acb8acb 685 typedef struct sMcpsReqUnconfirmed
mluis 0:66f12acb8acb 686 {
mluis 0:66f12acb8acb 687 /*!
mluis 0:66f12acb8acb 688 * Frame port field. Must be set if the payload is not empty. Use the
mluis 0:66f12acb8acb 689 * application specific frame port values: [1...223]
mluis 0:66f12acb8acb 690 *
mluis 0:66f12acb8acb 691 * LoRaWAN Specification V1.0.1, chapter 4.3.2
mluis 0:66f12acb8acb 692 */
mluis 0:66f12acb8acb 693 uint8_t fPort;
mluis 0:66f12acb8acb 694 /*!
mluis 0:66f12acb8acb 695 * Pointer to the buffer of the frame payload
mluis 0:66f12acb8acb 696 */
mluis 0:66f12acb8acb 697 void *fBuffer;
mluis 0:66f12acb8acb 698 /*!
mluis 0:66f12acb8acb 699 * Size of the frame payload
mluis 0:66f12acb8acb 700 */
mluis 0:66f12acb8acb 701 uint16_t fBufferSize;
mluis 0:66f12acb8acb 702 /*!
mluis 0:66f12acb8acb 703 * Uplink datarate, if ADR is off
mluis 0:66f12acb8acb 704 */
mluis 0:66f12acb8acb 705 int8_t Datarate;
mluis 0:66f12acb8acb 706 }McpsReqUnconfirmed_t;
mluis 0:66f12acb8acb 707
mluis 0:66f12acb8acb 708 /*!
mluis 0:66f12acb8acb 709 * LoRaMAC MCPS-Request for a confirmed frame
mluis 0:66f12acb8acb 710 */
mluis 0:66f12acb8acb 711 typedef struct sMcpsReqConfirmed
mluis 0:66f12acb8acb 712 {
mluis 0:66f12acb8acb 713 /*!
mluis 0:66f12acb8acb 714 * Frame port field. Must be set if the payload is not empty. Use the
mluis 0:66f12acb8acb 715 * application specific frame port values: [1...223]
mluis 0:66f12acb8acb 716 *
mluis 0:66f12acb8acb 717 * LoRaWAN Specification V1.0.1, chapter 4.3.2
mluis 0:66f12acb8acb 718 */
mluis 0:66f12acb8acb 719 uint8_t fPort;
mluis 0:66f12acb8acb 720 /*!
mluis 0:66f12acb8acb 721 * Pointer to the buffer of the frame payload
mluis 0:66f12acb8acb 722 */
mluis 0:66f12acb8acb 723 void *fBuffer;
mluis 0:66f12acb8acb 724 /*!
mluis 0:66f12acb8acb 725 * Size of the frame payload
mluis 0:66f12acb8acb 726 */
mluis 0:66f12acb8acb 727 uint16_t fBufferSize;
mluis 0:66f12acb8acb 728 /*!
mluis 0:66f12acb8acb 729 * Uplink datarate, if ADR is off
mluis 0:66f12acb8acb 730 */
mluis 0:66f12acb8acb 731 int8_t Datarate;
mluis 0:66f12acb8acb 732 /*!
mluis 0:66f12acb8acb 733 * Number of trials to transmit the frame, if the LoRaMAC layer did not
mluis 0:66f12acb8acb 734 * receive an acknowledgment. The MAC performs a datarate adaptation,
mluis 0:66f12acb8acb 735 * according to the LoRaWAN Specification V1.0.1, chapter 19.4, according
mluis 0:66f12acb8acb 736 * to the following table:
mluis 0:66f12acb8acb 737 *
mluis 0:66f12acb8acb 738 * Transmission nb | Data Rate
mluis 0:66f12acb8acb 739 * ----------------|-----------
mluis 0:66f12acb8acb 740 * 1 (first) | DR
mluis 0:66f12acb8acb 741 * 2 | DR
mluis 0:66f12acb8acb 742 * 3 | max(DR-1,0)
mluis 0:66f12acb8acb 743 * 4 | max(DR-1,0)
mluis 0:66f12acb8acb 744 * 5 | max(DR-2,0)
mluis 0:66f12acb8acb 745 * 6 | max(DR-2,0)
mluis 0:66f12acb8acb 746 * 7 | max(DR-3,0)
mluis 0:66f12acb8acb 747 * 8 | max(DR-3,0)
mluis 0:66f12acb8acb 748 *
mluis 0:66f12acb8acb 749 * Note, that if NbTrials is set to 1 or 2, the MAC will not decrease
mluis 0:66f12acb8acb 750 * the datarate, in case the LoRaMAC layer did not receive an acknowledgment
mluis 0:66f12acb8acb 751 */
mluis 0:66f12acb8acb 752 uint8_t NbTrials;
mluis 0:66f12acb8acb 753 }McpsReqConfirmed_t;
mluis 0:66f12acb8acb 754
mluis 0:66f12acb8acb 755 /*!
mluis 0:66f12acb8acb 756 * LoRaMAC MCPS-Request for a proprietary frame
mluis 0:66f12acb8acb 757 */
mluis 0:66f12acb8acb 758 typedef struct sMcpsReqProprietary
mluis 0:66f12acb8acb 759 {
mluis 0:66f12acb8acb 760 /*!
mluis 0:66f12acb8acb 761 * Pointer to the buffer of the frame payload
mluis 0:66f12acb8acb 762 */
mluis 0:66f12acb8acb 763 void *fBuffer;
mluis 0:66f12acb8acb 764 /*!
mluis 0:66f12acb8acb 765 * Size of the frame payload
mluis 0:66f12acb8acb 766 */
mluis 0:66f12acb8acb 767 uint16_t fBufferSize;
mluis 0:66f12acb8acb 768 /*!
mluis 0:66f12acb8acb 769 * Uplink datarate, if ADR is off
mluis 0:66f12acb8acb 770 */
mluis 0:66f12acb8acb 771 int8_t Datarate;
mluis 0:66f12acb8acb 772 }McpsReqProprietary_t;
mluis 0:66f12acb8acb 773
mluis 0:66f12acb8acb 774 /*!
mluis 0:66f12acb8acb 775 * LoRaMAC MCPS-Request structure
mluis 0:66f12acb8acb 776 */
mluis 0:66f12acb8acb 777 typedef struct sMcpsReq
mluis 0:66f12acb8acb 778 {
mluis 0:66f12acb8acb 779 /*!
mluis 0:66f12acb8acb 780 * MCPS-Request type
mluis 0:66f12acb8acb 781 */
mluis 0:66f12acb8acb 782 Mcps_t Type;
mluis 0:66f12acb8acb 783
mluis 0:66f12acb8acb 784 /*!
mluis 0:66f12acb8acb 785 * MCPS-Request parameters
mluis 0:66f12acb8acb 786 */
mluis 0:66f12acb8acb 787 union uMcpsParam
mluis 0:66f12acb8acb 788 {
mluis 0:66f12acb8acb 789 /*!
mluis 0:66f12acb8acb 790 * MCPS-Request parameters for an unconfirmed frame
mluis 0:66f12acb8acb 791 */
mluis 0:66f12acb8acb 792 McpsReqUnconfirmed_t Unconfirmed;
mluis 0:66f12acb8acb 793 /*!
mluis 0:66f12acb8acb 794 * MCPS-Request parameters for a confirmed frame
mluis 0:66f12acb8acb 795 */
mluis 0:66f12acb8acb 796 McpsReqConfirmed_t Confirmed;
mluis 0:66f12acb8acb 797 /*!
mluis 0:66f12acb8acb 798 * MCPS-Request parameters for a proprietary frame
mluis 0:66f12acb8acb 799 */
mluis 0:66f12acb8acb 800 McpsReqProprietary_t Proprietary;
mluis 0:66f12acb8acb 801 }Req;
mluis 0:66f12acb8acb 802 }McpsReq_t;
mluis 0:66f12acb8acb 803
mluis 0:66f12acb8acb 804 /*!
mluis 0:66f12acb8acb 805 * LoRaMAC MCPS-Confirm
mluis 0:66f12acb8acb 806 */
mluis 0:66f12acb8acb 807 typedef struct sMcpsConfirm
mluis 0:66f12acb8acb 808 {
mluis 0:66f12acb8acb 809 /*!
mluis 0:66f12acb8acb 810 * Holds the previously performed MCPS-Request
mluis 0:66f12acb8acb 811 */
mluis 0:66f12acb8acb 812 Mcps_t McpsRequest;
mluis 0:66f12acb8acb 813 /*!
mluis 0:66f12acb8acb 814 * Status of the operation
mluis 0:66f12acb8acb 815 */
mluis 0:66f12acb8acb 816 LoRaMacEventInfoStatus_t Status;
mluis 0:66f12acb8acb 817 /*!
mluis 0:66f12acb8acb 818 * Uplink datarate
mluis 0:66f12acb8acb 819 */
mluis 0:66f12acb8acb 820 uint8_t Datarate;
mluis 0:66f12acb8acb 821 /*!
mluis 0:66f12acb8acb 822 * Transmission power
mluis 0:66f12acb8acb 823 */
mluis 0:66f12acb8acb 824 int8_t TxPower;
mluis 0:66f12acb8acb 825 /*!
mluis 0:66f12acb8acb 826 * Set if an acknowledgement was received
mluis 0:66f12acb8acb 827 */
mluis 0:66f12acb8acb 828 bool AckReceived;
mluis 0:66f12acb8acb 829 /*!
mluis 0:66f12acb8acb 830 * Provides the number of retransmissions
mluis 0:66f12acb8acb 831 */
mluis 0:66f12acb8acb 832 uint8_t NbRetries;
mluis 0:66f12acb8acb 833 /*!
mluis 0:66f12acb8acb 834 * The transmission time on air of the frame
mluis 0:66f12acb8acb 835 */
mluis 0:66f12acb8acb 836 TimerTime_t TxTimeOnAir;
mluis 0:66f12acb8acb 837 /*!
mluis 0:66f12acb8acb 838 * The uplink counter value related to the frame
mluis 0:66f12acb8acb 839 */
mluis 0:66f12acb8acb 840 uint32_t UpLinkCounter;
mluis 0:66f12acb8acb 841 }McpsConfirm_t;
mluis 0:66f12acb8acb 842
mluis 0:66f12acb8acb 843 /*!
mluis 0:66f12acb8acb 844 * LoRaMAC MCPS-Indication primitive
mluis 0:66f12acb8acb 845 */
mluis 0:66f12acb8acb 846 typedef struct sMcpsIndication
mluis 0:66f12acb8acb 847 {
mluis 0:66f12acb8acb 848 /*!
mluis 0:66f12acb8acb 849 * MCPS-Indication type
mluis 0:66f12acb8acb 850 */
mluis 0:66f12acb8acb 851 Mcps_t McpsIndication;
mluis 0:66f12acb8acb 852 /*!
mluis 0:66f12acb8acb 853 * Status of the operation
mluis 0:66f12acb8acb 854 */
mluis 0:66f12acb8acb 855 LoRaMacEventInfoStatus_t Status;
mluis 0:66f12acb8acb 856 /*!
mluis 0:66f12acb8acb 857 * Multicast
mluis 0:66f12acb8acb 858 */
mluis 0:66f12acb8acb 859 uint8_t Multicast;
mluis 0:66f12acb8acb 860 /*!
mluis 0:66f12acb8acb 861 * Application port
mluis 0:66f12acb8acb 862 */
mluis 0:66f12acb8acb 863 uint8_t Port;
mluis 0:66f12acb8acb 864 /*!
mluis 0:66f12acb8acb 865 * Downlink datarate
mluis 0:66f12acb8acb 866 */
mluis 0:66f12acb8acb 867 uint8_t RxDatarate;
mluis 0:66f12acb8acb 868 /*!
mluis 0:66f12acb8acb 869 * Frame pending status
mluis 0:66f12acb8acb 870 */
mluis 0:66f12acb8acb 871 uint8_t FramePending;
mluis 0:66f12acb8acb 872 /*!
mluis 0:66f12acb8acb 873 * Pointer to the received data stream
mluis 0:66f12acb8acb 874 */
mluis 0:66f12acb8acb 875 uint8_t *Buffer;
mluis 0:66f12acb8acb 876 /*!
mluis 0:66f12acb8acb 877 * Size of the received data stream
mluis 0:66f12acb8acb 878 */
mluis 0:66f12acb8acb 879 uint8_t BufferSize;
mluis 0:66f12acb8acb 880 /*!
mluis 0:66f12acb8acb 881 * Indicates, if data is available
mluis 0:66f12acb8acb 882 */
mluis 0:66f12acb8acb 883 bool RxData;
mluis 0:66f12acb8acb 884 /*!
mluis 0:66f12acb8acb 885 * Rssi of the received packet
mluis 0:66f12acb8acb 886 */
mluis 0:66f12acb8acb 887 int16_t Rssi;
mluis 0:66f12acb8acb 888 /*!
mluis 0:66f12acb8acb 889 * Snr of the received packet
mluis 0:66f12acb8acb 890 */
mluis 0:66f12acb8acb 891 uint8_t Snr;
mluis 0:66f12acb8acb 892 /*!
mluis 0:66f12acb8acb 893 * Receive window
mluis 0:66f12acb8acb 894 *
mluis 0:66f12acb8acb 895 * [0: Rx window 1, 1: Rx window 2]
mluis 0:66f12acb8acb 896 */
mluis 0:66f12acb8acb 897 uint8_t RxSlot;
mluis 0:66f12acb8acb 898 /*!
mluis 0:66f12acb8acb 899 * Set if an acknowledgement was received
mluis 0:66f12acb8acb 900 */
mluis 0:66f12acb8acb 901 bool AckReceived;
mluis 0:66f12acb8acb 902 /*!
mluis 0:66f12acb8acb 903 * The downlink counter value for the received frame
mluis 0:66f12acb8acb 904 */
mluis 0:66f12acb8acb 905 uint32_t DownLinkCounter;
mluis 0:66f12acb8acb 906 }McpsIndication_t;
mluis 0:66f12acb8acb 907
mluis 0:66f12acb8acb 908 /*!
mluis 0:66f12acb8acb 909 * \brief LoRaMAC management services
mluis 0:66f12acb8acb 910 *
mluis 0:66f12acb8acb 911 * \details The following table list the primitives which are supported by the
mluis 0:66f12acb8acb 912 * specific MAC management service:
mluis 0:66f12acb8acb 913 *
mluis 0:66f12acb8acb 914 * Name | Request | Indication | Response | Confirm
mluis 0:66f12acb8acb 915 * --------------------- | :-----: | :--------: | :------: | :-----:
mluis 0:66f12acb8acb 916 * \ref MLME_JOIN | YES | NO | NO | YES
mluis 0:66f12acb8acb 917 * \ref MLME_LINK_CHECK | YES | NO | NO | YES
mluis 0:66f12acb8acb 918 *
mluis 0:66f12acb8acb 919 * The following table provides links to the function implementations of the
mluis 0:66f12acb8acb 920 * related MLME primitives.
mluis 0:66f12acb8acb 921 *
mluis 0:66f12acb8acb 922 * Primitive | Function
mluis 0:66f12acb8acb 923 * ---------------- | :---------------------:
mluis 0:66f12acb8acb 924 * MLME-Request | \ref LoRaMacMlmeRequest
mluis 0:66f12acb8acb 925 * MLME-Confirm | MacMlmeConfirm in \ref LoRaMacPrimitives_t
mluis 0:66f12acb8acb 926 */
mluis 0:66f12acb8acb 927 typedef enum eMlme
mluis 0:66f12acb8acb 928 {
mluis 0:66f12acb8acb 929 /*!
mluis 0:66f12acb8acb 930 * Initiates the Over-the-Air activation
mluis 0:66f12acb8acb 931 *
mluis 0:66f12acb8acb 932 * LoRaWAN Specification V1.0.1, chapter 6.2
mluis 0:66f12acb8acb 933 */
mluis 0:66f12acb8acb 934 MLME_JOIN,
mluis 0:66f12acb8acb 935 /*!
mluis 0:66f12acb8acb 936 * LinkCheckReq - Connectivity validation
mluis 0:66f12acb8acb 937 *
mluis 0:66f12acb8acb 938 * LoRaWAN Specification V1.0.1, chapter 5, table 4
mluis 0:66f12acb8acb 939 */
mluis 0:66f12acb8acb 940 MLME_LINK_CHECK,
mluis 0:66f12acb8acb 941 }Mlme_t;
mluis 0:66f12acb8acb 942
mluis 0:66f12acb8acb 943 /*!
mluis 0:66f12acb8acb 944 * LoRaMAC MLME-Request for the join service
mluis 0:66f12acb8acb 945 */
mluis 0:66f12acb8acb 946 typedef struct sMlmeReqJoin
mluis 0:66f12acb8acb 947 {
mluis 0:66f12acb8acb 948 /*!
mluis 0:66f12acb8acb 949 * Globally unique end-device identifier
mluis 0:66f12acb8acb 950 *
mluis 0:66f12acb8acb 951 * LoRaWAN Specification V1.0.1, chapter 6.2.1
mluis 0:66f12acb8acb 952 */
mluis 0:66f12acb8acb 953 uint8_t *DevEui;
mluis 0:66f12acb8acb 954 /*!
mluis 0:66f12acb8acb 955 * Application identifier
mluis 0:66f12acb8acb 956 *
mluis 0:66f12acb8acb 957 * LoRaWAN Specification V1.0.1, chapter 6.1.2
mluis 0:66f12acb8acb 958 */
mluis 0:66f12acb8acb 959 uint8_t *AppEui;
mluis 0:66f12acb8acb 960 /*!
mluis 0:66f12acb8acb 961 * AES-128 application key
mluis 0:66f12acb8acb 962 *
mluis 0:66f12acb8acb 963 * LoRaWAN Specification V1.0.1, chapter 6.2.2
mluis 0:66f12acb8acb 964 */
mluis 0:66f12acb8acb 965 uint8_t *AppKey;
mluis 0:66f12acb8acb 966 }MlmeReqJoin_t;
mluis 0:66f12acb8acb 967
mluis 0:66f12acb8acb 968 /*!
mluis 0:66f12acb8acb 969 * LoRaMAC MLME-Request structure
mluis 0:66f12acb8acb 970 */
mluis 0:66f12acb8acb 971 typedef struct sMlmeReq
mluis 0:66f12acb8acb 972 {
mluis 0:66f12acb8acb 973 /*!
mluis 0:66f12acb8acb 974 * MLME-Request type
mluis 0:66f12acb8acb 975 */
mluis 0:66f12acb8acb 976 Mlme_t Type;
mluis 0:66f12acb8acb 977
mluis 0:66f12acb8acb 978 /*!
mluis 0:66f12acb8acb 979 * MLME-Request parameters
mluis 0:66f12acb8acb 980 */
mluis 0:66f12acb8acb 981 union uMlmeParam
mluis 0:66f12acb8acb 982 {
mluis 0:66f12acb8acb 983 /*!
mluis 0:66f12acb8acb 984 * MLME-Request parameters for a join request
mluis 0:66f12acb8acb 985 */
mluis 0:66f12acb8acb 986 MlmeReqJoin_t Join;
mluis 0:66f12acb8acb 987 }Req;
mluis 0:66f12acb8acb 988 }MlmeReq_t;
mluis 0:66f12acb8acb 989
mluis 0:66f12acb8acb 990 /*!
mluis 0:66f12acb8acb 991 * LoRaMAC MLME-Confirm primitive
mluis 0:66f12acb8acb 992 */
mluis 0:66f12acb8acb 993 typedef struct sMlmeConfirm
mluis 0:66f12acb8acb 994 {
mluis 0:66f12acb8acb 995 /*!
mluis 0:66f12acb8acb 996 * Holds the previously performed MLME-Request
mluis 0:66f12acb8acb 997 */
mluis 0:66f12acb8acb 998 Mlme_t MlmeRequest;
mluis 0:66f12acb8acb 999 /*!
mluis 0:66f12acb8acb 1000 * Status of the operation
mluis 0:66f12acb8acb 1001 */
mluis 0:66f12acb8acb 1002 LoRaMacEventInfoStatus_t Status;
mluis 0:66f12acb8acb 1003 /*!
mluis 0:66f12acb8acb 1004 * The transmission time on air of the frame
mluis 0:66f12acb8acb 1005 */
mluis 0:66f12acb8acb 1006 TimerTime_t TxTimeOnAir;
mluis 0:66f12acb8acb 1007 /*!
mluis 0:66f12acb8acb 1008 * Demodulation margin. Contains the link margin [dB] of the last
mluis 0:66f12acb8acb 1009 * successfully received LinkCheckReq
mluis 0:66f12acb8acb 1010 */
mluis 0:66f12acb8acb 1011 uint8_t DemodMargin;
mluis 0:66f12acb8acb 1012 /*!
mluis 0:66f12acb8acb 1013 * Number of gateways which received the last LinkCheckReq
mluis 0:66f12acb8acb 1014 */
mluis 0:66f12acb8acb 1015 uint8_t NbGateways;
mluis 0:66f12acb8acb 1016 }MlmeConfirm_t;
mluis 0:66f12acb8acb 1017
mluis 0:66f12acb8acb 1018 /*!
mluis 0:66f12acb8acb 1019 * LoRa Mac Information Base (MIB)
mluis 0:66f12acb8acb 1020 *
mluis 0:66f12acb8acb 1021 * The following table lists the MIB parameters and the related attributes:
mluis 0:66f12acb8acb 1022 *
mluis 0:66f12acb8acb 1023 * Attribute | Get | Set
mluis 0:66f12acb8acb 1024 * --------------------------------- | :-: | :-:
mluis 0:66f12acb8acb 1025 * \ref MIB_DEVICE_CLASS | YES | YES
mluis 0:66f12acb8acb 1026 * \ref MIB_NETWORK_JOINED | YES | YES
mluis 0:66f12acb8acb 1027 * \ref MIB_ADR | YES | YES
mluis 0:66f12acb8acb 1028 * \ref MIB_NET_ID | YES | YES
mluis 0:66f12acb8acb 1029 * \ref MIB_DEV_ADDR | YES | YES
mluis 0:66f12acb8acb 1030 * \ref MIB_NWK_SKEY | YES | YES
mluis 0:66f12acb8acb 1031 * \ref MIB_APP_SKEY | YES | YES
mluis 0:66f12acb8acb 1032 * \ref MIB_PUBLIC_NETWORK | YES | YES
mluis 0:66f12acb8acb 1033 * \ref MIB_REPEATER_SUPPORT | YES | YES
mluis 0:66f12acb8acb 1034 * \ref MIB_CHANNELS | YES | NO
mluis 0:66f12acb8acb 1035 * \ref MIB_RX2_CHANNEL | YES | YES
mluis 0:66f12acb8acb 1036 * \ref MIB_CHANNELS_MASK | YES | YES
mluis 0:66f12acb8acb 1037 * \ref MIB_CHANNELS_NB_REP | YES | YES
mluis 0:66f12acb8acb 1038 * \ref MIB_MAX_RX_WINDOW_DURATION | YES | YES
mluis 0:66f12acb8acb 1039 * \ref MIB_RECEIVE_DELAY_1 | YES | YES
mluis 0:66f12acb8acb 1040 * \ref MIB_RECEIVE_DELAY_2 | YES | YES
mluis 0:66f12acb8acb 1041 * \ref MIB_JOIN_ACCEPT_DELAY_1 | YES | YES
mluis 0:66f12acb8acb 1042 * \ref MIB_JOIN_ACCEPT_DELAY_2 | YES | YES
mluis 0:66f12acb8acb 1043 * \ref MIB_CHANNELS_DATARATE | YES | YES
mluis 0:66f12acb8acb 1044 * \ref MIB_CHANNELS_DEFAULT_DATARATE| YES | YES
mluis 0:66f12acb8acb 1045 * \ref MIB_CHANNELS_TX_POWER | YES | YES
mluis 0:66f12acb8acb 1046 * \ref MIB_UPLINK_COUNTER | YES | YES
mluis 0:66f12acb8acb 1047 * \ref MIB_DOWNLINK_COUNTER | YES | YES
mluis 0:66f12acb8acb 1048 * \ref MIB_MULTICAST_CHANNEL | YES | NO
mluis 0:66f12acb8acb 1049 *
mluis 0:66f12acb8acb 1050 * The following table provides links to the function implementations of the
mluis 0:66f12acb8acb 1051 * related MIB primitives:
mluis 0:66f12acb8acb 1052 *
mluis 0:66f12acb8acb 1053 * Primitive | Function
mluis 0:66f12acb8acb 1054 * ---------------- | :---------------------:
mluis 0:66f12acb8acb 1055 * MIB-Set | \ref LoRaMacMibSetRequestConfirm
mluis 0:66f12acb8acb 1056 * MIB-Get | \ref LoRaMacMibGetRequestConfirm
mluis 0:66f12acb8acb 1057 */
mluis 0:66f12acb8acb 1058 typedef enum eMib
mluis 0:66f12acb8acb 1059 {
mluis 0:66f12acb8acb 1060 /*!
mluis 0:66f12acb8acb 1061 * LoRaWAN device class
mluis 0:66f12acb8acb 1062 *
mluis 0:66f12acb8acb 1063 * LoRaWAN Specification V1.0.1
mluis 0:66f12acb8acb 1064 */
mluis 0:66f12acb8acb 1065 MIB_DEVICE_CLASS,
mluis 0:66f12acb8acb 1066 /*!
mluis 0:66f12acb8acb 1067 * LoRaWAN Network joined attribute
mluis 0:66f12acb8acb 1068 *
mluis 0:66f12acb8acb 1069 * LoRaWAN Specification V1.0.1
mluis 0:66f12acb8acb 1070 */
mluis 0:66f12acb8acb 1071 MIB_NETWORK_JOINED,
mluis 0:66f12acb8acb 1072 /*!
mluis 0:66f12acb8acb 1073 * Adaptive data rate
mluis 0:66f12acb8acb 1074 *
mluis 0:66f12acb8acb 1075 * LoRaWAN Specification V1.0.1, chapter 4.3.1.1
mluis 0:66f12acb8acb 1076 *
mluis 0:66f12acb8acb 1077 * [true: ADR enabled, false: ADR disabled]
mluis 0:66f12acb8acb 1078 */
mluis 0:66f12acb8acb 1079 MIB_ADR,
mluis 0:66f12acb8acb 1080 /*!
mluis 0:66f12acb8acb 1081 * Network identifier
mluis 0:66f12acb8acb 1082 *
mluis 0:66f12acb8acb 1083 * LoRaWAN Specification V1.0.1, chapter 6.1.1
mluis 0:66f12acb8acb 1084 */
mluis 0:66f12acb8acb 1085 MIB_NET_ID,
mluis 0:66f12acb8acb 1086 /*!
mluis 0:66f12acb8acb 1087 * End-device address
mluis 0:66f12acb8acb 1088 *
mluis 0:66f12acb8acb 1089 * LoRaWAN Specification V1.0.1, chapter 6.1.1
mluis 0:66f12acb8acb 1090 */
mluis 0:66f12acb8acb 1091 MIB_DEV_ADDR,
mluis 0:66f12acb8acb 1092 /*!
mluis 0:66f12acb8acb 1093 * Network session key
mluis 0:66f12acb8acb 1094 *
mluis 0:66f12acb8acb 1095 * LoRaWAN Specification V1.0.1, chapter 6.1.3
mluis 0:66f12acb8acb 1096 */
mluis 0:66f12acb8acb 1097 MIB_NWK_SKEY,
mluis 0:66f12acb8acb 1098 /*!
mluis 0:66f12acb8acb 1099 * Application session key
mluis 0:66f12acb8acb 1100 *
mluis 0:66f12acb8acb 1101 * LoRaWAN Specification V1.0.1, chapter 6.1.4
mluis 0:66f12acb8acb 1102 */
mluis 0:66f12acb8acb 1103 MIB_APP_SKEY,
mluis 0:66f12acb8acb 1104 /*!
mluis 0:66f12acb8acb 1105 * Set the network type to public or private
mluis 0:66f12acb8acb 1106 *
mluis 0:66f12acb8acb 1107 * LoRaWAN Specification V1.0.1, chapter 7
mluis 0:66f12acb8acb 1108 *
mluis 0:66f12acb8acb 1109 * [true: public network, false: private network]
mluis 0:66f12acb8acb 1110 */
mluis 0:66f12acb8acb 1111 MIB_PUBLIC_NETWORK,
mluis 0:66f12acb8acb 1112 /*!
mluis 0:66f12acb8acb 1113 * Support the operation with repeaters
mluis 0:66f12acb8acb 1114 *
mluis 0:66f12acb8acb 1115 * LoRaWAN Specification V1.0.1, chapter 7
mluis 0:66f12acb8acb 1116 *
mluis 0:66f12acb8acb 1117 * [true: repeater support enabled, false: repeater support disabled]
mluis 0:66f12acb8acb 1118 */
mluis 0:66f12acb8acb 1119 MIB_REPEATER_SUPPORT,
mluis 0:66f12acb8acb 1120 /*!
mluis 0:66f12acb8acb 1121 * Communication channels. A get request will return a
mluis 0:66f12acb8acb 1122 * pointer which references the first entry of the channel list. The
mluis 0:66f12acb8acb 1123 * list is of size LORA_MAX_NB_CHANNELS
mluis 0:66f12acb8acb 1124 *
mluis 0:66f12acb8acb 1125 * LoRaWAN Specification V1.0.1, chapter 7
mluis 0:66f12acb8acb 1126 */
mluis 0:66f12acb8acb 1127 MIB_CHANNELS,
mluis 0:66f12acb8acb 1128 /*!
mluis 0:66f12acb8acb 1129 * Set receive window 2 channel
mluis 0:66f12acb8acb 1130 *
mluis 0:66f12acb8acb 1131 * LoRaWAN Specification V1.0.1, chapter 3.3.2
mluis 0:66f12acb8acb 1132 */
mluis 0:66f12acb8acb 1133 MIB_RX2_CHANNEL,
mluis 0:66f12acb8acb 1134 /*!
mluis 0:66f12acb8acb 1135 * LoRaWAN channels mask
mluis 0:66f12acb8acb 1136 *
mluis 0:66f12acb8acb 1137 * LoRaWAN Specification V1.0.1, chapter 7
mluis 0:66f12acb8acb 1138 */
mluis 0:66f12acb8acb 1139 MIB_CHANNELS_MASK,
mluis 0:66f12acb8acb 1140 /*!
mluis 0:66f12acb8acb 1141 * Set the number of repetitions on a channel
mluis 0:66f12acb8acb 1142 *
mluis 0:66f12acb8acb 1143 * LoRaWAN Specification V1.0.1, chapter 5.2
mluis 0:66f12acb8acb 1144 */
mluis 0:66f12acb8acb 1145 MIB_CHANNELS_NB_REP,
mluis 0:66f12acb8acb 1146 /*!
mluis 1:4820e04b066c 1147 * Maximum receive window duration in [us]
mluis 0:66f12acb8acb 1148 *
mluis 0:66f12acb8acb 1149 * LoRaWAN Specification V1.0.1, chapter 3.3.3
mluis 0:66f12acb8acb 1150 */
mluis 0:66f12acb8acb 1151 MIB_MAX_RX_WINDOW_DURATION,
mluis 0:66f12acb8acb 1152 /*!
mluis 1:4820e04b066c 1153 * Receive delay 1 in [us]
mluis 0:66f12acb8acb 1154 *
mluis 0:66f12acb8acb 1155 * LoRaWAN Specification V1.0.1, chapter 7
mluis 0:66f12acb8acb 1156 */
mluis 0:66f12acb8acb 1157 MIB_RECEIVE_DELAY_1,
mluis 0:66f12acb8acb 1158 /*!
mluis 1:4820e04b066c 1159 * Receive delay 2 in [us]
mluis 0:66f12acb8acb 1160 *
mluis 0:66f12acb8acb 1161 * LoRaWAN Specification V1.0.1, chapter 7
mluis 0:66f12acb8acb 1162 */
mluis 0:66f12acb8acb 1163 MIB_RECEIVE_DELAY_2,
mluis 0:66f12acb8acb 1164 /*!
mluis 1:4820e04b066c 1165 * Join accept delay 1 in [us]
mluis 0:66f12acb8acb 1166 *
mluis 0:66f12acb8acb 1167 * LoRaWAN Specification V1.0.1, chapter 7
mluis 0:66f12acb8acb 1168 */
mluis 0:66f12acb8acb 1169 MIB_JOIN_ACCEPT_DELAY_1,
mluis 0:66f12acb8acb 1170 /*!
mluis 1:4820e04b066c 1171 * Join accept delay 2 in [us]
mluis 0:66f12acb8acb 1172 *
mluis 0:66f12acb8acb 1173 * LoRaWAN Specification V1.0.1, chapter 7
mluis 0:66f12acb8acb 1174 */
mluis 0:66f12acb8acb 1175 MIB_JOIN_ACCEPT_DELAY_2,
mluis 0:66f12acb8acb 1176 /*!
mluis 0:66f12acb8acb 1177 * Default Data rate of a channel
mluis 0:66f12acb8acb 1178 *
mluis 0:66f12acb8acb 1179 * LoRaWAN Specification V1.0.1, chapter 7
mluis 0:66f12acb8acb 1180 *
mluis 0:66f12acb8acb 1181 * EU868 - [DR_0, DR_1, DR_2, DR_3, DR_4, DR_5, DR_6, DR_7]
mluis 0:66f12acb8acb 1182 *
mluis 0:66f12acb8acb 1183 * US915 - [DR_0, DR_1, DR_2, DR_3, DR_4, DR_8, DR_9, DR_10, DR_11, DR_12, DR_13]
mluis 0:66f12acb8acb 1184 */
mluis 0:66f12acb8acb 1185 MIB_CHANNELS_DEFAULT_DATARATE,
mluis 0:66f12acb8acb 1186 /*!
mluis 0:66f12acb8acb 1187 * Data rate of a channel
mluis 0:66f12acb8acb 1188 *
mluis 0:66f12acb8acb 1189 * LoRaWAN Specification V1.0.1, chapter 7
mluis 0:66f12acb8acb 1190 *
mluis 0:66f12acb8acb 1191 * EU868 - [DR_0, DR_1, DR_2, DR_3, DR_4, DR_5, DR_6, DR_7]
mluis 0:66f12acb8acb 1192 *
mluis 0:66f12acb8acb 1193 * US915 - [DR_0, DR_1, DR_2, DR_3, DR_4, DR_8, DR_9, DR_10, DR_11, DR_12, DR_13]
mluis 0:66f12acb8acb 1194 */
mluis 0:66f12acb8acb 1195 MIB_CHANNELS_DATARATE,
mluis 0:66f12acb8acb 1196 /*!
mluis 0:66f12acb8acb 1197 * Transmission power of a channel
mluis 0:66f12acb8acb 1198 *
mluis 0:66f12acb8acb 1199 * LoRaWAN Specification V1.0.1, chapter 7
mluis 0:66f12acb8acb 1200 *
mluis 0:66f12acb8acb 1201 * EU868 - [TX_POWER_20_DBM, TX_POWER_14_DBM, TX_POWER_11_DBM,
mluis 0:66f12acb8acb 1202 * TX_POWER_08_DBM, TX_POWER_05_DBM, TX_POWER_02_DBM]
mluis 0:66f12acb8acb 1203 *
mluis 0:66f12acb8acb 1204 * US915 - [TX_POWER_30_DBM, TX_POWER_28_DBM, TX_POWER_26_DBM,
mluis 0:66f12acb8acb 1205 * TX_POWER_24_DBM, TX_POWER_22_DBM, TX_POWER_20_DBM,
mluis 0:66f12acb8acb 1206 * TX_POWER_18_DBM, TX_POWER_14_DBM, TX_POWER_12_DBM,
mluis 0:66f12acb8acb 1207 * TX_POWER_10_DBM]
mluis 0:66f12acb8acb 1208 */
mluis 0:66f12acb8acb 1209 MIB_CHANNELS_TX_POWER,
mluis 0:66f12acb8acb 1210 /*!
mluis 0:66f12acb8acb 1211 * LoRaWAN Up-link counter
mluis 0:66f12acb8acb 1212 *
mluis 0:66f12acb8acb 1213 * LoRaWAN Specification V1.0.1, chapter 4.3.1.5
mluis 0:66f12acb8acb 1214 */
mluis 0:66f12acb8acb 1215 MIB_UPLINK_COUNTER,
mluis 0:66f12acb8acb 1216 /*!
mluis 0:66f12acb8acb 1217 * LoRaWAN Down-link counter
mluis 0:66f12acb8acb 1218 *
mluis 0:66f12acb8acb 1219 * LoRaWAN Specification V1.0.1, chapter 4.3.1.5
mluis 0:66f12acb8acb 1220 */
mluis 0:66f12acb8acb 1221 MIB_DOWNLINK_COUNTER,
mluis 0:66f12acb8acb 1222 /*!
mluis 0:66f12acb8acb 1223 * Multicast channels. A get request will return a pointer to the first
mluis 0:66f12acb8acb 1224 * entry of the multicast channel linked list. If the pointer is equal to
mluis 0:66f12acb8acb 1225 * NULL, the list is empty.
mluis 0:66f12acb8acb 1226 */
mluis 0:66f12acb8acb 1227 MIB_MULTICAST_CHANNEL,
mluis 0:66f12acb8acb 1228 }Mib_t;
mluis 0:66f12acb8acb 1229
mluis 0:66f12acb8acb 1230 /*!
mluis 0:66f12acb8acb 1231 * LoRaMAC MIB parameters
mluis 0:66f12acb8acb 1232 */
mluis 0:66f12acb8acb 1233 typedef union uMibParam
mluis 0:66f12acb8acb 1234 {
mluis 0:66f12acb8acb 1235 /*!
mluis 0:66f12acb8acb 1236 * LoRaWAN device class
mluis 0:66f12acb8acb 1237 *
mluis 0:66f12acb8acb 1238 * Related MIB type: \ref MIB_DEVICE_CLASS
mluis 0:66f12acb8acb 1239 */
mluis 0:66f12acb8acb 1240 DeviceClass_t Class;
mluis 0:66f12acb8acb 1241 /*!
mluis 0:66f12acb8acb 1242 * LoRaWAN network joined attribute
mluis 0:66f12acb8acb 1243 *
mluis 0:66f12acb8acb 1244 * Related MIB type: \ref MIB_NETWORK_JOINED
mluis 0:66f12acb8acb 1245 */
mluis 0:66f12acb8acb 1246 bool IsNetworkJoined;
mluis 0:66f12acb8acb 1247 /*!
mluis 0:66f12acb8acb 1248 * Activation state of ADR
mluis 0:66f12acb8acb 1249 *
mluis 0:66f12acb8acb 1250 * Related MIB type: \ref MIB_ADR
mluis 0:66f12acb8acb 1251 */
mluis 0:66f12acb8acb 1252 bool AdrEnable;
mluis 0:66f12acb8acb 1253 /*!
mluis 0:66f12acb8acb 1254 * Network identifier
mluis 0:66f12acb8acb 1255 *
mluis 0:66f12acb8acb 1256 * Related MIB type: \ref MIB_NET_ID
mluis 0:66f12acb8acb 1257 */
mluis 0:66f12acb8acb 1258 uint32_t NetID;
mluis 0:66f12acb8acb 1259 /*!
mluis 0:66f12acb8acb 1260 * End-device address
mluis 0:66f12acb8acb 1261 *
mluis 0:66f12acb8acb 1262 * Related MIB type: \ref MIB_DEV_ADDR
mluis 0:66f12acb8acb 1263 */
mluis 0:66f12acb8acb 1264 uint32_t DevAddr;
mluis 0:66f12acb8acb 1265 /*!
mluis 0:66f12acb8acb 1266 * Network session key
mluis 0:66f12acb8acb 1267 *
mluis 0:66f12acb8acb 1268 * Related MIB type: \ref MIB_NWK_SKEY
mluis 0:66f12acb8acb 1269 */
mluis 0:66f12acb8acb 1270 uint8_t *NwkSKey;
mluis 0:66f12acb8acb 1271 /*!
mluis 0:66f12acb8acb 1272 * Application session key
mluis 0:66f12acb8acb 1273 *
mluis 0:66f12acb8acb 1274 * Related MIB type: \ref MIB_APP_SKEY
mluis 0:66f12acb8acb 1275 */
mluis 0:66f12acb8acb 1276 uint8_t *AppSKey;
mluis 0:66f12acb8acb 1277 /*!
mluis 0:66f12acb8acb 1278 * Enable or disable a public network
mluis 0:66f12acb8acb 1279 *
mluis 0:66f12acb8acb 1280 * Related MIB type: \ref MIB_PUBLIC_NETWORK
mluis 0:66f12acb8acb 1281 */
mluis 0:66f12acb8acb 1282 bool EnablePublicNetwork;
mluis 0:66f12acb8acb 1283 /*!
mluis 0:66f12acb8acb 1284 * Enable or disable repeater support
mluis 0:66f12acb8acb 1285 *
mluis 0:66f12acb8acb 1286 * Related MIB type: \ref MIB_REPEATER_SUPPORT
mluis 0:66f12acb8acb 1287 */
mluis 0:66f12acb8acb 1288 bool EnableRepeaterSupport;
mluis 0:66f12acb8acb 1289 /*!
mluis 0:66f12acb8acb 1290 * LoRaWAN Channel
mluis 0:66f12acb8acb 1291 *
mluis 0:66f12acb8acb 1292 * Related MIB type: \ref MIB_CHANNELS
mluis 0:66f12acb8acb 1293 */
mluis 0:66f12acb8acb 1294 ChannelParams_t* ChannelList;
mluis 0:66f12acb8acb 1295 /*!
mluis 0:66f12acb8acb 1296 * Channel for the receive window 2
mluis 0:66f12acb8acb 1297 *
mluis 0:66f12acb8acb 1298 * Related MIB type: \ref MIB_RX2_CHANNEL
mluis 0:66f12acb8acb 1299 */
mluis 0:66f12acb8acb 1300 Rx2ChannelParams_t Rx2Channel;
mluis 0:66f12acb8acb 1301 /*!
mluis 0:66f12acb8acb 1302 * Channel mask
mluis 0:66f12acb8acb 1303 *
mluis 0:66f12acb8acb 1304 * Related MIB type: \ref MIB_CHANNELS_MASK
mluis 0:66f12acb8acb 1305 */
mluis 0:66f12acb8acb 1306 uint16_t* ChannelsMask;
mluis 0:66f12acb8acb 1307 /*!
mluis 0:66f12acb8acb 1308 * Number of frame repetitions
mluis 0:66f12acb8acb 1309 *
mluis 0:66f12acb8acb 1310 * Related MIB type: \ref MIB_CHANNELS_NB_REP
mluis 0:66f12acb8acb 1311 */
mluis 0:66f12acb8acb 1312 uint8_t ChannelNbRep;
mluis 0:66f12acb8acb 1313 /*!
mluis 0:66f12acb8acb 1314 * Maximum receive window duration
mluis 0:66f12acb8acb 1315 *
mluis 0:66f12acb8acb 1316 * Related MIB type: \ref MIB_MAX_RX_WINDOW_DURATION
mluis 0:66f12acb8acb 1317 */
mluis 0:66f12acb8acb 1318 uint32_t MaxRxWindow;
mluis 0:66f12acb8acb 1319 /*!
mluis 0:66f12acb8acb 1320 * Receive delay 1
mluis 0:66f12acb8acb 1321 *
mluis 0:66f12acb8acb 1322 * Related MIB type: \ref MIB_RECEIVE_DELAY_1
mluis 0:66f12acb8acb 1323 */
mluis 0:66f12acb8acb 1324 uint32_t ReceiveDelay1;
mluis 0:66f12acb8acb 1325 /*!
mluis 0:66f12acb8acb 1326 * Receive delay 2
mluis 0:66f12acb8acb 1327 *
mluis 0:66f12acb8acb 1328 * Related MIB type: \ref MIB_RECEIVE_DELAY_2
mluis 0:66f12acb8acb 1329 */
mluis 0:66f12acb8acb 1330 uint32_t ReceiveDelay2;
mluis 0:66f12acb8acb 1331 /*!
mluis 0:66f12acb8acb 1332 * Join accept delay 1
mluis 0:66f12acb8acb 1333 *
mluis 0:66f12acb8acb 1334 * Related MIB type: \ref MIB_JOIN_ACCEPT_DELAY_1
mluis 0:66f12acb8acb 1335 */
mluis 0:66f12acb8acb 1336 uint32_t JoinAcceptDelay1;
mluis 0:66f12acb8acb 1337 /*!
mluis 0:66f12acb8acb 1338 * Join accept delay 2
mluis 0:66f12acb8acb 1339 *
mluis 0:66f12acb8acb 1340 * Related MIB type: \ref MIB_JOIN_ACCEPT_DELAY_2
mluis 0:66f12acb8acb 1341 */
mluis 0:66f12acb8acb 1342 uint32_t JoinAcceptDelay2;
mluis 0:66f12acb8acb 1343 /*!
mluis 0:66f12acb8acb 1344 * Channels data rate
mluis 0:66f12acb8acb 1345 *
mluis 0:66f12acb8acb 1346 * Related MIB type: \ref MIB_CHANNELS_DEFAULT_DATARATE
mluis 0:66f12acb8acb 1347 */
mluis 0:66f12acb8acb 1348 int8_t ChannelsDefaultDatarate;
mluis 0:66f12acb8acb 1349 /*!
mluis 0:66f12acb8acb 1350 * Channels data rate
mluis 0:66f12acb8acb 1351 *
mluis 0:66f12acb8acb 1352 * Related MIB type: \ref MIB_CHANNELS_DATARATE
mluis 0:66f12acb8acb 1353 */
mluis 0:66f12acb8acb 1354 int8_t ChannelsDatarate;
mluis 0:66f12acb8acb 1355 /*!
mluis 0:66f12acb8acb 1356 * Channels TX power
mluis 0:66f12acb8acb 1357 *
mluis 0:66f12acb8acb 1358 * Related MIB type: \ref MIB_CHANNELS_TX_POWER
mluis 0:66f12acb8acb 1359 */
mluis 0:66f12acb8acb 1360 int8_t ChannelsTxPower;
mluis 0:66f12acb8acb 1361 /*!
mluis 0:66f12acb8acb 1362 * LoRaWAN Up-link counter
mluis 0:66f12acb8acb 1363 *
mluis 0:66f12acb8acb 1364 * Related MIB type: \ref MIB_UPLINK_COUNTER
mluis 0:66f12acb8acb 1365 */
mluis 0:66f12acb8acb 1366 uint32_t UpLinkCounter;
mluis 0:66f12acb8acb 1367 /*!
mluis 0:66f12acb8acb 1368 * LoRaWAN Down-link counter
mluis 0:66f12acb8acb 1369 *
mluis 0:66f12acb8acb 1370 * Related MIB type: \ref MIB_DOWNLINK_COUNTER
mluis 0:66f12acb8acb 1371 */
mluis 0:66f12acb8acb 1372 uint32_t DownLinkCounter;
mluis 0:66f12acb8acb 1373 /*!
mluis 0:66f12acb8acb 1374 * Multicast channel
mluis 0:66f12acb8acb 1375 *
mluis 0:66f12acb8acb 1376 * Related MIB type: \ref MIB_MULTICAST_CHANNEL
mluis 0:66f12acb8acb 1377 */
mluis 0:66f12acb8acb 1378 MulticastParams_t* MulticastList;
mluis 0:66f12acb8acb 1379 }MibParam_t;
mluis 0:66f12acb8acb 1380
mluis 0:66f12acb8acb 1381 /*!
mluis 0:66f12acb8acb 1382 * LoRaMAC MIB-RequestConfirm structure
mluis 0:66f12acb8acb 1383 */
mluis 0:66f12acb8acb 1384 typedef struct eMibRequestConfirm
mluis 0:66f12acb8acb 1385 {
mluis 0:66f12acb8acb 1386 /*!
mluis 0:66f12acb8acb 1387 * MIB-Request type
mluis 0:66f12acb8acb 1388 */
mluis 0:66f12acb8acb 1389 Mib_t Type;
mluis 0:66f12acb8acb 1390
mluis 0:66f12acb8acb 1391 /*!
mluis 0:66f12acb8acb 1392 * MLME-RequestConfirm parameters
mluis 0:66f12acb8acb 1393 */
mluis 0:66f12acb8acb 1394 MibParam_t Param;
mluis 0:66f12acb8acb 1395 }MibRequestConfirm_t;
mluis 0:66f12acb8acb 1396
mluis 0:66f12acb8acb 1397 /*!
mluis 0:66f12acb8acb 1398 * LoRaMAC tx information
mluis 0:66f12acb8acb 1399 */
mluis 0:66f12acb8acb 1400 typedef struct sLoRaMacTxInfo
mluis 0:66f12acb8acb 1401 {
mluis 0:66f12acb8acb 1402 /*!
mluis 0:66f12acb8acb 1403 * Defines the size of the applicative payload which can be processed
mluis 0:66f12acb8acb 1404 */
mluis 0:66f12acb8acb 1405 uint8_t MaxPossiblePayload;
mluis 0:66f12acb8acb 1406 /*!
mluis 0:66f12acb8acb 1407 * The current payload size, dependent on the current datarate
mluis 0:66f12acb8acb 1408 */
mluis 0:66f12acb8acb 1409 uint8_t CurrentPayloadSize;
mluis 0:66f12acb8acb 1410 }LoRaMacTxInfo_t;
mluis 0:66f12acb8acb 1411
mluis 0:66f12acb8acb 1412 /*!
mluis 0:66f12acb8acb 1413 * LoRaMAC Status
mluis 0:66f12acb8acb 1414 */
mluis 0:66f12acb8acb 1415 typedef enum eLoRaMacStatus
mluis 0:66f12acb8acb 1416 {
mluis 0:66f12acb8acb 1417 /*!
mluis 0:66f12acb8acb 1418 * Service started successfully
mluis 0:66f12acb8acb 1419 */
mluis 0:66f12acb8acb 1420 LORAMAC_STATUS_OK,
mluis 0:66f12acb8acb 1421 /*!
mluis 0:66f12acb8acb 1422 * Service not started - LoRaMAC is busy
mluis 0:66f12acb8acb 1423 */
mluis 0:66f12acb8acb 1424 LORAMAC_STATUS_BUSY,
mluis 0:66f12acb8acb 1425 /*!
mluis 0:66f12acb8acb 1426 * Service unknown
mluis 0:66f12acb8acb 1427 */
mluis 0:66f12acb8acb 1428 LORAMAC_STATUS_SERVICE_UNKNOWN,
mluis 0:66f12acb8acb 1429 /*!
mluis 0:66f12acb8acb 1430 * Service not started - invalid parameter
mluis 0:66f12acb8acb 1431 */
mluis 0:66f12acb8acb 1432 LORAMAC_STATUS_PARAMETER_INVALID,
mluis 0:66f12acb8acb 1433 /*!
mluis 0:66f12acb8acb 1434 * Service not started - invalid frequency
mluis 0:66f12acb8acb 1435 */
mluis 0:66f12acb8acb 1436 LORAMAC_STATUS_FREQUENCY_INVALID,
mluis 0:66f12acb8acb 1437 /*!
mluis 0:66f12acb8acb 1438 * Service not started - invalid datarate
mluis 0:66f12acb8acb 1439 */
mluis 0:66f12acb8acb 1440 LORAMAC_STATUS_DATARATE_INVALID,
mluis 0:66f12acb8acb 1441 /*!
mluis 0:66f12acb8acb 1442 * Service not started - invalid frequency and datarate
mluis 0:66f12acb8acb 1443 */
mluis 0:66f12acb8acb 1444 LORAMAC_STATUS_FREQ_AND_DR_INVALID,
mluis 0:66f12acb8acb 1445 /*!
mluis 0:66f12acb8acb 1446 * Service not started - the device is not in a LoRaWAN
mluis 0:66f12acb8acb 1447 */
mluis 0:66f12acb8acb 1448 LORAMAC_STATUS_NO_NETWORK_JOINED,
mluis 0:66f12acb8acb 1449 /*!
mluis 0:66f12acb8acb 1450 * Service not started - playload lenght error
mluis 0:66f12acb8acb 1451 */
mluis 0:66f12acb8acb 1452 LORAMAC_STATUS_LENGTH_ERROR,
mluis 0:66f12acb8acb 1453 /*!
mluis 0:66f12acb8acb 1454 * Service not started - playload lenght error
mluis 0:66f12acb8acb 1455 */
mluis 0:66f12acb8acb 1456 LORAMAC_STATUS_MAC_CMD_LENGTH_ERROR,
mluis 0:66f12acb8acb 1457 /*!
mluis 0:66f12acb8acb 1458 * Service not started - the device is switched off
mluis 0:66f12acb8acb 1459 */
mluis 0:66f12acb8acb 1460 LORAMAC_STATUS_DEVICE_OFF,
mluis 0:66f12acb8acb 1461 }LoRaMacStatus_t;
mluis 0:66f12acb8acb 1462
mluis 0:66f12acb8acb 1463 /*!
mluis 0:66f12acb8acb 1464 * LoRaMAC events structure
mluis 0:66f12acb8acb 1465 * Used to notify upper layers of MAC events
mluis 0:66f12acb8acb 1466 */
mluis 0:66f12acb8acb 1467 typedef struct sLoRaMacPrimitives
mluis 0:66f12acb8acb 1468 {
mluis 0:66f12acb8acb 1469 /*!
mluis 0:66f12acb8acb 1470 * \brief MCPS-Confirm primitive
mluis 0:66f12acb8acb 1471 *
mluis 0:66f12acb8acb 1472 * \param [OUT] MCPS-Confirm parameters
mluis 0:66f12acb8acb 1473 */
mluis 0:66f12acb8acb 1474 void ( *MacMcpsConfirm )( McpsConfirm_t *McpsConfirm );
mluis 0:66f12acb8acb 1475 /*!
mluis 0:66f12acb8acb 1476 * \brief MCPS-Indication primitive
mluis 0:66f12acb8acb 1477 *
mluis 0:66f12acb8acb 1478 * \param [OUT] MCPS-Indication parameters
mluis 0:66f12acb8acb 1479 */
mluis 0:66f12acb8acb 1480 void ( *MacMcpsIndication )( McpsIndication_t *McpsIndication );
mluis 0:66f12acb8acb 1481 /*!
mluis 0:66f12acb8acb 1482 * \brief MLME-Confirm primitive
mluis 0:66f12acb8acb 1483 *
mluis 0:66f12acb8acb 1484 * \param [OUT] MLME-Confirm parameters
mluis 0:66f12acb8acb 1485 */
mluis 0:66f12acb8acb 1486 void ( *MacMlmeConfirm )( MlmeConfirm_t *MlmeConfirm );
mluis 0:66f12acb8acb 1487 }LoRaMacPrimitives_t;
mluis 0:66f12acb8acb 1488
mluis 0:66f12acb8acb 1489 typedef struct sLoRaMacCallback
mluis 0:66f12acb8acb 1490 {
mluis 0:66f12acb8acb 1491 /*!
mluis 0:66f12acb8acb 1492 * \brief Measures the battery level
mluis 0:66f12acb8acb 1493 *
mluis 0:66f12acb8acb 1494 * \retval Battery level [0: node is connected to an external
mluis 0:66f12acb8acb 1495 * power source, 1..254: battery level, where 1 is the minimum
mluis 0:66f12acb8acb 1496 * and 254 is the maximum value, 255: the node was not able
mluis 0:66f12acb8acb 1497 * to measure the battery level]
mluis 0:66f12acb8acb 1498 */
mluis 0:66f12acb8acb 1499 uint8_t ( *GetBatteryLevel )( void );
mluis 0:66f12acb8acb 1500 }LoRaMacCallback_t;
mluis 0:66f12acb8acb 1501
mluis 0:66f12acb8acb 1502 /*!
mluis 0:66f12acb8acb 1503 * \brief LoRaMAC layer initialization
mluis 0:66f12acb8acb 1504 *
mluis 0:66f12acb8acb 1505 * \details In addition to the initialization of the LoRaMAC layer, this
mluis 0:66f12acb8acb 1506 * function initializes the callback primitives of the MCPS and
mluis 0:66f12acb8acb 1507 * MLME services. Every data field of \ref LoRaMacPrimitives_t must be
mluis 0:66f12acb8acb 1508 * set to a valid callback function.
mluis 0:66f12acb8acb 1509 *
mluis 0:66f12acb8acb 1510 * \param [IN] events - Pointer to a structure defining the LoRaMAC
mluis 0:66f12acb8acb 1511 * event functions. Refer to \ref LoRaMacPrimitives_t.
mluis 0:66f12acb8acb 1512 *
mluis 0:66f12acb8acb 1513 * \param [IN] events - Pointer to a structure defining the LoRaMAC
mluis 0:66f12acb8acb 1514 * callback functions. Refer to \ref LoRaMacCallback_t.
mluis 0:66f12acb8acb 1515 *
mluis 0:66f12acb8acb 1516 * \retval LoRaMacStatus_t Status of the operation. Possible returns are:
mluis 0:66f12acb8acb 1517 * returns are:
mluis 0:66f12acb8acb 1518 * \ref LORAMAC_STATUS_OK,
mluis 0:66f12acb8acb 1519 * \ref LORAMAC_STATUS_PARAMETER_INVALID.
mluis 0:66f12acb8acb 1520 */
mluis 0:66f12acb8acb 1521 LoRaMacStatus_t LoRaMacInitialization( LoRaMacPrimitives_t *primitives, LoRaMacCallback_t *callbacks );
mluis 0:66f12acb8acb 1522
mluis 0:66f12acb8acb 1523 /*!
mluis 0:66f12acb8acb 1524 * \brief Queries the LoRaMAC if it is possible to send the next frame with
mluis 0:66f12acb8acb 1525 * a given payload size. The LoRaMAC takes scheduled MAC commands into
mluis 0:66f12acb8acb 1526 * account and reports, when the frame can be send or not.
mluis 0:66f12acb8acb 1527 *
mluis 0:66f12acb8acb 1528 * \param [IN] size - Size of applicative payload to be send next
mluis 0:66f12acb8acb 1529 *
mluis 0:66f12acb8acb 1530 * \param [OUT] txInfo - The structure \ref LoRaMacTxInfo_t contains
mluis 0:66f12acb8acb 1531 * information about the actual maximum payload possible
mluis 0:66f12acb8acb 1532 * ( according to the configured datarate or the next
mluis 0:66f12acb8acb 1533 * datarate according to ADR ), and the maximum frame
mluis 0:66f12acb8acb 1534 * size, taking the scheduled MAC commands into account.
mluis 0:66f12acb8acb 1535 *
mluis 0:66f12acb8acb 1536 * \retval LoRaMacStatus_t Status of the operation. When the parameters are
mluis 0:66f12acb8acb 1537 * not valid, the function returns \ref LORAMAC_STATUS_PARAMETER_INVALID.
mluis 0:66f12acb8acb 1538 * In case of a length error caused by the applicative payload size, the
mluis 0:66f12acb8acb 1539 * function returns LORAMAC_STATUS_LENGTH_ERROR. In case of a length error
mluis 0:66f12acb8acb 1540 * due to additional MAC commands in the queue, the function returns
mluis 0:66f12acb8acb 1541 * LORAMAC_STATUS_MAC_CMD_LENGTH_ERROR. In case the query is valid, and
mluis 0:66f12acb8acb 1542 * the LoRaMAC is able to send the frame, the function returns LORAMAC_STATUS_OK. *
mluis 0:66f12acb8acb 1543 */
mluis 0:66f12acb8acb 1544 LoRaMacStatus_t LoRaMacQueryTxPossible( uint8_t size, LoRaMacTxInfo_t* txInfo );
mluis 0:66f12acb8acb 1545
mluis 0:66f12acb8acb 1546 /*!
mluis 0:66f12acb8acb 1547 * \brief LoRaMAC channel add service
mluis 0:66f12acb8acb 1548 *
mluis 0:66f12acb8acb 1549 * \details Adds a new channel to the channel list and activates the id in
mluis 0:66f12acb8acb 1550 * the channel mask. For the US915 band, all channels are enabled
mluis 0:66f12acb8acb 1551 * by default. It is not possible to activate less than 6 125 kHz
mluis 0:66f12acb8acb 1552 * channels.
mluis 0:66f12acb8acb 1553 *
mluis 0:66f12acb8acb 1554 * \param [IN] id - Id of the channel. Possible values are:
mluis 0:66f12acb8acb 1555 *
mluis 0:66f12acb8acb 1556 * 0-15 for EU868
mluis 0:66f12acb8acb 1557 * 0-72 for US915
mluis 0:66f12acb8acb 1558 *
mluis 0:66f12acb8acb 1559 * \param [IN] params - Channel parameters to set.
mluis 0:66f12acb8acb 1560 *
mluis 0:66f12acb8acb 1561 * \retval LoRaMacStatus_t Status of the operation. Possible returns are:
mluis 0:66f12acb8acb 1562 * \ref LORAMAC_STATUS_OK,
mluis 0:66f12acb8acb 1563 * \ref LORAMAC_STATUS_BUSY,
mluis 0:66f12acb8acb 1564 * \ref LORAMAC_STATUS_PARAMETER_INVALID.
mluis 0:66f12acb8acb 1565 */
mluis 0:66f12acb8acb 1566 LoRaMacStatus_t LoRaMacChannelAdd( uint8_t id, ChannelParams_t params );
mluis 0:66f12acb8acb 1567
mluis 0:66f12acb8acb 1568 /*!
mluis 0:66f12acb8acb 1569 * \brief LoRaMAC channel remove service
mluis 0:66f12acb8acb 1570 *
mluis 0:66f12acb8acb 1571 * \details Deactivates the id in the channel mask.
mluis 0:66f12acb8acb 1572 *
mluis 0:66f12acb8acb 1573 * \param [IN] id - Id of the channel.
mluis 0:66f12acb8acb 1574 *
mluis 0:66f12acb8acb 1575 * \retval LoRaMacStatus_t Status of the operation. Possible returns are:
mluis 0:66f12acb8acb 1576 * \ref LORAMAC_STATUS_OK,
mluis 0:66f12acb8acb 1577 * \ref LORAMAC_STATUS_BUSY,
mluis 0:66f12acb8acb 1578 * \ref LORAMAC_STATUS_PARAMETER_INVALID.
mluis 0:66f12acb8acb 1579 */
mluis 0:66f12acb8acb 1580 LoRaMacStatus_t LoRaMacChannelRemove( uint8_t id );
mluis 0:66f12acb8acb 1581
mluis 0:66f12acb8acb 1582 /*!
mluis 0:66f12acb8acb 1583 * \brief LoRaMAC multicast channel link service
mluis 0:66f12acb8acb 1584 *
mluis 0:66f12acb8acb 1585 * \details Links a multicast channel into the linked list.
mluis 0:66f12acb8acb 1586 *
mluis 0:66f12acb8acb 1587 * \param [IN] channelParam - Multicast channel parameters to link.
mluis 0:66f12acb8acb 1588 *
mluis 0:66f12acb8acb 1589 * \retval LoRaMacStatus_t Status of the operation. Possible returns are:
mluis 0:66f12acb8acb 1590 * \ref LORAMAC_STATUS_OK,
mluis 0:66f12acb8acb 1591 * \ref LORAMAC_STATUS_BUSY,
mluis 0:66f12acb8acb 1592 * \ref LORAMAC_STATUS_PARAMETER_INVALID.
mluis 0:66f12acb8acb 1593 */
mluis 0:66f12acb8acb 1594 LoRaMacStatus_t LoRaMacMulticastChannelLink( MulticastParams_t *channelParam );
mluis 0:66f12acb8acb 1595
mluis 0:66f12acb8acb 1596 /*!
mluis 0:66f12acb8acb 1597 * \brief LoRaMAC multicast channel unlink service
mluis 0:66f12acb8acb 1598 *
mluis 0:66f12acb8acb 1599 * \details Unlinks a multicast channel from the linked list.
mluis 0:66f12acb8acb 1600 *
mluis 0:66f12acb8acb 1601 * \param [IN] channelParam - Multicast channel parameters to unlink.
mluis 0:66f12acb8acb 1602 *
mluis 0:66f12acb8acb 1603 * \retval LoRaMacStatus_t Status of the operation. Possible returns are:
mluis 0:66f12acb8acb 1604 * \ref LORAMAC_STATUS_OK,
mluis 0:66f12acb8acb 1605 * \ref LORAMAC_STATUS_BUSY,
mluis 0:66f12acb8acb 1606 * \ref LORAMAC_STATUS_PARAMETER_INVALID.
mluis 0:66f12acb8acb 1607 */
mluis 0:66f12acb8acb 1608 LoRaMacStatus_t LoRaMacMulticastChannelUnlink( MulticastParams_t *channelParam );
mluis 0:66f12acb8acb 1609
mluis 0:66f12acb8acb 1610 /*!
mluis 0:66f12acb8acb 1611 * \brief LoRaMAC MIB-Get
mluis 0:66f12acb8acb 1612 *
mluis 0:66f12acb8acb 1613 * \details The mac information base service to get attributes of the LoRaMac
mluis 0:66f12acb8acb 1614 * layer.
mluis 0:66f12acb8acb 1615 *
mluis 0:66f12acb8acb 1616 * The following code-snippet shows how to use the API to get the
mluis 0:66f12acb8acb 1617 * parameter AdrEnable, defined by the enumeration type
mluis 0:66f12acb8acb 1618 * \ref MIB_ADR.
mluis 0:66f12acb8acb 1619 * \code
mluis 0:66f12acb8acb 1620 * MibRequestConfirm_t mibReq;
mluis 0:66f12acb8acb 1621 * mibReq.Type = MIB_ADR;
mluis 0:66f12acb8acb 1622 *
mluis 0:66f12acb8acb 1623 * if( LoRaMacMibGetRequestConfirm( &mibReq ) == LORAMAC_STATUS_OK )
mluis 0:66f12acb8acb 1624 * {
mluis 0:66f12acb8acb 1625 * // LoRaMAC updated the parameter mibParam.AdrEnable
mluis 0:66f12acb8acb 1626 * }
mluis 0:66f12acb8acb 1627 * \endcode
mluis 0:66f12acb8acb 1628 *
mluis 0:66f12acb8acb 1629 * \param [IN] mibRequest - MIB-GET-Request to perform. Refer to \ref MibRequestConfirm_t.
mluis 0:66f12acb8acb 1630 *
mluis 0:66f12acb8acb 1631 * \retval LoRaMacStatus_t Status of the operation. Possible returns are:
mluis 0:66f12acb8acb 1632 * \ref LORAMAC_STATUS_OK,
mluis 0:66f12acb8acb 1633 * \ref LORAMAC_STATUS_SERVICE_UNKNOWN,
mluis 0:66f12acb8acb 1634 * \ref LORAMAC_STATUS_PARAMETER_INVALID.
mluis 0:66f12acb8acb 1635 */
mluis 0:66f12acb8acb 1636 LoRaMacStatus_t LoRaMacMibGetRequestConfirm( MibRequestConfirm_t *mibGet );
mluis 0:66f12acb8acb 1637
mluis 0:66f12acb8acb 1638 /*!
mluis 0:66f12acb8acb 1639 * \brief LoRaMAC MIB-Set
mluis 0:66f12acb8acb 1640 *
mluis 0:66f12acb8acb 1641 * \details The mac information base service to set attributes of the LoRaMac
mluis 0:66f12acb8acb 1642 * layer.
mluis 0:66f12acb8acb 1643 *
mluis 0:66f12acb8acb 1644 * The following code-snippet shows how to use the API to set the
mluis 0:66f12acb8acb 1645 * parameter AdrEnable, defined by the enumeration type
mluis 0:66f12acb8acb 1646 * \ref MIB_ADR.
mluis 0:66f12acb8acb 1647 *
mluis 0:66f12acb8acb 1648 * \code
mluis 0:66f12acb8acb 1649 * MibRequestConfirm_t mibReq;
mluis 0:66f12acb8acb 1650 * mibReq.Type = MIB_ADR;
mluis 0:66f12acb8acb 1651 * mibReq.Param.AdrEnable = true;
mluis 0:66f12acb8acb 1652 *
mluis 0:66f12acb8acb 1653 * if( LoRaMacMibGetRequestConfirm( &mibReq ) == LORAMAC_STATUS_OK )
mluis 0:66f12acb8acb 1654 * {
mluis 0:66f12acb8acb 1655 * // LoRaMAC updated the parameter
mluis 0:66f12acb8acb 1656 * }
mluis 0:66f12acb8acb 1657 * \endcode
mluis 0:66f12acb8acb 1658 *
mluis 0:66f12acb8acb 1659 * \param [IN] mibRequest - MIB-SET-Request to perform. Refer to \ref MibRequestConfirm_t.
mluis 0:66f12acb8acb 1660 *
mluis 0:66f12acb8acb 1661 * \retval LoRaMacStatus_t Status of the operation. Possible returns are:
mluis 0:66f12acb8acb 1662 * \ref LORAMAC_STATUS_OK,
mluis 0:66f12acb8acb 1663 * \ref LORAMAC_STATUS_BUSY,
mluis 0:66f12acb8acb 1664 * \ref LORAMAC_STATUS_SERVICE_UNKNOWN,
mluis 0:66f12acb8acb 1665 * \ref LORAMAC_STATUS_PARAMETER_INVALID.
mluis 0:66f12acb8acb 1666 */
mluis 0:66f12acb8acb 1667 LoRaMacStatus_t LoRaMacMibSetRequestConfirm( MibRequestConfirm_t *mibSet );
mluis 0:66f12acb8acb 1668
mluis 0:66f12acb8acb 1669 /*!
mluis 0:66f12acb8acb 1670 * \brief LoRaMAC MLME-Request
mluis 0:66f12acb8acb 1671 *
mluis 0:66f12acb8acb 1672 * \details The Mac layer management entity handles management services. The
mluis 0:66f12acb8acb 1673 * following code-snippet shows how to use the API to perform a
mluis 0:66f12acb8acb 1674 * network join request.
mluis 0:66f12acb8acb 1675 *
mluis 0:66f12acb8acb 1676 * \code
mluis 0:66f12acb8acb 1677 * static uint8_t DevEui[] =
mluis 0:66f12acb8acb 1678 * {
mluis 0:66f12acb8acb 1679 * 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
mluis 0:66f12acb8acb 1680 * };
mluis 0:66f12acb8acb 1681 * static uint8_t AppEui[] =
mluis 0:66f12acb8acb 1682 * {
mluis 0:66f12acb8acb 1683 * 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
mluis 0:66f12acb8acb 1684 * };
mluis 0:66f12acb8acb 1685 * static uint8_t AppKey[] =
mluis 0:66f12acb8acb 1686 * {
mluis 0:66f12acb8acb 1687 * 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6,
mluis 0:66f12acb8acb 1688 * 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C
mluis 0:66f12acb8acb 1689 * };
mluis 0:66f12acb8acb 1690 *
mluis 0:66f12acb8acb 1691 * MlmeReq_t mlmeReq;
mluis 0:66f12acb8acb 1692 * mlmeReq.Type = MLME_JOIN;
mluis 0:66f12acb8acb 1693 * mlmeReq.Req.Join.DevEui = DevEui;
mluis 0:66f12acb8acb 1694 * mlmeReq.Req.Join.AppEui = AppEui;
mluis 0:66f12acb8acb 1695 * mlmeReq.Req.Join.AppKey = AppKey;
mluis 0:66f12acb8acb 1696 *
mluis 0:66f12acb8acb 1697 * if( LoRaMacMlmeRequest( &mlmeReq ) == LORAMAC_STATUS_OK )
mluis 0:66f12acb8acb 1698 * {
mluis 0:66f12acb8acb 1699 * // Service started successfully. Waiting for the Mlme-Confirm event
mluis 0:66f12acb8acb 1700 * }
mluis 0:66f12acb8acb 1701 * \endcode
mluis 0:66f12acb8acb 1702 *
mluis 0:66f12acb8acb 1703 * \param [IN] mlmeRequest - MLME-Request to perform. Refer to \ref MlmeReq_t.
mluis 0:66f12acb8acb 1704 *
mluis 0:66f12acb8acb 1705 * \retval LoRaMacStatus_t Status of the operation. Possible returns are:
mluis 0:66f12acb8acb 1706 * \ref LORAMAC_STATUS_OK,
mluis 0:66f12acb8acb 1707 * \ref LORAMAC_STATUS_BUSY,
mluis 0:66f12acb8acb 1708 * \ref LORAMAC_STATUS_SERVICE_UNKNOWN,
mluis 0:66f12acb8acb 1709 * \ref LORAMAC_STATUS_PARAMETER_INVALID,
mluis 0:66f12acb8acb 1710 * \ref LORAMAC_STATUS_NO_NETWORK_JOINED,
mluis 0:66f12acb8acb 1711 * \ref LORAMAC_STATUS_LENGTH_ERROR,
mluis 0:66f12acb8acb 1712 * \ref LORAMAC_STATUS_DEVICE_OFF.
mluis 0:66f12acb8acb 1713 */
mluis 0:66f12acb8acb 1714 LoRaMacStatus_t LoRaMacMlmeRequest( MlmeReq_t *mlmeRequest );
mluis 0:66f12acb8acb 1715
mluis 0:66f12acb8acb 1716 /*!
mluis 0:66f12acb8acb 1717 * \brief LoRaMAC MCPS-Request
mluis 0:66f12acb8acb 1718 *
mluis 0:66f12acb8acb 1719 * \details The Mac Common Part Sublayer handles data services. The following
mluis 0:66f12acb8acb 1720 * code-snippet shows how to use the API to send an unconfirmed
mluis 0:66f12acb8acb 1721 * LoRaMAC frame.
mluis 0:66f12acb8acb 1722 *
mluis 0:66f12acb8acb 1723 * \code
mluis 0:66f12acb8acb 1724 * uint8_t myBuffer[] = { 1, 2, 3 };
mluis 0:66f12acb8acb 1725 *
mluis 0:66f12acb8acb 1726 * McpsReq_t mcpsReq;
mluis 0:66f12acb8acb 1727 * mcpsReq.Type = MCPS_UNCONFIRMED;
mluis 0:66f12acb8acb 1728 * mcpsReq.Req.Unconfirmed.fPort = 1;
mluis 0:66f12acb8acb 1729 * mcpsReq.Req.Unconfirmed.fBuffer = myBuffer;
mluis 0:66f12acb8acb 1730 * mcpsReq.Req.Unconfirmed.fBufferSize = sizeof( myBuffer );
mluis 0:66f12acb8acb 1731 *
mluis 0:66f12acb8acb 1732 * if( LoRaMacMcpsRequest( &mcpsReq ) == LORAMAC_STATUS_OK )
mluis 0:66f12acb8acb 1733 * {
mluis 0:66f12acb8acb 1734 * // Service started successfully. Waiting for the MCPS-Confirm event
mluis 0:66f12acb8acb 1735 * }
mluis 0:66f12acb8acb 1736 * \endcode
mluis 0:66f12acb8acb 1737 *
mluis 0:66f12acb8acb 1738 * \param [IN] mcpsRequest - MCPS-Request to perform. Refer to \ref McpsReq_t.
mluis 0:66f12acb8acb 1739 *
mluis 0:66f12acb8acb 1740 * \retval LoRaMacStatus_t Status of the operation. Possible returns are:
mluis 0:66f12acb8acb 1741 * \ref LORAMAC_STATUS_OK,
mluis 0:66f12acb8acb 1742 * \ref LORAMAC_STATUS_BUSY,
mluis 0:66f12acb8acb 1743 * \ref LORAMAC_STATUS_SERVICE_UNKNOWN,
mluis 0:66f12acb8acb 1744 * \ref LORAMAC_STATUS_PARAMETER_INVALID,
mluis 0:66f12acb8acb 1745 * \ref LORAMAC_STATUS_NO_NETWORK_JOINED,
mluis 0:66f12acb8acb 1746 * \ref LORAMAC_STATUS_LENGTH_ERROR,
mluis 0:66f12acb8acb 1747 * \ref LORAMAC_STATUS_DEVICE_OFF.
mluis 0:66f12acb8acb 1748 */
mluis 0:66f12acb8acb 1749 LoRaMacStatus_t LoRaMacMcpsRequest( McpsReq_t *mcpsRequest );
mluis 0:66f12acb8acb 1750
mluis 0:66f12acb8acb 1751 /*! \} defgroup LORAMAC */
mluis 0:66f12acb8acb 1752
mluis 0:66f12acb8acb 1753 #endif // __LORAMAC_H__