A very easy to understand LoRaWAN-node code.

Dependencies:   LoRaWAN-lib SX1272Lib X_NUCLEO_IKS01A1 mbed

Important parameters:

• In comissioning.h: DevEUI, AppEUI, AppKEY, DevADR, NwksKEY, AppsKEY, OTAA and public network. Frequency and channel block to use, confirmed or unconfirmed messages, app port, app data size and OTAA and Tx duty cycles.

• In LoRaMac.h: Maximum payload and MAC commands length, receive delays, max FCNT, adr ack limit, timeout and delay, max ack retries, rssi threshold and sync words.

• In LoRaMac.cpp: Maximum payload, MAC commands and FRMpayload length.

• In LoRaMac-board.h: Tx power, data rates and band settings.

NOTE: Please refer to LoRaWAN regional parameters (page 12 for US band) to know which parameters you can modify.

Committer:
dgabino
Date:
Tue Apr 03 17:09:34 2018 +0000
Revision:
0:60ff878b27b8
A simpler way to customize your LoRaWAN payload

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dgabino 0:60ff878b27b8 1 /*
dgabino 0:60ff878b27b8 2 / _____) _ | |
dgabino 0:60ff878b27b8 3 ( (____ _____ ____ _| |_ _____ ____| |__
dgabino 0:60ff878b27b8 4 \____ \| ___ | (_ _) ___ |/ ___) _ \
dgabino 0:60ff878b27b8 5 _____) ) ____| | | || |_| ____( (___| | | |
dgabino 0:60ff878b27b8 6 (______/|_____)_|_|_| \__)_____)\____)_| |_|
dgabino 0:60ff878b27b8 7 (C)2013 Semtech
dgabino 0:60ff878b27b8 8
dgabino 0:60ff878b27b8 9 Description: Helper functions implementation
dgabino 0:60ff878b27b8 10
dgabino 0:60ff878b27b8 11 License: Revised BSD License, see LICENSE.TXT file include in the project
dgabino 0:60ff878b27b8 12
dgabino 0:60ff878b27b8 13 Maintainer: Miguel Luis and Gregory Cristian
dgabino 0:60ff878b27b8 14 */
dgabino 0:60ff878b27b8 15 #include <stdlib.h>
dgabino 0:60ff878b27b8 16 #include <stdio.h>
dgabino 0:60ff878b27b8 17 #include "board.h"
dgabino 0:60ff878b27b8 18 #include "utilities.h"
dgabino 0:60ff878b27b8 19
dgabino 0:60ff878b27b8 20 /*!
dgabino 0:60ff878b27b8 21 * Redefinition of rand() and srand() standard C functions.
dgabino 0:60ff878b27b8 22 * These functions are redefined in order to get the same behavior across
dgabino 0:60ff878b27b8 23 * different compiler toolchains implementations.
dgabino 0:60ff878b27b8 24 */
dgabino 0:60ff878b27b8 25 // Standard random functions redefinition start
dgabino 0:60ff878b27b8 26 #define RAND_LOCAL_MAX 2147483647L
dgabino 0:60ff878b27b8 27
dgabino 0:60ff878b27b8 28 static uint32_t next = 1;
dgabino 0:60ff878b27b8 29
dgabino 0:60ff878b27b8 30 int32_t rand1( void )
dgabino 0:60ff878b27b8 31 {
dgabino 0:60ff878b27b8 32 return ( ( next = next * 1103515245L + 12345L ) % RAND_LOCAL_MAX );
dgabino 0:60ff878b27b8 33 }
dgabino 0:60ff878b27b8 34
dgabino 0:60ff878b27b8 35 void srand1( uint32_t seed )
dgabino 0:60ff878b27b8 36 {
dgabino 0:60ff878b27b8 37 next = seed;
dgabino 0:60ff878b27b8 38 }
dgabino 0:60ff878b27b8 39 // Standard random functions redefinition end
dgabino 0:60ff878b27b8 40
dgabino 0:60ff878b27b8 41 int32_t randr( int32_t min, int32_t max )
dgabino 0:60ff878b27b8 42 {
dgabino 0:60ff878b27b8 43 return ( int32_t )rand1( ) % ( max - min + 1 ) + min;
dgabino 0:60ff878b27b8 44 }
dgabino 0:60ff878b27b8 45
dgabino 0:60ff878b27b8 46 void memcpy1( uint8_t *dst, const uint8_t *src, uint16_t size )
dgabino 0:60ff878b27b8 47 {
dgabino 0:60ff878b27b8 48 while( size-- )
dgabino 0:60ff878b27b8 49 {
dgabino 0:60ff878b27b8 50 *dst++ = *src++;
dgabino 0:60ff878b27b8 51 }
dgabino 0:60ff878b27b8 52 }
dgabino 0:60ff878b27b8 53
dgabino 0:60ff878b27b8 54 void memcpyr( uint8_t *dst, const uint8_t *src, uint16_t size )
dgabino 0:60ff878b27b8 55 {
dgabino 0:60ff878b27b8 56 dst = dst + ( size - 1 );
dgabino 0:60ff878b27b8 57 while( size-- )
dgabino 0:60ff878b27b8 58 {
dgabino 0:60ff878b27b8 59 *dst-- = *src++;
dgabino 0:60ff878b27b8 60 }
dgabino 0:60ff878b27b8 61 }
dgabino 0:60ff878b27b8 62
dgabino 0:60ff878b27b8 63 void memset1( uint8_t *dst, uint8_t value, uint16_t size )
dgabino 0:60ff878b27b8 64 {
dgabino 0:60ff878b27b8 65 while( size-- )
dgabino 0:60ff878b27b8 66 {
dgabino 0:60ff878b27b8 67 *dst++ = value;
dgabino 0:60ff878b27b8 68 }
dgabino 0:60ff878b27b8 69 }
dgabino 0:60ff878b27b8 70
dgabino 0:60ff878b27b8 71 int8_t Nibble2HexChar( uint8_t a )
dgabino 0:60ff878b27b8 72 {
dgabino 0:60ff878b27b8 73 if( a < 10 )
dgabino 0:60ff878b27b8 74 {
dgabino 0:60ff878b27b8 75 return '0' + a;
dgabino 0:60ff878b27b8 76 }
dgabino 0:60ff878b27b8 77 else if( a < 16 )
dgabino 0:60ff878b27b8 78 {
dgabino 0:60ff878b27b8 79 return 'A' + ( a - 10 );
dgabino 0:60ff878b27b8 80 }
dgabino 0:60ff878b27b8 81 else
dgabino 0:60ff878b27b8 82 {
dgabino 0:60ff878b27b8 83 return '?';
dgabino 0:60ff878b27b8 84 }
dgabino 0:60ff878b27b8 85 }