LoRaWAN MAC layer implementation

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

LoRAWAN-lib is a port of the GitHub LoRaMac-node LoRaWAN MAC layer implementation.

This library depends on the SX1276Lib or SX1272Lib radio drivers depending on the used mbed component shield.

This library depends also on some cryptographic helper functions as well as helper functions for the timers management. These can be found on the example projects under the system directory.

The example projects are:

  1. LoRaWAN-demo-72
  2. LoRaWAN-demo-76
  3. LoRaWAN-demo-NAMote72

The LoRaWAN specification specifies different ISM bands operating parameters. These are all implemented under the LoRaMac-board.h file.

In order to select which band to use, please change line 24 of board.h file provided on the examples projects as follows:


EU868

board.h

#define USE_BAND_868


US915

board.h

#define USE_BAND_915


US915 - Hybrid

board.h

#define USE_BAND_915_HYBRID


CN780

board.h

#define USE_BAND_780


EU433

board.h

#define USE_BAND_433
Committer:
mluis
Date:
Tue Jan 05 16:41:54 2016 +0000
Revision:
2:14a5d6ad92d5
Parent:
1:91e4e6c60d1e
Child:
3:b9d87593a8ae
Synchronized with https://github.com/Lora-net/LoRaMac-node git revision a2226468d470eceb251338e1acfb24cfd121effa

Who changed what in which revision?

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