Fork of Semtech LoRaWAN stack

Fork of LoRaWAN-lib by canuck lehead

Committer:
Shaun Nelson
Date:
Tue Aug 08 10:01:55 2017 -0400
Revision:
35:657e84889228
Parent:
32:26002607de9c
Child:
38:182ba91524e4
Add Stack major,minor, and point version. Stack version is used by the lorawan
stack class to determine what is supported

Who changed what in which revision?

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