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:
Thu Jun 02 07:58:35 2016 +0000
Revision:
0:66f12acb8acb
Child:
1:4820e04b066c
Synchronized with https://github.com/Lora-net/LoRaMac-node develop branch git revision 8391d0092863c1522c395fe7e6305706a98bb11e

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