Semtech / LoRaWAN-lib-dev

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

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

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

The example projects are:

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

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

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


EU868

board.h

#define USE_BAND_868


US915

board.h

#define USE_BAND_915


US915 - Hybrid

board.h

#define USE_BAND_915_HYBRID


CN780

board.h

#define USE_BAND_780


EU433

board.h

#define USE_BAND_433
Committer:
mluis
Date:
Mon Apr 24 14:11:47 2017 +0000
Revision:
2:76f59096e3a7
Parent:
1:4820e04b066c
WARNING: API timings changed from micro-seconds to milliseconds; Synchronized with https://github.com/Lora-net/LoRaMac-node git revision c82a25f9c5cc746dc2be1f8ed7f76c3707975ab2; ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mluis 0:66f12acb8acb 1 /*
mluis 0:66f12acb8acb 2 / _____) _ | |
mluis 0:66f12acb8acb 3 ( (____ _____ ____ _| |_ _____ ____| |__
mluis 0:66f12acb8acb 4 \____ \| ___ | (_ _) ___ |/ ___) _ \
mluis 0:66f12acb8acb 5 _____) ) ____| | | || |_| ____( (___| | | |
mluis 0:66f12acb8acb 6 (______/|_____)_|_|_| \__)_____)\____)_| |_|
mluis 0:66f12acb8acb 7 (C)2013 Semtech
mluis 0:66f12acb8acb 8
mluis 1:4820e04b066c 9 Description: LoRa MAC layer global definitions
mluis 0:66f12acb8acb 10
mluis 0:66f12acb8acb 11 License: Revised BSD License, see LICENSE.TXT file include in the project
mluis 0:66f12acb8acb 12
mluis 0:66f12acb8acb 13 Maintainer: Miguel Luis and Gregory Cristian
mluis 0:66f12acb8acb 14 */
mluis 0:66f12acb8acb 15 #ifndef __LORAMAC_BOARD_H__
mluis 0:66f12acb8acb 16 #define __LORAMAC_BOARD_H__
mluis 0:66f12acb8acb 17
mluis 0:66f12acb8acb 18 /*!
mluis 0:66f12acb8acb 19 * Returns individual channel mask
mluis 0:66f12acb8acb 20 *
mluis 0:66f12acb8acb 21 * \param[IN] channelIndex Channel index 1 based
mluis 0:66f12acb8acb 22 * \retval channelMask
mluis 0:66f12acb8acb 23 */
mluis 0:66f12acb8acb 24 #define LC( channelIndex ) ( uint16_t )( 1 << ( channelIndex - 1 ) )
mluis 0:66f12acb8acb 25
mluis 0:66f12acb8acb 26 #if defined( USE_BAND_433 )
mluis 0:66f12acb8acb 27
mluis 0:66f12acb8acb 28 /*!
mluis 0:66f12acb8acb 29 * LoRaMac maximum number of channels
mluis 0:66f12acb8acb 30 */
mluis 0:66f12acb8acb 31 #define LORA_MAX_NB_CHANNELS 16
mluis 0:66f12acb8acb 32
mluis 0:66f12acb8acb 33 /*!
mluis 0:66f12acb8acb 34 * Minimal datarate that can be used by the node
mluis 0:66f12acb8acb 35 */
mluis 0:66f12acb8acb 36 #define LORAMAC_TX_MIN_DATARATE DR_0
mluis 0:66f12acb8acb 37
mluis 0:66f12acb8acb 38 /*!
mluis 0:66f12acb8acb 39 * Maximal datarate that can be used by the node
mluis 0:66f12acb8acb 40 */
mluis 0:66f12acb8acb 41 #define LORAMAC_TX_MAX_DATARATE DR_7
mluis 0:66f12acb8acb 42
mluis 0:66f12acb8acb 43 /*!
mluis 0:66f12acb8acb 44 * Minimal datarate that can be used by the node
mluis 0:66f12acb8acb 45 */
mluis 0:66f12acb8acb 46 #define LORAMAC_RX_MIN_DATARATE DR_0
mluis 0:66f12acb8acb 47
mluis 0:66f12acb8acb 48 /*!
mluis 0:66f12acb8acb 49 * Maximal datarate that can be used by the node
mluis 0:66f12acb8acb 50 */
mluis 0:66f12acb8acb 51 #define LORAMAC_RX_MAX_DATARATE DR_7
mluis 0:66f12acb8acb 52
mluis 0:66f12acb8acb 53 /*!
mluis 0:66f12acb8acb 54 * Default datarate used by the node
mluis 0:66f12acb8acb 55 */
mluis 0:66f12acb8acb 56 #define LORAMAC_DEFAULT_DATARATE DR_0
mluis 0:66f12acb8acb 57
mluis 0:66f12acb8acb 58 /*!
mluis 0:66f12acb8acb 59 * Minimal Rx1 receive datarate offset
mluis 0:66f12acb8acb 60 */
mluis 0:66f12acb8acb 61 #define LORAMAC_MIN_RX1_DR_OFFSET 0
mluis 0:66f12acb8acb 62
mluis 0:66f12acb8acb 63 /*!
mluis 0:66f12acb8acb 64 * Maximal Rx1 receive datarate offset
mluis 0:66f12acb8acb 65 */
mluis 0:66f12acb8acb 66 #define LORAMAC_MAX_RX1_DR_OFFSET 5
mluis 0:66f12acb8acb 67
mluis 0:66f12acb8acb 68 /*!
mluis 0:66f12acb8acb 69 * Minimal Tx output power that can be used by the node
mluis 0:66f12acb8acb 70 */
mluis 0:66f12acb8acb 71 #define LORAMAC_MIN_TX_POWER TX_POWER_M5_DBM
mluis 0:66f12acb8acb 72
mluis 0:66f12acb8acb 73 /*!
mluis 0:66f12acb8acb 74 * Maximal Tx output power that can be used by the node
mluis 0:66f12acb8acb 75 */
mluis 0:66f12acb8acb 76 #define LORAMAC_MAX_TX_POWER TX_POWER_10_DBM
mluis 0:66f12acb8acb 77
mluis 0:66f12acb8acb 78 /*!
mluis 0:66f12acb8acb 79 * Default Tx output power used by the node
mluis 0:66f12acb8acb 80 */
mluis 0:66f12acb8acb 81 #define LORAMAC_DEFAULT_TX_POWER TX_POWER_10_DBM
mluis 0:66f12acb8acb 82
mluis 0:66f12acb8acb 83 /*!
mluis 0:66f12acb8acb 84 * LoRaMac TxPower definition
mluis 0:66f12acb8acb 85 */
mluis 0:66f12acb8acb 86 #define TX_POWER_10_DBM 0
mluis 0:66f12acb8acb 87 #define TX_POWER_07_DBM 1
mluis 0:66f12acb8acb 88 #define TX_POWER_04_DBM 2
mluis 0:66f12acb8acb 89 #define TX_POWER_01_DBM 3
mluis 0:66f12acb8acb 90 #define TX_POWER_M2_DBM 4
mluis 0:66f12acb8acb 91 #define TX_POWER_M5_DBM 5
mluis 0:66f12acb8acb 92
mluis 0:66f12acb8acb 93 /*!
mluis 0:66f12acb8acb 94 * LoRaMac datarates definition
mluis 0:66f12acb8acb 95 */
mluis 0:66f12acb8acb 96 #define DR_0 0 // SF12 - BW125
mluis 0:66f12acb8acb 97 #define DR_1 1 // SF11 - BW125
mluis 0:66f12acb8acb 98 #define DR_2 2 // SF10 - BW125
mluis 0:66f12acb8acb 99 #define DR_3 3 // SF9 - BW125
mluis 0:66f12acb8acb 100 #define DR_4 4 // SF8 - BW125
mluis 0:66f12acb8acb 101 #define DR_5 5 // SF7 - BW125
mluis 0:66f12acb8acb 102 #define DR_6 6 // SF7 - BW250
mluis 0:66f12acb8acb 103 #define DR_7 7 // FSK
mluis 0:66f12acb8acb 104
mluis 0:66f12acb8acb 105 /*!
mluis 2:76f59096e3a7 106 * Verification of default datarate
mluis 2:76f59096e3a7 107 */
mluis 2:76f59096e3a7 108 #if ( LORAMAC_DEFAULT_DATARATE > DR_5 )
mluis 2:76f59096e3a7 109 #error "A default DR higher than DR_5 may lead to connectivity loss."
mluis 2:76f59096e3a7 110 #endif
mluis 2:76f59096e3a7 111
mluis 2:76f59096e3a7 112 /*!
mluis 0:66f12acb8acb 113 * Second reception window channel definition.
mluis 0:66f12acb8acb 114 */
mluis 0:66f12acb8acb 115 // Channel = { Frequency [Hz], Datarate }
mluis 0:66f12acb8acb 116 #define RX_WND_2_CHANNEL { 434665000, DR_0 }
mluis 0:66f12acb8acb 117
mluis 0:66f12acb8acb 118 /*!
mluis 0:66f12acb8acb 119 * LoRaMac maximum number of bands
mluis 0:66f12acb8acb 120 */
mluis 0:66f12acb8acb 121 #define LORA_MAX_NB_BANDS 1
mluis 0:66f12acb8acb 122
mluis 0:66f12acb8acb 123 // Band = { DutyCycle, TxMaxPower, LastTxDoneTime, TimeOff }
mluis 0:66f12acb8acb 124 #define BAND0 { 100, TX_POWER_10_DBM, 0, 0 } // 1.0 %
mluis 0:66f12acb8acb 125
mluis 0:66f12acb8acb 126 /*!
mluis 0:66f12acb8acb 127 * LoRaMac default channels
mluis 0:66f12acb8acb 128 */
mluis 0:66f12acb8acb 129 // Channel = { Frequency [Hz], { ( ( DrMax << 4 ) | DrMin ) }, Band }
mluis 0:66f12acb8acb 130 #define LC1 { 433175000, { ( ( DR_5 << 4 ) | DR_0 ) }, 0 }
mluis 0:66f12acb8acb 131 #define LC2 { 433375000, { ( ( DR_5 << 4 ) | DR_0 ) }, 0 }
mluis 0:66f12acb8acb 132 #define LC3 { 433575000, { ( ( DR_5 << 4 ) | DR_0 ) }, 0 }
mluis 0:66f12acb8acb 133
mluis 0:66f12acb8acb 134 /*!
mluis 0:66f12acb8acb 135 * LoRaMac channels which are allowed for the join procedure
mluis 0:66f12acb8acb 136 */
mluis 0:66f12acb8acb 137 #define JOIN_CHANNELS ( uint16_t )( LC( 1 ) | LC( 2 ) | LC( 3 ) )
mluis 0:66f12acb8acb 138
mluis 2:76f59096e3a7 139 #elif defined( USE_BAND_470 )
mluis 2:76f59096e3a7 140
mluis 2:76f59096e3a7 141 /*!
mluis 2:76f59096e3a7 142 * LoRaMac maximum number of channels
mluis 2:76f59096e3a7 143 */
mluis 2:76f59096e3a7 144 #define LORA_MAX_NB_CHANNELS 96
mluis 2:76f59096e3a7 145
mluis 2:76f59096e3a7 146 /*!
mluis 2:76f59096e3a7 147 * Minimal datarate that can be used by the node
mluis 2:76f59096e3a7 148 */
mluis 2:76f59096e3a7 149 #define LORAMAC_TX_MIN_DATARATE DR_0
mluis 2:76f59096e3a7 150
mluis 2:76f59096e3a7 151 /*!
mluis 2:76f59096e3a7 152 * Maximal datarate that can be used by the node
mluis 2:76f59096e3a7 153 */
mluis 2:76f59096e3a7 154 #define LORAMAC_TX_MAX_DATARATE DR_5
mluis 2:76f59096e3a7 155
mluis 2:76f59096e3a7 156 /*!
mluis 2:76f59096e3a7 157 * Minimal datarate that can be used by the node
mluis 2:76f59096e3a7 158 */
mluis 2:76f59096e3a7 159 #define LORAMAC_RX_MIN_DATARATE DR_0
mluis 2:76f59096e3a7 160
mluis 2:76f59096e3a7 161 /*!
mluis 2:76f59096e3a7 162 * Maximal datarate that can be used by the node
mluis 2:76f59096e3a7 163 */
mluis 2:76f59096e3a7 164 #define LORAMAC_RX_MAX_DATARATE DR_5
mluis 2:76f59096e3a7 165
mluis 2:76f59096e3a7 166 /*!
mluis 2:76f59096e3a7 167 * Default datarate used by the node
mluis 2:76f59096e3a7 168 */
mluis 2:76f59096e3a7 169 #define LORAMAC_DEFAULT_DATARATE DR_0
mluis 2:76f59096e3a7 170
mluis 2:76f59096e3a7 171 /*!
mluis 2:76f59096e3a7 172 * Minimal Rx1 receive datarate offset
mluis 2:76f59096e3a7 173 */
mluis 2:76f59096e3a7 174 #define LORAMAC_MIN_RX1_DR_OFFSET 0
mluis 2:76f59096e3a7 175
mluis 2:76f59096e3a7 176 /*!
mluis 2:76f59096e3a7 177 * Maximal Rx1 receive datarate offset
mluis 2:76f59096e3a7 178 */
mluis 2:76f59096e3a7 179 #define LORAMAC_MAX_RX1_DR_OFFSET 3
mluis 2:76f59096e3a7 180
mluis 2:76f59096e3a7 181 /*!
mluis 2:76f59096e3a7 182 * Minimal Tx output power that can be used by the node
mluis 2:76f59096e3a7 183 */
mluis 2:76f59096e3a7 184 #define LORAMAC_MIN_TX_POWER TX_POWER_2_DBM
mluis 2:76f59096e3a7 185
mluis 2:76f59096e3a7 186 /*!
mluis 2:76f59096e3a7 187 * Maximal Tx output power that can be used by the node
mluis 2:76f59096e3a7 188 */
mluis 2:76f59096e3a7 189 #define LORAMAC_MAX_TX_POWER TX_POWER_17_DBM
mluis 2:76f59096e3a7 190
mluis 2:76f59096e3a7 191 /*!
mluis 2:76f59096e3a7 192 * Default Tx output power used by the node
mluis 2:76f59096e3a7 193 */
mluis 2:76f59096e3a7 194 #define LORAMAC_DEFAULT_TX_POWER TX_POWER_14_DBM
mluis 2:76f59096e3a7 195
mluis 2:76f59096e3a7 196 /*!
mluis 2:76f59096e3a7 197 * LoRaMac TxPower definition
mluis 2:76f59096e3a7 198 */
mluis 2:76f59096e3a7 199 #define TX_POWER_17_DBM 0
mluis 2:76f59096e3a7 200 #define TX_POWER_16_DBM 1
mluis 2:76f59096e3a7 201 #define TX_POWER_14_DBM 2
mluis 2:76f59096e3a7 202 #define TX_POWER_12_DBM 3
mluis 2:76f59096e3a7 203 #define TX_POWER_10_DBM 4
mluis 2:76f59096e3a7 204 #define TX_POWER_7_DBM 5
mluis 2:76f59096e3a7 205 #define TX_POWER_5_DBM 6
mluis 2:76f59096e3a7 206 #define TX_POWER_2_DBM 7
mluis 2:76f59096e3a7 207
mluis 2:76f59096e3a7 208
mluis 2:76f59096e3a7 209 /*!
mluis 2:76f59096e3a7 210 * LoRaMac datarates definition
mluis 2:76f59096e3a7 211 */
mluis 2:76f59096e3a7 212 #define DR_0 0 // SF12 - BW125 |
mluis 2:76f59096e3a7 213 #define DR_1 1 // SF11 - BW125 |
mluis 2:76f59096e3a7 214 #define DR_2 2 // SF10 - BW125 |
mluis 2:76f59096e3a7 215 #define DR_3 3 // SF9 - BW125 |
mluis 2:76f59096e3a7 216 #define DR_4 4 // SF8 - BW125 |
mluis 2:76f59096e3a7 217 #define DR_5 5 // SF7 - BW125 |
mluis 2:76f59096e3a7 218
mluis 2:76f59096e3a7 219 /*!
mluis 2:76f59096e3a7 220 * Second reception window channel definition.
mluis 2:76f59096e3a7 221 */
mluis 2:76f59096e3a7 222 // Channel = { Frequency [Hz], Datarate }
mluis 2:76f59096e3a7 223 #define RX_WND_2_CHANNEL { 505300000, DR_0 }
mluis 2:76f59096e3a7 224
mluis 2:76f59096e3a7 225 /*!
mluis 2:76f59096e3a7 226 * LoRaMac maximum number of bands
mluis 2:76f59096e3a7 227 */
mluis 2:76f59096e3a7 228 #define LORA_MAX_NB_BANDS 1
mluis 2:76f59096e3a7 229
mluis 2:76f59096e3a7 230 // Band = { DutyCycle, TxMaxPower, LastTxDoneTime, TimeOff }
mluis 2:76f59096e3a7 231 #define BAND0 { 1, TX_POWER_17_DBM, 0, 0 } // 100.0 %
mluis 2:76f59096e3a7 232
mluis 0:66f12acb8acb 233 #elif defined( USE_BAND_780 )
mluis 0:66f12acb8acb 234
mluis 0:66f12acb8acb 235 /*!
mluis 0:66f12acb8acb 236 * LoRaMac maximum number of channels
mluis 0:66f12acb8acb 237 */
mluis 0:66f12acb8acb 238 #define LORA_MAX_NB_CHANNELS 16
mluis 0:66f12acb8acb 239
mluis 0:66f12acb8acb 240 /*!
mluis 0:66f12acb8acb 241 * Minimal datarate that can be used by the node
mluis 0:66f12acb8acb 242 */
mluis 0:66f12acb8acb 243 #define LORAMAC_TX_MIN_DATARATE DR_0
mluis 0:66f12acb8acb 244
mluis 0:66f12acb8acb 245 /*!
mluis 0:66f12acb8acb 246 * Maximal datarate that can be used by the node
mluis 0:66f12acb8acb 247 */
mluis 0:66f12acb8acb 248 #define LORAMAC_TX_MAX_DATARATE DR_7
mluis 0:66f12acb8acb 249
mluis 0:66f12acb8acb 250 /*!
mluis 0:66f12acb8acb 251 * Minimal datarate that can be used by the node
mluis 0:66f12acb8acb 252 */
mluis 0:66f12acb8acb 253 #define LORAMAC_RX_MIN_DATARATE DR_0
mluis 0:66f12acb8acb 254
mluis 0:66f12acb8acb 255 /*!
mluis 0:66f12acb8acb 256 * Maximal datarate that can be used by the node
mluis 0:66f12acb8acb 257 */
mluis 0:66f12acb8acb 258 #define LORAMAC_RX_MAX_DATARATE DR_7
mluis 0:66f12acb8acb 259
mluis 0:66f12acb8acb 260 /*!
mluis 0:66f12acb8acb 261 * Default datarate used by the node
mluis 0:66f12acb8acb 262 */
mluis 0:66f12acb8acb 263 #define LORAMAC_DEFAULT_DATARATE DR_0
mluis 0:66f12acb8acb 264
mluis 0:66f12acb8acb 265 /*!
mluis 0:66f12acb8acb 266 * Minimal Rx1 receive datarate offset
mluis 0:66f12acb8acb 267 */
mluis 0:66f12acb8acb 268 #define LORAMAC_MIN_RX1_DR_OFFSET 0
mluis 0:66f12acb8acb 269
mluis 0:66f12acb8acb 270 /*!
mluis 0:66f12acb8acb 271 * Maximal Rx1 receive datarate offset
mluis 0:66f12acb8acb 272 */
mluis 0:66f12acb8acb 273 #define LORAMAC_MAX_RX1_DR_OFFSET 5
mluis 0:66f12acb8acb 274
mluis 0:66f12acb8acb 275 /*!
mluis 0:66f12acb8acb 276 * Minimal Tx output power that can be used by the node
mluis 0:66f12acb8acb 277 */
mluis 0:66f12acb8acb 278 #define LORAMAC_MIN_TX_POWER TX_POWER_M5_DBM
mluis 0:66f12acb8acb 279
mluis 0:66f12acb8acb 280 /*!
mluis 0:66f12acb8acb 281 * Maximal Tx output power that can be used by the node
mluis 0:66f12acb8acb 282 */
mluis 0:66f12acb8acb 283 #define LORAMAC_MAX_TX_POWER TX_POWER_10_DBM
mluis 0:66f12acb8acb 284
mluis 0:66f12acb8acb 285 /*!
mluis 0:66f12acb8acb 286 * Default Tx output power used by the node
mluis 0:66f12acb8acb 287 */
mluis 0:66f12acb8acb 288 #define LORAMAC_DEFAULT_TX_POWER TX_POWER_10_DBM
mluis 0:66f12acb8acb 289
mluis 0:66f12acb8acb 290 /*!
mluis 0:66f12acb8acb 291 * LoRaMac TxPower definition
mluis 0:66f12acb8acb 292 */
mluis 0:66f12acb8acb 293 #define TX_POWER_10_DBM 0
mluis 0:66f12acb8acb 294 #define TX_POWER_07_DBM 1
mluis 0:66f12acb8acb 295 #define TX_POWER_04_DBM 2
mluis 0:66f12acb8acb 296 #define TX_POWER_01_DBM 3
mluis 0:66f12acb8acb 297 #define TX_POWER_M2_DBM 4
mluis 0:66f12acb8acb 298 #define TX_POWER_M5_DBM 5
mluis 0:66f12acb8acb 299
mluis 0:66f12acb8acb 300 /*!
mluis 0:66f12acb8acb 301 * LoRaMac datarates definition
mluis 0:66f12acb8acb 302 */
mluis 0:66f12acb8acb 303 #define DR_0 0 // SF12 - BW125
mluis 0:66f12acb8acb 304 #define DR_1 1 // SF11 - BW125
mluis 0:66f12acb8acb 305 #define DR_2 2 // SF10 - BW125
mluis 0:66f12acb8acb 306 #define DR_3 3 // SF9 - BW125
mluis 0:66f12acb8acb 307 #define DR_4 4 // SF8 - BW125
mluis 0:66f12acb8acb 308 #define DR_5 5 // SF7 - BW125
mluis 0:66f12acb8acb 309 #define DR_6 6 // SF7 - BW250
mluis 0:66f12acb8acb 310 #define DR_7 7 // FSK
mluis 0:66f12acb8acb 311
mluis 0:66f12acb8acb 312 /*!
mluis 2:76f59096e3a7 313 * Verification of default datarate
mluis 2:76f59096e3a7 314 */
mluis 2:76f59096e3a7 315 #if ( LORAMAC_DEFAULT_DATARATE > DR_5 )
mluis 2:76f59096e3a7 316 #error "A default DR higher than DR_5 may lead to connectivity loss."
mluis 2:76f59096e3a7 317 #endif
mluis 2:76f59096e3a7 318
mluis 2:76f59096e3a7 319 /*!
mluis 0:66f12acb8acb 320 * Second reception window channel definition.
mluis 0:66f12acb8acb 321 */
mluis 0:66f12acb8acb 322 // Channel = { Frequency [Hz], Datarate }
mluis 0:66f12acb8acb 323 #define RX_WND_2_CHANNEL { 786000000, DR_0 }
mluis 0:66f12acb8acb 324
mluis 0:66f12acb8acb 325 /*!
mluis 0:66f12acb8acb 326 * LoRaMac maximum number of bands
mluis 0:66f12acb8acb 327 */
mluis 0:66f12acb8acb 328 #define LORA_MAX_NB_BANDS 1
mluis 0:66f12acb8acb 329
mluis 0:66f12acb8acb 330 // Band = { DutyCycle, TxMaxPower, LastTxDoneTime, TimeOff }
mluis 0:66f12acb8acb 331 #define BAND0 { 100, TX_POWER_10_DBM, 0, 0 } // 1.0 %
mluis 0:66f12acb8acb 332
mluis 0:66f12acb8acb 333 /*!
mluis 0:66f12acb8acb 334 * LoRaMac default channels
mluis 0:66f12acb8acb 335 */
mluis 0:66f12acb8acb 336 // Channel = { Frequency [Hz], { ( ( DrMax << 4 ) | DrMin ) }, Band }
mluis 0:66f12acb8acb 337 #define LC1 { 779500000, { ( ( DR_5 << 4 ) | DR_0 ) }, 0 }
mluis 0:66f12acb8acb 338 #define LC2 { 779700000, { ( ( DR_5 << 4 ) | DR_0 ) }, 0 }
mluis 0:66f12acb8acb 339 #define LC3 { 779900000, { ( ( DR_5 << 4 ) | DR_0 ) }, 0 }
mluis 0:66f12acb8acb 340
mluis 0:66f12acb8acb 341 /*!
mluis 0:66f12acb8acb 342 * LoRaMac channels which are allowed for the join procedure
mluis 0:66f12acb8acb 343 */
mluis 0:66f12acb8acb 344 #define JOIN_CHANNELS ( uint16_t )( LC( 1 ) | LC( 2 ) | LC( 3 ) )
mluis 0:66f12acb8acb 345
mluis 0:66f12acb8acb 346 #elif defined( USE_BAND_868 )
mluis 0:66f12acb8acb 347
mluis 0:66f12acb8acb 348 /*!
mluis 0:66f12acb8acb 349 * LoRaMac maximum number of channels
mluis 0:66f12acb8acb 350 */
mluis 0:66f12acb8acb 351 #define LORA_MAX_NB_CHANNELS 16
mluis 0:66f12acb8acb 352
mluis 0:66f12acb8acb 353 /*!
mluis 0:66f12acb8acb 354 * Minimal datarate that can be used by the node
mluis 0:66f12acb8acb 355 */
mluis 0:66f12acb8acb 356 #define LORAMAC_TX_MIN_DATARATE DR_0
mluis 0:66f12acb8acb 357
mluis 0:66f12acb8acb 358 /*!
mluis 0:66f12acb8acb 359 * Maximal datarate that can be used by the node
mluis 0:66f12acb8acb 360 */
mluis 0:66f12acb8acb 361 #define LORAMAC_TX_MAX_DATARATE DR_7
mluis 0:66f12acb8acb 362
mluis 0:66f12acb8acb 363 /*!
mluis 0:66f12acb8acb 364 * Minimal datarate that can be used by the node
mluis 0:66f12acb8acb 365 */
mluis 0:66f12acb8acb 366 #define LORAMAC_RX_MIN_DATARATE DR_0
mluis 0:66f12acb8acb 367
mluis 0:66f12acb8acb 368 /*!
mluis 0:66f12acb8acb 369 * Maximal datarate that can be used by the node
mluis 0:66f12acb8acb 370 */
mluis 0:66f12acb8acb 371 #define LORAMAC_RX_MAX_DATARATE DR_7
mluis 0:66f12acb8acb 372
mluis 0:66f12acb8acb 373 /*!
mluis 0:66f12acb8acb 374 * Default datarate used by the node
mluis 0:66f12acb8acb 375 */
mluis 0:66f12acb8acb 376 #define LORAMAC_DEFAULT_DATARATE DR_0
mluis 0:66f12acb8acb 377
mluis 0:66f12acb8acb 378 /*!
mluis 0:66f12acb8acb 379 * Minimal Rx1 receive datarate offset
mluis 0:66f12acb8acb 380 */
mluis 0:66f12acb8acb 381 #define LORAMAC_MIN_RX1_DR_OFFSET 0
mluis 0:66f12acb8acb 382
mluis 0:66f12acb8acb 383 /*!
mluis 0:66f12acb8acb 384 * Maximal Rx1 receive datarate offset
mluis 0:66f12acb8acb 385 */
mluis 0:66f12acb8acb 386 #define LORAMAC_MAX_RX1_DR_OFFSET 5
mluis 0:66f12acb8acb 387
mluis 0:66f12acb8acb 388 /*!
mluis 0:66f12acb8acb 389 * Minimal Tx output power that can be used by the node
mluis 0:66f12acb8acb 390 */
mluis 0:66f12acb8acb 391 #define LORAMAC_MIN_TX_POWER TX_POWER_02_DBM
mluis 0:66f12acb8acb 392
mluis 0:66f12acb8acb 393 /*!
mluis 0:66f12acb8acb 394 * Maximal Tx output power that can be used by the node
mluis 0:66f12acb8acb 395 */
mluis 0:66f12acb8acb 396 #define LORAMAC_MAX_TX_POWER TX_POWER_20_DBM
mluis 0:66f12acb8acb 397
mluis 0:66f12acb8acb 398 /*!
mluis 0:66f12acb8acb 399 * Default Tx output power used by the node
mluis 0:66f12acb8acb 400 */
mluis 0:66f12acb8acb 401 #define LORAMAC_DEFAULT_TX_POWER TX_POWER_14_DBM
mluis 0:66f12acb8acb 402
mluis 0:66f12acb8acb 403 /*!
mluis 0:66f12acb8acb 404 * LoRaMac TxPower definition
mluis 0:66f12acb8acb 405 */
mluis 0:66f12acb8acb 406 #define TX_POWER_20_DBM 0
mluis 0:66f12acb8acb 407 #define TX_POWER_14_DBM 1
mluis 0:66f12acb8acb 408 #define TX_POWER_11_DBM 2
mluis 0:66f12acb8acb 409 #define TX_POWER_08_DBM 3
mluis 0:66f12acb8acb 410 #define TX_POWER_05_DBM 4
mluis 0:66f12acb8acb 411 #define TX_POWER_02_DBM 5
mluis 0:66f12acb8acb 412
mluis 0:66f12acb8acb 413 /*!
mluis 0:66f12acb8acb 414 * LoRaMac datarates definition
mluis 0:66f12acb8acb 415 */
mluis 0:66f12acb8acb 416 #define DR_0 0 // SF12 - BW125
mluis 0:66f12acb8acb 417 #define DR_1 1 // SF11 - BW125
mluis 0:66f12acb8acb 418 #define DR_2 2 // SF10 - BW125
mluis 0:66f12acb8acb 419 #define DR_3 3 // SF9 - BW125
mluis 0:66f12acb8acb 420 #define DR_4 4 // SF8 - BW125
mluis 0:66f12acb8acb 421 #define DR_5 5 // SF7 - BW125
mluis 0:66f12acb8acb 422 #define DR_6 6 // SF7 - BW250
mluis 0:66f12acb8acb 423 #define DR_7 7 // FSK
mluis 0:66f12acb8acb 424
mluis 0:66f12acb8acb 425 /*!
mluis 2:76f59096e3a7 426 * Verification of default datarate
mluis 2:76f59096e3a7 427 */
mluis 2:76f59096e3a7 428 #if ( LORAMAC_DEFAULT_DATARATE > DR_5 )
mluis 2:76f59096e3a7 429 #error "A default DR higher than DR_5 may lead to connectivity loss."
mluis 2:76f59096e3a7 430 #endif
mluis 2:76f59096e3a7 431
mluis 2:76f59096e3a7 432 /*!
mluis 0:66f12acb8acb 433 * Second reception window channel definition.
mluis 0:66f12acb8acb 434 */
mluis 0:66f12acb8acb 435 // Channel = { Frequency [Hz], Datarate }
mluis 0:66f12acb8acb 436 #define RX_WND_2_CHANNEL { 869525000, DR_0 }
mluis 0:66f12acb8acb 437
mluis 0:66f12acb8acb 438 /*!
mluis 0:66f12acb8acb 439 * LoRaMac maximum number of bands
mluis 0:66f12acb8acb 440 */
mluis 0:66f12acb8acb 441 #define LORA_MAX_NB_BANDS 5
mluis 0:66f12acb8acb 442
mluis 0:66f12acb8acb 443 /*!
mluis 0:66f12acb8acb 444 * LoRaMac EU868 default bands
mluis 0:66f12acb8acb 445 */
mluis 0:66f12acb8acb 446 typedef enum
mluis 0:66f12acb8acb 447 {
mluis 0:66f12acb8acb 448 BAND_G1_0,
mluis 0:66f12acb8acb 449 BAND_G1_1,
mluis 0:66f12acb8acb 450 BAND_G1_2,
mluis 0:66f12acb8acb 451 BAND_G1_3,
mluis 0:66f12acb8acb 452 BAND_G1_4,
mluis 0:66f12acb8acb 453 }BandId_t;
mluis 0:66f12acb8acb 454
mluis 0:66f12acb8acb 455 // Band = { DutyCycle, TxMaxPower, LastTxDoneTime, TimeOff }
mluis 0:66f12acb8acb 456 #define BAND0 { 100 , TX_POWER_14_DBM, 0, 0 } // 1.0 %
mluis 0:66f12acb8acb 457 #define BAND1 { 100 , TX_POWER_14_DBM, 0, 0 } // 1.0 %
mluis 0:66f12acb8acb 458 #define BAND2 { 1000, TX_POWER_14_DBM, 0, 0 } // 0.1 %
mluis 0:66f12acb8acb 459 #define BAND3 { 10 , TX_POWER_14_DBM, 0, 0 } // 10.0 %
mluis 0:66f12acb8acb 460 #define BAND4 { 100 , TX_POWER_14_DBM, 0, 0 } // 1.0 %
mluis 0:66f12acb8acb 461
mluis 0:66f12acb8acb 462 /*!
mluis 0:66f12acb8acb 463 * LoRaMac default channels
mluis 0:66f12acb8acb 464 */
mluis 0:66f12acb8acb 465 // Channel = { Frequency [Hz], { ( ( DrMax << 4 ) | DrMin ) }, Band }
mluis 0:66f12acb8acb 466 #define LC1 { 868100000, { ( ( DR_5 << 4 ) | DR_0 ) }, 1 }
mluis 0:66f12acb8acb 467 #define LC2 { 868300000, { ( ( DR_5 << 4 ) | DR_0 ) }, 1 }
mluis 0:66f12acb8acb 468 #define LC3 { 868500000, { ( ( DR_5 << 4 ) | DR_0 ) }, 1 }
mluis 0:66f12acb8acb 469
mluis 0:66f12acb8acb 470 /*!
mluis 0:66f12acb8acb 471 * LoRaMac channels which are allowed for the join procedure
mluis 0:66f12acb8acb 472 */
mluis 0:66f12acb8acb 473 #define JOIN_CHANNELS ( uint16_t )( LC( 1 ) | LC( 2 ) | LC( 3 ) )
mluis 0:66f12acb8acb 474
mluis 0:66f12acb8acb 475 #elif defined( USE_BAND_915 ) || defined( USE_BAND_915_HYBRID )
mluis 0:66f12acb8acb 476
mluis 0:66f12acb8acb 477 /*!
mluis 0:66f12acb8acb 478 * LoRaMac maximum number of channels
mluis 0:66f12acb8acb 479 */
mluis 0:66f12acb8acb 480 #define LORA_MAX_NB_CHANNELS 72
mluis 0:66f12acb8acb 481
mluis 0:66f12acb8acb 482 /*!
mluis 0:66f12acb8acb 483 * Minimal datarate that can be used by the node
mluis 0:66f12acb8acb 484 */
mluis 0:66f12acb8acb 485 #define LORAMAC_TX_MIN_DATARATE DR_0
mluis 0:66f12acb8acb 486
mluis 0:66f12acb8acb 487 /*!
mluis 0:66f12acb8acb 488 * Maximal datarate that can be used by the node
mluis 0:66f12acb8acb 489 */
mluis 0:66f12acb8acb 490 #define LORAMAC_TX_MAX_DATARATE DR_4
mluis 0:66f12acb8acb 491
mluis 0:66f12acb8acb 492 /*!
mluis 0:66f12acb8acb 493 * Minimal datarate that can be used by the node
mluis 0:66f12acb8acb 494 */
mluis 0:66f12acb8acb 495 #define LORAMAC_RX_MIN_DATARATE DR_8
mluis 0:66f12acb8acb 496
mluis 0:66f12acb8acb 497 /*!
mluis 0:66f12acb8acb 498 * Maximal datarate that can be used by the node
mluis 0:66f12acb8acb 499 */
mluis 0:66f12acb8acb 500 #define LORAMAC_RX_MAX_DATARATE DR_13
mluis 0:66f12acb8acb 501
mluis 0:66f12acb8acb 502 /*!
mluis 0:66f12acb8acb 503 * Default datarate used by the node
mluis 0:66f12acb8acb 504 */
mluis 0:66f12acb8acb 505 #define LORAMAC_DEFAULT_DATARATE DR_0
mluis 0:66f12acb8acb 506
mluis 0:66f12acb8acb 507 /*!
mluis 0:66f12acb8acb 508 * Minimal Rx1 receive datarate offset
mluis 0:66f12acb8acb 509 */
mluis 0:66f12acb8acb 510 #define LORAMAC_MIN_RX1_DR_OFFSET 0
mluis 0:66f12acb8acb 511
mluis 0:66f12acb8acb 512 /*!
mluis 0:66f12acb8acb 513 * Maximal Rx1 receive datarate offset
mluis 0:66f12acb8acb 514 */
mluis 0:66f12acb8acb 515 #define LORAMAC_MAX_RX1_DR_OFFSET 3
mluis 0:66f12acb8acb 516
mluis 0:66f12acb8acb 517 /*!
mluis 0:66f12acb8acb 518 * Minimal Tx output power that can be used by the node
mluis 0:66f12acb8acb 519 */
mluis 0:66f12acb8acb 520 #define LORAMAC_MIN_TX_POWER TX_POWER_10_DBM
mluis 0:66f12acb8acb 521
mluis 0:66f12acb8acb 522 /*!
mluis 0:66f12acb8acb 523 * Maximal Tx output power that can be used by the node
mluis 0:66f12acb8acb 524 */
mluis 0:66f12acb8acb 525 #define LORAMAC_MAX_TX_POWER TX_POWER_30_DBM
mluis 0:66f12acb8acb 526
mluis 0:66f12acb8acb 527 /*!
mluis 0:66f12acb8acb 528 * Default Tx output power used by the node
mluis 0:66f12acb8acb 529 */
mluis 0:66f12acb8acb 530 #define LORAMAC_DEFAULT_TX_POWER TX_POWER_20_DBM
mluis 0:66f12acb8acb 531
mluis 0:66f12acb8acb 532 /*!
mluis 0:66f12acb8acb 533 * LoRaMac TxPower definition
mluis 0:66f12acb8acb 534 */
mluis 0:66f12acb8acb 535 #define TX_POWER_30_DBM 0
mluis 0:66f12acb8acb 536 #define TX_POWER_28_DBM 1
mluis 0:66f12acb8acb 537 #define TX_POWER_26_DBM 2
mluis 0:66f12acb8acb 538 #define TX_POWER_24_DBM 3
mluis 0:66f12acb8acb 539 #define TX_POWER_22_DBM 4
mluis 0:66f12acb8acb 540 #define TX_POWER_20_DBM 5
mluis 0:66f12acb8acb 541 #define TX_POWER_18_DBM 6
mluis 0:66f12acb8acb 542 #define TX_POWER_16_DBM 7
mluis 0:66f12acb8acb 543 #define TX_POWER_14_DBM 8
mluis 0:66f12acb8acb 544 #define TX_POWER_12_DBM 9
mluis 0:66f12acb8acb 545 #define TX_POWER_10_DBM 10
mluis 0:66f12acb8acb 546
mluis 0:66f12acb8acb 547 /*!
mluis 0:66f12acb8acb 548 * LoRaMac datarates definition
mluis 0:66f12acb8acb 549 */
mluis 0:66f12acb8acb 550 #define DR_0 0 // SF10 - BW125 |
mluis 0:66f12acb8acb 551 #define DR_1 1 // SF9 - BW125 |
mluis 0:66f12acb8acb 552 #define DR_2 2 // SF8 - BW125 +-> Up link
mluis 0:66f12acb8acb 553 #define DR_3 3 // SF7 - BW125 |
mluis 0:66f12acb8acb 554 #define DR_4 4 // SF8 - BW500 |
mluis 0:66f12acb8acb 555 #define DR_5 5 // RFU
mluis 0:66f12acb8acb 556 #define DR_6 6 // RFU
mluis 0:66f12acb8acb 557 #define DR_7 7 // RFU
mluis 0:66f12acb8acb 558 #define DR_8 8 // SF12 - BW500 |
mluis 0:66f12acb8acb 559 #define DR_9 9 // SF11 - BW500 |
mluis 0:66f12acb8acb 560 #define DR_10 10 // SF10 - BW500 |
mluis 0:66f12acb8acb 561 #define DR_11 11 // SF9 - BW500 |
mluis 0:66f12acb8acb 562 #define DR_12 12 // SF8 - BW500 +-> Down link
mluis 0:66f12acb8acb 563 #define DR_13 13 // SF7 - BW500 |
mluis 0:66f12acb8acb 564 #define DR_14 14 // RFU |
mluis 0:66f12acb8acb 565 #define DR_15 15 // RFU |
mluis 0:66f12acb8acb 566
mluis 0:66f12acb8acb 567 /*!
mluis 0:66f12acb8acb 568 * Second reception window channel definition.
mluis 0:66f12acb8acb 569 */
mluis 0:66f12acb8acb 570 // Channel = { Frequency [Hz], Datarate }
mluis 0:66f12acb8acb 571 #define RX_WND_2_CHANNEL { 923300000, DR_8 }
mluis 0:66f12acb8acb 572
mluis 0:66f12acb8acb 573 /*!
mluis 0:66f12acb8acb 574 * LoRaMac maximum number of bands
mluis 0:66f12acb8acb 575 */
mluis 0:66f12acb8acb 576 #define LORA_MAX_NB_BANDS 1
mluis 0:66f12acb8acb 577
mluis 0:66f12acb8acb 578 // Band = { DutyCycle, TxMaxPower, LastTxDoneTime, TimeOff }
mluis 0:66f12acb8acb 579 #define BAND0 { 1, TX_POWER_20_DBM, 0, 0 } // 100.0 %
mluis 0:66f12acb8acb 580
mluis 0:66f12acb8acb 581 /*!
mluis 0:66f12acb8acb 582 * LoRaMac default channels
mluis 0:66f12acb8acb 583 */
mluis 0:66f12acb8acb 584 // Channel = { Frequency [Hz], { ( ( DrMax << 4 ) | DrMin ) }, Band }
mluis 0:66f12acb8acb 585 /*
mluis 0:66f12acb8acb 586 * US band channels are initialized using a loop in LoRaMacInit function
mluis 0:66f12acb8acb 587 * \code
mluis 0:66f12acb8acb 588 * // 125 kHz channels
mluis 0:66f12acb8acb 589 * for( uint8_t i = 0; i < LORA_MAX_NB_CHANNELS - 8; i++ )
mluis 0:66f12acb8acb 590 * {
mluis 0:66f12acb8acb 591 * Channels[i].Frequency = 902.3e6 + i * 200e3;
mluis 0:66f12acb8acb 592 * Channels[i].DrRange.Value = ( DR_3 << 4 ) | DR_0;
mluis 0:66f12acb8acb 593 * Channels[i].Band = 0;
mluis 0:66f12acb8acb 594 * }
mluis 0:66f12acb8acb 595 * // 500 kHz channels
mluis 0:66f12acb8acb 596 * for( uint8_t i = LORA_MAX_NB_CHANNELS - 8; i < LORA_MAX_NB_CHANNELS; i++ )
mluis 0:66f12acb8acb 597 * {
mluis 0:66f12acb8acb 598 * Channels[i].Frequency = 903.0e6 + ( i - ( LORA_MAX_NB_CHANNELS - 8 ) ) * 1.6e6;
mluis 0:66f12acb8acb 599 * Channels[i].DrRange.Value = ( DR_4 << 4 ) | DR_4;
mluis 0:66f12acb8acb 600 * Channels[i].Band = 0;
mluis 0:66f12acb8acb 601 * }
mluis 0:66f12acb8acb 602 * \endcode
mluis 0:66f12acb8acb 603 */
mluis 0:66f12acb8acb 604 #else
mluis 0:66f12acb8acb 605 #error "Please define a frequency band in the compiler options."
mluis 0:66f12acb8acb 606 #endif
mluis 0:66f12acb8acb 607
mluis 0:66f12acb8acb 608 #endif // __LORAMAC_BOARD_H__