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:
Mon Apr 24 14:11:47 2017 +0000
Revision:
2:76f59096e3a7
Parent:
1:4820e04b066c
WARNING: API timings changed from micro-seconds to milliseconds; Synchronized with https://github.com/Lora-net/LoRaMac-node git revision c82a25f9c5cc746dc2be1f8ed7f76c3707975ab2; ;

Who changed what in which revision?

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