mQ Branch for NA mote testing

Dependencies:   LoRaWAN-lib SX1272Lib-mQ lib_gps lib_mma8451q lib_mpl3115a2 mbed

Fork of LoRaWAN-NAMote72-Application-Demo by Semtech

Committer:
mluis
Date:
Mon Apr 24 13:47:27 2017 +0000
Revision:
18:18408c3c2d0c
Parent:
0:69f2e28d12c1
WARNING: Radio API timings changed from micro-seconds to milliseconds; ; Synchronized with https://github.com/Lora-net/LoRaMac-node git revision e506c246652fa44c3f24cecb89d0707b49ece739; Updated all libraries to the latest versions

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: VT100 serial display management
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 "SerialDisplay.h"
ubhat 0:69f2e28d12c1 16
ubhat 0:69f2e28d12c1 17 VT100 vt( USBTX, USBRX );
ubhat 0:69f2e28d12c1 18
ubhat 0:69f2e28d12c1 19 void SerialDisplayJoinUpdate( void )
ubhat 0:69f2e28d12c1 20 {
mluis 18:18408c3c2d0c 21 MibRequestConfirm_t mibGet;
mluis 18:18408c3c2d0c 22
ubhat 0:69f2e28d12c1 23 printf( "###### ===== JOINING ==== ######\r\n" );
ubhat 0:69f2e28d12c1 24 DisplayNetworkParam( );
mluis 18:18408c3c2d0c 25 if( LoRaMacJoinStatus.Status == LORAMAC_STATUS_OK )
mluis 18:18408c3c2d0c 26 {
mluis 18:18408c3c2d0c 27 mibGet.Type = MIB_CHANNELS_DATARATE;
mluis 18:18408c3c2d0c 28 LoRaMacMibGetRequestConfirm( &mibGet );
mluis 18:18408c3c2d0c 29 printf( "DATA RATE: DR%d\r\n", mibGet.Param.ChannelsDatarate );
mluis 18:18408c3c2d0c 30 }
mluis 18:18408c3c2d0c 31 else
mluis 18:18408c3c2d0c 32 {
mluis 18:18408c3c2d0c 33 printf( "JOIN TRANSMIT ERROR: %d\r\n", LoRaMacJoinStatus.Status );
mluis 18:18408c3c2d0c 34 }
ubhat 0:69f2e28d12c1 35 printf( "\r\n" );
ubhat 0:69f2e28d12c1 36 }
ubhat 0:69f2e28d12c1 37
mluis 18:18408c3c2d0c 38 void SerialDisplayJoinDataRateUpdate( uint8_t Datarate )
mluis 18:18408c3c2d0c 39 {
mluis 18:18408c3c2d0c 40 #if defined( USE_BAND_915 ) || defined( USE_BAND_915_HYBRID )
mluis 18:18408c3c2d0c 41 // Debug to check for reported issue where join datarate does not
mluis 18:18408c3c2d0c 42 // alternate after compliance mode exit on command 6
mluis 18:18408c3c2d0c 43 if( Datarate == LoRaMacJoinStatus.LastDatarate )
mluis 18:18408c3c2d0c 44 {
mluis 18:18408c3c2d0c 45 printf( "###### ===== JOIN WARNING ==== ######\r\n" );
mluis 18:18408c3c2d0c 46 printf( "DATA RATE IS NOT ALTERNATING: CURRENT=DR%d, LAST=DR%d\r\n",
mluis 18:18408c3c2d0c 47 LoRaMacJoinStatus.LastDatarate, Datarate);
mluis 18:18408c3c2d0c 48
mluis 18:18408c3c2d0c 49 MibRequestConfirm_t mibGet;
mluis 18:18408c3c2d0c 50 mibGet.Type = MIB_CHANNELS_MASK;
mluis 18:18408c3c2d0c 51 if( LoRaMacMibGetRequestConfirm( &mibGet ) == LORAMAC_STATUS_OK)
mluis 18:18408c3c2d0c 52 {
mluis 18:18408c3c2d0c 53 printf("CHANNEL MASK: ");
mluis 18:18408c3c2d0c 54 for( uint8_t i = 0; i < 5; i++ )
mluis 18:18408c3c2d0c 55 {
mluis 18:18408c3c2d0c 56 printf("%04x ", mibGet.Param.ChannelsMask[i] );
mluis 18:18408c3c2d0c 57 }
mluis 18:18408c3c2d0c 58 printf("\r\n");
mluis 18:18408c3c2d0c 59 }
mluis 18:18408c3c2d0c 60 printf("\r\n");
mluis 18:18408c3c2d0c 61 }
mluis 18:18408c3c2d0c 62 #endif
mluis 18:18408c3c2d0c 63 }
mluis 18:18408c3c2d0c 64
mluis 18:18408c3c2d0c 65 void SerialDisplayTxUpdate( void )
ubhat 0:69f2e28d12c1 66 {
ubhat 0:69f2e28d12c1 67 printf( "###### ===== UPLINK FRAME %d ==== ######\r\n", LoRaMacUplinkStatus.UplinkCounter );
ubhat 0:69f2e28d12c1 68
ubhat 0:69f2e28d12c1 69 DisplayNetworkParam( );
mluis 18:18408c3c2d0c 70
ubhat 0:69f2e28d12c1 71 printf( "TX PORT: %d\r\n", LoRaMacUplinkStatus.Port );
ubhat 0:69f2e28d12c1 72
ubhat 0:69f2e28d12c1 73 if( LoRaMacUplinkStatus.BufferSize != 0 )
ubhat 0:69f2e28d12c1 74 {
ubhat 0:69f2e28d12c1 75 printf( "TX DATA: " );
ubhat 0:69f2e28d12c1 76 if( LoRaMacUplinkStatus.Type == MCPS_CONFIRMED )
ubhat 0:69f2e28d12c1 77 {
ubhat 0:69f2e28d12c1 78 printf( "CONFIRMED\r\n" );
ubhat 0:69f2e28d12c1 79 }
ubhat 0:69f2e28d12c1 80 else
ubhat 0:69f2e28d12c1 81 {
ubhat 0:69f2e28d12c1 82 printf( "UNCONFIRMED\r\n" );
ubhat 0:69f2e28d12c1 83 }
ubhat 0:69f2e28d12c1 84 SerialDisplayHex( LoRaMacUplinkStatus.Buffer, LoRaMacUplinkStatus.BufferSize );
ubhat 0:69f2e28d12c1 85 }
ubhat 0:69f2e28d12c1 86
ubhat 0:69f2e28d12c1 87 printf( "DATA RATE: DR%d\r\n", LoRaMacUplinkStatus.Datarate );
ubhat 0:69f2e28d12c1 88
mluis 18:18408c3c2d0c 89 printf( "U/L FREQ: %d\r\n", LoRaMacUplinkStatus.UpLinkFrequency );
mluis 18:18408c3c2d0c 90
ubhat 0:69f2e28d12c1 91 printf( "TX POWER: %d dBm\r\n", 30 - ( LoRaMacUplinkStatus.TxPower << 1 ) );
ubhat 0:69f2e28d12c1 92
mluis 18:18408c3c2d0c 93 #if defined( USE_BAND_915 ) || defined( USE_BAND_915_HYBRID )
mluis 18:18408c3c2d0c 94 MibRequestConfirm_t mibGet;
mluis 18:18408c3c2d0c 95 mibGet.Type = MIB_CHANNELS_MASK;
mluis 18:18408c3c2d0c 96 if( LoRaMacMibGetRequestConfirm( &mibGet ) == LORAMAC_STATUS_OK)
mluis 18:18408c3c2d0c 97 {
mluis 18:18408c3c2d0c 98 printf("CHANNEL MASK: ");
mluis 18:18408c3c2d0c 99 for( uint8_t i = 0; i < 5; i++)
mluis 18:18408c3c2d0c 100 {
mluis 18:18408c3c2d0c 101 printf("%04x ", mibGet.Param.ChannelsMask[i] );
mluis 18:18408c3c2d0c 102 }
mluis 18:18408c3c2d0c 103 printf("\r\n");
mluis 18:18408c3c2d0c 104 }
mluis 18:18408c3c2d0c 105 #endif
ubhat 0:69f2e28d12c1 106
mluis 18:18408c3c2d0c 107 printf( "BATTERY: %2.2fV\r\n", BoardGetBatteryVoltage( ) / 1000.0 );
mluis 18:18408c3c2d0c 108 printf( "\r\n" );
ubhat 0:69f2e28d12c1 109 }
ubhat 0:69f2e28d12c1 110
ubhat 0:69f2e28d12c1 111 void SerialDisplayRxUpdate( void )
ubhat 0:69f2e28d12c1 112 {
ubhat 0:69f2e28d12c1 113 printf( "###### ===== DOWNLINK FRAME %d ==== ######\r\n", LoRaMacDownlinkStatus.DownlinkCounter );
ubhat 0:69f2e28d12c1 114
ubhat 0:69f2e28d12c1 115 printf( "RX WINDOW: %d\r\n", LoRaMacDownlinkStatus.RxSlot + 1 );
ubhat 0:69f2e28d12c1 116
ubhat 0:69f2e28d12c1 117 printf( "RX PORT: %d\r\n", LoRaMacDownlinkStatus.Port );
ubhat 0:69f2e28d12c1 118
ubhat 0:69f2e28d12c1 119 if( LoRaMacDownlinkStatus.BufferSize != 0 )
ubhat 0:69f2e28d12c1 120 {
ubhat 0:69f2e28d12c1 121 printf( "RX DATA: \r\n" );
ubhat 0:69f2e28d12c1 122 SerialDisplayHex( LoRaMacDownlinkStatus.Buffer, LoRaMacDownlinkStatus.BufferSize );
ubhat 0:69f2e28d12c1 123 }
ubhat 0:69f2e28d12c1 124
ubhat 0:69f2e28d12c1 125 printf( "RX RSSI: %d\r\n", LoRaMacDownlinkStatus.Rssi );
ubhat 0:69f2e28d12c1 126
ubhat 0:69f2e28d12c1 127 printf( "RX SNR: %d\r\n", LoRaMacDownlinkStatus.Snr );
ubhat 0:69f2e28d12c1 128
ubhat 0:69f2e28d12c1 129 printf( "\r\n" );
ubhat 0:69f2e28d12c1 130 }
ubhat 0:69f2e28d12c1 131
ubhat 0:69f2e28d12c1 132 void SerialDisplayHex( uint8_t *pData, uint8_t len )
ubhat 0:69f2e28d12c1 133 {
ubhat 0:69f2e28d12c1 134 int i;
ubhat 0:69f2e28d12c1 135 bool newline = 0;
ubhat 0:69f2e28d12c1 136
ubhat 0:69f2e28d12c1 137 for( i = 0; i < len; i++ )
ubhat 0:69f2e28d12c1 138 {
ubhat 0:69f2e28d12c1 139 if( newline != 0 )
ubhat 0:69f2e28d12c1 140 {
ubhat 0:69f2e28d12c1 141 printf( "\r\n" );
ubhat 0:69f2e28d12c1 142 newline = 0;
ubhat 0:69f2e28d12c1 143 }
ubhat 0:69f2e28d12c1 144
ubhat 0:69f2e28d12c1 145 printf( "%02X ", pData[i] );
ubhat 0:69f2e28d12c1 146
ubhat 0:69f2e28d12c1 147 if( ( ( i + 1 ) % 16 ) == 0 )
ubhat 0:69f2e28d12c1 148 {
ubhat 0:69f2e28d12c1 149 newline = 1;
ubhat 0:69f2e28d12c1 150 }
ubhat 0:69f2e28d12c1 151 }
ubhat 0:69f2e28d12c1 152 printf( "\r\n" );
ubhat 0:69f2e28d12c1 153 }
ubhat 0:69f2e28d12c1 154
ubhat 0:69f2e28d12c1 155 void SerialAcclMetrDisplay( uint8_t statusReg )
ubhat 0:69f2e28d12c1 156 {
ubhat 0:69f2e28d12c1 157 printf( "===== DEVICE ORIENTATION ====\r\n" );
ubhat 0:69f2e28d12c1 158 if( ( statusReg & 0x40 ) != 0 )
ubhat 0:69f2e28d12c1 159 {
ubhat 0:69f2e28d12c1 160 printf( "HORIZONTAL + " );
ubhat 0:69f2e28d12c1 161 if( ( statusReg & 0x01 ) != 0 )
ubhat 0:69f2e28d12c1 162 {
ubhat 0:69f2e28d12c1 163 printf( "FACE DOWN" );
ubhat 0:69f2e28d12c1 164 }
ubhat 0:69f2e28d12c1 165 else
ubhat 0:69f2e28d12c1 166 {
ubhat 0:69f2e28d12c1 167 printf( "FACE UP" );
ubhat 0:69f2e28d12c1 168 }
ubhat 0:69f2e28d12c1 169 }
ubhat 0:69f2e28d12c1 170 else
ubhat 0:69f2e28d12c1 171 {
ubhat 0:69f2e28d12c1 172 printf( "VERTICAL" );
ubhat 0:69f2e28d12c1 173 }
ubhat 0:69f2e28d12c1 174 printf( "\r\n\r\n" );
ubhat 0:69f2e28d12c1 175 }
ubhat 0:69f2e28d12c1 176
ubhat 0:69f2e28d12c1 177 void DisplayNetworkParam( void )
ubhat 0:69f2e28d12c1 178 {
mluis 18:18408c3c2d0c 179 if( Otaa == true )
mluis 18:18408c3c2d0c 180 {
mluis 18:18408c3c2d0c 181 printf( "DEVEUI: " );
mluis 18:18408c3c2d0c 182 SerialDisplayHex( DevEui, 8 );
ubhat 0:69f2e28d12c1 183
mluis 18:18408c3c2d0c 184 printf( "APPEUI: " );
mluis 18:18408c3c2d0c 185 SerialDisplayHex( AppEui, 8 );
ubhat 0:69f2e28d12c1 186
mluis 18:18408c3c2d0c 187 printf( "APPKEY: " );
mluis 18:18408c3c2d0c 188 SerialDisplayHex( AppKey, 16 );
mluis 18:18408c3c2d0c 189 }
mluis 18:18408c3c2d0c 190 #if ( OVER_THE_AIR_ACTIVATION == 0 )
mluis 18:18408c3c2d0c 191 else
mluis 18:18408c3c2d0c 192 {
mluis 18:18408c3c2d0c 193 printf( "DEVADDR: " );
ubhat 0:69f2e28d12c1 194
mluis 18:18408c3c2d0c 195 uint8_t *pData = ( uint8_t* )&DevAddr;
mluis 18:18408c3c2d0c 196 for( int32_t i = 3; i >= 0; i-- )
mluis 18:18408c3c2d0c 197 {
mluis 18:18408c3c2d0c 198 printf( "%02X ", pData[i] );
mluis 18:18408c3c2d0c 199 }
mluis 18:18408c3c2d0c 200 printf( "\r\n" );
mluis 18:18408c3c2d0c 201
mluis 18:18408c3c2d0c 202 printf( "NWKSKEY: " );
mluis 18:18408c3c2d0c 203 SerialDisplayHex( NwkSKey, 16 );
ubhat 0:69f2e28d12c1 204
mluis 18:18408c3c2d0c 205 printf( "APPSKEY: " );
mluis 18:18408c3c2d0c 206 SerialDisplayHex( AppSKey, 16 );
mluis 18:18408c3c2d0c 207 }
mluis 18:18408c3c2d0c 208 #endif
mluis 18:18408c3c2d0c 209 }
ubhat 0:69f2e28d12c1 210
mluis 18:18408c3c2d0c 211 void DisplaySwVersion( void )
mluis 18:18408c3c2d0c 212 {
mluis 18:18408c3c2d0c 213 printf( "###### ===== NAMote-72 Application Demo v1.0.0 ==== ######\r\n" );
mluis 18:18408c3c2d0c 214 printf( "###### ===== Based on GitHub master branch commit e506c24 ==== ######\r\n\r\n" );
mluis 18:18408c3c2d0c 215 }