LoRa on Multitech with Semtech mote

Dependencies:   LoRaWAN-lib SX1272Lib lib_gps lib_mma8451q lib_mpl3115a2 mbed

Fork of LoRaWAN-NAMote72-Application-Demo_Multitech by Nagaraj Krishnamurthy

Committer:
nagarajkmurthy
Date:
Wed Jan 18 12:55:33 2017 +0000
Revision:
18:168062d45093
Parent:
6:f8194e691dd4
LoRa on Multitech using Semtech mote

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ubhat 0:69f2e28d12c1 1 /*
ubhat 0:69f2e28d12c1 2 / _____) _ | |
ubhat 0:69f2e28d12c1 3 ( (____ _____ ____ _| |_ _____ ____| |__
ubhat 0:69f2e28d12c1 4 \____ \| ___ | (_ _) ___ |/ ___) _ \
ubhat 0:69f2e28d12c1 5 _____) ) ____| | | || |_| ____( (___| | | |
ubhat 0:69f2e28d12c1 6 (______/|_____)_|_|_| \__)_____)\____)_| |_|
ubhat 0:69f2e28d12c1 7 (C)2015 Semtech
ubhat 0:69f2e28d12c1 8
ubhat 0:69f2e28d12c1 9 Description: Target board general functions implementation
ubhat 0:69f2e28d12c1 10
ubhat 0:69f2e28d12c1 11 License: Revised BSD License, see LICENSE.TXT file include in the project
ubhat 0:69f2e28d12c1 12
ubhat 0:69f2e28d12c1 13 Maintainer: Miguel Luis and Gregory Cristian
ubhat 0:69f2e28d12c1 14 */
ubhat 0:69f2e28d12c1 15 #include "mbed.h"
ubhat 0:69f2e28d12c1 16 #include "board.h"
ubhat 0:69f2e28d12c1 17
ubhat 0:69f2e28d12c1 18 MoteVersion_t BoardGetVersion( void );
ubhat 0:69f2e28d12c1 19
ubhat 0:69f2e28d12c1 20 DigitalOut RedLed( PB_1 ); // Active Low
ubhat 0:69f2e28d12c1 21 DigitalOut YellowLed( PB_10 ); // Active Low
ubhat 0:69f2e28d12c1 22 DigitalOut GreenLed( PC_3 ); // Active Low
ubhat 0:69f2e28d12c1 23 DigitalOut UsrLed( PA_5 ); // Active High
ubhat 0:69f2e28d12c1 24
ubhat 0:69f2e28d12c1 25
ubhat 0:69f2e28d12c1 26 GPS Gps( PB_6, PB_7, PB_11 ); // Gps(tx, rx, en);
ubhat 0:69f2e28d12c1 27
ubhat 0:69f2e28d12c1 28 DigitalIn I2cInterrupt( PB_4 );
ubhat 0:69f2e28d12c1 29 I2C I2c(I2C_SDA, I2C_SCL);
ubhat 0:69f2e28d12c1 30
ubhat 0:69f2e28d12c1 31 MPL3115A2 Mpl3115a2( I2c, I2cInterrupt );
ubhat 0:69f2e28d12c1 32 MMA8451Q Mma8451q(I2c, I2cInterrupt);
ubhat 0:69f2e28d12c1 33
ubhat 0:69f2e28d12c1 34 DigitalOut Pc7( PC_7 );
ubhat 0:69f2e28d12c1 35 DigitalIn Pc1( PC_1 );
ubhat 0:69f2e28d12c1 36
ubhat 6:f8194e691dd4 37 // Used for Push button application demo
ubhat 6:f8194e691dd4 38 DigitalIn PC0( PC_0, PullUp );
ubhat 6:f8194e691dd4 39
ubhat 0:69f2e28d12c1 40 AnalogIn *Battery;
ubhat 0:69f2e28d12c1 41
ubhat 0:69f2e28d12c1 42 #define AIN_VREF 3.3 // STM32 internal refernce
ubhat 0:69f2e28d12c1 43 #define AIN_VBAT_DIV 2 // Resistor divider
ubhat 0:69f2e28d12c1 44
ubhat 0:69f2e28d12c1 45 SX1272MB2xAS Radio( NULL );
ubhat 0:69f2e28d12c1 46
ubhat 0:69f2e28d12c1 47 void BoardInit( void )
ubhat 0:69f2e28d12c1 48 {
ubhat 0:69f2e28d12c1 49 // Initalize LEDs
ubhat 0:69f2e28d12c1 50 RedLed = 1; // Active Low
ubhat 0:69f2e28d12c1 51 GreenLed = 1; // Active Low
ubhat 0:69f2e28d12c1 52 YellowLed = 1; // Active Low
ubhat 0:69f2e28d12c1 53 UsrLed = 0; // Active High
ubhat 0:69f2e28d12c1 54
ubhat 0:69f2e28d12c1 55 TimerTimeCounterInit( );
ubhat 0:69f2e28d12c1 56
ubhat 0:69f2e28d12c1 57 switch( BoardGetVersion( ) )
ubhat 0:69f2e28d12c1 58 {
ubhat 0:69f2e28d12c1 59 case MOTE_VERSION_2:
ubhat 0:69f2e28d12c1 60 Battery = new AnalogIn( PA_0 );
ubhat 0:69f2e28d12c1 61 Gps.en_invert = true;
ubhat 0:69f2e28d12c1 62 break;
ubhat 0:69f2e28d12c1 63 case MOTE_VERSION_3:
ubhat 0:69f2e28d12c1 64 Battery = new AnalogIn( PA_1 );
ubhat 0:69f2e28d12c1 65 Gps.en_invert = false;
ubhat 0:69f2e28d12c1 66 break;
ubhat 0:69f2e28d12c1 67 default:
ubhat 0:69f2e28d12c1 68 break;
ubhat 0:69f2e28d12c1 69 }
ubhat 0:69f2e28d12c1 70 Gps.init( );
ubhat 0:69f2e28d12c1 71 Gps.enable( 1 );
ubhat 0:69f2e28d12c1 72
ubhat 0:69f2e28d12c1 73 Mpl3115a2.init( );
ubhat 0:69f2e28d12c1 74 Mma8451q.orient_detect( );
ubhat 0:69f2e28d12c1 75 }
ubhat 0:69f2e28d12c1 76
ubhat 0:69f2e28d12c1 77
ubhat 0:69f2e28d12c1 78 uint8_t BoardGetBatteryLevel( void )
ubhat 0:69f2e28d12c1 79 {
ubhat 0:69f2e28d12c1 80 // Per LoRaWAN spec; 0 = Charging; 1...254 = level, 255 = N/A
ubhat 0:69f2e28d12c1 81 return ( Battery->read_u16( ) >> 8 ) + ( Battery->read_u16( ) >> 9 );
ubhat 0:69f2e28d12c1 82 }
ubhat 0:69f2e28d12c1 83
ubhat 0:69f2e28d12c1 84 float BoardGetBatteryVoltage( void )
ubhat 0:69f2e28d12c1 85 {
ubhat 0:69f2e28d12c1 86 return ( Battery->read( ) * AIN_VREF * AIN_VBAT_DIV );
ubhat 0:69f2e28d12c1 87 }
ubhat 0:69f2e28d12c1 88
ubhat 0:69f2e28d12c1 89 uint32_t BoardGetRandomSeed( void )
ubhat 0:69f2e28d12c1 90 {
ubhat 0:69f2e28d12c1 91 return ( ( *( uint32_t* )ID1 ) ^ ( *( uint32_t* )ID2 ) ^ ( *( uint32_t* )ID3 ) );
ubhat 0:69f2e28d12c1 92 }
ubhat 0:69f2e28d12c1 93
ubhat 0:69f2e28d12c1 94 void BoardGetDevEUI( uint8_t *id )
ubhat 0:69f2e28d12c1 95 {
ubhat 0:69f2e28d12c1 96 uint32_t *pDevEuiHWord = ( uint32_t* )&id[4];
ubhat 0:69f2e28d12c1 97
ubhat 0:69f2e28d12c1 98 if( *pDevEuiHWord == 0 )
ubhat 0:69f2e28d12c1 99 {
ubhat 0:69f2e28d12c1 100 *pDevEuiHWord = BoardGetRandomSeed( );
ubhat 0:69f2e28d12c1 101 }
ubhat 0:69f2e28d12c1 102
ubhat 0:69f2e28d12c1 103 }
ubhat 0:69f2e28d12c1 104
ubhat 0:69f2e28d12c1 105 void BoardGetUniqueId( uint8_t *id )
ubhat 0:69f2e28d12c1 106 {
ubhat 0:69f2e28d12c1 107 id[7] = ( ( *( uint32_t* )ID1 )+ ( *( uint32_t* )ID3 ) ) >> 24;
ubhat 0:69f2e28d12c1 108 id[6] = ( ( *( uint32_t* )ID1 )+ ( *( uint32_t* )ID3 ) ) >> 16;
ubhat 0:69f2e28d12c1 109 id[5] = ( ( *( uint32_t* )ID1 )+ ( *( uint32_t* )ID3 ) ) >> 8;
ubhat 0:69f2e28d12c1 110 id[4] = ( ( *( uint32_t* )ID1 )+ ( *( uint32_t* )ID3 ) );
ubhat 0:69f2e28d12c1 111 id[3] = ( ( *( uint32_t* )ID2 ) ) >> 24;
ubhat 0:69f2e28d12c1 112 id[2] = ( ( *( uint32_t* )ID2 ) ) >> 16;
ubhat 0:69f2e28d12c1 113 id[1] = ( ( *( uint32_t* )ID2 ) ) >> 8;
ubhat 0:69f2e28d12c1 114 id[0] = ( ( *( uint32_t* )ID2 ) );
ubhat 0:69f2e28d12c1 115 }
ubhat 0:69f2e28d12c1 116
ubhat 0:69f2e28d12c1 117 MoteVersion_t BoardGetVersion( void )
ubhat 0:69f2e28d12c1 118 {
ubhat 0:69f2e28d12c1 119 Pc7 = 1;
ubhat 0:69f2e28d12c1 120 char first = Pc1;
ubhat 0:69f2e28d12c1 121 Pc7 = 0;
ubhat 0:69f2e28d12c1 122
ubhat 0:69f2e28d12c1 123 if( first && !Pc1 )
ubhat 0:69f2e28d12c1 124 {
ubhat 0:69f2e28d12c1 125 return MOTE_VERSION_2;
ubhat 0:69f2e28d12c1 126 }
ubhat 0:69f2e28d12c1 127 else
ubhat 0:69f2e28d12c1 128 {
ubhat 0:69f2e28d12c1 129 return MOTE_VERSION_3;
ubhat 0:69f2e28d12c1 130 }
ubhat 0:69f2e28d12c1 131 }