LoRaWAN MAC layer implementation

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

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

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

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

The example projects are:

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

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

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


EU868

board.h

#define USE_BAND_868


US915

board.h

#define USE_BAND_915


US915 - Hybrid

board.h

#define USE_BAND_915_HYBRID


CN780

board.h

#define USE_BAND_780


EU433

board.h

#define USE_BAND_433
Committer:
mluis
Date:
Tue Oct 20 13:21:26 2015 +0000
Revision:
0:91d1a7783bb9
Library creation synchronized with GitHub LoRaMac-node v3.4 (https://github.com/Lora-net/LoRaMac-node)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mluis 0:91d1a7783bb9 1 /*
mluis 0:91d1a7783bb9 2 / _____) _ | |
mluis 0:91d1a7783bb9 3 ( (____ _____ ____ _| |_ _____ ____| |__
mluis 0:91d1a7783bb9 4 \____ \| ___ | (_ _) ___ |/ ___) _ \
mluis 0:91d1a7783bb9 5 _____) ) ____| | | || |_| ____( (___| | | |
mluis 0:91d1a7783bb9 6 (______/|_____)_|_|_| \__)_____)\____)_| |_|
mluis 0:91d1a7783bb9 7 (C)2013 Semtech
mluis 0:91d1a7783bb9 8
mluis 0:91d1a7783bb9 9 Description: Helper functions implementation
mluis 0:91d1a7783bb9 10
mluis 0:91d1a7783bb9 11 License: Revised BSD License, see LICENSE.TXT file include in the project
mluis 0:91d1a7783bb9 12
mluis 0:91d1a7783bb9 13 Maintainer: Miguel Luis and Gregory Cristian
mluis 0:91d1a7783bb9 14 */
mluis 0:91d1a7783bb9 15 #ifndef __UTILITIES_H__
mluis 0:91d1a7783bb9 16 #define __UTILITIES_H__
mluis 0:91d1a7783bb9 17
mluis 0:91d1a7783bb9 18 /*!
mluis 0:91d1a7783bb9 19 * \brief Returns the minimum value betwen a and b
mluis 0:91d1a7783bb9 20 *
mluis 0:91d1a7783bb9 21 * \param [IN] a 1st value
mluis 0:91d1a7783bb9 22 * \param [IN] b 2nd value
mluis 0:91d1a7783bb9 23 * \retval minValue Minimum value
mluis 0:91d1a7783bb9 24 */
mluis 0:91d1a7783bb9 25 #define MIN( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) )
mluis 0:91d1a7783bb9 26
mluis 0:91d1a7783bb9 27 /*!
mluis 0:91d1a7783bb9 28 * \brief Returns the maximum value betwen a and b
mluis 0:91d1a7783bb9 29 *
mluis 0:91d1a7783bb9 30 * \param [IN] a 1st value
mluis 0:91d1a7783bb9 31 * \param [IN] b 2nd value
mluis 0:91d1a7783bb9 32 * \retval maxValue Maximum value
mluis 0:91d1a7783bb9 33 */
mluis 0:91d1a7783bb9 34 #define MAX( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) )
mluis 0:91d1a7783bb9 35
mluis 0:91d1a7783bb9 36 /*!
mluis 0:91d1a7783bb9 37 * \brief Returns 2 raised to the power of n
mluis 0:91d1a7783bb9 38 *
mluis 0:91d1a7783bb9 39 * \param [IN] n power value
mluis 0:91d1a7783bb9 40 * \retval result of raising 2 to the power n
mluis 0:91d1a7783bb9 41 */
mluis 0:91d1a7783bb9 42 #define POW2( n ) ( 1 << n )
mluis 0:91d1a7783bb9 43
mluis 0:91d1a7783bb9 44 /*!
mluis 0:91d1a7783bb9 45 * \brief Computes a random number between min and max
mluis 0:91d1a7783bb9 46 *
mluis 0:91d1a7783bb9 47 * \param [IN] min range minimum value
mluis 0:91d1a7783bb9 48 * \param [IN] max range maximum value
mluis 0:91d1a7783bb9 49 * \retval random random value in range min..max
mluis 0:91d1a7783bb9 50 */
mluis 0:91d1a7783bb9 51 int32_t randr( int32_t min, int32_t max );
mluis 0:91d1a7783bb9 52
mluis 0:91d1a7783bb9 53 /*!
mluis 0:91d1a7783bb9 54 * \brief Copies size elements of src array to dst array
mluis 0:91d1a7783bb9 55 *
mluis 0:91d1a7783bb9 56 * \remark STM32 Standard memcpy function only works on pointers that are aligned
mluis 0:91d1a7783bb9 57 *
mluis 0:91d1a7783bb9 58 * \param [OUT] dst Destination array
mluis 0:91d1a7783bb9 59 * \param [IN] src Source array
mluis 0:91d1a7783bb9 60 * \param [IN] size Number of bytes to be copied
mluis 0:91d1a7783bb9 61 */
mluis 0:91d1a7783bb9 62 void memcpy1( uint8_t *dst, const uint8_t *src, uint16_t size );
mluis 0:91d1a7783bb9 63
mluis 0:91d1a7783bb9 64 /*!
mluis 0:91d1a7783bb9 65 * \brief Set size elements of dst array with value
mluis 0:91d1a7783bb9 66 *
mluis 0:91d1a7783bb9 67 * \remark STM32 Standard memset function only works on pointers that are aligned
mluis 0:91d1a7783bb9 68 *
mluis 0:91d1a7783bb9 69 * \param [OUT] dst Destination array
mluis 0:91d1a7783bb9 70 * \param [IN] value Default value
mluis 0:91d1a7783bb9 71 * \param [IN] size Number of bytes to be copied
mluis 0:91d1a7783bb9 72 */
mluis 0:91d1a7783bb9 73 void memset1( uint8_t *dst, uint8_t value, uint16_t size );
mluis 0:91d1a7783bb9 74
mluis 0:91d1a7783bb9 75 /*!
mluis 0:91d1a7783bb9 76 * \brief Converts a nibble to an hexadecimal character
mluis 0:91d1a7783bb9 77 *
mluis 0:91d1a7783bb9 78 * \param [IN] a Nibble to be converted
mluis 0:91d1a7783bb9 79 * \retval hexChar Converted hexadecimal character
mluis 0:91d1a7783bb9 80 */
mluis 0:91d1a7783bb9 81 int8_t Nibble2HexChar( uint8_t a );
mluis 0:91d1a7783bb9 82
mluis 0:91d1a7783bb9 83 #endif // __UTILITIES_H__