Fork of Semtech LoRaWAN stack

Fork of LoRaWAN-lib by canuck lehead

Committer:
mluis
Date:
Fri May 13 14:51:50 2016 +0000
Revision:
4:37c12dbc8dc7
Parent:
3:b9d87593a8ae
Child:
7:c16969e0f70f
Child:
8:4816c8449bf2
Synchronized with https://github.com/Lora-net/LoRaMac-node git revision 55d16ca8949c09ee241c87b7600e2a8bc90d3743

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 4:37c12dbc8dc7 483 /*!
mluis 4:37c12dbc8dc7 484 * Structure containing single access to bits
mluis 4:37c12dbc8dc7 485 */
mluis 2:14a5d6ad92d5 486 struct sCtrlBits
mluis 0:91d1a7783bb9 487 {
mluis 2:14a5d6ad92d5 488 /*!
mluis 2:14a5d6ad92d5 489 * Frame options length
mluis 2:14a5d6ad92d5 490 */
mluis 0:91d1a7783bb9 491 uint8_t FOptsLen : 4;
mluis 2:14a5d6ad92d5 492 /*!
mluis 2:14a5d6ad92d5 493 * Frame pending bit
mluis 2:14a5d6ad92d5 494 */
mluis 0:91d1a7783bb9 495 uint8_t FPending : 1;
mluis 2:14a5d6ad92d5 496 /*!
mluis 2:14a5d6ad92d5 497 * Message acknowledge bit
mluis 2:14a5d6ad92d5 498 */
mluis 0:91d1a7783bb9 499 uint8_t Ack : 1;
mluis 2:14a5d6ad92d5 500 /*!
mluis 2:14a5d6ad92d5 501 * ADR acknowledgment request bit
mluis 2:14a5d6ad92d5 502 */
mluis 0:91d1a7783bb9 503 uint8_t AdrAckReq : 1;
mluis 2:14a5d6ad92d5 504 /*!
mluis 2:14a5d6ad92d5 505 * ADR control in frame header
mluis 2:14a5d6ad92d5 506 */
mluis 0:91d1a7783bb9 507 uint8_t Adr : 1;
mluis 0:91d1a7783bb9 508 }Bits;
mluis 0:91d1a7783bb9 509 }LoRaMacFrameCtrl_t;
mluis 0:91d1a7783bb9 510
mluis 0:91d1a7783bb9 511 /*!
mluis 2:14a5d6ad92d5 512 * Enumeration containing the status of the operation of a MAC service
mluis 0:91d1a7783bb9 513 */
mluis 2:14a5d6ad92d5 514 typedef enum eLoRaMacEventInfoStatus
mluis 0:91d1a7783bb9 515 {
mluis 2:14a5d6ad92d5 516 /*!
mluis 2:14a5d6ad92d5 517 * Service performed successfully
mluis 2:14a5d6ad92d5 518 */
mluis 0:91d1a7783bb9 519 LORAMAC_EVENT_INFO_STATUS_OK = 0,
mluis 2:14a5d6ad92d5 520 /*!
mluis 2:14a5d6ad92d5 521 * An error occured during the execution of the service
mluis 2:14a5d6ad92d5 522 */
mluis 0:91d1a7783bb9 523 LORAMAC_EVENT_INFO_STATUS_ERROR,
mluis 2:14a5d6ad92d5 524 /*!
mluis 2:14a5d6ad92d5 525 * A Tx timeouit occured
mluis 2:14a5d6ad92d5 526 */
mluis 0:91d1a7783bb9 527 LORAMAC_EVENT_INFO_STATUS_TX_TIMEOUT,
mluis 2:14a5d6ad92d5 528 /*!
mluis 2:14a5d6ad92d5 529 * An Rx timeout occured on receive window 2
mluis 2:14a5d6ad92d5 530 */
mluis 0:91d1a7783bb9 531 LORAMAC_EVENT_INFO_STATUS_RX2_TIMEOUT,
mluis 2:14a5d6ad92d5 532 /*!
mluis 2:14a5d6ad92d5 533 * An Rx error occured on receive window 2
mluis 2:14a5d6ad92d5 534 */
mluis 0:91d1a7783bb9 535 LORAMAC_EVENT_INFO_STATUS_RX2_ERROR,
mluis 2:14a5d6ad92d5 536 /*!
mluis 2:14a5d6ad92d5 537 * An error occured in the join procedure
mluis 2:14a5d6ad92d5 538 */
mluis 0:91d1a7783bb9 539 LORAMAC_EVENT_INFO_STATUS_JOIN_FAIL,
mluis 2:14a5d6ad92d5 540 /*!
mluis 2:14a5d6ad92d5 541 * A frame with an invalid downlink counter was received. The
mluis 2:14a5d6ad92d5 542 * downlink counter of the frame was equal to the local copy
mluis 2:14a5d6ad92d5 543 * of the downlink counter of the node.
mluis 2:14a5d6ad92d5 544 */
mluis 2:14a5d6ad92d5 545 LORAMAC_EVENT_INFO_STATUS_DOWNLINK_REPEATED,
mluis 2:14a5d6ad92d5 546 /*!
mluis 4:37c12dbc8dc7 547 * The node has lost MAX_FCNT_GAP or more frames.
mluis 4:37c12dbc8dc7 548 */
mluis 4:37c12dbc8dc7 549 LORAMAC_EVENT_INFO_STATUS_DOWNLINK_TOO_MANY_FRAMES_LOSS,
mluis 4:37c12dbc8dc7 550 /*!
mluis 2:14a5d6ad92d5 551 * An address error occured
mluis 2:14a5d6ad92d5 552 */
mluis 0:91d1a7783bb9 553 LORAMAC_EVENT_INFO_STATUS_ADDRESS_FAIL,
mluis 2:14a5d6ad92d5 554 /*!
mluis 2:14a5d6ad92d5 555 * message integrity check failure
mluis 2:14a5d6ad92d5 556 */
mluis 0:91d1a7783bb9 557 LORAMAC_EVENT_INFO_STATUS_MIC_FAIL,
mluis 0:91d1a7783bb9 558 }LoRaMacEventInfoStatus_t;
mluis 0:91d1a7783bb9 559
mluis 0:91d1a7783bb9 560 /*!
mluis 2:14a5d6ad92d5 561 * LoRaMac tx/rx operation state
mluis 2:14a5d6ad92d5 562 */
mluis 2:14a5d6ad92d5 563 typedef union eLoRaMacFlags_t
mluis 2:14a5d6ad92d5 564 {
mluis 2:14a5d6ad92d5 565 /*!
mluis 2:14a5d6ad92d5 566 * Byte-access to the bits
mluis 2:14a5d6ad92d5 567 */
mluis 2:14a5d6ad92d5 568 uint8_t Value;
mluis 4:37c12dbc8dc7 569 /*!
mluis 4:37c12dbc8dc7 570 * Structure containing single access to bits
mluis 4:37c12dbc8dc7 571 */
mluis 2:14a5d6ad92d5 572 struct sMacFlagBits
mluis 2:14a5d6ad92d5 573 {
mluis 2:14a5d6ad92d5 574 /*!
mluis 2:14a5d6ad92d5 575 * MCPS-Req pending
mluis 2:14a5d6ad92d5 576 */
mluis 2:14a5d6ad92d5 577 uint8_t McpsReq : 1;
mluis 2:14a5d6ad92d5 578 /*!
mluis 2:14a5d6ad92d5 579 * MCPS-Ind pending
mluis 2:14a5d6ad92d5 580 */
mluis 2:14a5d6ad92d5 581 uint8_t McpsInd : 1;
mluis 2:14a5d6ad92d5 582 /*!
mluis 2:14a5d6ad92d5 583 * MLME-Req pending
mluis 2:14a5d6ad92d5 584 */
mluis 2:14a5d6ad92d5 585 uint8_t MlmeReq : 1;
mluis 2:14a5d6ad92d5 586 /*!
mluis 2:14a5d6ad92d5 587 * MAC cycle done
mluis 2:14a5d6ad92d5 588 */
mluis 2:14a5d6ad92d5 589 uint8_t MacDone : 1;
mluis 2:14a5d6ad92d5 590 }Bits;
mluis 2:14a5d6ad92d5 591 }LoRaMacFlags_t;
mluis 2:14a5d6ad92d5 592
mluis 2:14a5d6ad92d5 593 /*!
mluis 2:14a5d6ad92d5 594 *
mluis 2:14a5d6ad92d5 595 * \brief LoRaMAC data services
mluis 2:14a5d6ad92d5 596 *
mluis 2:14a5d6ad92d5 597 * \details The following table list the primitives which are supported by the
mluis 2:14a5d6ad92d5 598 * specific MAC data service:
mluis 2:14a5d6ad92d5 599 *
mluis 2:14a5d6ad92d5 600 * Name | Request | Indication | Response | Confirm
mluis 2:14a5d6ad92d5 601 * --------------------- | :-----: | :--------: | :------: | :-----:
mluis 2:14a5d6ad92d5 602 * \ref MCPS_UNCONFIRMED | YES | YES | NO | YES
mluis 2:14a5d6ad92d5 603 * \ref MCPS_CONFIRMED | YES | YES | NO | YES
mluis 2:14a5d6ad92d5 604 * \ref MCPS_MULTICAST | NO | YES | NO | NO
mluis 2:14a5d6ad92d5 605 * \ref MCPS_PROPRIETARY | YES | YES | NO | YES
mluis 2:14a5d6ad92d5 606 *
mluis 2:14a5d6ad92d5 607 * The following table provides links to the function implementations of the
mluis 2:14a5d6ad92d5 608 * related MCPS primitives:
mluis 2:14a5d6ad92d5 609 *
mluis 2:14a5d6ad92d5 610 * Primitive | Function
mluis 2:14a5d6ad92d5 611 * ---------------- | :---------------------:
mluis 2:14a5d6ad92d5 612 * MCPS-Request | \ref LoRaMacMlmeRequest
mluis 2:14a5d6ad92d5 613 * MCPS-Confirm | MacMcpsConfirm in \ref LoRaMacPrimitives_t
mluis 2:14a5d6ad92d5 614 * MCPS-Indication | MacMcpsIndication in \ref LoRaMacPrimitives_t
mluis 2:14a5d6ad92d5 615 */
mluis 2:14a5d6ad92d5 616 typedef enum eMcps
mluis 2:14a5d6ad92d5 617 {
mluis 2:14a5d6ad92d5 618 /*!
mluis 2:14a5d6ad92d5 619 * Unconfirmed LoRaMAC frame
mluis 2:14a5d6ad92d5 620 */
mluis 2:14a5d6ad92d5 621 MCPS_UNCONFIRMED,
mluis 2:14a5d6ad92d5 622 /*!
mluis 2:14a5d6ad92d5 623 * Confirmed LoRaMAC frame
mluis 2:14a5d6ad92d5 624 */
mluis 2:14a5d6ad92d5 625 MCPS_CONFIRMED,
mluis 2:14a5d6ad92d5 626 /*!
mluis 2:14a5d6ad92d5 627 * Multicast LoRaMAC frame
mluis 2:14a5d6ad92d5 628 */
mluis 2:14a5d6ad92d5 629 MCPS_MULTICAST,
mluis 2:14a5d6ad92d5 630 /*!
mluis 2:14a5d6ad92d5 631 * Proprietary frame
mluis 2:14a5d6ad92d5 632 */
mluis 2:14a5d6ad92d5 633 MCPS_PROPRIETARY,
mluis 2:14a5d6ad92d5 634 }Mcps_t;
mluis 2:14a5d6ad92d5 635
mluis 2:14a5d6ad92d5 636 /*!
mluis 2:14a5d6ad92d5 637 * LoRaMAC MCPS-Request for an unconfirmed frame
mluis 2:14a5d6ad92d5 638 */
mluis 2:14a5d6ad92d5 639 typedef struct sMcpsReqUnconfirmed
mluis 2:14a5d6ad92d5 640 {
mluis 2:14a5d6ad92d5 641 /*!
mluis 2:14a5d6ad92d5 642 * Frame port field. Must be set if the payload is not empty. Use the
mluis 2:14a5d6ad92d5 643 * application specific frame port values: [1...223]
mluis 2:14a5d6ad92d5 644 *
mluis 2:14a5d6ad92d5 645 * LoRaWAN Specification V1.0, chapter 4.3.2
mluis 2:14a5d6ad92d5 646 */
mluis 2:14a5d6ad92d5 647 uint8_t fPort;
mluis 2:14a5d6ad92d5 648 /*!
mluis 2:14a5d6ad92d5 649 * Pointer to the buffer of the frame payload
mluis 2:14a5d6ad92d5 650 */
mluis 2:14a5d6ad92d5 651 void *fBuffer;
mluis 2:14a5d6ad92d5 652 /*!
mluis 2:14a5d6ad92d5 653 * Size of the frame payload
mluis 2:14a5d6ad92d5 654 */
mluis 2:14a5d6ad92d5 655 uint16_t fBufferSize;
mluis 2:14a5d6ad92d5 656 /*!
mluis 2:14a5d6ad92d5 657 * Uplink datarate, if ADR is off
mluis 2:14a5d6ad92d5 658 */
mluis 2:14a5d6ad92d5 659 int8_t Datarate;
mluis 2:14a5d6ad92d5 660 }McpsReqUnconfirmed_t;
mluis 2:14a5d6ad92d5 661
mluis 2:14a5d6ad92d5 662 /*!
mluis 2:14a5d6ad92d5 663 * LoRaMAC MCPS-Request for a confirmed frame
mluis 2:14a5d6ad92d5 664 */
mluis 2:14a5d6ad92d5 665 typedef struct sMcpsReqConfirmed
mluis 2:14a5d6ad92d5 666 {
mluis 2:14a5d6ad92d5 667 /*!
mluis 2:14a5d6ad92d5 668 * Frame port field. Must be set if the payload is not empty. Use the
mluis 2:14a5d6ad92d5 669 * application specific frame port values: [1...223]
mluis 2:14a5d6ad92d5 670 *
mluis 2:14a5d6ad92d5 671 * LoRaWAN Specification V1.0, chapter 4.3.2
mluis 2:14a5d6ad92d5 672 */
mluis 2:14a5d6ad92d5 673 uint8_t fPort;
mluis 2:14a5d6ad92d5 674 /*!
mluis 2:14a5d6ad92d5 675 * Pointer to the buffer of the frame payload
mluis 2:14a5d6ad92d5 676 */
mluis 2:14a5d6ad92d5 677 void *fBuffer;
mluis 2:14a5d6ad92d5 678 /*!
mluis 2:14a5d6ad92d5 679 * Size of the frame payload
mluis 2:14a5d6ad92d5 680 */
mluis 2:14a5d6ad92d5 681 uint16_t fBufferSize;
mluis 2:14a5d6ad92d5 682 /*!
mluis 2:14a5d6ad92d5 683 * Uplink datarate, if ADR is off
mluis 2:14a5d6ad92d5 684 */
mluis 2:14a5d6ad92d5 685 int8_t Datarate;
mluis 2:14a5d6ad92d5 686 /*!
mluis 3:b9d87593a8ae 687 * Number of trials to transmit the frame, if the LoRaMAC layer did not
mluis 3:b9d87593a8ae 688 * receive an acknowledgment. The MAC performs a datarate adaptation,
mluis 3:b9d87593a8ae 689 * according to the LoRaWAN Specification V1.0, chapter 18.4, according
mluis 3:b9d87593a8ae 690 * to the following table:
mluis 3:b9d87593a8ae 691 *
mluis 3:b9d87593a8ae 692 * Transmission nb | Data Rate
mluis 3:b9d87593a8ae 693 * ----------------|-----------
mluis 3:b9d87593a8ae 694 * 1 (first) | DR
mluis 3:b9d87593a8ae 695 * 2 | DR
mluis 3:b9d87593a8ae 696 * 3 | max(DR-1,0)
mluis 3:b9d87593a8ae 697 * 4 | max(DR-1,0)
mluis 3:b9d87593a8ae 698 * 5 | max(DR-2,0)
mluis 3:b9d87593a8ae 699 * 6 | max(DR-2,0)
mluis 3:b9d87593a8ae 700 * 7 | max(DR-3,0)
mluis 3:b9d87593a8ae 701 * 8 | max(DR-3,0)
mluis 3:b9d87593a8ae 702 *
mluis 3:b9d87593a8ae 703 * Note, that if NbTrials is set to 1 or 2, the MAC will not decrease
mluis 3:b9d87593a8ae 704 * the datarate, in case the LoRaMAC layer did not receive an acknowledgment
mluis 2:14a5d6ad92d5 705 */
mluis 3:b9d87593a8ae 706 uint8_t NbTrials;
mluis 2:14a5d6ad92d5 707 }McpsReqConfirmed_t;
mluis 2:14a5d6ad92d5 708
mluis 2:14a5d6ad92d5 709 /*!
mluis 2:14a5d6ad92d5 710 * LoRaMAC MCPS-Request for a proprietary frame
mluis 2:14a5d6ad92d5 711 */
mluis 2:14a5d6ad92d5 712 typedef struct sMcpsReqProprietary
mluis 2:14a5d6ad92d5 713 {
mluis 2:14a5d6ad92d5 714 /*!
mluis 2:14a5d6ad92d5 715 * Pointer to the buffer of the frame payload
mluis 2:14a5d6ad92d5 716 */
mluis 2:14a5d6ad92d5 717 void *fBuffer;
mluis 2:14a5d6ad92d5 718 /*!
mluis 2:14a5d6ad92d5 719 * Size of the frame payload
mluis 2:14a5d6ad92d5 720 */
mluis 2:14a5d6ad92d5 721 uint16_t fBufferSize;
mluis 2:14a5d6ad92d5 722 /*!
mluis 2:14a5d6ad92d5 723 * Uplink datarate, if ADR is off
mluis 2:14a5d6ad92d5 724 */
mluis 2:14a5d6ad92d5 725 int8_t Datarate;
mluis 2:14a5d6ad92d5 726 }McpsReqProprietary_t;
mluis 2:14a5d6ad92d5 727
mluis 2:14a5d6ad92d5 728 /*!
mluis 2:14a5d6ad92d5 729 * LoRaMAC MCPS-Request structure
mluis 2:14a5d6ad92d5 730 */
mluis 2:14a5d6ad92d5 731 typedef struct sMcpsReq
mluis 2:14a5d6ad92d5 732 {
mluis 2:14a5d6ad92d5 733 /*!
mluis 2:14a5d6ad92d5 734 * MCPS-Request type
mluis 2:14a5d6ad92d5 735 */
mluis 2:14a5d6ad92d5 736 Mcps_t Type;
mluis 2:14a5d6ad92d5 737
mluis 2:14a5d6ad92d5 738 /*!
mluis 2:14a5d6ad92d5 739 * MCPS-Request parameters
mluis 2:14a5d6ad92d5 740 */
mluis 2:14a5d6ad92d5 741 union uMcpsParam
mluis 2:14a5d6ad92d5 742 {
mluis 2:14a5d6ad92d5 743 /*!
mluis 2:14a5d6ad92d5 744 * MCPS-Request parameters for an unconfirmed frame
mluis 2:14a5d6ad92d5 745 */
mluis 2:14a5d6ad92d5 746 McpsReqUnconfirmed_t Unconfirmed;
mluis 2:14a5d6ad92d5 747 /*!
mluis 2:14a5d6ad92d5 748 * MCPS-Request parameters for a confirmed frame
mluis 2:14a5d6ad92d5 749 */
mluis 2:14a5d6ad92d5 750 McpsReqConfirmed_t Confirmed;
mluis 2:14a5d6ad92d5 751 /*!
mluis 2:14a5d6ad92d5 752 * MCPS-Request parameters for a proprietary frame
mluis 2:14a5d6ad92d5 753 */
mluis 2:14a5d6ad92d5 754 McpsReqProprietary_t Proprietary;
mluis 2:14a5d6ad92d5 755 }Req;
mluis 2:14a5d6ad92d5 756 }McpsReq_t;
mluis 2:14a5d6ad92d5 757
mluis 2:14a5d6ad92d5 758 /*!
mluis 2:14a5d6ad92d5 759 * LoRaMAC MCPS-Confirm
mluis 0:91d1a7783bb9 760 */
mluis 2:14a5d6ad92d5 761 typedef struct sMcpsConfirm
mluis 2:14a5d6ad92d5 762 {
mluis 2:14a5d6ad92d5 763 /*!
mluis 2:14a5d6ad92d5 764 * Holds the previously performed MCPS-Request
mluis 2:14a5d6ad92d5 765 */
mluis 2:14a5d6ad92d5 766 Mcps_t McpsRequest;
mluis 2:14a5d6ad92d5 767 /*!
mluis 2:14a5d6ad92d5 768 * Status of the operation
mluis 2:14a5d6ad92d5 769 */
mluis 2:14a5d6ad92d5 770 LoRaMacEventInfoStatus_t Status;
mluis 2:14a5d6ad92d5 771 /*!
mluis 2:14a5d6ad92d5 772 * Uplink datarate
mluis 2:14a5d6ad92d5 773 */
mluis 2:14a5d6ad92d5 774 uint8_t Datarate;
mluis 2:14a5d6ad92d5 775 /*!
mluis 2:14a5d6ad92d5 776 * Transmission power
mluis 2:14a5d6ad92d5 777 */
mluis 2:14a5d6ad92d5 778 int8_t TxPower;
mluis 2:14a5d6ad92d5 779 /*!
mluis 2:14a5d6ad92d5 780 * Set if an acknowledgement was received
mluis 2:14a5d6ad92d5 781 */
mluis 2:14a5d6ad92d5 782 bool AckReceived;
mluis 2:14a5d6ad92d5 783 /*!
mluis 2:14a5d6ad92d5 784 * Provides the number of retransmissions
mluis 2:14a5d6ad92d5 785 */
mluis 2:14a5d6ad92d5 786 uint8_t NbRetries;
mluis 2:14a5d6ad92d5 787 /*!
mluis 2:14a5d6ad92d5 788 * The transmission time on air of the frame
mluis 2:14a5d6ad92d5 789 */
mluis 2:14a5d6ad92d5 790 TimerTime_t TxTimeOnAir;
mluis 2:14a5d6ad92d5 791 /*!
mluis 2:14a5d6ad92d5 792 * The uplink counter value related to the frame
mluis 2:14a5d6ad92d5 793 */
mluis 2:14a5d6ad92d5 794 uint32_t UpLinkCounter;
mluis 2:14a5d6ad92d5 795 }McpsConfirm_t;
mluis 2:14a5d6ad92d5 796
mluis 2:14a5d6ad92d5 797 /*!
mluis 2:14a5d6ad92d5 798 * LoRaMAC MCPS-Indication primitive
mluis 2:14a5d6ad92d5 799 */
mluis 2:14a5d6ad92d5 800 typedef struct sMcpsIndication
mluis 0:91d1a7783bb9 801 {
mluis 2:14a5d6ad92d5 802 /*!
mluis 2:14a5d6ad92d5 803 * MCPS-Indication type
mluis 2:14a5d6ad92d5 804 */
mluis 2:14a5d6ad92d5 805 Mcps_t McpsIndication;
mluis 2:14a5d6ad92d5 806 /*!
mluis 2:14a5d6ad92d5 807 * Status of the operation
mluis 2:14a5d6ad92d5 808 */
mluis 2:14a5d6ad92d5 809 LoRaMacEventInfoStatus_t Status;
mluis 2:14a5d6ad92d5 810 /*!
mluis 2:14a5d6ad92d5 811 * Multicast
mluis 2:14a5d6ad92d5 812 */
mluis 2:14a5d6ad92d5 813 uint8_t Multicast;
mluis 2:14a5d6ad92d5 814 /*!
mluis 2:14a5d6ad92d5 815 * Application port
mluis 2:14a5d6ad92d5 816 */
mluis 2:14a5d6ad92d5 817 uint8_t Port;
mluis 2:14a5d6ad92d5 818 /*!
mluis 2:14a5d6ad92d5 819 * Downlink datarate
mluis 2:14a5d6ad92d5 820 */
mluis 2:14a5d6ad92d5 821 uint8_t RxDatarate;
mluis 2:14a5d6ad92d5 822 /*!
mluis 2:14a5d6ad92d5 823 * Frame pending status
mluis 2:14a5d6ad92d5 824 */
mluis 2:14a5d6ad92d5 825 uint8_t FramePending;
mluis 2:14a5d6ad92d5 826 /*!
mluis 2:14a5d6ad92d5 827 * Pointer to the received data stream
mluis 2:14a5d6ad92d5 828 */
mluis 2:14a5d6ad92d5 829 uint8_t *Buffer;
mluis 2:14a5d6ad92d5 830 /*!
mluis 2:14a5d6ad92d5 831 * Size of the received data stream
mluis 2:14a5d6ad92d5 832 */
mluis 2:14a5d6ad92d5 833 uint8_t BufferSize;
mluis 2:14a5d6ad92d5 834 /*!
mluis 2:14a5d6ad92d5 835 * Indicates, if data is available
mluis 2:14a5d6ad92d5 836 */
mluis 2:14a5d6ad92d5 837 bool RxData;
mluis 2:14a5d6ad92d5 838 /*!
mluis 2:14a5d6ad92d5 839 * Rssi of the received packet
mluis 2:14a5d6ad92d5 840 */
mluis 2:14a5d6ad92d5 841 int16_t Rssi;
mluis 2:14a5d6ad92d5 842 /*!
mluis 2:14a5d6ad92d5 843 * Snr of the received packet
mluis 2:14a5d6ad92d5 844 */
mluis 2:14a5d6ad92d5 845 uint8_t Snr;
mluis 2:14a5d6ad92d5 846 /*!
mluis 2:14a5d6ad92d5 847 * Receive window
mluis 2:14a5d6ad92d5 848 *
mluis 2:14a5d6ad92d5 849 * [0: Rx window 1, 1: Rx window 2]
mluis 2:14a5d6ad92d5 850 */
mluis 2:14a5d6ad92d5 851 uint8_t RxSlot;
mluis 2:14a5d6ad92d5 852 /*!
mluis 2:14a5d6ad92d5 853 * Set if an acknowledgement was received
mluis 2:14a5d6ad92d5 854 */
mluis 2:14a5d6ad92d5 855 bool AckReceived;
mluis 2:14a5d6ad92d5 856 /*!
mluis 2:14a5d6ad92d5 857 * The downlink counter value for the received frame
mluis 2:14a5d6ad92d5 858 */
mluis 2:14a5d6ad92d5 859 uint32_t DownLinkCounter;
mluis 2:14a5d6ad92d5 860 }McpsIndication_t;
mluis 2:14a5d6ad92d5 861
mluis 2:14a5d6ad92d5 862 /*!
mluis 2:14a5d6ad92d5 863 * \brief LoRaMAC management services
mluis 2:14a5d6ad92d5 864 *
mluis 2:14a5d6ad92d5 865 * \details The following table list the primitives which are supported by the
mluis 2:14a5d6ad92d5 866 * specific MAC management service:
mluis 2:14a5d6ad92d5 867 *
mluis 2:14a5d6ad92d5 868 * Name | Request | Indication | Response | Confirm
mluis 2:14a5d6ad92d5 869 * --------------------- | :-----: | :--------: | :------: | :-----:
mluis 2:14a5d6ad92d5 870 * \ref MLME_JOIN | YES | NO | NO | YES
mluis 2:14a5d6ad92d5 871 * \ref MLME_LINK_CHECK | YES | NO | NO | YES
mluis 2:14a5d6ad92d5 872 *
mluis 2:14a5d6ad92d5 873 * The following table provides links to the function implementations of the
mluis 2:14a5d6ad92d5 874 * related MLME primitives.
mluis 2:14a5d6ad92d5 875 *
mluis 2:14a5d6ad92d5 876 * Primitive | Function
mluis 2:14a5d6ad92d5 877 * ---------------- | :---------------------:
mluis 2:14a5d6ad92d5 878 * MLME-Request | \ref LoRaMacMlmeRequest
mluis 2:14a5d6ad92d5 879 * MLME-Confirm | MacMlmeConfirm in \ref LoRaMacPrimitives_t
mluis 2:14a5d6ad92d5 880 */
mluis 2:14a5d6ad92d5 881 typedef enum eMlme
mluis 2:14a5d6ad92d5 882 {
mluis 2:14a5d6ad92d5 883 /*!
mluis 2:14a5d6ad92d5 884 * Initiates the Over-the-Air activation
mluis 2:14a5d6ad92d5 885 *
mluis 2:14a5d6ad92d5 886 * LoRaWAN Specification V1.0, chapter 6.2
mluis 2:14a5d6ad92d5 887 */
mluis 2:14a5d6ad92d5 888 MLME_JOIN,
mluis 2:14a5d6ad92d5 889 /*!
mluis 2:14a5d6ad92d5 890 * LinkCheckReq - Connectivity validation
mluis 2:14a5d6ad92d5 891 *
mluis 2:14a5d6ad92d5 892 * LoRaWAN Specification V1.0, chapter 5, table 4
mluis 2:14a5d6ad92d5 893 */
mluis 2:14a5d6ad92d5 894 MLME_LINK_CHECK,
mluis 2:14a5d6ad92d5 895 }Mlme_t;
mluis 2:14a5d6ad92d5 896
mluis 2:14a5d6ad92d5 897 /*!
mluis 2:14a5d6ad92d5 898 * LoRaMAC MLME-Request for the join service
mluis 2:14a5d6ad92d5 899 */
mluis 2:14a5d6ad92d5 900 typedef struct sMlmeReqJoin
mluis 2:14a5d6ad92d5 901 {
mluis 2:14a5d6ad92d5 902 /*!
mluis 2:14a5d6ad92d5 903 * Globally unique end-device identifier
mluis 2:14a5d6ad92d5 904 *
mluis 2:14a5d6ad92d5 905 * LoRaWAN Specification V1.0, chapter 6.2.1
mluis 2:14a5d6ad92d5 906 */
mluis 2:14a5d6ad92d5 907 uint8_t *DevEui;
mluis 2:14a5d6ad92d5 908 /*!
mluis 2:14a5d6ad92d5 909 * Application identifier
mluis 2:14a5d6ad92d5 910 *
mluis 2:14a5d6ad92d5 911 * LoRaWAN Specification V1.0, chapter 6.1.2
mluis 2:14a5d6ad92d5 912 */
mluis 2:14a5d6ad92d5 913 uint8_t *AppEui;
mluis 2:14a5d6ad92d5 914 /*!
mluis 2:14a5d6ad92d5 915 * AES-128 application key
mluis 2:14a5d6ad92d5 916 *
mluis 2:14a5d6ad92d5 917 * LoRaWAN Specification V1.0, chapter 6.2.2
mluis 2:14a5d6ad92d5 918 */
mluis 2:14a5d6ad92d5 919 uint8_t *AppKey;
mluis 2:14a5d6ad92d5 920 }MlmeReqJoin_t;
mluis 2:14a5d6ad92d5 921
mluis 2:14a5d6ad92d5 922 /*!
mluis 4:37c12dbc8dc7 923 * LoRaMAC MLME-Request structure
mluis 2:14a5d6ad92d5 924 */
mluis 2:14a5d6ad92d5 925 typedef struct sMlmeReq
mluis 2:14a5d6ad92d5 926 {
mluis 2:14a5d6ad92d5 927 /*!
mluis 2:14a5d6ad92d5 928 * MLME-Request type
mluis 2:14a5d6ad92d5 929 */
mluis 2:14a5d6ad92d5 930 Mlme_t Type;
mluis 2:14a5d6ad92d5 931
mluis 2:14a5d6ad92d5 932 /*!
mluis 2:14a5d6ad92d5 933 * MLME-Request parameters
mluis 2:14a5d6ad92d5 934 */
mluis 2:14a5d6ad92d5 935 union uMlmeParam
mluis 2:14a5d6ad92d5 936 {
mluis 2:14a5d6ad92d5 937 /*!
mluis 2:14a5d6ad92d5 938 * MLME-Request parameters for a join request
mluis 2:14a5d6ad92d5 939 */
mluis 2:14a5d6ad92d5 940 MlmeReqJoin_t Join;
mluis 2:14a5d6ad92d5 941 }Req;
mluis 2:14a5d6ad92d5 942 }MlmeReq_t;
mluis 2:14a5d6ad92d5 943
mluis 2:14a5d6ad92d5 944 /*!
mluis 2:14a5d6ad92d5 945 * LoRaMAC MLME-Confirm primitive
mluis 2:14a5d6ad92d5 946 */
mluis 2:14a5d6ad92d5 947 typedef struct sMlmeConfirm
mluis 2:14a5d6ad92d5 948 {
mluis 2:14a5d6ad92d5 949 /*!
mluis 2:14a5d6ad92d5 950 * Holds the previously performed MLME-Request
mluis 2:14a5d6ad92d5 951 */
mluis 2:14a5d6ad92d5 952 Mlme_t MlmeRequest;
mluis 2:14a5d6ad92d5 953 /*!
mluis 2:14a5d6ad92d5 954 * Status of the operation
mluis 2:14a5d6ad92d5 955 */
mluis 0:91d1a7783bb9 956 LoRaMacEventInfoStatus_t Status;
mluis 2:14a5d6ad92d5 957 /*!
mluis 2:14a5d6ad92d5 958 * The transmission time on air of the frame
mluis 2:14a5d6ad92d5 959 */
mluis 2:14a5d6ad92d5 960 TimerTime_t TxTimeOnAir;
mluis 2:14a5d6ad92d5 961 /*!
mluis 2:14a5d6ad92d5 962 * Demodulation margin. Contains the link margin [dB] of the last
mluis 2:14a5d6ad92d5 963 * successfully received LinkCheckReq
mluis 2:14a5d6ad92d5 964 */
mluis 0:91d1a7783bb9 965 uint8_t DemodMargin;
mluis 2:14a5d6ad92d5 966 /*!
mluis 2:14a5d6ad92d5 967 * Number of gateways which received the last LinkCheckReq
mluis 2:14a5d6ad92d5 968 */
mluis 0:91d1a7783bb9 969 uint8_t NbGateways;
mluis 2:14a5d6ad92d5 970 }MlmeConfirm_t;
mluis 2:14a5d6ad92d5 971
mluis 2:14a5d6ad92d5 972 /*!
mluis 2:14a5d6ad92d5 973 * LoRa Mac Information Base (MIB)
mluis 2:14a5d6ad92d5 974 *
mluis 2:14a5d6ad92d5 975 * The following table lists the MIB parameters and the related attributes:
mluis 2:14a5d6ad92d5 976 *
mluis 2:14a5d6ad92d5 977 * Attribute | Get | Set
mluis 2:14a5d6ad92d5 978 * --------------------------------- | :-: | :-:
mluis 2:14a5d6ad92d5 979 * \ref MIB_DEVICE_CLASS | YES | YES
mluis 2:14a5d6ad92d5 980 * \ref MIB_NETWORK_JOINED | YES | YES
mluis 2:14a5d6ad92d5 981 * \ref MIB_ADR | YES | YES
mluis 2:14a5d6ad92d5 982 * \ref MIB_NET_ID | YES | YES
mluis 2:14a5d6ad92d5 983 * \ref MIB_DEV_ADDR | YES | YES
mluis 2:14a5d6ad92d5 984 * \ref MIB_NWK_SKEY | YES | YES
mluis 2:14a5d6ad92d5 985 * \ref MIB_APP_SKEY | YES | YES
mluis 2:14a5d6ad92d5 986 * \ref MIB_PUBLIC_NETWORK | YES | YES
mluis 3:b9d87593a8ae 987 * \ref MIB_REPEATER_SUPPORT | YES | YES
mluis 2:14a5d6ad92d5 988 * \ref MIB_CHANNELS | YES | NO
mluis 2:14a5d6ad92d5 989 * \ref MIB_RX2_CHANNEL | YES | YES
mluis 2:14a5d6ad92d5 990 * \ref MIB_CHANNELS_MASK | YES | YES
mluis 2:14a5d6ad92d5 991 * \ref MIB_CHANNELS_NB_REP | YES | YES
mluis 2:14a5d6ad92d5 992 * \ref MIB_MAX_RX_WINDOW_DURATION | YES | YES
mluis 2:14a5d6ad92d5 993 * \ref MIB_RECEIVE_DELAY_1 | YES | YES
mluis 2:14a5d6ad92d5 994 * \ref MIB_RECEIVE_DELAY_2 | YES | YES
mluis 2:14a5d6ad92d5 995 * \ref MIB_JOIN_ACCEPT_DELAY_1 | YES | YES
mluis 2:14a5d6ad92d5 996 * \ref MIB_JOIN_ACCEPT_DELAY_2 | YES | YES
mluis 2:14a5d6ad92d5 997 * \ref MIB_CHANNELS_DATARATE | YES | YES
mluis 4:37c12dbc8dc7 998 * \ref MIB_CHANNELS_DEFAULT_DATARATE| YES | YES
mluis 2:14a5d6ad92d5 999 * \ref MIB_CHANNELS_TX_POWER | YES | YES
mluis 4:37c12dbc8dc7 1000 * \ref MIB_UPLINK_COUNTER | YES | YES
mluis 4:37c12dbc8dc7 1001 * \ref MIB_DOWNLINK_COUNTER | YES | YES
mluis 2:14a5d6ad92d5 1002 * \ref MIB_MULTICAST_CHANNEL | YES | NO
mluis 2:14a5d6ad92d5 1003 *
mluis 2:14a5d6ad92d5 1004 * The following table provides links to the function implementations of the
mluis 2:14a5d6ad92d5 1005 * related MIB primitives:
mluis 2:14a5d6ad92d5 1006 *
mluis 2:14a5d6ad92d5 1007 * Primitive | Function
mluis 2:14a5d6ad92d5 1008 * ---------------- | :---------------------:
mluis 2:14a5d6ad92d5 1009 * MIB-Set | \ref LoRaMacMibSetRequestConfirm
mluis 2:14a5d6ad92d5 1010 * MIB-Get | \ref LoRaMacMibGetRequestConfirm
mluis 2:14a5d6ad92d5 1011 */
mluis 2:14a5d6ad92d5 1012 typedef enum eMib
mluis 2:14a5d6ad92d5 1013 {
mluis 2:14a5d6ad92d5 1014 /*!
mluis 2:14a5d6ad92d5 1015 * LoRaWAN device class
mluis 2:14a5d6ad92d5 1016 *
mluis 2:14a5d6ad92d5 1017 * LoRaWAN Specification V1.0
mluis 2:14a5d6ad92d5 1018 */
mluis 2:14a5d6ad92d5 1019 MIB_DEVICE_CLASS,
mluis 2:14a5d6ad92d5 1020 /*!
mluis 2:14a5d6ad92d5 1021 * LoRaWAN Network joined attribute
mluis 2:14a5d6ad92d5 1022 *
mluis 2:14a5d6ad92d5 1023 * LoRaWAN Specification V1.0
mluis 2:14a5d6ad92d5 1024 */
mluis 2:14a5d6ad92d5 1025 MIB_NETWORK_JOINED,
mluis 2:14a5d6ad92d5 1026 /*!
mluis 2:14a5d6ad92d5 1027 * Adaptive data rate
mluis 2:14a5d6ad92d5 1028 *
mluis 2:14a5d6ad92d5 1029 * LoRaWAN Specification V1.0, chapter 4.3.1.1
mluis 2:14a5d6ad92d5 1030 *
mluis 2:14a5d6ad92d5 1031 * [true: ADR enabled, false: ADR disabled]
mluis 2:14a5d6ad92d5 1032 */
mluis 2:14a5d6ad92d5 1033 MIB_ADR,
mluis 2:14a5d6ad92d5 1034 /*!
mluis 2:14a5d6ad92d5 1035 * Network identifier
mluis 2:14a5d6ad92d5 1036 *
mluis 2:14a5d6ad92d5 1037 * LoRaWAN Specification V1.0, chapter 6.2.5
mluis 2:14a5d6ad92d5 1038 */
mluis 2:14a5d6ad92d5 1039 MIB_NET_ID,
mluis 2:14a5d6ad92d5 1040 /*!
mluis 2:14a5d6ad92d5 1041 * End-device address
mluis 2:14a5d6ad92d5 1042 *
mluis 2:14a5d6ad92d5 1043 * LoRaWAN Specification V1.0, chapter 6.1.2
mluis 2:14a5d6ad92d5 1044 */
mluis 2:14a5d6ad92d5 1045 MIB_DEV_ADDR,
mluis 2:14a5d6ad92d5 1046 /*!
mluis 2:14a5d6ad92d5 1047 * Network session key
mluis 2:14a5d6ad92d5 1048 *
mluis 2:14a5d6ad92d5 1049 * LoRaWAN Specification V1.0, chapter 6.1.3
mluis 2:14a5d6ad92d5 1050 */
mluis 2:14a5d6ad92d5 1051 MIB_NWK_SKEY,
mluis 2:14a5d6ad92d5 1052 /*!
mluis 2:14a5d6ad92d5 1053 * Application session key
mluis 2:14a5d6ad92d5 1054 *
mluis 2:14a5d6ad92d5 1055 * LoRaWAN Specification V1.0, chapter 6.1.4
mluis 2:14a5d6ad92d5 1056 */
mluis 2:14a5d6ad92d5 1057 MIB_APP_SKEY,
mluis 2:14a5d6ad92d5 1058 /*!
mluis 2:14a5d6ad92d5 1059 * Set the network type to public or private
mluis 2:14a5d6ad92d5 1060 *
mluis 2:14a5d6ad92d5 1061 * LoRaWAN Specification V1.0, chapter 7
mluis 2:14a5d6ad92d5 1062 *
mluis 2:14a5d6ad92d5 1063 * [true: public network, false: private network]
mluis 2:14a5d6ad92d5 1064 */
mluis 2:14a5d6ad92d5 1065 MIB_PUBLIC_NETWORK,
mluis 2:14a5d6ad92d5 1066 /*!
mluis 2:14a5d6ad92d5 1067 * Support the operation with repeaters
mluis 2:14a5d6ad92d5 1068 *
mluis 2:14a5d6ad92d5 1069 * LoRaWAN Specification V1.0, chapter 7
mluis 2:14a5d6ad92d5 1070 *
mluis 2:14a5d6ad92d5 1071 * [true: repeater support enabled, false: repeater support disabled]
mluis 2:14a5d6ad92d5 1072 */
mluis 2:14a5d6ad92d5 1073 MIB_REPEATER_SUPPORT,
mluis 2:14a5d6ad92d5 1074 /*!
mluis 2:14a5d6ad92d5 1075 * Communication channels. A get request will return a
mluis 2:14a5d6ad92d5 1076 * pointer which references the first entry of the channel list. The
mluis 2:14a5d6ad92d5 1077 * list is of size LORA_MAX_NB_CHANNELS
mluis 2:14a5d6ad92d5 1078 *
mluis 2:14a5d6ad92d5 1079 * LoRaWAN Specification V1.0, chapter 7
mluis 2:14a5d6ad92d5 1080 */
mluis 2:14a5d6ad92d5 1081 MIB_CHANNELS,
mluis 2:14a5d6ad92d5 1082 /*!
mluis 2:14a5d6ad92d5 1083 * Set receive window 2 channel
mluis 2:14a5d6ad92d5 1084 *
mluis 2:14a5d6ad92d5 1085 * LoRaWAN Specification V1.0, chapter 3.3.2
mluis 2:14a5d6ad92d5 1086 */
mluis 2:14a5d6ad92d5 1087 MIB_RX2_CHANNEL,
mluis 2:14a5d6ad92d5 1088 /*!
mluis 2:14a5d6ad92d5 1089 * LoRaWAN channels mask
mluis 2:14a5d6ad92d5 1090 *
mluis 2:14a5d6ad92d5 1091 * LoRaWAN Specification V1.0, chapter 5.2
mluis 2:14a5d6ad92d5 1092 */
mluis 2:14a5d6ad92d5 1093 MIB_CHANNELS_MASK,
mluis 2:14a5d6ad92d5 1094 /*!
mluis 2:14a5d6ad92d5 1095 * Set the number of repetitions on a channel
mluis 2:14a5d6ad92d5 1096 *
mluis 2:14a5d6ad92d5 1097 * LoRaWAN Specification V1.0, chapter 5.2
mluis 2:14a5d6ad92d5 1098 */
mluis 2:14a5d6ad92d5 1099 MIB_CHANNELS_NB_REP,
mluis 2:14a5d6ad92d5 1100 /*!
mluis 2:14a5d6ad92d5 1101 * Maximum receive window duration in [us]
mluis 2:14a5d6ad92d5 1102 *
mluis 2:14a5d6ad92d5 1103 * LoRaWAN Specification V1.0, chapter 3.3.3
mluis 2:14a5d6ad92d5 1104 */
mluis 2:14a5d6ad92d5 1105 MIB_MAX_RX_WINDOW_DURATION,
mluis 2:14a5d6ad92d5 1106 /*!
mluis 2:14a5d6ad92d5 1107 * Receive delay 1 in [us]
mluis 2:14a5d6ad92d5 1108 *
mluis 2:14a5d6ad92d5 1109 * LoRaWAN Specification V1.0, chapter 6
mluis 2:14a5d6ad92d5 1110 */
mluis 2:14a5d6ad92d5 1111 MIB_RECEIVE_DELAY_1,
mluis 2:14a5d6ad92d5 1112 /*!
mluis 2:14a5d6ad92d5 1113 * Receive delay 2 in [us]
mluis 2:14a5d6ad92d5 1114 *
mluis 2:14a5d6ad92d5 1115 * LoRaWAN Specification V1.0, chapter 6
mluis 2:14a5d6ad92d5 1116 */
mluis 2:14a5d6ad92d5 1117 MIB_RECEIVE_DELAY_2,
mluis 2:14a5d6ad92d5 1118 /*!
mluis 2:14a5d6ad92d5 1119 * Join accept delay 1 in [us]
mluis 2:14a5d6ad92d5 1120 *
mluis 2:14a5d6ad92d5 1121 * LoRaWAN Specification V1.0, chapter 6
mluis 2:14a5d6ad92d5 1122 */
mluis 2:14a5d6ad92d5 1123 MIB_JOIN_ACCEPT_DELAY_1,
mluis 2:14a5d6ad92d5 1124 /*!
mluis 2:14a5d6ad92d5 1125 * Join accept delay 2 in [us]
mluis 2:14a5d6ad92d5 1126 *
mluis 2:14a5d6ad92d5 1127 * LoRaWAN Specification V1.0, chapter 6
mluis 2:14a5d6ad92d5 1128 */
mluis 2:14a5d6ad92d5 1129 MIB_JOIN_ACCEPT_DELAY_2,
mluis 2:14a5d6ad92d5 1130 /*!
mluis 4:37c12dbc8dc7 1131 * Default Data rate of a channel
mluis 4:37c12dbc8dc7 1132 *
mluis 4:37c12dbc8dc7 1133 * LoRaWAN Specification V1.0, chapter 7
mluis 4:37c12dbc8dc7 1134 *
mluis 4:37c12dbc8dc7 1135 * EU868 - [DR_0, DR_1, DR_2, DR_3, DR_4, DR_5, DR_6, DR_7]
mluis 4:37c12dbc8dc7 1136 *
mluis 4:37c12dbc8dc7 1137 * US915 - [DR_0, DR_1, DR_2, DR_3, DR_4, DR_8, DR_9, DR_10, DR_11, DR_12, DR_13]
mluis 4:37c12dbc8dc7 1138 */
mluis 4:37c12dbc8dc7 1139 MIB_CHANNELS_DEFAULT_DATARATE,
mluis 4:37c12dbc8dc7 1140 /*!
mluis 2:14a5d6ad92d5 1141 * Data rate of a channel
mluis 2:14a5d6ad92d5 1142 *
mluis 2:14a5d6ad92d5 1143 * LoRaWAN Specification V1.0, chapter 7
mluis 2:14a5d6ad92d5 1144 *
mluis 2:14a5d6ad92d5 1145 * EU868 - [DR_0, DR_1, DR_2, DR_3, DR_4, DR_5, DR_6, DR_7]
mluis 2:14a5d6ad92d5 1146 *
mluis 2:14a5d6ad92d5 1147 * US915 - [DR_0, DR_1, DR_2, DR_3, DR_4, DR_8, DR_9, DR_10, DR_11, DR_12, DR_13]
mluis 2:14a5d6ad92d5 1148 */
mluis 2:14a5d6ad92d5 1149 MIB_CHANNELS_DATARATE,
mluis 2:14a5d6ad92d5 1150 /*!
mluis 2:14a5d6ad92d5 1151 * Transmission power of a channel
mluis 2:14a5d6ad92d5 1152 *
mluis 2:14a5d6ad92d5 1153 * LoRaWAN Specification V1.0, chapter 7
mluis 2:14a5d6ad92d5 1154 *
mluis 2:14a5d6ad92d5 1155 * EU868 - [TX_POWER_20_DBM, TX_POWER_14_DBM, TX_POWER_11_DBM,
mluis 2:14a5d6ad92d5 1156 * TX_POWER_08_DBM, TX_POWER_05_DBM, TX_POWER_02_DBM]
mluis 2:14a5d6ad92d5 1157 *
mluis 2:14a5d6ad92d5 1158 * US915 - [TX_POWER_30_DBM, TX_POWER_28_DBM, TX_POWER_26_DBM,
mluis 2:14a5d6ad92d5 1159 * TX_POWER_24_DBM, TX_POWER_22_DBM, TX_POWER_20_DBM,
mluis 2:14a5d6ad92d5 1160 * TX_POWER_18_DBM, TX_POWER_14_DBM, TX_POWER_12_DBM,
mluis 2:14a5d6ad92d5 1161 * TX_POWER_10_DBM]
mluis 2:14a5d6ad92d5 1162 */
mluis 2:14a5d6ad92d5 1163 MIB_CHANNELS_TX_POWER,
mluis 2:14a5d6ad92d5 1164 /*!
mluis 2:14a5d6ad92d5 1165 * LoRaWAN Up-link counter
mluis 2:14a5d6ad92d5 1166 *
mluis 2:14a5d6ad92d5 1167 * LoRaWAN Specification V1.0, chapter 4.3.1.5
mluis 2:14a5d6ad92d5 1168 */
mluis 2:14a5d6ad92d5 1169 MIB_UPLINK_COUNTER,
mluis 2:14a5d6ad92d5 1170 /*!
mluis 2:14a5d6ad92d5 1171 * LoRaWAN Down-link counter
mluis 2:14a5d6ad92d5 1172 *
mluis 2:14a5d6ad92d5 1173 * LoRaWAN Specification V1.0, chapter 4.3.1.5
mluis 2:14a5d6ad92d5 1174 */
mluis 2:14a5d6ad92d5 1175 MIB_DOWNLINK_COUNTER,
mluis 2:14a5d6ad92d5 1176 /*!
mluis 2:14a5d6ad92d5 1177 * Multicast channels. A get request will return a pointer to the first
mluis 2:14a5d6ad92d5 1178 * entry of the multicast channel linked list. If the pointer is equal to
mluis 2:14a5d6ad92d5 1179 * NULL, the list is empty.
mluis 2:14a5d6ad92d5 1180 */
mluis 2:14a5d6ad92d5 1181 MIB_MULTICAST_CHANNEL,
mluis 2:14a5d6ad92d5 1182 }Mib_t;
mluis 2:14a5d6ad92d5 1183
mluis 2:14a5d6ad92d5 1184 /*!
mluis 2:14a5d6ad92d5 1185 * LoRaMAC MIB parameters
mluis 2:14a5d6ad92d5 1186 */
mluis 2:14a5d6ad92d5 1187 typedef union uMibParam
mluis 2:14a5d6ad92d5 1188 {
mluis 2:14a5d6ad92d5 1189 /*!
mluis 2:14a5d6ad92d5 1190 * LoRaWAN device class
mluis 2:14a5d6ad92d5 1191 *
mluis 2:14a5d6ad92d5 1192 * Related MIB type: \ref MIB_DEVICE_CLASS
mluis 2:14a5d6ad92d5 1193 */
mluis 2:14a5d6ad92d5 1194 DeviceClass_t Class;
mluis 2:14a5d6ad92d5 1195 /*!
mluis 2:14a5d6ad92d5 1196 * LoRaWAN network joined attribute
mluis 2:14a5d6ad92d5 1197 *
mluis 2:14a5d6ad92d5 1198 * Related MIB type: \ref MIB_NETWORK_JOINED
mluis 2:14a5d6ad92d5 1199 */
mluis 2:14a5d6ad92d5 1200 bool IsNetworkJoined;
mluis 2:14a5d6ad92d5 1201 /*!
mluis 2:14a5d6ad92d5 1202 * Activation state of ADR
mluis 2:14a5d6ad92d5 1203 *
mluis 2:14a5d6ad92d5 1204 * Related MIB type: \ref MIB_ADR
mluis 2:14a5d6ad92d5 1205 */
mluis 2:14a5d6ad92d5 1206 bool AdrEnable;
mluis 2:14a5d6ad92d5 1207 /*!
mluis 2:14a5d6ad92d5 1208 * Network identifier
mluis 2:14a5d6ad92d5 1209 *
mluis 2:14a5d6ad92d5 1210 * Related MIB type: \ref MIB_NET_ID
mluis 2:14a5d6ad92d5 1211 */
mluis 2:14a5d6ad92d5 1212 uint32_t NetID;
mluis 2:14a5d6ad92d5 1213 /*!
mluis 2:14a5d6ad92d5 1214 * End-device address
mluis 2:14a5d6ad92d5 1215 *
mluis 2:14a5d6ad92d5 1216 * Related MIB type: \ref MIB_DEV_ADDR
mluis 2:14a5d6ad92d5 1217 */
mluis 2:14a5d6ad92d5 1218 uint32_t DevAddr;
mluis 2:14a5d6ad92d5 1219 /*!
mluis 2:14a5d6ad92d5 1220 * Network session key
mluis 2:14a5d6ad92d5 1221 *
mluis 2:14a5d6ad92d5 1222 * Related MIB type: \ref MIB_NWK_SKEY
mluis 2:14a5d6ad92d5 1223 */
mluis 2:14a5d6ad92d5 1224 uint8_t *NwkSKey;
mluis 2:14a5d6ad92d5 1225 /*!
mluis 2:14a5d6ad92d5 1226 * Application session key
mluis 2:14a5d6ad92d5 1227 *
mluis 2:14a5d6ad92d5 1228 * Related MIB type: \ref MIB_APP_SKEY
mluis 2:14a5d6ad92d5 1229 */
mluis 2:14a5d6ad92d5 1230 uint8_t *AppSKey;
mluis 2:14a5d6ad92d5 1231 /*!
mluis 2:14a5d6ad92d5 1232 * Enable or disable a public network
mluis 2:14a5d6ad92d5 1233 *
mluis 2:14a5d6ad92d5 1234 * Related MIB type: \ref MIB_PUBLIC_NETWORK
mluis 2:14a5d6ad92d5 1235 */
mluis 2:14a5d6ad92d5 1236 bool EnablePublicNetwork;
mluis 2:14a5d6ad92d5 1237 /*!
mluis 2:14a5d6ad92d5 1238 * Enable or disable repeater support
mluis 2:14a5d6ad92d5 1239 *
mluis 2:14a5d6ad92d5 1240 * Related MIB type: \ref MIB_REPEATER_SUPPORT
mluis 2:14a5d6ad92d5 1241 */
mluis 2:14a5d6ad92d5 1242 bool EnableRepeaterSupport;
mluis 2:14a5d6ad92d5 1243 /*!
mluis 2:14a5d6ad92d5 1244 * LoRaWAN Channel
mluis 2:14a5d6ad92d5 1245 *
mluis 2:14a5d6ad92d5 1246 * Related MIB type: \ref MIB_CHANNELS
mluis 2:14a5d6ad92d5 1247 */
mluis 2:14a5d6ad92d5 1248 ChannelParams_t* ChannelList;
mluis 2:14a5d6ad92d5 1249 /*!
mluis 2:14a5d6ad92d5 1250 * Channel for the receive window 2
mluis 2:14a5d6ad92d5 1251 *
mluis 2:14a5d6ad92d5 1252 * Related MIB type: \ref MIB_RX2_CHANNEL
mluis 2:14a5d6ad92d5 1253 */
mluis 2:14a5d6ad92d5 1254 Rx2ChannelParams_t Rx2Channel;
mluis 2:14a5d6ad92d5 1255 /*!
mluis 2:14a5d6ad92d5 1256 * Channel mask
mluis 2:14a5d6ad92d5 1257 *
mluis 2:14a5d6ad92d5 1258 * Related MIB type: \ref MIB_CHANNELS_MASK
mluis 2:14a5d6ad92d5 1259 */
mluis 2:14a5d6ad92d5 1260 uint16_t* ChannelsMask;
mluis 2:14a5d6ad92d5 1261 /*!
mluis 2:14a5d6ad92d5 1262 * Number of frame repetitions
mluis 2:14a5d6ad92d5 1263 *
mluis 2:14a5d6ad92d5 1264 * Related MIB type: \ref MIB_CHANNELS_NB_REP
mluis 2:14a5d6ad92d5 1265 */
mluis 2:14a5d6ad92d5 1266 uint8_t ChannelNbRep;
mluis 2:14a5d6ad92d5 1267 /*!
mluis 2:14a5d6ad92d5 1268 * Maximum receive window duration
mluis 2:14a5d6ad92d5 1269 *
mluis 2:14a5d6ad92d5 1270 * Related MIB type: \ref MIB_MAX_RX_WINDOW_DURATION
mluis 2:14a5d6ad92d5 1271 */
mluis 2:14a5d6ad92d5 1272 uint32_t MaxRxWindow;
mluis 2:14a5d6ad92d5 1273 /*!
mluis 2:14a5d6ad92d5 1274 * Receive delay 1
mluis 2:14a5d6ad92d5 1275 *
mluis 2:14a5d6ad92d5 1276 * Related MIB type: \ref MIB_RECEIVE_DELAY_1
mluis 2:14a5d6ad92d5 1277 */
mluis 2:14a5d6ad92d5 1278 uint32_t ReceiveDelay1;
mluis 2:14a5d6ad92d5 1279 /*!
mluis 2:14a5d6ad92d5 1280 * Receive delay 2
mluis 2:14a5d6ad92d5 1281 *
mluis 2:14a5d6ad92d5 1282 * Related MIB type: \ref MIB_RECEIVE_DELAY_2
mluis 2:14a5d6ad92d5 1283 */
mluis 2:14a5d6ad92d5 1284 uint32_t ReceiveDelay2;
mluis 2:14a5d6ad92d5 1285 /*!
mluis 2:14a5d6ad92d5 1286 * Join accept delay 1
mluis 2:14a5d6ad92d5 1287 *
mluis 2:14a5d6ad92d5 1288 * Related MIB type: \ref MIB_JOIN_ACCEPT_DELAY_1
mluis 2:14a5d6ad92d5 1289 */
mluis 2:14a5d6ad92d5 1290 uint32_t JoinAcceptDelay1;
mluis 2:14a5d6ad92d5 1291 /*!
mluis 2:14a5d6ad92d5 1292 * Join accept delay 2
mluis 2:14a5d6ad92d5 1293 *
mluis 2:14a5d6ad92d5 1294 * Related MIB type: \ref MIB_JOIN_ACCEPT_DELAY_2
mluis 2:14a5d6ad92d5 1295 */
mluis 2:14a5d6ad92d5 1296 uint32_t JoinAcceptDelay2;
mluis 2:14a5d6ad92d5 1297 /*!
mluis 2:14a5d6ad92d5 1298 * Channels data rate
mluis 2:14a5d6ad92d5 1299 *
mluis 4:37c12dbc8dc7 1300 * Related MIB type: \ref MIB_CHANNELS_DEFAULT_DATARATE
mluis 4:37c12dbc8dc7 1301 */
mluis 4:37c12dbc8dc7 1302 int8_t ChannelsDefaultDatarate;
mluis 4:37c12dbc8dc7 1303 /*!
mluis 4:37c12dbc8dc7 1304 * Channels data rate
mluis 4:37c12dbc8dc7 1305 *
mluis 2:14a5d6ad92d5 1306 * Related MIB type: \ref MIB_CHANNELS_DATARATE
mluis 2:14a5d6ad92d5 1307 */
mluis 2:14a5d6ad92d5 1308 int8_t ChannelsDatarate;
mluis 2:14a5d6ad92d5 1309 /*!
mluis 2:14a5d6ad92d5 1310 * Channels TX power
mluis 2:14a5d6ad92d5 1311 *
mluis 2:14a5d6ad92d5 1312 * Related MIB type: \ref MIB_CHANNELS_TX_POWER
mluis 2:14a5d6ad92d5 1313 */
mluis 2:14a5d6ad92d5 1314 int8_t ChannelsTxPower;
mluis 2:14a5d6ad92d5 1315 /*!
mluis 2:14a5d6ad92d5 1316 * LoRaWAN Up-link counter
mluis 2:14a5d6ad92d5 1317 *
mluis 2:14a5d6ad92d5 1318 * Related MIB type: \ref MIB_UPLINK_COUNTER
mluis 2:14a5d6ad92d5 1319 */
mluis 2:14a5d6ad92d5 1320 uint32_t UpLinkCounter;
mluis 2:14a5d6ad92d5 1321 /*!
mluis 2:14a5d6ad92d5 1322 * LoRaWAN Down-link counter
mluis 2:14a5d6ad92d5 1323 *
mluis 2:14a5d6ad92d5 1324 * Related MIB type: \ref MIB_DOWNLINK_COUNTER
mluis 2:14a5d6ad92d5 1325 */
mluis 2:14a5d6ad92d5 1326 uint32_t DownLinkCounter;
mluis 2:14a5d6ad92d5 1327 /*!
mluis 2:14a5d6ad92d5 1328 * Multicast channel
mluis 2:14a5d6ad92d5 1329 *
mluis 2:14a5d6ad92d5 1330 * Related MIB type: \ref MIB_MULTICAST_CHANNEL
mluis 2:14a5d6ad92d5 1331 */
mluis 2:14a5d6ad92d5 1332 MulticastParams_t* MulticastList;
mluis 2:14a5d6ad92d5 1333 }MibParam_t;
mluis 2:14a5d6ad92d5 1334
mluis 2:14a5d6ad92d5 1335 /*!
mluis 2:14a5d6ad92d5 1336 * LoRaMAC MIB-RequestConfirm structure
mluis 2:14a5d6ad92d5 1337 */
mluis 2:14a5d6ad92d5 1338 typedef struct eMibRequestConfirm
mluis 2:14a5d6ad92d5 1339 {
mluis 2:14a5d6ad92d5 1340 /*!
mluis 2:14a5d6ad92d5 1341 * MIB-Request type
mluis 2:14a5d6ad92d5 1342 */
mluis 2:14a5d6ad92d5 1343 Mib_t Type;
mluis 2:14a5d6ad92d5 1344
mluis 2:14a5d6ad92d5 1345 /*!
mluis 2:14a5d6ad92d5 1346 * MLME-RequestConfirm parameters
mluis 2:14a5d6ad92d5 1347 */
mluis 2:14a5d6ad92d5 1348 MibParam_t Param;
mluis 2:14a5d6ad92d5 1349 }MibRequestConfirm_t;
mluis 2:14a5d6ad92d5 1350
mluis 2:14a5d6ad92d5 1351 /*!
mluis 2:14a5d6ad92d5 1352 * LoRaMAC tx information
mluis 2:14a5d6ad92d5 1353 */
mluis 2:14a5d6ad92d5 1354 typedef struct sLoRaMacTxInfo
mluis 2:14a5d6ad92d5 1355 {
mluis 2:14a5d6ad92d5 1356 /*!
mluis 2:14a5d6ad92d5 1357 * Defines the size of the applicative payload which can be processed
mluis 2:14a5d6ad92d5 1358 */
mluis 2:14a5d6ad92d5 1359 uint8_t MaxPossiblePayload;
mluis 2:14a5d6ad92d5 1360 /*!
mluis 2:14a5d6ad92d5 1361 * The current payload size, dependent on the current datarate
mluis 2:14a5d6ad92d5 1362 */
mluis 2:14a5d6ad92d5 1363 uint8_t CurrentPayloadSize;
mluis 2:14a5d6ad92d5 1364 }LoRaMacTxInfo_t;
mluis 2:14a5d6ad92d5 1365
mluis 2:14a5d6ad92d5 1366 /*!
mluis 2:14a5d6ad92d5 1367 * LoRaMAC Status
mluis 2:14a5d6ad92d5 1368 */
mluis 2:14a5d6ad92d5 1369 typedef enum eLoRaMacStatus
mluis 2:14a5d6ad92d5 1370 {
mluis 2:14a5d6ad92d5 1371 /*!
mluis 2:14a5d6ad92d5 1372 * Service started successfully
mluis 2:14a5d6ad92d5 1373 */
mluis 2:14a5d6ad92d5 1374 LORAMAC_STATUS_OK,
mluis 2:14a5d6ad92d5 1375 /*!
mluis 2:14a5d6ad92d5 1376 * Service not started - LoRaMAC is busy
mluis 2:14a5d6ad92d5 1377 */
mluis 2:14a5d6ad92d5 1378 LORAMAC_STATUS_BUSY,
mluis 2:14a5d6ad92d5 1379 /*!
mluis 2:14a5d6ad92d5 1380 * Service unknown
mluis 2:14a5d6ad92d5 1381 */
mluis 2:14a5d6ad92d5 1382 LORAMAC_STATUS_SERVICE_UNKNOWN,
mluis 2:14a5d6ad92d5 1383 /*!
mluis 2:14a5d6ad92d5 1384 * Service not started - invalid parameter
mluis 2:14a5d6ad92d5 1385 */
mluis 2:14a5d6ad92d5 1386 LORAMAC_STATUS_PARAMETER_INVALID,
mluis 2:14a5d6ad92d5 1387 /*!
mluis 3:b9d87593a8ae 1388 * Service not started - invalid frequency
mluis 3:b9d87593a8ae 1389 */
mluis 3:b9d87593a8ae 1390 LORAMAC_STATUS_FREQUENCY_INVALID,
mluis 3:b9d87593a8ae 1391 /*!
mluis 3:b9d87593a8ae 1392 * Service not started - invalid datarate
mluis 3:b9d87593a8ae 1393 */
mluis 3:b9d87593a8ae 1394 LORAMAC_STATUS_DATARATE_INVALID,
mluis 3:b9d87593a8ae 1395 /*!
mluis 3:b9d87593a8ae 1396 * Service not started - invalid frequency and datarate
mluis 3:b9d87593a8ae 1397 */
mluis 3:b9d87593a8ae 1398 LORAMAC_STATUS_FREQ_AND_DR_INVALID,
mluis 3:b9d87593a8ae 1399 /*!
mluis 2:14a5d6ad92d5 1400 * Service not started - the device is not in a LoRaWAN
mluis 2:14a5d6ad92d5 1401 */
mluis 2:14a5d6ad92d5 1402 LORAMAC_STATUS_NO_NETWORK_JOINED,
mluis 2:14a5d6ad92d5 1403 /*!
mluis 2:14a5d6ad92d5 1404 * Service not started - playload lenght error
mluis 2:14a5d6ad92d5 1405 */
mluis 2:14a5d6ad92d5 1406 LORAMAC_STATUS_LENGTH_ERROR,
mluis 2:14a5d6ad92d5 1407 /*!
mluis 2:14a5d6ad92d5 1408 * Service not started - playload lenght error
mluis 2:14a5d6ad92d5 1409 */
mluis 2:14a5d6ad92d5 1410 LORAMAC_STATUS_MAC_CMD_LENGTH_ERROR,
mluis 2:14a5d6ad92d5 1411 /*!
mluis 2:14a5d6ad92d5 1412 * Service not started - the device is switched off
mluis 2:14a5d6ad92d5 1413 */
mluis 2:14a5d6ad92d5 1414 LORAMAC_STATUS_DEVICE_OFF,
mluis 2:14a5d6ad92d5 1415 }LoRaMacStatus_t;
mluis 0:91d1a7783bb9 1416
mluis 0:91d1a7783bb9 1417 /*!
mluis 0:91d1a7783bb9 1418 * LoRaMAC events structure
mluis 0:91d1a7783bb9 1419 * Used to notify upper layers of MAC events
mluis 0:91d1a7783bb9 1420 */
mluis 2:14a5d6ad92d5 1421 typedef struct sLoRaMacPrimitives
mluis 0:91d1a7783bb9 1422 {
mluis 0:91d1a7783bb9 1423 /*!
mluis 2:14a5d6ad92d5 1424 * \brief MCPS-Confirm primitive
mluis 0:91d1a7783bb9 1425 *
mluis 2:14a5d6ad92d5 1426 * \param [OUT] MCPS-Confirm parameters
mluis 2:14a5d6ad92d5 1427 */
mluis 2:14a5d6ad92d5 1428 void ( *MacMcpsConfirm )( McpsConfirm_t *McpsConfirm );
mluis 2:14a5d6ad92d5 1429 /*!
mluis 2:14a5d6ad92d5 1430 * \brief MCPS-Indication primitive
mluis 2:14a5d6ad92d5 1431 *
mluis 2:14a5d6ad92d5 1432 * \param [OUT] MCPS-Indication parameters
mluis 0:91d1a7783bb9 1433 */
mluis 2:14a5d6ad92d5 1434 void ( *MacMcpsIndication )( McpsIndication_t *McpsIndication );
mluis 1:91e4e6c60d1e 1435 /*!
mluis 2:14a5d6ad92d5 1436 * \brief MLME-Confirm primitive
mluis 1:91e4e6c60d1e 1437 *
mluis 2:14a5d6ad92d5 1438 * \param [OUT] MLME-Confirm parameters
mluis 2:14a5d6ad92d5 1439 */
mluis 2:14a5d6ad92d5 1440 void ( *MacMlmeConfirm )( MlmeConfirm_t *MlmeConfirm );
mluis 2:14a5d6ad92d5 1441 }LoRaMacPrimitives_t;
mluis 2:14a5d6ad92d5 1442
mluis 2:14a5d6ad92d5 1443 typedef struct sLoRaMacCallback
mluis 2:14a5d6ad92d5 1444 {
mluis 2:14a5d6ad92d5 1445 /*!
mluis 2:14a5d6ad92d5 1446 * \brief Measures the battery level
mluis 2:14a5d6ad92d5 1447 *
mluis 2:14a5d6ad92d5 1448 * \retval Battery level [0: node is connected to an external
mluis 2:14a5d6ad92d5 1449 * power source, 1..254: battery level, where 1 is the minimum
mluis 2:14a5d6ad92d5 1450 * and 254 is the maximum value, 255: the node was not able
mluis 2:14a5d6ad92d5 1451 * to measure the battery level]
mluis 1:91e4e6c60d1e 1452 */
mluis 1:91e4e6c60d1e 1453 uint8_t ( *GetBatteryLevel )( void );
mluis 2:14a5d6ad92d5 1454 }LoRaMacCallback_t;
mluis 0:91d1a7783bb9 1455
mluis 0:91d1a7783bb9 1456 /*!
mluis 2:14a5d6ad92d5 1457 * \brief LoRaMAC layer initialization
mluis 0:91d1a7783bb9 1458 *
mluis 2:14a5d6ad92d5 1459 * \details In addition to the initialization of the LoRaMAC layer, this
mluis 2:14a5d6ad92d5 1460 * function initializes the callback primitives of the MCPS and
mluis 2:14a5d6ad92d5 1461 * MLME services. Every data field of \ref LoRaMacPrimitives_t must be
mluis 2:14a5d6ad92d5 1462 * set to a valid callback function.
mluis 2:14a5d6ad92d5 1463 *
mluis 2:14a5d6ad92d5 1464 * \param [IN] events - Pointer to a structure defining the LoRaMAC
mluis 2:14a5d6ad92d5 1465 * event functions. Refer to \ref LoRaMacPrimitives_t.
mluis 0:91d1a7783bb9 1466 *
mluis 2:14a5d6ad92d5 1467 * \param [IN] events - Pointer to a structure defining the LoRaMAC
mluis 2:14a5d6ad92d5 1468 * callback functions. Refer to \ref LoRaMacCallback_t.
mluis 2:14a5d6ad92d5 1469 *
mluis 2:14a5d6ad92d5 1470 * \retval LoRaMacStatus_t Status of the operation. Possible returns are:
mluis 2:14a5d6ad92d5 1471 * returns are:
mluis 2:14a5d6ad92d5 1472 * \ref LORAMAC_STATUS_OK,
mluis 2:14a5d6ad92d5 1473 * \ref LORAMAC_STATUS_PARAMETER_INVALID.
mluis 0:91d1a7783bb9 1474 */
mluis 2:14a5d6ad92d5 1475 LoRaMacStatus_t LoRaMacInitialization( LoRaMacPrimitives_t *primitives, LoRaMacCallback_t *callbacks );
mluis 0:91d1a7783bb9 1476
mluis 0:91d1a7783bb9 1477 /*!
mluis 2:14a5d6ad92d5 1478 * \brief Queries the LoRaMAC if it is possible to send the next frame with
mluis 2:14a5d6ad92d5 1479 * a given payload size. The LoRaMAC takes scheduled MAC commands into
mluis 2:14a5d6ad92d5 1480 * account and reports, when the frame can be send or not.
mluis 2:14a5d6ad92d5 1481 *
mluis 2:14a5d6ad92d5 1482 * \param [IN] size - Size of applicative payload to be send next
mluis 0:91d1a7783bb9 1483 *
mluis 2:14a5d6ad92d5 1484 * \param [OUT] txInfo - The structure \ref LoRaMacTxInfo_t contains
mluis 2:14a5d6ad92d5 1485 * information about the actual maximum payload possible
mluis 2:14a5d6ad92d5 1486 * ( according to the configured datarate or the next
mluis 2:14a5d6ad92d5 1487 * datarate according to ADR ), and the maximum frame
mluis 2:14a5d6ad92d5 1488 * size, taking the scheduled MAC commands into account.
mluis 0:91d1a7783bb9 1489 *
mluis 2:14a5d6ad92d5 1490 * \retval LoRaMacStatus_t Status of the operation. When the parameters are
mluis 2:14a5d6ad92d5 1491 * not valid, the function returns \ref LORAMAC_STATUS_PARAMETER_INVALID.
mluis 2:14a5d6ad92d5 1492 * In case of a length error caused by the applicative payload size, the
mluis 2:14a5d6ad92d5 1493 * function returns LORAMAC_STATUS_LENGTH_ERROR. In case of a length error
mluis 2:14a5d6ad92d5 1494 * due to additional MAC commands in the queue, the function returns
mluis 2:14a5d6ad92d5 1495 * LORAMAC_STATUS_MAC_CMD_LENGTH_ERROR. In case the query is valid, and
mluis 2:14a5d6ad92d5 1496 * the LoRaMAC is able to send the frame, the function returns LORAMAC_STATUS_OK. *
mluis 0:91d1a7783bb9 1497 */
mluis 2:14a5d6ad92d5 1498 LoRaMacStatus_t LoRaMacQueryTxPossible( uint8_t size, LoRaMacTxInfo_t* txInfo );
mluis 0:91d1a7783bb9 1499
mluis 0:91d1a7783bb9 1500 /*!
mluis 2:14a5d6ad92d5 1501 * \brief LoRaMAC channel add service
mluis 2:14a5d6ad92d5 1502 *
mluis 2:14a5d6ad92d5 1503 * \details Adds a new channel to the channel list and activates the id in
mluis 2:14a5d6ad92d5 1504 * the channel mask. For the US915 band, all channels are enabled
mluis 2:14a5d6ad92d5 1505 * by default. It is not possible to activate less than 6 125 kHz
mluis 2:14a5d6ad92d5 1506 * channels.
mluis 2:14a5d6ad92d5 1507 *
mluis 2:14a5d6ad92d5 1508 * \param [IN] id - Id of the channel. Possible values are:
mluis 0:91d1a7783bb9 1509 *
mluis 2:14a5d6ad92d5 1510 * 0-15 for EU868
mluis 2:14a5d6ad92d5 1511 * 0-72 for US915
mluis 2:14a5d6ad92d5 1512 *
mluis 2:14a5d6ad92d5 1513 * \param [IN] params - Channel parameters to set.
mluis 0:91d1a7783bb9 1514 *
mluis 2:14a5d6ad92d5 1515 * \retval LoRaMacStatus_t Status of the operation. Possible returns are:
mluis 2:14a5d6ad92d5 1516 * \ref LORAMAC_STATUS_OK,
mluis 2:14a5d6ad92d5 1517 * \ref LORAMAC_STATUS_BUSY,
mluis 2:14a5d6ad92d5 1518 * \ref LORAMAC_STATUS_PARAMETER_INVALID.
mluis 0:91d1a7783bb9 1519 */
mluis 2:14a5d6ad92d5 1520 LoRaMacStatus_t LoRaMacChannelAdd( uint8_t id, ChannelParams_t params );
mluis 0:91d1a7783bb9 1521
mluis 0:91d1a7783bb9 1522 /*!
mluis 2:14a5d6ad92d5 1523 * \brief LoRaMAC channel remove service
mluis 2:14a5d6ad92d5 1524 *
mluis 2:14a5d6ad92d5 1525 * \details Deactivates the id in the channel mask.
mluis 2:14a5d6ad92d5 1526 *
mluis 2:14a5d6ad92d5 1527 * \param [IN] id - Id of the channel.
mluis 2:14a5d6ad92d5 1528 *
mluis 2:14a5d6ad92d5 1529 * \retval LoRaMacStatus_t Status of the operation. Possible returns are:
mluis 2:14a5d6ad92d5 1530 * \ref LORAMAC_STATUS_OK,
mluis 2:14a5d6ad92d5 1531 * \ref LORAMAC_STATUS_BUSY,
mluis 2:14a5d6ad92d5 1532 * \ref LORAMAC_STATUS_PARAMETER_INVALID.
mluis 0:91d1a7783bb9 1533 */
mluis 2:14a5d6ad92d5 1534 LoRaMacStatus_t LoRaMacChannelRemove( uint8_t id );
mluis 0:91d1a7783bb9 1535
mluis 0:91d1a7783bb9 1536 /*!
mluis 2:14a5d6ad92d5 1537 * \brief LoRaMAC multicast channel link service
mluis 2:14a5d6ad92d5 1538 *
mluis 2:14a5d6ad92d5 1539 * \details Links a multicast channel into the linked list.
mluis 2:14a5d6ad92d5 1540 *
mluis 2:14a5d6ad92d5 1541 * \param [IN] channelParam - Multicast channel parameters to link.
mluis 0:91d1a7783bb9 1542 *
mluis 2:14a5d6ad92d5 1543 * \retval LoRaMacStatus_t Status of the operation. Possible returns are:
mluis 2:14a5d6ad92d5 1544 * \ref LORAMAC_STATUS_OK,
mluis 2:14a5d6ad92d5 1545 * \ref LORAMAC_STATUS_BUSY,
mluis 2:14a5d6ad92d5 1546 * \ref LORAMAC_STATUS_PARAMETER_INVALID.
mluis 0:91d1a7783bb9 1547 */
mluis 2:14a5d6ad92d5 1548 LoRaMacStatus_t LoRaMacMulticastChannelLink( MulticastParams_t *channelParam );
mluis 2:14a5d6ad92d5 1549
mluis 2:14a5d6ad92d5 1550 /*!
mluis 2:14a5d6ad92d5 1551 * \brief LoRaMAC multicast channel unlink service
mluis 2:14a5d6ad92d5 1552 *
mluis 2:14a5d6ad92d5 1553 * \details Unlinks a multicast channel from the linked list.
mluis 2:14a5d6ad92d5 1554 *
mluis 2:14a5d6ad92d5 1555 * \param [IN] channelParam - Multicast channel parameters to unlink.
mluis 2:14a5d6ad92d5 1556 *
mluis 2:14a5d6ad92d5 1557 * \retval LoRaMacStatus_t Status of the operation. Possible returns are:
mluis 2:14a5d6ad92d5 1558 * \ref LORAMAC_STATUS_OK,
mluis 2:14a5d6ad92d5 1559 * \ref LORAMAC_STATUS_BUSY,
mluis 2:14a5d6ad92d5 1560 * \ref LORAMAC_STATUS_PARAMETER_INVALID.
mluis 2:14a5d6ad92d5 1561 */
mluis 2:14a5d6ad92d5 1562 LoRaMacStatus_t LoRaMacMulticastChannelUnlink( MulticastParams_t *channelParam );
mluis 0:91d1a7783bb9 1563
mluis 0:91d1a7783bb9 1564 /*!
mluis 2:14a5d6ad92d5 1565 * \brief LoRaMAC MIB-Get
mluis 2:14a5d6ad92d5 1566 *
mluis 2:14a5d6ad92d5 1567 * \details The mac information base service to get attributes of the LoRaMac
mluis 2:14a5d6ad92d5 1568 * layer.
mluis 2:14a5d6ad92d5 1569 *
mluis 2:14a5d6ad92d5 1570 * The following code-snippet shows how to use the API to get the
mluis 2:14a5d6ad92d5 1571 * parameter AdrEnable, defined by the enumeration type
mluis 2:14a5d6ad92d5 1572 * \ref MIB_ADR.
mluis 2:14a5d6ad92d5 1573 * \code
mluis 2:14a5d6ad92d5 1574 * MibRequestConfirm_t mibReq;
mluis 2:14a5d6ad92d5 1575 * mibReq.Type = MIB_ADR;
mluis 0:91d1a7783bb9 1576 *
mluis 2:14a5d6ad92d5 1577 * if( LoRaMacMibGetRequestConfirm( &mibReq ) == LORAMAC_STATUS_OK )
mluis 2:14a5d6ad92d5 1578 * {
mluis 2:14a5d6ad92d5 1579 * // LoRaMAC updated the parameter mibParam.AdrEnable
mluis 2:14a5d6ad92d5 1580 * }
mluis 2:14a5d6ad92d5 1581 * \endcode
mluis 2:14a5d6ad92d5 1582 *
mluis 2:14a5d6ad92d5 1583 * \param [IN] mibRequest - MIB-GET-Request to perform. Refer to \ref MibRequestConfirm_t.
mluis 2:14a5d6ad92d5 1584 *
mluis 2:14a5d6ad92d5 1585 * \retval LoRaMacStatus_t Status of the operation. Possible returns are:
mluis 2:14a5d6ad92d5 1586 * \ref LORAMAC_STATUS_OK,
mluis 2:14a5d6ad92d5 1587 * \ref LORAMAC_STATUS_SERVICE_UNKNOWN,
mluis 2:14a5d6ad92d5 1588 * \ref LORAMAC_STATUS_PARAMETER_INVALID.
mluis 0:91d1a7783bb9 1589 */
mluis 2:14a5d6ad92d5 1590 LoRaMacStatus_t LoRaMacMibGetRequestConfirm( MibRequestConfirm_t *mibGet );
mluis 0:91d1a7783bb9 1591
mluis 0:91d1a7783bb9 1592 /*!
mluis 2:14a5d6ad92d5 1593 * \brief LoRaMAC MIB-Set
mluis 2:14a5d6ad92d5 1594 *
mluis 2:14a5d6ad92d5 1595 * \details The mac information base service to set attributes of the LoRaMac
mluis 2:14a5d6ad92d5 1596 * layer.
mluis 2:14a5d6ad92d5 1597 *
mluis 2:14a5d6ad92d5 1598 * The following code-snippet shows how to use the API to set the
mluis 2:14a5d6ad92d5 1599 * parameter AdrEnable, defined by the enumeration type
mluis 2:14a5d6ad92d5 1600 * \ref MIB_ADR.
mluis 2:14a5d6ad92d5 1601 *
mluis 2:14a5d6ad92d5 1602 * \code
mluis 2:14a5d6ad92d5 1603 * MibRequestConfirm_t mibReq;
mluis 2:14a5d6ad92d5 1604 * mibReq.Type = MIB_ADR;
mluis 2:14a5d6ad92d5 1605 * mibReq.Param.AdrEnable = true;
mluis 0:91d1a7783bb9 1606 *
mluis 2:14a5d6ad92d5 1607 * if( LoRaMacMibGetRequestConfirm( &mibReq ) == LORAMAC_STATUS_OK )
mluis 2:14a5d6ad92d5 1608 * {
mluis 2:14a5d6ad92d5 1609 * // LoRaMAC updated the parameter
mluis 2:14a5d6ad92d5 1610 * }
mluis 2:14a5d6ad92d5 1611 * \endcode
mluis 2:14a5d6ad92d5 1612 *
mluis 2:14a5d6ad92d5 1613 * \param [IN] mibRequest - MIB-SET-Request to perform. Refer to \ref MibRequestConfirm_t.
mluis 2:14a5d6ad92d5 1614 *
mluis 2:14a5d6ad92d5 1615 * \retval LoRaMacStatus_t Status of the operation. Possible returns are:
mluis 2:14a5d6ad92d5 1616 * \ref LORAMAC_STATUS_OK,
mluis 2:14a5d6ad92d5 1617 * \ref LORAMAC_STATUS_BUSY,
mluis 2:14a5d6ad92d5 1618 * \ref LORAMAC_STATUS_SERVICE_UNKNOWN,
mluis 2:14a5d6ad92d5 1619 * \ref LORAMAC_STATUS_PARAMETER_INVALID.
mluis 0:91d1a7783bb9 1620 */
mluis 2:14a5d6ad92d5 1621 LoRaMacStatus_t LoRaMacMibSetRequestConfirm( MibRequestConfirm_t *mibSet );
mluis 0:91d1a7783bb9 1622
mluis 0:91d1a7783bb9 1623 /*!
mluis 2:14a5d6ad92d5 1624 * \brief LoRaMAC MLME-Request
mluis 2:14a5d6ad92d5 1625 *
mluis 2:14a5d6ad92d5 1626 * \details The Mac layer management entity handles management services. The
mluis 2:14a5d6ad92d5 1627 * following code-snippet shows how to use the API to perform a
mluis 2:14a5d6ad92d5 1628 * network join request.
mluis 2:14a5d6ad92d5 1629 *
mluis 2:14a5d6ad92d5 1630 * \code
mluis 2:14a5d6ad92d5 1631 * static uint8_t DevEui[] =
mluis 2:14a5d6ad92d5 1632 * {
mluis 2:14a5d6ad92d5 1633 * 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
mluis 2:14a5d6ad92d5 1634 * };
mluis 2:14a5d6ad92d5 1635 * static uint8_t AppEui[] =
mluis 2:14a5d6ad92d5 1636 * {
mluis 2:14a5d6ad92d5 1637 * 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
mluis 2:14a5d6ad92d5 1638 * };
mluis 2:14a5d6ad92d5 1639 * static uint8_t AppKey[] =
mluis 2:14a5d6ad92d5 1640 * {
mluis 2:14a5d6ad92d5 1641 * 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6,
mluis 2:14a5d6ad92d5 1642 * 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C
mluis 2:14a5d6ad92d5 1643 * };
mluis 0:91d1a7783bb9 1644 *
mluis 2:14a5d6ad92d5 1645 * MlmeReq_t mlmeReq;
mluis 2:14a5d6ad92d5 1646 * mlmeReq.Type = MLME_JOIN;
mluis 2:14a5d6ad92d5 1647 * mlmeReq.Req.Join.DevEui = DevEui;
mluis 2:14a5d6ad92d5 1648 * mlmeReq.Req.Join.AppEui = AppEui;
mluis 2:14a5d6ad92d5 1649 * mlmeReq.Req.Join.AppKey = AppKey;
mluis 2:14a5d6ad92d5 1650 *
mluis 2:14a5d6ad92d5 1651 * if( LoRaMacMlmeRequest( &mlmeReq ) == LORAMAC_STATUS_OK )
mluis 2:14a5d6ad92d5 1652 * {
mluis 2:14a5d6ad92d5 1653 * // Service started successfully. Waiting for the Mlme-Confirm event
mluis 2:14a5d6ad92d5 1654 * }
mluis 2:14a5d6ad92d5 1655 * \endcode
mluis 2:14a5d6ad92d5 1656 *
mluis 2:14a5d6ad92d5 1657 * \param [IN] mlmeRequest - MLME-Request to perform. Refer to \ref MlmeReq_t.
mluis 2:14a5d6ad92d5 1658 *
mluis 2:14a5d6ad92d5 1659 * \retval LoRaMacStatus_t Status of the operation. Possible returns are:
mluis 2:14a5d6ad92d5 1660 * \ref LORAMAC_STATUS_OK,
mluis 2:14a5d6ad92d5 1661 * \ref LORAMAC_STATUS_BUSY,
mluis 2:14a5d6ad92d5 1662 * \ref LORAMAC_STATUS_SERVICE_UNKNOWN,
mluis 2:14a5d6ad92d5 1663 * \ref LORAMAC_STATUS_PARAMETER_INVALID,
mluis 2:14a5d6ad92d5 1664 * \ref LORAMAC_STATUS_NO_NETWORK_JOINED,
mluis 2:14a5d6ad92d5 1665 * \ref LORAMAC_STATUS_LENGTH_ERROR,
mluis 2:14a5d6ad92d5 1666 * \ref LORAMAC_STATUS_DEVICE_OFF.
mluis 0:91d1a7783bb9 1667 */
mluis 2:14a5d6ad92d5 1668 LoRaMacStatus_t LoRaMacMlmeRequest( MlmeReq_t *mlmeRequest );
mluis 0:91d1a7783bb9 1669
mluis 0:91d1a7783bb9 1670 /*!
mluis 2:14a5d6ad92d5 1671 * \brief LoRaMAC MCPS-Request
mluis 2:14a5d6ad92d5 1672 *
mluis 2:14a5d6ad92d5 1673 * \details The Mac Common Part Sublayer handles data services. The following
mluis 2:14a5d6ad92d5 1674 * code-snippet shows how to use the API to send an unconfirmed
mluis 2:14a5d6ad92d5 1675 * LoRaMAC frame.
mluis 0:91d1a7783bb9 1676 *
mluis 2:14a5d6ad92d5 1677 * \code
mluis 2:14a5d6ad92d5 1678 * uint8_t myBuffer[] = { 1, 2, 3 };
mluis 2:14a5d6ad92d5 1679 *
mluis 2:14a5d6ad92d5 1680 * McpsReq_t mcpsReq;
mluis 2:14a5d6ad92d5 1681 * mcpsReq.Type = MCPS_UNCONFIRMED;
mluis 2:14a5d6ad92d5 1682 * mcpsReq.Req.Unconfirmed.fPort = 1;
mluis 2:14a5d6ad92d5 1683 * mcpsReq.Req.Unconfirmed.fBuffer = myBuffer;
mluis 2:14a5d6ad92d5 1684 * mcpsReq.Req.Unconfirmed.fBufferSize = sizeof( myBuffer );
mluis 0:91d1a7783bb9 1685 *
mluis 2:14a5d6ad92d5 1686 * if( LoRaMacMcpsRequest( &mcpsReq ) == LORAMAC_STATUS_OK )
mluis 2:14a5d6ad92d5 1687 * {
mluis 2:14a5d6ad92d5 1688 * // Service started successfully. Waiting for the MCPS-Confirm event
mluis 2:14a5d6ad92d5 1689 * }
mluis 2:14a5d6ad92d5 1690 * \endcode
mluis 2:14a5d6ad92d5 1691 *
mluis 2:14a5d6ad92d5 1692 * \param [IN] mcpsRequest - MCPS-Request to perform. Refer to \ref McpsReq_t.
mluis 2:14a5d6ad92d5 1693 *
mluis 2:14a5d6ad92d5 1694 * \retval LoRaMacStatus_t Status of the operation. Possible returns are:
mluis 2:14a5d6ad92d5 1695 * \ref LORAMAC_STATUS_OK,
mluis 2:14a5d6ad92d5 1696 * \ref LORAMAC_STATUS_BUSY,
mluis 2:14a5d6ad92d5 1697 * \ref LORAMAC_STATUS_SERVICE_UNKNOWN,
mluis 2:14a5d6ad92d5 1698 * \ref LORAMAC_STATUS_PARAMETER_INVALID,
mluis 2:14a5d6ad92d5 1699 * \ref LORAMAC_STATUS_NO_NETWORK_JOINED,
mluis 2:14a5d6ad92d5 1700 * \ref LORAMAC_STATUS_LENGTH_ERROR,
mluis 2:14a5d6ad92d5 1701 * \ref LORAMAC_STATUS_DEVICE_OFF.
mluis 0:91d1a7783bb9 1702 */
mluis 2:14a5d6ad92d5 1703 LoRaMacStatus_t LoRaMacMcpsRequest( McpsReq_t *mcpsRequest );
mluis 0:91d1a7783bb9 1704
mluis 2:14a5d6ad92d5 1705 /*! \} defgroup LORAMAC */
mluis 0:91d1a7783bb9 1706
mluis 0:91d1a7783bb9 1707 #endif // __LORAMAC_H__