Region.c 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077
  1. /*!
  2. * \file Region.c
  3. *
  4. * \brief Region implementation.
  5. *
  6. * \copyright Revised BSD License, see section \ref LICENSE.
  7. *
  8. * \code
  9. * ______ _
  10. * / _____) _ | |
  11. * ( (____ _____ ____ _| |_ _____ ____| |__
  12. * \____ \| ___ | (_ _) ___ |/ ___) _ \
  13. * _____) ) ____| | | || |_| ____( (___| | | |
  14. * (______/|_____)_|_|_| \__)_____)\____)_| |_|
  15. * (C)2013-2017 Semtech
  16. *
  17. * ___ _____ _ ___ _ _____ ___ ___ ___ ___
  18. * / __|_ _/_\ / __| |/ / __/ _ \| _ \/ __| __|
  19. * \__ \ | |/ _ \ (__| ' <| _| (_) | / (__| _|
  20. * |___/ |_/_/ \_\___|_|\_\_| \___/|_|_\\___|___|
  21. * embedded.connectivity.solutions===============
  22. *
  23. * \endcode
  24. *
  25. * \author Miguel Luis ( Semtech )
  26. *
  27. * \author Gregory Cristian ( Semtech )
  28. *
  29. * \author Daniel Jaeckle ( STACKFORCE )
  30. */
  31. #include "LoRaMac.h"
  32. // Setup regions
  33. #ifdef REGION_AS923
  34. #include "RegionAS923.h"
  35. #define AS923_CASE case LORAMAC_REGION_AS923:
  36. #define AS923_IS_ACTIVE( ) AS923_CASE { return true; }
  37. #define AS923_GET_PHY_PARAM( ) AS923_CASE { return RegionAS923GetPhyParam( getPhy ); }
  38. #define AS923_SET_BAND_TX_DONE( ) AS923_CASE { RegionAS923SetBandTxDone( txDone ); break; }
  39. #define AS923_INIT_DEFAULTS( ) AS923_CASE { RegionAS923InitDefaults( params ); break; }
  40. #define AS923_GET_NVM_CTX( ) AS923_CASE { return RegionAS923GetNvmCtx( params ); }
  41. #define AS923_VERIFY( ) AS923_CASE { return RegionAS923Verify( verify, phyAttribute ); }
  42. #define AS923_APPLY_CF_LIST( ) AS923_CASE { RegionAS923ApplyCFList( applyCFList ); break; }
  43. #define AS923_CHAN_MASK_SET( ) AS923_CASE { return RegionAS923ChanMaskSet( chanMaskSet ); }
  44. #define AS923_COMPUTE_RX_WINDOW_PARAMETERS( ) AS923_CASE { RegionAS923ComputeRxWindowParameters( datarate, minRxSymbols, rxError, rxConfigParams ); break; }
  45. #define AS923_RX_CONFIG( ) AS923_CASE { return RegionAS923RxConfig( rxConfig, datarate ); }
  46. #define AS923_TX_CONFIG( ) AS923_CASE { return RegionAS923TxConfig( txConfig, txPower, txTimeOnAir ); }
  47. #define AS923_LINK_ADR_REQ( ) AS923_CASE { return RegionAS923LinkAdrReq( linkAdrReq, drOut, txPowOut, nbRepOut, nbBytesParsed ); }
  48. #define AS923_RX_PARAM_SETUP_REQ( ) AS923_CASE { return RegionAS923RxParamSetupReq( rxParamSetupReq ); }
  49. #define AS923_NEW_CHANNEL_REQ( ) AS923_CASE { return RegionAS923NewChannelReq( newChannelReq ); }
  50. #define AS923_TX_PARAM_SETUP_REQ( ) AS923_CASE { return RegionAS923TxParamSetupReq( txParamSetupReq ); }
  51. #define AS923_DL_CHANNEL_REQ( ) AS923_CASE { return RegionAS923DlChannelReq( dlChannelReq ); }
  52. #define AS923_ALTERNATE_DR( ) AS923_CASE { return RegionAS923AlternateDr( currentDr, type ); }
  53. #define AS923_CALC_BACKOFF( ) AS923_CASE { RegionAS923CalcBackOff( calcBackOff ); break; }
  54. #define AS923_NEXT_CHANNEL( ) AS923_CASE { return RegionAS923NextChannel( nextChanParams, channel, time, aggregatedTimeOff ); }
  55. #define AS923_CHANNEL_ADD( ) AS923_CASE { return RegionAS923ChannelAdd( channelAdd ); }
  56. #define AS923_CHANNEL_REMOVE( ) AS923_CASE { return RegionAS923ChannelsRemove( channelRemove ); }
  57. #define AS923_SET_CONTINUOUS_WAVE( ) AS923_CASE { RegionAS923SetContinuousWave( continuousWave ); break; }
  58. #define AS923_APPLY_DR_OFFSET( ) AS923_CASE { return RegionAS923ApplyDrOffset( downlinkDwellTime, dr, drOffset ); }
  59. #define AS923_RX_BEACON_SETUP( ) AS923_CASE { RegionAS923RxBeaconSetup( rxBeaconSetup, outDr ); break; }
  60. #else
  61. #define AS923_IS_ACTIVE( )
  62. #define AS923_GET_PHY_PARAM( )
  63. #define AS923_SET_BAND_TX_DONE( )
  64. #define AS923_INIT_DEFAULTS( )
  65. #define AS923_GET_NVM_CTX( )
  66. #define AS923_VERIFY( )
  67. #define AS923_APPLY_CF_LIST( )
  68. #define AS923_CHAN_MASK_SET( )
  69. #define AS923_COMPUTE_RX_WINDOW_PARAMETERS( )
  70. #define AS923_RX_CONFIG( )
  71. #define AS923_TX_CONFIG( )
  72. #define AS923_LINK_ADR_REQ( )
  73. #define AS923_RX_PARAM_SETUP_REQ( )
  74. #define AS923_NEW_CHANNEL_REQ( )
  75. #define AS923_TX_PARAM_SETUP_REQ( )
  76. #define AS923_DL_CHANNEL_REQ( )
  77. #define AS923_ALTERNATE_DR( )
  78. #define AS923_CALC_BACKOFF( )
  79. #define AS923_NEXT_CHANNEL( )
  80. #define AS923_CHANNEL_ADD( )
  81. #define AS923_CHANNEL_REMOVE( )
  82. #define AS923_SET_CONTINUOUS_WAVE( )
  83. #define AS923_APPLY_DR_OFFSET( )
  84. #define AS923_RX_BEACON_SETUP( )
  85. #endif
  86. #ifdef REGION_AU915
  87. #include "RegionAU915.h"
  88. #define AU915_CASE case LORAMAC_REGION_AU915:
  89. #define AU915_IS_ACTIVE( ) AU915_CASE { return true; }
  90. #define AU915_GET_PHY_PARAM( ) AU915_CASE { return RegionAU915GetPhyParam( getPhy ); }
  91. #define AU915_SET_BAND_TX_DONE( ) AU915_CASE { RegionAU915SetBandTxDone( txDone ); break; }
  92. #define AU915_INIT_DEFAULTS( ) AU915_CASE { RegionAU915InitDefaults( params ); break; }
  93. #define AU915_GET_NVM_CTX( ) AU915_CASE { return RegionAU915GetNvmCtx( params ); }
  94. #define AU915_VERIFY( ) AU915_CASE { return RegionAU915Verify( verify, phyAttribute ); }
  95. #define AU915_APPLY_CF_LIST( ) AU915_CASE { RegionAU915ApplyCFList( applyCFList ); break; }
  96. #define AU915_CHAN_MASK_SET( ) AU915_CASE { return RegionAU915ChanMaskSet( chanMaskSet ); }
  97. #define AU915_COMPUTE_RX_WINDOW_PARAMETERS( ) AU915_CASE { RegionAU915ComputeRxWindowParameters( datarate, minRxSymbols, rxError, rxConfigParams ); break; }
  98. #define AU915_RX_CONFIG( ) AU915_CASE { return RegionAU915RxConfig( rxConfig, datarate ); }
  99. #define AU915_TX_CONFIG( ) AU915_CASE { return RegionAU915TxConfig( txConfig, txPower, txTimeOnAir ); }
  100. #define AU915_LINK_ADR_REQ( ) AU915_CASE { return RegionAU915LinkAdrReq( linkAdrReq, drOut, txPowOut, nbRepOut, nbBytesParsed ); }
  101. #define AU915_RX_PARAM_SETUP_REQ( ) AU915_CASE { return RegionAU915RxParamSetupReq( rxParamSetupReq ); }
  102. #define AU915_NEW_CHANNEL_REQ( ) AU915_CASE { return RegionAU915NewChannelReq( newChannelReq ); }
  103. #define AU915_TX_PARAM_SETUP_REQ( ) AU915_CASE { return RegionAU915TxParamSetupReq( txParamSetupReq ); }
  104. #define AU915_DL_CHANNEL_REQ( ) AU915_CASE { return RegionAU915DlChannelReq( dlChannelReq ); }
  105. #define AU915_ALTERNATE_DR( ) AU915_CASE { return RegionAU915AlternateDr( currentDr, type ); }
  106. #define AU915_CALC_BACKOFF( ) AU915_CASE { RegionAU915CalcBackOff( calcBackOff ); break; }
  107. #define AU915_NEXT_CHANNEL( ) AU915_CASE { return RegionAU915NextChannel( nextChanParams, channel, time, aggregatedTimeOff ); }
  108. #define AU915_CHANNEL_ADD( ) AU915_CASE { return RegionAU915ChannelAdd( channelAdd ); }
  109. #define AU915_CHANNEL_REMOVE( ) AU915_CASE { return RegionAU915ChannelsRemove( channelRemove ); }
  110. #define AU915_SET_CONTINUOUS_WAVE( ) AU915_CASE { RegionAU915SetContinuousWave( continuousWave ); break; }
  111. #define AU915_APPLY_DR_OFFSET( ) AU915_CASE { return RegionAU915ApplyDrOffset( downlinkDwellTime, dr, drOffset ); }
  112. #define AU915_RX_BEACON_SETUP( ) AU915_CASE { RegionAU915RxBeaconSetup( rxBeaconSetup, outDr ); break; }
  113. #else
  114. #define AU915_IS_ACTIVE( )
  115. #define AU915_GET_PHY_PARAM( )
  116. #define AU915_SET_BAND_TX_DONE( )
  117. #define AU915_INIT_DEFAULTS( )
  118. #define AU915_GET_NVM_CTX( )
  119. #define AU915_VERIFY( )
  120. #define AU915_APPLY_CF_LIST( )
  121. #define AU915_CHAN_MASK_SET( )
  122. #define AU915_COMPUTE_RX_WINDOW_PARAMETERS( )
  123. #define AU915_RX_CONFIG( )
  124. #define AU915_TX_CONFIG( )
  125. #define AU915_LINK_ADR_REQ( )
  126. #define AU915_RX_PARAM_SETUP_REQ( )
  127. #define AU915_NEW_CHANNEL_REQ( )
  128. #define AU915_TX_PARAM_SETUP_REQ( )
  129. #define AU915_DL_CHANNEL_REQ( )
  130. #define AU915_ALTERNATE_DR( )
  131. #define AU915_CALC_BACKOFF( )
  132. #define AU915_NEXT_CHANNEL( )
  133. #define AU915_CHANNEL_ADD( )
  134. #define AU915_CHANNEL_REMOVE( )
  135. #define AU915_SET_CONTINUOUS_WAVE( )
  136. #define AU915_APPLY_DR_OFFSET( )
  137. #define AU915_RX_BEACON_SETUP( )
  138. #endif
  139. #ifdef LORAWAN_DRIVER_REGION_CN470
  140. #include "RegionCN470.h"
  141. #define CN470_CASE case LORAMAC_REGION_CN470:
  142. #define CN470_IS_ACTIVE( ) CN470_CASE { return true; }
  143. #define CN470_GET_PHY_PARAM( ) CN470_CASE { return RegionCN470GetPhyParam( getPhy ); }
  144. #define CN470_SET_BAND_TX_DONE( ) CN470_CASE { RegionCN470SetBandTxDone( txDone ); break; }
  145. #define CN470_INIT_DEFAULTS( ) CN470_CASE { RegionCN470InitDefaults( params ); break; }
  146. #define CN470_GET_NVM_CTX( ) CN470_CASE { return RegionCN470GetNvmCtx( params ); }
  147. #define CN470_VERIFY( ) CN470_CASE { return RegionCN470Verify( verify, phyAttribute ); }
  148. #define CN470_APPLY_CF_LIST( ) CN470_CASE { RegionCN470ApplyCFList( applyCFList ); break; }
  149. #define CN470_CHAN_MASK_SET( ) CN470_CASE { return RegionCN470ChanMaskSet( chanMaskSet ); }
  150. #define CN470_COMPUTE_RX_WINDOW_PARAMETERS( ) CN470_CASE { RegionCN470ComputeRxWindowParameters( datarate, minRxSymbols, rxError, rxConfigParams ); break; }
  151. #define CN470_RX_CONFIG( ) CN470_CASE { return RegionCN470RxConfig( rxConfig, datarate ); }
  152. #define CN470_TX_CONFIG( ) CN470_CASE { return RegionCN470TxConfig( txConfig, txPower, txTimeOnAir ); }
  153. #define CN470_LINK_ADR_REQ( ) CN470_CASE { return RegionCN470LinkAdrReq( linkAdrReq, drOut, txPowOut, nbRepOut, nbBytesParsed ); }
  154. #define CN470_RX_PARAM_SETUP_REQ( ) CN470_CASE { return RegionCN470RxParamSetupReq( rxParamSetupReq ); }
  155. #define CN470_NEW_CHANNEL_REQ( ) CN470_CASE { return RegionCN470NewChannelReq( newChannelReq ); }
  156. #define CN470_TX_PARAM_SETUP_REQ( ) CN470_CASE { return RegionCN470TxParamSetupReq( txParamSetupReq ); }
  157. #define CN470_DL_CHANNEL_REQ( ) CN470_CASE { return RegionCN470DlChannelReq( dlChannelReq ); }
  158. #define CN470_ALTERNATE_DR( ) CN470_CASE { return RegionCN470AlternateDr( currentDr, type ); }
  159. #define CN470_CALC_BACKOFF( ) CN470_CASE { RegionCN470CalcBackOff( calcBackOff ); break; }
  160. #define CN470_NEXT_CHANNEL( ) CN470_CASE { return RegionCN470NextChannel( nextChanParams, channel, time, aggregatedTimeOff ); }
  161. #define CN470_CHANNEL_ADD( ) CN470_CASE { return RegionCN470ChannelAdd( channelAdd ); }
  162. #define CN470_CHANNEL_REMOVE( ) CN470_CASE { return RegionCN470ChannelsRemove( channelRemove ); }
  163. #define CN470_SET_CONTINUOUS_WAVE( ) CN470_CASE { RegionCN470SetContinuousWave( continuousWave ); break; }
  164. #define CN470_APPLY_DR_OFFSET( ) CN470_CASE { return RegionCN470ApplyDrOffset( downlinkDwellTime, dr, drOffset ); }
  165. #define CN470_RX_BEACON_SETUP( ) CN470_CASE { RegionCN470RxBeaconSetup( rxBeaconSetup, outDr ); break; }
  166. #else
  167. #define CN470_IS_ACTIVE( )
  168. #define CN470_GET_PHY_PARAM( )
  169. #define CN470_SET_BAND_TX_DONE( )
  170. #define CN470_INIT_DEFAULTS( )
  171. #define CN470_GET_NVM_CTX( )
  172. #define CN470_VERIFY( )
  173. #define CN470_APPLY_CF_LIST( )
  174. #define CN470_CHAN_MASK_SET( )
  175. #define CN470_COMPUTE_RX_WINDOW_PARAMETERS( )
  176. #define CN470_RX_CONFIG( )
  177. #define CN470_TX_CONFIG( )
  178. #define CN470_LINK_ADR_REQ( )
  179. #define CN470_RX_PARAM_SETUP_REQ( )
  180. #define CN470_NEW_CHANNEL_REQ( )
  181. #define CN470_TX_PARAM_SETUP_REQ( )
  182. #define CN470_DL_CHANNEL_REQ( )
  183. #define CN470_ALTERNATE_DR( )
  184. #define CN470_CALC_BACKOFF( )
  185. #define CN470_NEXT_CHANNEL( )
  186. #define CN470_CHANNEL_ADD( )
  187. #define CN470_CHANNEL_REMOVE( )
  188. #define CN470_SET_CONTINUOUS_WAVE( )
  189. #define CN470_APPLY_DR_OFFSET( )
  190. #define CN470_RX_BEACON_SETUP( )
  191. #endif
  192. #ifdef REGION_CN779
  193. #include "RegionCN779.h"
  194. #define CN779_CASE case LORAMAC_REGION_CN779:
  195. #define CN779_IS_ACTIVE( ) CN779_CASE { return true; }
  196. #define CN779_GET_PHY_PARAM( ) CN779_CASE { return RegionCN779GetPhyParam( getPhy ); }
  197. #define CN779_SET_BAND_TX_DONE( ) CN779_CASE { RegionCN779SetBandTxDone( txDone ); break; }
  198. #define CN779_INIT_DEFAULTS( ) CN779_CASE { RegionCN779InitDefaults( params ); break; }
  199. #define CN779_GET_NVM_CTX( ) CN779_CASE { return RegionCN779GetNvmCtx( params ); }
  200. #define CN779_VERIFY( ) CN779_CASE { return RegionCN779Verify( verify, phyAttribute ); }
  201. #define CN779_APPLY_CF_LIST( ) CN779_CASE { RegionCN779ApplyCFList( applyCFList ); break; }
  202. #define CN779_CHAN_MASK_SET( ) CN779_CASE { return RegionCN779ChanMaskSet( chanMaskSet ); }
  203. #define CN779_COMPUTE_RX_WINDOW_PARAMETERS( ) CN779_CASE { RegionCN779ComputeRxWindowParameters( datarate, minRxSymbols, rxError, rxConfigParams ); break; }
  204. #define CN779_RX_CONFIG( ) CN779_CASE { return RegionCN779RxConfig( rxConfig, datarate ); }
  205. #define CN779_TX_CONFIG( ) CN779_CASE { return RegionCN779TxConfig( txConfig, txPower, txTimeOnAir ); }
  206. #define CN779_LINK_ADR_REQ( ) CN779_CASE { return RegionCN779LinkAdrReq( linkAdrReq, drOut, txPowOut, nbRepOut, nbBytesParsed ); }
  207. #define CN779_RX_PARAM_SETUP_REQ( ) CN779_CASE { return RegionCN779RxParamSetupReq( rxParamSetupReq ); }
  208. #define CN779_NEW_CHANNEL_REQ( ) CN779_CASE { return RegionCN779NewChannelReq( newChannelReq ); }
  209. #define CN779_TX_PARAM_SETUP_REQ( ) CN779_CASE { return RegionCN779TxParamSetupReq( txParamSetupReq ); }
  210. #define CN779_DL_CHANNEL_REQ( ) CN779_CASE { return RegionCN779DlChannelReq( dlChannelReq ); }
  211. #define CN779_ALTERNATE_DR( ) CN779_CASE { return RegionCN779AlternateDr( currentDr, type ); }
  212. #define CN779_CALC_BACKOFF( ) CN779_CASE { RegionCN779CalcBackOff( calcBackOff ); break; }
  213. #define CN779_NEXT_CHANNEL( ) CN779_CASE { return RegionCN779NextChannel( nextChanParams, channel, time, aggregatedTimeOff ); }
  214. #define CN779_CHANNEL_ADD( ) CN779_CASE { return RegionCN779ChannelAdd( channelAdd ); }
  215. #define CN779_CHANNEL_REMOVE( ) CN779_CASE { return RegionCN779ChannelsRemove( channelRemove ); }
  216. #define CN779_SET_CONTINUOUS_WAVE( ) CN779_CASE { RegionCN779SetContinuousWave( continuousWave ); break; }
  217. #define CN779_APPLY_DR_OFFSET( ) CN779_CASE { return RegionCN779ApplyDrOffset( downlinkDwellTime, dr, drOffset ); }
  218. #define CN779_RX_BEACON_SETUP( ) CN779_CASE { RegionCN779RxBeaconSetup( rxBeaconSetup, outDr ); break; }
  219. #else
  220. #define CN779_IS_ACTIVE( )
  221. #define CN779_GET_PHY_PARAM( )
  222. #define CN779_SET_BAND_TX_DONE( )
  223. #define CN779_INIT_DEFAULTS( )
  224. #define CN779_GET_NVM_CTX( )
  225. #define CN779_VERIFY( )
  226. #define CN779_APPLY_CF_LIST( )
  227. #define CN779_CHAN_MASK_SET( )
  228. #define CN779_COMPUTE_RX_WINDOW_PARAMETERS( )
  229. #define CN779_RX_CONFIG( )
  230. #define CN779_TX_CONFIG( )
  231. #define CN779_LINK_ADR_REQ( )
  232. #define CN779_RX_PARAM_SETUP_REQ( )
  233. #define CN779_NEW_CHANNEL_REQ( )
  234. #define CN779_TX_PARAM_SETUP_REQ( )
  235. #define CN779_DL_CHANNEL_REQ( )
  236. #define CN779_ALTERNATE_DR( )
  237. #define CN779_CALC_BACKOFF( )
  238. #define CN779_NEXT_CHANNEL( )
  239. #define CN779_CHANNEL_ADD( )
  240. #define CN779_CHANNEL_REMOVE( )
  241. #define CN779_SET_CONTINUOUS_WAVE( )
  242. #define CN779_APPLY_DR_OFFSET( )
  243. #define CN779_RX_BEACON_SETUP( )
  244. #endif
  245. #ifdef LORAWAN_DRIVER_REGION_EU433
  246. #include "RegionEU433.h"
  247. #define EU433_CASE case LORAMAC_REGION_EU433:
  248. #define EU433_IS_ACTIVE( ) EU433_CASE { return true; }
  249. #define EU433_GET_PHY_PARAM( ) EU433_CASE { return RegionEU433GetPhyParam( getPhy ); }
  250. #define EU433_SET_BAND_TX_DONE( ) EU433_CASE { RegionEU433SetBandTxDone( txDone ); break; }
  251. #define EU433_INIT_DEFAULTS( ) EU433_CASE { RegionEU433InitDefaults( params ); break; }
  252. #define EU433_GET_NVM_CTX( ) EU433_CASE { return RegionEU433GetNvmCtx( params ); }
  253. #define EU433_VERIFY( ) EU433_CASE { return RegionEU433Verify( verify, phyAttribute ); }
  254. #define EU433_APPLY_CF_LIST( ) EU433_CASE { RegionEU433ApplyCFList( applyCFList ); break; }
  255. #define EU433_CHAN_MASK_SET( ) EU433_CASE { return RegionEU433ChanMaskSet( chanMaskSet ); }
  256. #define EU433_COMPUTE_RX_WINDOW_PARAMETERS( ) EU433_CASE { RegionEU433ComputeRxWindowParameters( datarate, minRxSymbols, rxError, rxConfigParams ); break; }
  257. #define EU433_RX_CONFIG( ) EU433_CASE { return RegionEU433RxConfig( rxConfig, datarate ); }
  258. #define EU433_TX_CONFIG( ) EU433_CASE { return RegionEU433TxConfig( txConfig, txPower, txTimeOnAir ); }
  259. #define EU433_LINK_ADR_REQ( ) EU433_CASE { return RegionEU433LinkAdrReq( linkAdrReq, drOut, txPowOut, nbRepOut, nbBytesParsed ); }
  260. #define EU433_RX_PARAM_SETUP_REQ( ) EU433_CASE { return RegionEU433RxParamSetupReq( rxParamSetupReq ); }
  261. #define EU433_NEW_CHANNEL_REQ( ) EU433_CASE { return RegionEU433NewChannelReq( newChannelReq ); }
  262. #define EU433_TX_PARAM_SETUP_REQ( ) EU433_CASE { return RegionEU433TxParamSetupReq( txParamSetupReq ); }
  263. #define EU433_DL_CHANNEL_REQ( ) EU433_CASE { return RegionEU433DlChannelReq( dlChannelReq ); }
  264. #define EU433_ALTERNATE_DR( ) EU433_CASE { return RegionEU433AlternateDr( currentDr, type ); }
  265. #define EU433_CALC_BACKOFF( ) EU433_CASE { RegionEU433CalcBackOff( calcBackOff ); break; }
  266. #define EU433_NEXT_CHANNEL( ) EU433_CASE { return RegionEU433NextChannel( nextChanParams, channel, time, aggregatedTimeOff ); }
  267. #define EU433_CHANNEL_ADD( ) EU433_CASE { return RegionEU433ChannelAdd( channelAdd ); }
  268. #define EU433_CHANNEL_REMOVE( ) EU433_CASE { return RegionEU433ChannelsRemove( channelRemove ); }
  269. #define EU433_SET_CONTINUOUS_WAVE( ) EU433_CASE { RegionEU433SetContinuousWave( continuousWave ); break; }
  270. #define EU433_APPLY_DR_OFFSET( ) EU433_CASE { return RegionEU433ApplyDrOffset( downlinkDwellTime, dr, drOffset ); }
  271. #define EU433_RX_BEACON_SETUP( ) EU433_CASE { RegionEU433RxBeaconSetup( rxBeaconSetup, outDr ); break; }
  272. #else
  273. #define EU433_IS_ACTIVE( )
  274. #define EU433_GET_PHY_PARAM( )
  275. #define EU433_SET_BAND_TX_DONE( )
  276. #define EU433_INIT_DEFAULTS( )
  277. #define EU433_GET_NVM_CTX( )
  278. #define EU433_VERIFY( )
  279. #define EU433_APPLY_CF_LIST( )
  280. #define EU433_CHAN_MASK_SET( )
  281. #define EU433_COMPUTE_RX_WINDOW_PARAMETERS( )
  282. #define EU433_RX_CONFIG( )
  283. #define EU433_TX_CONFIG( )
  284. #define EU433_LINK_ADR_REQ( )
  285. #define EU433_RX_PARAM_SETUP_REQ( )
  286. #define EU433_NEW_CHANNEL_REQ( )
  287. #define EU433_TX_PARAM_SETUP_REQ( )
  288. #define EU433_DL_CHANNEL_REQ( )
  289. #define EU433_ALTERNATE_DR( )
  290. #define EU433_CALC_BACKOFF( )
  291. #define EU433_NEXT_CHANNEL( )
  292. #define EU433_CHANNEL_ADD( )
  293. #define EU433_CHANNEL_REMOVE( )
  294. #define EU433_SET_CONTINUOUS_WAVE( )
  295. #define EU433_APPLY_DR_OFFSET( )
  296. #define EU433_RX_BEACON_SETUP( )
  297. #endif
  298. #ifdef REGION_EU868
  299. #include "RegionEU868.h"
  300. #define EU868_CASE case LORAMAC_REGION_EU868:
  301. #define EU868_IS_ACTIVE( ) EU868_CASE { return true; }
  302. #define EU868_GET_PHY_PARAM( ) EU868_CASE { return RegionEU868GetPhyParam( getPhy ); }
  303. #define EU868_SET_BAND_TX_DONE( ) EU868_CASE { RegionEU868SetBandTxDone( txDone ); break; }
  304. #define EU868_INIT_DEFAULTS( ) EU868_CASE { RegionEU868InitDefaults( params ); break; }
  305. #define EU868_GET_NVM_CTX( ) EU868_CASE { return RegionEU868GetNvmCtx( params ); }
  306. #define EU868_VERIFY( ) EU868_CASE { return RegionEU868Verify( verify, phyAttribute ); }
  307. #define EU868_APPLY_CF_LIST( ) EU868_CASE { RegionEU868ApplyCFList( applyCFList ); break; }
  308. #define EU868_CHAN_MASK_SET( ) EU868_CASE { return RegionEU868ChanMaskSet( chanMaskSet ); }
  309. #define EU868_COMPUTE_RX_WINDOW_PARAMETERS( ) EU868_CASE { RegionEU868ComputeRxWindowParameters( datarate, minRxSymbols, rxError, rxConfigParams ); break; }
  310. #define EU868_RX_CONFIG( ) EU868_CASE { return RegionEU868RxConfig( rxConfig, datarate ); }
  311. #define EU868_TX_CONFIG( ) EU868_CASE { return RegionEU868TxConfig( txConfig, txPower, txTimeOnAir ); }
  312. #define EU868_LINK_ADR_REQ( ) EU868_CASE { return RegionEU868LinkAdrReq( linkAdrReq, drOut, txPowOut, nbRepOut, nbBytesParsed ); }
  313. #define EU868_RX_PARAM_SETUP_REQ( ) EU868_CASE { return RegionEU868RxParamSetupReq( rxParamSetupReq ); }
  314. #define EU868_NEW_CHANNEL_REQ( ) EU868_CASE { return RegionEU868NewChannelReq( newChannelReq ); }
  315. #define EU868_TX_PARAM_SETUP_REQ( ) EU868_CASE { return RegionEU868TxParamSetupReq( txParamSetupReq ); }
  316. #define EU868_DL_CHANNEL_REQ( ) EU868_CASE { return RegionEU868DlChannelReq( dlChannelReq ); }
  317. #define EU868_ALTERNATE_DR( ) EU868_CASE { return RegionEU868AlternateDr( currentDr, type ); }
  318. #define EU868_CALC_BACKOFF( ) EU868_CASE { RegionEU868CalcBackOff( calcBackOff ); break; }
  319. #define EU868_NEXT_CHANNEL( ) EU868_CASE { return RegionEU868NextChannel( nextChanParams, channel, time, aggregatedTimeOff ); }
  320. #define EU868_CHANNEL_ADD( ) EU868_CASE { return RegionEU868ChannelAdd( channelAdd ); }
  321. #define EU868_CHANNEL_REMOVE( ) EU868_CASE { return RegionEU868ChannelsRemove( channelRemove ); }
  322. #define EU868_SET_CONTINUOUS_WAVE( ) EU868_CASE { RegionEU868SetContinuousWave( continuousWave ); break; }
  323. #define EU868_APPLY_DR_OFFSET( ) EU868_CASE { return RegionEU868ApplyDrOffset( downlinkDwellTime, dr, drOffset ); }
  324. #define EU868_RX_BEACON_SETUP( ) EU868_CASE { RegionEU868RxBeaconSetup( rxBeaconSetup, outDr ); break; }
  325. #else
  326. #define EU868_IS_ACTIVE( )
  327. #define EU868_GET_PHY_PARAM( )
  328. #define EU868_SET_BAND_TX_DONE( )
  329. #define EU868_INIT_DEFAULTS( )
  330. #define EU868_GET_NVM_CTX( )
  331. #define EU868_VERIFY( )
  332. #define EU868_APPLY_CF_LIST( )
  333. #define EU868_CHAN_MASK_SET( )
  334. #define EU868_COMPUTE_RX_WINDOW_PARAMETERS( )
  335. #define EU868_RX_CONFIG( )
  336. #define EU868_TX_CONFIG( )
  337. #define EU868_LINK_ADR_REQ( )
  338. #define EU868_RX_PARAM_SETUP_REQ( )
  339. #define EU868_NEW_CHANNEL_REQ( )
  340. #define EU868_TX_PARAM_SETUP_REQ( )
  341. #define EU868_DL_CHANNEL_REQ( )
  342. #define EU868_ALTERNATE_DR( )
  343. #define EU868_CALC_BACKOFF( )
  344. #define EU868_NEXT_CHANNEL( )
  345. #define EU868_CHANNEL_ADD( )
  346. #define EU868_CHANNEL_REMOVE( )
  347. #define EU868_SET_CONTINUOUS_WAVE( )
  348. #define EU868_APPLY_DR_OFFSET( )
  349. #define EU868_RX_BEACON_SETUP( )
  350. #endif
  351. #ifdef REGION_KR920
  352. #include "RegionKR920.h"
  353. #define KR920_CASE case LORAMAC_REGION_KR920:
  354. #define KR920_IS_ACTIVE( ) KR920_CASE { return true; }
  355. #define KR920_GET_PHY_PARAM( ) KR920_CASE { return RegionKR920GetPhyParam( getPhy ); }
  356. #define KR920_SET_BAND_TX_DONE( ) KR920_CASE { RegionKR920SetBandTxDone( txDone ); break; }
  357. #define KR920_INIT_DEFAULTS( ) KR920_CASE { RegionKR920InitDefaults( params ); break; }
  358. #define KR920_GET_NVM_CTX( ) KR920_CASE { return RegionKR920GetNvmCtx( params ); }
  359. #define KR920_VERIFY( ) KR920_CASE { return RegionKR920Verify( verify, phyAttribute ); }
  360. #define KR920_APPLY_CF_LIST( ) KR920_CASE { RegionKR920ApplyCFList( applyCFList ); break; }
  361. #define KR920_CHAN_MASK_SET( ) KR920_CASE { return RegionKR920ChanMaskSet( chanMaskSet ); }
  362. #define KR920_COMPUTE_RX_WINDOW_PARAMETERS( ) KR920_CASE { RegionKR920ComputeRxWindowParameters( datarate, minRxSymbols, rxError, rxConfigParams ); break; }
  363. #define KR920_RX_CONFIG( ) KR920_CASE { return RegionKR920RxConfig( rxConfig, datarate ); }
  364. #define KR920_TX_CONFIG( ) KR920_CASE { return RegionKR920TxConfig( txConfig, txPower, txTimeOnAir ); }
  365. #define KR920_LINK_ADR_REQ( ) KR920_CASE { return RegionKR920LinkAdrReq( linkAdrReq, drOut, txPowOut, nbRepOut, nbBytesParsed ); }
  366. #define KR920_RX_PARAM_SETUP_REQ( ) KR920_CASE { return RegionKR920RxParamSetupReq( rxParamSetupReq ); }
  367. #define KR920_NEW_CHANNEL_REQ( ) KR920_CASE { return RegionKR920NewChannelReq( newChannelReq ); }
  368. #define KR920_TX_PARAM_SETUP_REQ( ) KR920_CASE { return RegionKR920TxParamSetupReq( txParamSetupReq ); }
  369. #define KR920_DL_CHANNEL_REQ( ) KR920_CASE { return RegionKR920DlChannelReq( dlChannelReq ); }
  370. #define KR920_ALTERNATE_DR( ) KR920_CASE { return RegionKR920AlternateDr( currentDr, type ); }
  371. #define KR920_CALC_BACKOFF( ) KR920_CASE { RegionKR920CalcBackOff( calcBackOff ); break; }
  372. #define KR920_NEXT_CHANNEL( ) KR920_CASE { return RegionKR920NextChannel( nextChanParams, channel, time, aggregatedTimeOff ); }
  373. #define KR920_CHANNEL_ADD( ) KR920_CASE { return RegionKR920ChannelAdd( channelAdd ); }
  374. #define KR920_CHANNEL_REMOVE( ) KR920_CASE { return RegionKR920ChannelsRemove( channelRemove ); }
  375. #define KR920_SET_CONTINUOUS_WAVE( ) KR920_CASE { RegionKR920SetContinuousWave( continuousWave ); break; }
  376. #define KR920_APPLY_DR_OFFSET( ) KR920_CASE { return RegionKR920ApplyDrOffset( downlinkDwellTime, dr, drOffset ); }
  377. #define KR920_RX_BEACON_SETUP( ) KR920_CASE { RegionKR920RxBeaconSetup( rxBeaconSetup, outDr ); break; }
  378. #else
  379. #define KR920_IS_ACTIVE( )
  380. #define KR920_GET_PHY_PARAM( )
  381. #define KR920_SET_BAND_TX_DONE( )
  382. #define KR920_INIT_DEFAULTS( )
  383. #define KR920_GET_NVM_CTX( )
  384. #define KR920_VERIFY( )
  385. #define KR920_APPLY_CF_LIST( )
  386. #define KR920_CHAN_MASK_SET( )
  387. #define KR920_COMPUTE_RX_WINDOW_PARAMETERS( )
  388. #define KR920_RX_CONFIG( )
  389. #define KR920_TX_CONFIG( )
  390. #define KR920_LINK_ADR_REQ( )
  391. #define KR920_RX_PARAM_SETUP_REQ( )
  392. #define KR920_NEW_CHANNEL_REQ( )
  393. #define KR920_TX_PARAM_SETUP_REQ( )
  394. #define KR920_DL_CHANNEL_REQ( )
  395. #define KR920_ALTERNATE_DR( )
  396. #define KR920_CALC_BACKOFF( )
  397. #define KR920_NEXT_CHANNEL( )
  398. #define KR920_CHANNEL_ADD( )
  399. #define KR920_CHANNEL_REMOVE( )
  400. #define KR920_SET_CONTINUOUS_WAVE( )
  401. #define KR920_APPLY_DR_OFFSET( )
  402. #define KR920_RX_BEACON_SETUP( )
  403. #endif
  404. #ifdef REGION_IN865
  405. #include "RegionIN865.h"
  406. #define IN865_CASE case LORAMAC_REGION_IN865:
  407. #define IN865_IS_ACTIVE( ) IN865_CASE { return true; }
  408. #define IN865_GET_PHY_PARAM( ) IN865_CASE { return RegionIN865GetPhyParam( getPhy ); }
  409. #define IN865_SET_BAND_TX_DONE( ) IN865_CASE { RegionIN865SetBandTxDone( txDone ); break; }
  410. #define IN865_INIT_DEFAULTS( ) IN865_CASE { RegionIN865InitDefaults( params ); break; }
  411. #define IN865_GET_NVM_CTX( ) IN865_CASE { return RegionIN865GetNvmCtx( params ); }
  412. #define IN865_VERIFY( ) IN865_CASE { return RegionIN865Verify( verify, phyAttribute ); }
  413. #define IN865_APPLY_CF_LIST( ) IN865_CASE { RegionIN865ApplyCFList( applyCFList ); break; }
  414. #define IN865_CHAN_MASK_SET( ) IN865_CASE { return RegionIN865ChanMaskSet( chanMaskSet ); }
  415. #define IN865_COMPUTE_RX_WINDOW_PARAMETERS( ) IN865_CASE { RegionIN865ComputeRxWindowParameters( datarate, minRxSymbols, rxError, rxConfigParams ); break; }
  416. #define IN865_RX_CONFIG( ) IN865_CASE { return RegionIN865RxConfig( rxConfig, datarate ); }
  417. #define IN865_TX_CONFIG( ) IN865_CASE { return RegionIN865TxConfig( txConfig, txPower, txTimeOnAir ); }
  418. #define IN865_LINK_ADR_REQ( ) IN865_CASE { return RegionIN865LinkAdrReq( linkAdrReq, drOut, txPowOut, nbRepOut, nbBytesParsed ); }
  419. #define IN865_RX_PARAM_SETUP_REQ( ) IN865_CASE { return RegionIN865RxParamSetupReq( rxParamSetupReq ); }
  420. #define IN865_NEW_CHANNEL_REQ( ) IN865_CASE { return RegionIN865NewChannelReq( newChannelReq ); }
  421. #define IN865_TX_PARAM_SETUP_REQ( ) IN865_CASE { return RegionIN865TxParamSetupReq( txParamSetupReq ); }
  422. #define IN865_DL_CHANNEL_REQ( ) IN865_CASE { return RegionIN865DlChannelReq( dlChannelReq ); }
  423. #define IN865_ALTERNATE_DR( ) IN865_CASE { return RegionIN865AlternateDr( currentDr, type ); }
  424. #define IN865_CALC_BACKOFF( ) IN865_CASE { RegionIN865CalcBackOff( calcBackOff ); break; }
  425. #define IN865_NEXT_CHANNEL( ) IN865_CASE { return RegionIN865NextChannel( nextChanParams, channel, time, aggregatedTimeOff ); }
  426. #define IN865_CHANNEL_ADD( ) IN865_CASE { return RegionIN865ChannelAdd( channelAdd ); }
  427. #define IN865_CHANNEL_REMOVE( ) IN865_CASE { return RegionIN865ChannelsRemove( channelRemove ); }
  428. #define IN865_SET_CONTINUOUS_WAVE( ) IN865_CASE { RegionIN865SetContinuousWave( continuousWave ); break; }
  429. #define IN865_APPLY_DR_OFFSET( ) IN865_CASE { return RegionIN865ApplyDrOffset( downlinkDwellTime, dr, drOffset ); }
  430. #define IN865_RX_BEACON_SETUP( ) IN865_CASE { RegionIN865RxBeaconSetup( rxBeaconSetup, outDr ); break; }
  431. #else
  432. #define IN865_IS_ACTIVE( )
  433. #define IN865_GET_PHY_PARAM( )
  434. #define IN865_SET_BAND_TX_DONE( )
  435. #define IN865_INIT_DEFAULTS( )
  436. #define IN865_GET_NVM_CTX( )
  437. #define IN865_VERIFY( )
  438. #define IN865_APPLY_CF_LIST( )
  439. #define IN865_CHAN_MASK_SET( )
  440. #define IN865_COMPUTE_RX_WINDOW_PARAMETERS( )
  441. #define IN865_RX_CONFIG( )
  442. #define IN865_TX_CONFIG( )
  443. #define IN865_LINK_ADR_REQ( )
  444. #define IN865_RX_PARAM_SETUP_REQ( )
  445. #define IN865_NEW_CHANNEL_REQ( )
  446. #define IN865_TX_PARAM_SETUP_REQ( )
  447. #define IN865_DL_CHANNEL_REQ( )
  448. #define IN865_ALTERNATE_DR( )
  449. #define IN865_CALC_BACKOFF( )
  450. #define IN865_NEXT_CHANNEL( )
  451. #define IN865_CHANNEL_ADD( )
  452. #define IN865_CHANNEL_REMOVE( )
  453. #define IN865_SET_CONTINUOUS_WAVE( )
  454. #define IN865_APPLY_DR_OFFSET( )
  455. #define IN865_RX_BEACON_SETUP( )
  456. #endif
  457. #ifdef REGION_US915
  458. #include "RegionUS915.h"
  459. #define US915_CASE case LORAMAC_REGION_US915:
  460. #define US915_IS_ACTIVE( ) US915_CASE { return true; }
  461. #define US915_GET_PHY_PARAM( ) US915_CASE { return RegionUS915GetPhyParam( getPhy ); }
  462. #define US915_SET_BAND_TX_DONE( ) US915_CASE { RegionUS915SetBandTxDone( txDone ); break; }
  463. #define US915_INIT_DEFAULTS( ) US915_CASE { RegionUS915InitDefaults( params ); break; }
  464. #define US915_GET_NVM_CTX( ) US915_CASE { return RegionUS915GetNvmCtx( params ); }
  465. #define US915_VERIFY( ) US915_CASE { return RegionUS915Verify( verify, phyAttribute ); }
  466. #define US915_APPLY_CF_LIST( ) US915_CASE { RegionUS915ApplyCFList( applyCFList ); break; }
  467. #define US915_CHAN_MASK_SET( ) US915_CASE { return RegionUS915ChanMaskSet( chanMaskSet ); }
  468. #define US915_COMPUTE_RX_WINDOW_PARAMETERS( ) US915_CASE { RegionUS915ComputeRxWindowParameters( datarate, minRxSymbols, rxError, rxConfigParams ); break; }
  469. #define US915_RX_CONFIG( ) US915_CASE { return RegionUS915RxConfig( rxConfig, datarate ); }
  470. #define US915_TX_CONFIG( ) US915_CASE { return RegionUS915TxConfig( txConfig, txPower, txTimeOnAir ); }
  471. #define US915_LINK_ADR_REQ( ) US915_CASE { return RegionUS915LinkAdrReq( linkAdrReq, drOut, txPowOut, nbRepOut, nbBytesParsed ); }
  472. #define US915_RX_PARAM_SETUP_REQ( ) US915_CASE { return RegionUS915RxParamSetupReq( rxParamSetupReq ); }
  473. #define US915_NEW_CHANNEL_REQ( ) US915_CASE { return RegionUS915NewChannelReq( newChannelReq ); }
  474. #define US915_TX_PARAM_SETUP_REQ( ) US915_CASE { return RegionUS915TxParamSetupReq( txParamSetupReq ); }
  475. #define US915_DL_CHANNEL_REQ( ) US915_CASE { return RegionUS915DlChannelReq( dlChannelReq ); }
  476. #define US915_ALTERNATE_DR( ) US915_CASE { return RegionUS915AlternateDr( currentDr, type ); }
  477. #define US915_CALC_BACKOFF( ) US915_CASE { RegionUS915CalcBackOff( calcBackOff ); break; }
  478. #define US915_NEXT_CHANNEL( ) US915_CASE { return RegionUS915NextChannel( nextChanParams, channel, time, aggregatedTimeOff ); }
  479. #define US915_CHANNEL_ADD( ) US915_CASE { return RegionUS915ChannelAdd( channelAdd ); }
  480. #define US915_CHANNEL_REMOVE( ) US915_CASE { return RegionUS915ChannelsRemove( channelRemove ); }
  481. #define US915_SET_CONTINUOUS_WAVE( ) US915_CASE { RegionUS915SetContinuousWave( continuousWave ); break; }
  482. #define US915_APPLY_DR_OFFSET( ) US915_CASE { return RegionUS915ApplyDrOffset( downlinkDwellTime, dr, drOffset ); }
  483. #define US915_RX_BEACON_SETUP( ) US915_CASE { RegionUS915RxBeaconSetup( rxBeaconSetup, outDr ); break; }
  484. #else
  485. #define US915_IS_ACTIVE( )
  486. #define US915_GET_PHY_PARAM( )
  487. #define US915_SET_BAND_TX_DONE( )
  488. #define US915_INIT_DEFAULTS( )
  489. #define US915_GET_NVM_CTX( )
  490. #define US915_VERIFY( )
  491. #define US915_APPLY_CF_LIST( )
  492. #define US915_CHAN_MASK_SET( )
  493. #define US915_COMPUTE_RX_WINDOW_PARAMETERS( )
  494. #define US915_RX_CONFIG( )
  495. #define US915_TX_CONFIG( )
  496. #define US915_LINK_ADR_REQ( )
  497. #define US915_RX_PARAM_SETUP_REQ( )
  498. #define US915_NEW_CHANNEL_REQ( )
  499. #define US915_TX_PARAM_SETUP_REQ( )
  500. #define US915_DL_CHANNEL_REQ( )
  501. #define US915_ALTERNATE_DR( )
  502. #define US915_CALC_BACKOFF( )
  503. #define US915_NEXT_CHANNEL( )
  504. #define US915_CHANNEL_ADD( )
  505. #define US915_CHANNEL_REMOVE( )
  506. #define US915_SET_CONTINUOUS_WAVE( )
  507. #define US915_APPLY_DR_OFFSET( )
  508. #define US915_RX_BEACON_SETUP( )
  509. #endif
  510. #ifdef REGION_RU864
  511. #include "RegionRU864.h"
  512. #define RU864_CASE case LORAMAC_REGION_RU864:
  513. #define RU864_IS_ACTIVE( ) RU864_CASE { return true; }
  514. #define RU864_GET_PHY_PARAM( ) RU864_CASE { return RegionRU864GetPhyParam( getPhy ); }
  515. #define RU864_SET_BAND_TX_DONE( ) RU864_CASE { RegionRU864SetBandTxDone( txDone ); break; }
  516. #define RU864_INIT_DEFAULTS( ) RU864_CASE { RegionRU864InitDefaults( params ); break; }
  517. #define RU864_GET_NVM_CTX( ) RU864_CASE { return RegionRU864GetNvmCtx( params ); }
  518. #define RU864_VERIFY( ) RU864_CASE { return RegionRU864Verify( verify, phyAttribute ); }
  519. #define RU864_APPLY_CF_LIST( ) RU864_CASE { RegionRU864ApplyCFList( applyCFList ); break; }
  520. #define RU864_CHAN_MASK_SET( ) RU864_CASE { return RegionRU864ChanMaskSet( chanMaskSet ); }
  521. #define RU864_COMPUTE_RX_WINDOW_PARAMETERS( ) RU864_CASE { RegionRU864ComputeRxWindowParameters( datarate, minRxSymbols, rxError, rxConfigParams ); break; }
  522. #define RU864_RX_CONFIG( ) RU864_CASE { return RegionRU864RxConfig( rxConfig, datarate ); }
  523. #define RU864_TX_CONFIG( ) RU864_CASE { return RegionRU864TxConfig( txConfig, txPower, txTimeOnAir ); }
  524. #define RU864_LINK_ADR_REQ( ) RU864_CASE { return RegionRU864LinkAdrReq( linkAdrReq, drOut, txPowOut, nbRepOut, nbBytesParsed ); }
  525. #define RU864_RX_PARAM_SETUP_REQ( ) RU864_CASE { return RegionRU864RxParamSetupReq( rxParamSetupReq ); }
  526. #define RU864_NEW_CHANNEL_REQ( ) RU864_CASE { return RegionRU864NewChannelReq( newChannelReq ); }
  527. #define RU864_TX_PARAM_SETUP_REQ( ) RU864_CASE { return RegionRU864TxParamSetupReq( txParamSetupReq ); }
  528. #define RU864_DL_CHANNEL_REQ( ) RU864_CASE { return RegionRU864DlChannelReq( dlChannelReq ); }
  529. #define RU864_ALTERNATE_DR( ) RU864_CASE { return RegionRU864AlternateDr( currentDr, type ); }
  530. #define RU864_CALC_BACKOFF( ) RU864_CASE { RegionRU864CalcBackOff( calcBackOff ); break; }
  531. #define RU864_NEXT_CHANNEL( ) RU864_CASE { return RegionRU864NextChannel( nextChanParams, channel, time, aggregatedTimeOff ); }
  532. #define RU864_CHANNEL_ADD( ) RU864_CASE { return RegionRU864ChannelAdd( channelAdd ); }
  533. #define RU864_CHANNEL_REMOVE( ) RU864_CASE { return RegionRU864ChannelsRemove( channelRemove ); }
  534. #define RU864_SET_CONTINUOUS_WAVE( ) RU864_CASE { RegionRU864SetContinuousWave( continuousWave ); break; }
  535. #define RU864_APPLY_DR_OFFSET( ) RU864_CASE { return RegionRU864ApplyDrOffset( downlinkDwellTime, dr, drOffset ); }
  536. #define RU864_RX_BEACON_SETUP( ) RU864_CASE { RegionRU864RxBeaconSetup( rxBeaconSetup, outDr ); break; }
  537. #else
  538. #define RU864_IS_ACTIVE( )
  539. #define RU864_GET_PHY_PARAM( )
  540. #define RU864_SET_BAND_TX_DONE( )
  541. #define RU864_INIT_DEFAULTS( )
  542. #define RU864_GET_NVM_CTX( )
  543. #define RU864_VERIFY( )
  544. #define RU864_APPLY_CF_LIST( )
  545. #define RU864_CHAN_MASK_SET( )
  546. #define RU864_COMPUTE_RX_WINDOW_PARAMETERS( )
  547. #define RU864_RX_CONFIG( )
  548. #define RU864_TX_CONFIG( )
  549. #define RU864_LINK_ADR_REQ( )
  550. #define RU864_RX_PARAM_SETUP_REQ( )
  551. #define RU864_NEW_CHANNEL_REQ( )
  552. #define RU864_TX_PARAM_SETUP_REQ( )
  553. #define RU864_DL_CHANNEL_REQ( )
  554. #define RU864_ALTERNATE_DR( )
  555. #define RU864_CALC_BACKOFF( )
  556. #define RU864_NEXT_CHANNEL( )
  557. #define RU864_CHANNEL_ADD( )
  558. #define RU864_CHANNEL_REMOVE( )
  559. #define RU864_SET_CONTINUOUS_WAVE( )
  560. #define RU864_APPLY_DR_OFFSET( )
  561. #define RU864_RX_BEACON_SETUP( )
  562. #endif
  563. bool RegionIsActive( LoRaMacRegion_t region )
  564. {
  565. switch( region )
  566. {
  567. AS923_IS_ACTIVE( );
  568. AU915_IS_ACTIVE( );
  569. CN470_IS_ACTIVE( );
  570. CN779_IS_ACTIVE( );
  571. EU433_IS_ACTIVE( );
  572. EU868_IS_ACTIVE( );
  573. KR920_IS_ACTIVE( );
  574. IN865_IS_ACTIVE( );
  575. US915_IS_ACTIVE( );
  576. RU864_IS_ACTIVE( );
  577. default:
  578. {
  579. return false;
  580. }
  581. }
  582. }
  583. PhyParam_t RegionGetPhyParam( LoRaMacRegion_t region, GetPhyParams_t* getPhy )
  584. {
  585. PhyParam_t phyParam = { 0 };
  586. switch( region )
  587. {
  588. AS923_GET_PHY_PARAM( );
  589. AU915_GET_PHY_PARAM( );
  590. CN470_GET_PHY_PARAM( );
  591. CN779_GET_PHY_PARAM( );
  592. EU433_GET_PHY_PARAM( );
  593. EU868_GET_PHY_PARAM( );
  594. KR920_GET_PHY_PARAM( );
  595. IN865_GET_PHY_PARAM( );
  596. US915_GET_PHY_PARAM( );
  597. RU864_GET_PHY_PARAM( );
  598. default:
  599. {
  600. return phyParam;
  601. }
  602. }
  603. }
  604. void RegionSetBandTxDone( LoRaMacRegion_t region, SetBandTxDoneParams_t* txDone )
  605. {
  606. switch( region )
  607. {
  608. AS923_SET_BAND_TX_DONE( );
  609. AU915_SET_BAND_TX_DONE( );
  610. CN470_SET_BAND_TX_DONE( );
  611. CN779_SET_BAND_TX_DONE( );
  612. EU433_SET_BAND_TX_DONE( );
  613. EU868_SET_BAND_TX_DONE( );
  614. KR920_SET_BAND_TX_DONE( );
  615. IN865_SET_BAND_TX_DONE( );
  616. US915_SET_BAND_TX_DONE( );
  617. RU864_SET_BAND_TX_DONE( );
  618. default:
  619. {
  620. return;
  621. }
  622. }
  623. }
  624. void RegionInitDefaults( LoRaMacRegion_t region, InitDefaultsParams_t* params )
  625. {
  626. switch( region )
  627. {
  628. AS923_INIT_DEFAULTS( );
  629. AU915_INIT_DEFAULTS( );
  630. CN470_INIT_DEFAULTS( );
  631. CN779_INIT_DEFAULTS( );
  632. EU433_INIT_DEFAULTS( );
  633. EU868_INIT_DEFAULTS( );
  634. KR920_INIT_DEFAULTS( );
  635. IN865_INIT_DEFAULTS( );
  636. US915_INIT_DEFAULTS( );
  637. RU864_INIT_DEFAULTS( );
  638. default:
  639. {
  640. break;
  641. }
  642. }
  643. }
  644. void* RegionGetNvmCtx( LoRaMacRegion_t region, GetNvmCtxParams_t* params )
  645. {
  646. switch( region )
  647. {
  648. AS923_GET_NVM_CTX( );
  649. AU915_GET_NVM_CTX( );
  650. CN470_GET_NVM_CTX( );
  651. CN779_GET_NVM_CTX( );
  652. EU433_GET_NVM_CTX( );
  653. EU868_GET_NVM_CTX( );
  654. KR920_GET_NVM_CTX( );
  655. IN865_GET_NVM_CTX( );
  656. US915_GET_NVM_CTX( );
  657. RU864_GET_NVM_CTX( );
  658. default:
  659. {
  660. return 0;
  661. }
  662. }
  663. }
  664. bool RegionVerify( LoRaMacRegion_t region, VerifyParams_t* verify, PhyAttribute_t phyAttribute )
  665. {
  666. switch( region )
  667. {
  668. AS923_VERIFY( );
  669. AU915_VERIFY( );
  670. CN470_VERIFY( );
  671. CN779_VERIFY( );
  672. EU433_VERIFY( );
  673. EU868_VERIFY( );
  674. KR920_VERIFY( );
  675. IN865_VERIFY( );
  676. US915_VERIFY( );
  677. RU864_VERIFY( );
  678. default:
  679. {
  680. return false;
  681. }
  682. }
  683. }
  684. void RegionApplyCFList( LoRaMacRegion_t region, ApplyCFListParams_t* applyCFList )
  685. {
  686. switch( region )
  687. {
  688. AS923_APPLY_CF_LIST( );
  689. AU915_APPLY_CF_LIST( );
  690. CN470_APPLY_CF_LIST( );
  691. CN779_APPLY_CF_LIST( );
  692. EU433_APPLY_CF_LIST( );
  693. EU868_APPLY_CF_LIST( );
  694. KR920_APPLY_CF_LIST( );
  695. IN865_APPLY_CF_LIST( );
  696. US915_APPLY_CF_LIST( );
  697. RU864_APPLY_CF_LIST( );
  698. default:
  699. {
  700. break;
  701. }
  702. }
  703. }
  704. bool RegionChanMaskSet( LoRaMacRegion_t region, ChanMaskSetParams_t* chanMaskSet )
  705. {
  706. switch( region )
  707. {
  708. AS923_CHAN_MASK_SET( );
  709. AU915_CHAN_MASK_SET( );
  710. CN470_CHAN_MASK_SET( );
  711. CN779_CHAN_MASK_SET( );
  712. EU433_CHAN_MASK_SET( );
  713. EU868_CHAN_MASK_SET( );
  714. KR920_CHAN_MASK_SET( );
  715. IN865_CHAN_MASK_SET( );
  716. US915_CHAN_MASK_SET( );
  717. RU864_CHAN_MASK_SET( );
  718. default:
  719. {
  720. return false;
  721. }
  722. }
  723. }
  724. void RegionComputeRxWindowParameters( LoRaMacRegion_t region, int8_t datarate, uint8_t minRxSymbols, uint32_t rxError, RxConfigParams_t *rxConfigParams )
  725. {
  726. switch( region )
  727. {
  728. AS923_COMPUTE_RX_WINDOW_PARAMETERS( );
  729. AU915_COMPUTE_RX_WINDOW_PARAMETERS( );
  730. CN470_COMPUTE_RX_WINDOW_PARAMETERS( );
  731. CN779_COMPUTE_RX_WINDOW_PARAMETERS( );
  732. EU433_COMPUTE_RX_WINDOW_PARAMETERS( );
  733. EU868_COMPUTE_RX_WINDOW_PARAMETERS( );
  734. KR920_COMPUTE_RX_WINDOW_PARAMETERS( );
  735. IN865_COMPUTE_RX_WINDOW_PARAMETERS( );
  736. US915_COMPUTE_RX_WINDOW_PARAMETERS( );
  737. RU864_COMPUTE_RX_WINDOW_PARAMETERS( );
  738. default:
  739. {
  740. break;
  741. }
  742. }
  743. }
  744. bool RegionRxConfig( LoRaMacRegion_t region, RxConfigParams_t* rxConfig, int8_t* datarate )
  745. {
  746. switch( region )
  747. {
  748. AS923_RX_CONFIG( );
  749. AU915_RX_CONFIG( );
  750. CN470_RX_CONFIG( );
  751. CN779_RX_CONFIG( );
  752. EU433_RX_CONFIG( );
  753. EU868_RX_CONFIG( );
  754. KR920_RX_CONFIG( );
  755. IN865_RX_CONFIG( );
  756. US915_RX_CONFIG( );
  757. RU864_RX_CONFIG( );
  758. default:
  759. {
  760. return false;
  761. }
  762. }
  763. }
  764. bool RegionTxConfig( LoRaMacRegion_t region, TxConfigParams_t* txConfig, int8_t* txPower, TimerTime_t* txTimeOnAir )
  765. {
  766. switch( region )
  767. {
  768. AS923_TX_CONFIG( );
  769. AU915_TX_CONFIG( );
  770. CN470_TX_CONFIG( );
  771. CN779_TX_CONFIG( );
  772. EU433_TX_CONFIG( );
  773. EU868_TX_CONFIG( );
  774. KR920_TX_CONFIG( );
  775. IN865_TX_CONFIG( );
  776. US915_TX_CONFIG( );
  777. RU864_TX_CONFIG( );
  778. default:
  779. {
  780. return false;
  781. }
  782. }
  783. }
  784. uint8_t RegionLinkAdrReq( LoRaMacRegion_t region, LinkAdrReqParams_t* linkAdrReq, int8_t* drOut, int8_t* txPowOut, uint8_t* nbRepOut, uint8_t* nbBytesParsed )
  785. {
  786. switch( region )
  787. {
  788. AS923_LINK_ADR_REQ( );
  789. AU915_LINK_ADR_REQ( );
  790. CN470_LINK_ADR_REQ( );
  791. CN779_LINK_ADR_REQ( );
  792. EU433_LINK_ADR_REQ( );
  793. EU868_LINK_ADR_REQ( );
  794. KR920_LINK_ADR_REQ( );
  795. IN865_LINK_ADR_REQ( );
  796. US915_LINK_ADR_REQ( );
  797. RU864_LINK_ADR_REQ( );
  798. default:
  799. {
  800. return 0;
  801. }
  802. }
  803. }
  804. uint8_t RegionRxParamSetupReq( LoRaMacRegion_t region, RxParamSetupReqParams_t* rxParamSetupReq )
  805. {
  806. switch( region )
  807. {
  808. AS923_RX_PARAM_SETUP_REQ( );
  809. AU915_RX_PARAM_SETUP_REQ( );
  810. CN470_RX_PARAM_SETUP_REQ( );
  811. CN779_RX_PARAM_SETUP_REQ( );
  812. EU433_RX_PARAM_SETUP_REQ( );
  813. EU868_RX_PARAM_SETUP_REQ( );
  814. KR920_RX_PARAM_SETUP_REQ( );
  815. IN865_RX_PARAM_SETUP_REQ( );
  816. US915_RX_PARAM_SETUP_REQ( );
  817. RU864_RX_PARAM_SETUP_REQ( );
  818. default:
  819. {
  820. return 0;
  821. }
  822. }
  823. }
  824. uint8_t RegionNewChannelReq( LoRaMacRegion_t region, NewChannelReqParams_t* newChannelReq )
  825. {
  826. switch( region )
  827. {
  828. AS923_NEW_CHANNEL_REQ( );
  829. AU915_NEW_CHANNEL_REQ( );
  830. CN470_NEW_CHANNEL_REQ( );
  831. CN779_NEW_CHANNEL_REQ( );
  832. EU433_NEW_CHANNEL_REQ( );
  833. EU868_NEW_CHANNEL_REQ( );
  834. KR920_NEW_CHANNEL_REQ( );
  835. IN865_NEW_CHANNEL_REQ( );
  836. US915_NEW_CHANNEL_REQ( );
  837. RU864_NEW_CHANNEL_REQ( );
  838. default:
  839. {
  840. return 0;
  841. }
  842. }
  843. }
  844. int8_t RegionTxParamSetupReq( LoRaMacRegion_t region, TxParamSetupReqParams_t* txParamSetupReq )
  845. {
  846. switch( region )
  847. {
  848. AS923_TX_PARAM_SETUP_REQ( );
  849. AU915_TX_PARAM_SETUP_REQ( );
  850. CN470_TX_PARAM_SETUP_REQ( );
  851. CN779_TX_PARAM_SETUP_REQ( );
  852. EU433_TX_PARAM_SETUP_REQ( );
  853. EU868_TX_PARAM_SETUP_REQ( );
  854. KR920_TX_PARAM_SETUP_REQ( );
  855. IN865_TX_PARAM_SETUP_REQ( );
  856. US915_TX_PARAM_SETUP_REQ( );
  857. RU864_TX_PARAM_SETUP_REQ( );
  858. default:
  859. {
  860. return 0;
  861. }
  862. }
  863. }
  864. uint8_t RegionDlChannelReq( LoRaMacRegion_t region, DlChannelReqParams_t* dlChannelReq )
  865. {
  866. switch( region )
  867. {
  868. AS923_DL_CHANNEL_REQ( );
  869. AU915_DL_CHANNEL_REQ( );
  870. CN470_DL_CHANNEL_REQ( );
  871. CN779_DL_CHANNEL_REQ( );
  872. EU433_DL_CHANNEL_REQ( );
  873. EU868_DL_CHANNEL_REQ( );
  874. KR920_DL_CHANNEL_REQ( );
  875. IN865_DL_CHANNEL_REQ( );
  876. US915_DL_CHANNEL_REQ( );
  877. RU864_DL_CHANNEL_REQ( );
  878. default:
  879. {
  880. return 0;
  881. }
  882. }
  883. }
  884. int8_t RegionAlternateDr( LoRaMacRegion_t region, int8_t currentDr, AlternateDrType_t type )
  885. {
  886. switch( region )
  887. {
  888. AS923_ALTERNATE_DR( );
  889. AU915_ALTERNATE_DR( );
  890. CN470_ALTERNATE_DR( );
  891. CN779_ALTERNATE_DR( );
  892. EU433_ALTERNATE_DR( );
  893. EU868_ALTERNATE_DR( );
  894. KR920_ALTERNATE_DR( );
  895. IN865_ALTERNATE_DR( );
  896. US915_ALTERNATE_DR( );
  897. RU864_ALTERNATE_DR( );
  898. default:
  899. {
  900. return 0;
  901. }
  902. }
  903. }
  904. void RegionCalcBackOff( LoRaMacRegion_t region, CalcBackOffParams_t* calcBackOff )
  905. {
  906. switch( region )
  907. {
  908. AS923_CALC_BACKOFF( );
  909. AU915_CALC_BACKOFF( );
  910. CN470_CALC_BACKOFF( );
  911. CN779_CALC_BACKOFF( );
  912. EU433_CALC_BACKOFF( );
  913. EU868_CALC_BACKOFF( );
  914. KR920_CALC_BACKOFF( );
  915. IN865_CALC_BACKOFF( );
  916. US915_CALC_BACKOFF( );
  917. RU864_CALC_BACKOFF( );
  918. default:
  919. {
  920. break;
  921. }
  922. }
  923. }
  924. LoRaMacStatus_t RegionNextChannel( LoRaMacRegion_t region, NextChanParams_t* nextChanParams, uint8_t* channel, TimerTime_t* time, TimerTime_t* aggregatedTimeOff )
  925. {
  926. switch( region )
  927. {
  928. AS923_NEXT_CHANNEL( );
  929. AU915_NEXT_CHANNEL( );
  930. CN470_NEXT_CHANNEL( );
  931. CN779_NEXT_CHANNEL( );
  932. EU433_NEXT_CHANNEL( );
  933. EU868_NEXT_CHANNEL( );
  934. KR920_NEXT_CHANNEL( );
  935. IN865_NEXT_CHANNEL( );
  936. US915_NEXT_CHANNEL( );
  937. RU864_NEXT_CHANNEL( );
  938. default:
  939. {
  940. return LORAMAC_STATUS_REGION_NOT_SUPPORTED;
  941. }
  942. }
  943. }
  944. LoRaMacStatus_t RegionChannelAdd( LoRaMacRegion_t region, ChannelAddParams_t* channelAdd )
  945. {
  946. switch( region )
  947. {
  948. AS923_CHANNEL_ADD( );
  949. AU915_CHANNEL_ADD( );
  950. CN470_CHANNEL_ADD( );
  951. CN779_CHANNEL_ADD( );
  952. EU433_CHANNEL_ADD( );
  953. EU868_CHANNEL_ADD( );
  954. KR920_CHANNEL_ADD( );
  955. IN865_CHANNEL_ADD( );
  956. US915_CHANNEL_ADD( );
  957. RU864_CHANNEL_ADD( );
  958. default:
  959. {
  960. return LORAMAC_STATUS_PARAMETER_INVALID;
  961. }
  962. }
  963. }
  964. bool RegionChannelsRemove( LoRaMacRegion_t region, ChannelRemoveParams_t* channelRemove )
  965. {
  966. switch( region )
  967. {
  968. AS923_CHANNEL_REMOVE( );
  969. AU915_CHANNEL_REMOVE( );
  970. CN470_CHANNEL_REMOVE( );
  971. CN779_CHANNEL_REMOVE( );
  972. EU433_CHANNEL_REMOVE( );
  973. EU868_CHANNEL_REMOVE( );
  974. KR920_CHANNEL_REMOVE( );
  975. IN865_CHANNEL_REMOVE( );
  976. US915_CHANNEL_REMOVE( );
  977. RU864_CHANNEL_REMOVE( );
  978. default:
  979. {
  980. return false;
  981. }
  982. }
  983. }
  984. void RegionSetContinuousWave( LoRaMacRegion_t region, ContinuousWaveParams_t* continuousWave )
  985. {
  986. switch( region )
  987. {
  988. AS923_SET_CONTINUOUS_WAVE( );
  989. AU915_SET_CONTINUOUS_WAVE( );
  990. CN470_SET_CONTINUOUS_WAVE( );
  991. CN779_SET_CONTINUOUS_WAVE( );
  992. EU433_SET_CONTINUOUS_WAVE( );
  993. EU868_SET_CONTINUOUS_WAVE( );
  994. KR920_SET_CONTINUOUS_WAVE( );
  995. IN865_SET_CONTINUOUS_WAVE( );
  996. US915_SET_CONTINUOUS_WAVE( );
  997. RU864_SET_CONTINUOUS_WAVE( );
  998. default:
  999. {
  1000. break;
  1001. }
  1002. }
  1003. }
  1004. uint8_t RegionApplyDrOffset( LoRaMacRegion_t region, uint8_t downlinkDwellTime, int8_t dr, int8_t drOffset )
  1005. {
  1006. switch( region )
  1007. {
  1008. AS923_APPLY_DR_OFFSET( );
  1009. AU915_APPLY_DR_OFFSET( );
  1010. CN470_APPLY_DR_OFFSET( );
  1011. CN779_APPLY_DR_OFFSET( );
  1012. EU433_APPLY_DR_OFFSET( );
  1013. EU868_APPLY_DR_OFFSET( );
  1014. KR920_APPLY_DR_OFFSET( );
  1015. IN865_APPLY_DR_OFFSET( );
  1016. US915_APPLY_DR_OFFSET( );
  1017. RU864_APPLY_DR_OFFSET( );
  1018. default:
  1019. {
  1020. return dr;
  1021. }
  1022. }
  1023. }
  1024. void RegionRxBeaconSetup( LoRaMacRegion_t region, RxBeaconSetup_t* rxBeaconSetup, uint8_t* outDr )
  1025. {
  1026. switch( region )
  1027. {
  1028. AS923_RX_BEACON_SETUP( );
  1029. AU915_RX_BEACON_SETUP( );
  1030. CN470_RX_BEACON_SETUP( );
  1031. CN779_RX_BEACON_SETUP( );
  1032. EU433_RX_BEACON_SETUP( );
  1033. EU868_RX_BEACON_SETUP( );
  1034. KR920_RX_BEACON_SETUP( );
  1035. IN865_RX_BEACON_SETUP( );
  1036. US915_RX_BEACON_SETUP( );
  1037. RU864_RX_BEACON_SETUP( );
  1038. default:
  1039. {
  1040. break;
  1041. }
  1042. }
  1043. }