Espotel / Mbed 2 deprecated LoRaWAN_Semtech_stack_v41

Dependencies:   SX1272lib mbed

Fork of LoRaWAN_Semtech_stack_v4.1 by Michal Leksinski

Committer:
mleksio
Date:
Tue Mar 15 23:27:24 2016 +0000
Revision:
1:2be292bd43f9
Parent:
0:c58229885f95
Upgrade related to Semtech stack ver. 4.1.0.

Who changed what in which revision?

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