LoRaWAN MAC layer implementation

Dependents:   LoRaWAN-demo-72_tjm LoRaWAN-demo-72_jlc LoRaWAN-demo-elmo frdm_LoRa_Connect_Woodstream_Demo_tjm ... more

LoRAWAN-lib is a port of the GitHub LoRaMac-node 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 Mar 14 09:09:54 2016 +0000
Revision:
3:b9d87593a8ae
Parent:
2:14a5d6ad92d5
Child:
4:37c12dbc8dc7
Synchronized with https://github.com/Lora-net/LoRaMac-node git revision 5a25e2f1593bc382200e848e6db967d1c4550021

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