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:
ubhat
Date:
Tue Jul 17 22:48:35 2018 +0000
Revision:
11:2426a05fe29e
Parent:
4:37c12dbc8dc7
Child:
7:c16969e0f70f
Fix bug where FCnt get incremented twice in the case of ADRACKReq with D/L ACK

Who changed what in which revision?

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