publish for gps with lora
Dependents: Dinghy_RaceTrak_Node_GPS_with_LoRa
Fork of LoRaWAN-lib by
LoRaMac.h@4:37c12dbc8dc7, 2016-05-13 (annotated)
- Committer:
- mluis
- Date:
- Fri May 13 14:51:50 2016 +0000
- Revision:
- 4:37c12dbc8dc7
- Parent:
- 3:b9d87593a8ae
- Child:
- 7:c16969e0f70f
Synchronized with https://github.com/Lora-net/LoRaMac-node git revision 55d16ca8949c09ee241c87b7600e2a8bc90d3743
Who changed what in which revision?
User | Revision | Line number | New 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__ |