LoRaWAN demo application using grove peripherals generating Cayenne LPP
radio chip selection
Radio chip driver is not included, because two options are available.
If you're using SX1272 or SX1276, then import sx127x driver into your program.
if you're using SX1261 or SX1262, then import sx126x driver into your program.
If you're using NAmote72 or Murata discovery, then you must import only sx127x driver.
Grove peripherals -> Cayenne demo
Read LoRaWAN-1.1 page for configuration instructions.
This project adds support for Murata discovery board, in addition to LoRa shields on NUCLEO boards.
Use with sx1272 shield with grove peripherals connected:
D8 D9: Button | RX TX | A3 A4: TempSense |
D6 D7: | SCL SDA : LED | A1 A2: Pot |
Button
Sends two different payload types: short press (under 1 sec)
long press: held down > 1 sec.
serial console keys
115200bps, 8N1
Enter key not used
Keys '0' to '3': cayenne channel number
'0': pot (rotary sensor)
'1': temperature
'2': digital out
'3': analog out
DevEUI configuration
For use on networks which force you to use DevEUI defined by network, comment out HardwareIDtoDevEUI()
.
HardwareIDtoDevEUI()
obtains DevEUI from the CPU unique hardware serial number. However, some networks may force you to use their DevEUI value.
SerialDisplay.cpp@0:62e456e60083, 2018-02-28 (annotated)
- Committer:
- Wayne Roberts
- Date:
- Wed Feb 28 14:06:17 2018 -0800
- Revision:
- 0:62e456e60083
- Child:
- 9:1a94f4a5e716
initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Wayne Roberts |
0:62e456e60083 | 1 | /* |
Wayne Roberts |
0:62e456e60083 | 2 | / _____) _ | | |
Wayne Roberts |
0:62e456e60083 | 3 | ( (____ _____ ____ _| |_ _____ ____| |__ |
Wayne Roberts |
0:62e456e60083 | 4 | \____ \| ___ | (_ _) ___ |/ ___) _ \ |
Wayne Roberts |
0:62e456e60083 | 5 | _____) ) ____| | | || |_| ____( (___| | | | |
Wayne Roberts |
0:62e456e60083 | 6 | (______/|_____)_|_|_| \__)_____)\____)_| |_| |
Wayne Roberts |
0:62e456e60083 | 7 | (C)2015 Semtech |
Wayne Roberts |
0:62e456e60083 | 8 | |
Wayne Roberts |
0:62e456e60083 | 9 | Description: VT100 serial display management |
Wayne Roberts |
0:62e456e60083 | 10 | |
Wayne Roberts |
0:62e456e60083 | 11 | License: Revised BSD License, see LICENSE.TXT file include in the project |
Wayne Roberts |
0:62e456e60083 | 12 | |
Wayne Roberts |
0:62e456e60083 | 13 | Maintainer: Miguel Luis and Gregory Cristian |
Wayne Roberts |
0:62e456e60083 | 14 | */ |
Wayne Roberts |
0:62e456e60083 | 15 | #include "board.h" |
Wayne Roberts |
0:62e456e60083 | 16 | |
Wayne Roberts |
0:62e456e60083 | 17 | #include "SerialDisplay.h" |
Wayne Roberts |
0:62e456e60083 | 18 | #include "LoRaMacString.h" |
Wayne Roberts |
0:62e456e60083 | 19 | |
Wayne Roberts |
0:62e456e60083 | 20 | #ifdef ENABLE_VT100 |
Wayne Roberts |
0:62e456e60083 | 21 | VT100 vt( USBTX, USBRX ); |
Wayne Roberts |
0:62e456e60083 | 22 | |
Wayne Roberts |
0:62e456e60083 | 23 | void SerialPrintCheckBox( bool activated, uint8_t color ) |
Wayne Roberts |
0:62e456e60083 | 24 | { |
Wayne Roberts |
0:62e456e60083 | 25 | if( activated == true ) |
Wayne Roberts |
0:62e456e60083 | 26 | { |
Wayne Roberts |
0:62e456e60083 | 27 | vt.SetAttribute( VT100::ATTR_OFF, color, color ); |
Wayne Roberts |
0:62e456e60083 | 28 | } |
Wayne Roberts |
0:62e456e60083 | 29 | else |
Wayne Roberts |
0:62e456e60083 | 30 | { |
Wayne Roberts |
0:62e456e60083 | 31 | vt.SetAttribute( VT100::ATTR_OFF ); |
Wayne Roberts |
0:62e456e60083 | 32 | } |
Wayne Roberts |
0:62e456e60083 | 33 | vt.printf( " " ); |
Wayne Roberts |
0:62e456e60083 | 34 | vt.SetAttribute( VT100::ATTR_OFF ); |
Wayne Roberts |
0:62e456e60083 | 35 | } |
Wayne Roberts |
0:62e456e60083 | 36 | |
Wayne Roberts |
0:62e456e60083 | 37 | #ifdef LORAWAN_JOIN_EUI |
Wayne Roberts |
0:62e456e60083 | 38 | void SerialDisplayUpdateActivationMode( bool otaa ) |
Wayne Roberts |
0:62e456e60083 | 39 | { |
Wayne Roberts |
0:62e456e60083 | 40 | vt.SetCursorPos( 4, 17 ); // TODO |
Wayne Roberts |
0:62e456e60083 | 41 | SerialPrintCheckBox( otaa, VT100::WHITE ); |
Wayne Roberts |
0:62e456e60083 | 42 | } |
Wayne Roberts |
0:62e456e60083 | 43 | |
Wayne Roberts |
0:62e456e60083 | 44 | void SerialDisplayUpdateEui( uint8_t line, const uint8_t *eui ) |
Wayne Roberts |
0:62e456e60083 | 45 | { |
Wayne Roberts |
0:62e456e60083 | 46 | vt.SetCursorPos( line, 27 ); |
Wayne Roberts |
0:62e456e60083 | 47 | for( uint8_t i = 0; i < 8; i++ ) |
Wayne Roberts |
0:62e456e60083 | 48 | { |
Wayne Roberts |
0:62e456e60083 | 49 | vt.printf( "%02x ", eui[i] ); |
Wayne Roberts |
0:62e456e60083 | 50 | } |
Wayne Roberts |
0:62e456e60083 | 51 | vt.SetCursorPos( line, 50 ); |
Wayne Roberts |
0:62e456e60083 | 52 | vt.printf( "]" ); |
Wayne Roberts |
0:62e456e60083 | 53 | } |
Wayne Roberts |
0:62e456e60083 | 54 | #endif /* LORAWAN_JOIN_EUI */ |
Wayne Roberts |
0:62e456e60083 | 55 | |
Wayne Roberts |
0:62e456e60083 | 56 | void SerialDisplayUpdateKey( uint8_t line, const uint8_t *key ) |
Wayne Roberts |
0:62e456e60083 | 57 | { |
Wayne Roberts |
0:62e456e60083 | 58 | vt.SetCursorPos( line, 29 ); |
Wayne Roberts |
0:62e456e60083 | 59 | for( uint8_t i = 0; i < 16; i++ ) |
Wayne Roberts |
0:62e456e60083 | 60 | { |
Wayne Roberts |
0:62e456e60083 | 61 | vt.printf( "%02x ", key[i] ); |
Wayne Roberts |
0:62e456e60083 | 62 | } |
Wayne Roberts |
0:62e456e60083 | 63 | vt.SetCursorPos( line, 76 ); |
Wayne Roberts |
0:62e456e60083 | 64 | vt.printf( "]" ); |
Wayne Roberts |
0:62e456e60083 | 65 | } |
Wayne Roberts |
0:62e456e60083 | 66 | |
Wayne Roberts |
0:62e456e60083 | 67 | void SerialDisplayUpdateNwkId( uint8_t id ) |
Wayne Roberts |
0:62e456e60083 | 68 | { |
Wayne Roberts |
0:62e456e60083 | 69 | vt.SetCursorPos( ROW_NwkId, 27 ); |
Wayne Roberts |
0:62e456e60083 | 70 | vt.printf( "%03d", id ); |
Wayne Roberts |
0:62e456e60083 | 71 | } |
Wayne Roberts |
0:62e456e60083 | 72 | |
Wayne Roberts |
0:62e456e60083 | 73 | void SerialDisplayUpdateDevAddr( uint32_t addr ) |
Wayne Roberts |
0:62e456e60083 | 74 | { |
Wayne Roberts |
0:62e456e60083 | 75 | vt.SetCursorPos( ROW_DevAddr, 27 ); |
Wayne Roberts |
0:62e456e60083 | 76 | vt.printf( "%02X %02X %02X %02X", ( addr >> 24 ) & 0xFF, ( addr >> 16 ) & 0xFF, ( addr >> 8 ) & 0xFF, addr & 0xFF ); |
Wayne Roberts |
0:62e456e60083 | 77 | } |
Wayne Roberts |
0:62e456e60083 | 78 | |
Wayne Roberts |
0:62e456e60083 | 79 | void SerialDisplayUpdateFrameType( bool confirmed ) |
Wayne Roberts |
0:62e456e60083 | 80 | { |
Wayne Roberts |
0:62e456e60083 | 81 | vt.SetCursorPos( ROW_FrameType, 17 ); |
Wayne Roberts |
0:62e456e60083 | 82 | SerialPrintCheckBox( confirmed, VT100::WHITE ); |
Wayne Roberts |
0:62e456e60083 | 83 | vt.SetCursorPos( ROW_FrameType, 32 ); |
Wayne Roberts |
0:62e456e60083 | 84 | SerialPrintCheckBox( !confirmed, VT100::WHITE ); |
Wayne Roberts |
0:62e456e60083 | 85 | } |
Wayne Roberts |
0:62e456e60083 | 86 | |
Wayne Roberts |
0:62e456e60083 | 87 | void SerialDisplayUpdateAdr( bool adr ) |
Wayne Roberts |
0:62e456e60083 | 88 | { |
Wayne Roberts |
0:62e456e60083 | 89 | vt.SetCursorPos( ROW_ADR, 27 ); |
Wayne Roberts |
0:62e456e60083 | 90 | if( adr == true ) |
Wayne Roberts |
0:62e456e60083 | 91 | { |
Wayne Roberts |
0:62e456e60083 | 92 | vt.printf( " ON" ); |
Wayne Roberts |
0:62e456e60083 | 93 | } |
Wayne Roberts |
0:62e456e60083 | 94 | else |
Wayne Roberts |
0:62e456e60083 | 95 | { |
Wayne Roberts |
0:62e456e60083 | 96 | vt.printf( "OFF" ); |
Wayne Roberts |
0:62e456e60083 | 97 | } |
Wayne Roberts |
0:62e456e60083 | 98 | } |
Wayne Roberts |
0:62e456e60083 | 99 | |
Wayne Roberts |
0:62e456e60083 | 100 | void SerialDisplayUpdateDutyCycle( bool dutyCycle ) |
Wayne Roberts |
0:62e456e60083 | 101 | { |
Wayne Roberts |
0:62e456e60083 | 102 | vt.SetCursorPos( ROW_DUTY, 27 ); |
Wayne Roberts |
0:62e456e60083 | 103 | if( dutyCycle == true ) |
Wayne Roberts |
0:62e456e60083 | 104 | { |
Wayne Roberts |
0:62e456e60083 | 105 | vt.printf( " ON" ); |
Wayne Roberts |
0:62e456e60083 | 106 | } |
Wayne Roberts |
0:62e456e60083 | 107 | else |
Wayne Roberts |
0:62e456e60083 | 108 | { |
Wayne Roberts |
0:62e456e60083 | 109 | vt.printf( "OFF" ); |
Wayne Roberts |
0:62e456e60083 | 110 | } |
Wayne Roberts |
0:62e456e60083 | 111 | } |
Wayne Roberts |
0:62e456e60083 | 112 | |
Wayne Roberts |
0:62e456e60083 | 113 | void SerialDisplayUpdatePublicNetwork( bool network ) |
Wayne Roberts |
0:62e456e60083 | 114 | { |
Wayne Roberts |
0:62e456e60083 | 115 | vt.SetCursorPos( ROW_PUBLIC, 17 ); |
Wayne Roberts |
0:62e456e60083 | 116 | SerialPrintCheckBox( network, VT100::WHITE ); |
Wayne Roberts |
0:62e456e60083 | 117 | vt.SetCursorPos( ROW_PUBLIC, 30 ); |
Wayne Roberts |
0:62e456e60083 | 118 | SerialPrintCheckBox( !network, VT100::WHITE ); |
Wayne Roberts |
0:62e456e60083 | 119 | } |
Wayne Roberts |
0:62e456e60083 | 120 | |
Wayne Roberts |
0:62e456e60083 | 121 | #ifdef LORAWAN_JOIN_EUI |
Wayne Roberts |
0:62e456e60083 | 122 | void SerialDisplayUpdateNetworkIsJoined( bool state ) |
Wayne Roberts |
0:62e456e60083 | 123 | { |
Wayne Roberts |
0:62e456e60083 | 124 | vt.SetCursorPos( ROW_JOINED, 17 ); |
Wayne Roberts |
0:62e456e60083 | 125 | SerialPrintCheckBox( !state, VT100::RED ); |
Wayne Roberts |
0:62e456e60083 | 126 | vt.SetCursorPos( ROW_JOINED, 30 ); |
Wayne Roberts |
0:62e456e60083 | 127 | SerialPrintCheckBox( state, VT100::GREEN ); |
Wayne Roberts |
0:62e456e60083 | 128 | } |
Wayne Roberts |
0:62e456e60083 | 129 | #endif /* LORAWAN_JOIN_EUI */ |
Wayne Roberts |
0:62e456e60083 | 130 | |
Wayne Roberts |
0:62e456e60083 | 131 | /*void SerialDisplayUpdateLedState( uint8_t id, uint8_t state ) |
Wayne Roberts |
0:62e456e60083 | 132 | { |
Wayne Roberts |
0:62e456e60083 | 133 | switch( id ) |
Wayne Roberts |
0:62e456e60083 | 134 | { |
Wayne Roberts |
0:62e456e60083 | 135 | case 1: |
Wayne Roberts |
0:62e456e60083 | 136 | vt.SetCursorPos( 22, 17 ); |
Wayne Roberts |
0:62e456e60083 | 137 | SerialPrintCheckBox( state, VT100::RED ); |
Wayne Roberts |
0:62e456e60083 | 138 | break; |
Wayne Roberts |
0:62e456e60083 | 139 | case 2: |
Wayne Roberts |
0:62e456e60083 | 140 | vt.SetCursorPos( 22, 31 ); |
Wayne Roberts |
0:62e456e60083 | 141 | SerialPrintCheckBox( state, VT100::GREEN ); |
Wayne Roberts |
0:62e456e60083 | 142 | break; |
Wayne Roberts |
0:62e456e60083 | 143 | case 3: |
Wayne Roberts |
0:62e456e60083 | 144 | vt.SetCursorPos( 22, 45 ); |
Wayne Roberts |
0:62e456e60083 | 145 | SerialPrintCheckBox( state, VT100::BLUE ); |
Wayne Roberts |
0:62e456e60083 | 146 | break; |
Wayne Roberts |
0:62e456e60083 | 147 | } |
Wayne Roberts |
0:62e456e60083 | 148 | }*/ |
Wayne Roberts |
0:62e456e60083 | 149 | |
Wayne Roberts |
0:62e456e60083 | 150 | void SerialDisplayUpdateData( uint8_t line, const uint8_t *buffer, uint8_t size ) |
Wayne Roberts |
0:62e456e60083 | 151 | { |
Wayne Roberts |
0:62e456e60083 | 152 | if( size != 0 ) |
Wayne Roberts |
0:62e456e60083 | 153 | { |
Wayne Roberts |
0:62e456e60083 | 154 | vt.SetCursorPos( line, 27 ); |
Wayne Roberts |
0:62e456e60083 | 155 | for( uint8_t i = 0; i < size; i++ ) |
Wayne Roberts |
0:62e456e60083 | 156 | { |
Wayne Roberts |
0:62e456e60083 | 157 | vt.printf( "%02X ", buffer[i] ); |
Wayne Roberts |
0:62e456e60083 | 158 | if( ( ( i + 1 ) % 16 ) == 0 ) |
Wayne Roberts |
0:62e456e60083 | 159 | { |
Wayne Roberts |
0:62e456e60083 | 160 | line++; |
Wayne Roberts |
0:62e456e60083 | 161 | vt.SetCursorPos( line, 27 ); |
Wayne Roberts |
0:62e456e60083 | 162 | } |
Wayne Roberts |
0:62e456e60083 | 163 | } |
Wayne Roberts |
0:62e456e60083 | 164 | for( uint8_t i = size; i < 64; i++ ) |
Wayne Roberts |
0:62e456e60083 | 165 | { |
Wayne Roberts |
0:62e456e60083 | 166 | vt.printf( "__ " ); |
Wayne Roberts |
0:62e456e60083 | 167 | if( ( ( i + 1 ) % 16 ) == 0 ) |
Wayne Roberts |
0:62e456e60083 | 168 | { |
Wayne Roberts |
0:62e456e60083 | 169 | line++; |
Wayne Roberts |
0:62e456e60083 | 170 | vt.SetCursorPos( line, 27 ); |
Wayne Roberts |
0:62e456e60083 | 171 | } |
Wayne Roberts |
0:62e456e60083 | 172 | } |
Wayne Roberts |
0:62e456e60083 | 173 | vt.SetCursorPos( line - 1, 74 ); |
Wayne Roberts |
0:62e456e60083 | 174 | vt.printf( "]" ); |
Wayne Roberts |
0:62e456e60083 | 175 | } |
Wayne Roberts |
0:62e456e60083 | 176 | else |
Wayne Roberts |
0:62e456e60083 | 177 | { |
Wayne Roberts |
0:62e456e60083 | 178 | vt.SetCursorPos( line, 27 ); |
Wayne Roberts |
0:62e456e60083 | 179 | for( uint8_t i = 0; i < 64; i++ ) |
Wayne Roberts |
0:62e456e60083 | 180 | { |
Wayne Roberts |
0:62e456e60083 | 181 | vt.printf( "__ " ); |
Wayne Roberts |
0:62e456e60083 | 182 | if( ( ( i + 1 ) % 16 ) == 0 ) |
Wayne Roberts |
0:62e456e60083 | 183 | { |
Wayne Roberts |
0:62e456e60083 | 184 | line++; |
Wayne Roberts |
0:62e456e60083 | 185 | vt.SetCursorPos( line, 27 ); |
Wayne Roberts |
0:62e456e60083 | 186 | } |
Wayne Roberts |
0:62e456e60083 | 187 | } |
Wayne Roberts |
0:62e456e60083 | 188 | vt.SetCursorPos( line - 1, 74 ); |
Wayne Roberts |
0:62e456e60083 | 189 | vt.printf( "]" ); |
Wayne Roberts |
0:62e456e60083 | 190 | } |
Wayne Roberts |
0:62e456e60083 | 191 | } |
Wayne Roberts |
0:62e456e60083 | 192 | |
Wayne Roberts |
0:62e456e60083 | 193 | void SerialDisplayUpdateUplinkAcked( bool state ) |
Wayne Roberts |
0:62e456e60083 | 194 | { |
Wayne Roberts |
0:62e456e60083 | 195 | vt.SetCursorPos( ROW_UPLINK_ACKED, 36 ); |
Wayne Roberts |
0:62e456e60083 | 196 | SerialPrintCheckBox( state, VT100::GREEN ); |
Wayne Roberts |
0:62e456e60083 | 197 | } |
Wayne Roberts |
0:62e456e60083 | 198 | |
Wayne Roberts |
0:62e456e60083 | 199 | //void SerialDisplayUpdateUplink( bool acked, uint8_t datarate, uint32_t counter, uint8_t port, uint8_t *buffer, uint8_t bufferSize, LoRaMacEventInfoStatus_t s) |
Wayne Roberts |
0:62e456e60083 | 200 | void SerialDisplayUplink(uint8_t fport, const uint8_t* buffer, uint8_t bufferSize ) |
Wayne Roberts |
0:62e456e60083 | 201 | { |
Wayne Roberts |
0:62e456e60083 | 202 | vt.SetCursorPos( ROW_DOWNLINK_RSSI, 32 ); |
Wayne Roberts |
0:62e456e60083 | 203 | vt.printf( " "); |
Wayne Roberts |
0:62e456e60083 | 204 | vt.SetCursorPos( ROW_DOWNLINK_SNR, 32 ); |
Wayne Roberts |
0:62e456e60083 | 205 | vt.printf( " "); |
Wayne Roberts |
0:62e456e60083 | 206 | |
Wayne Roberts |
0:62e456e60083 | 207 | // Port |
Wayne Roberts |
0:62e456e60083 | 208 | vt.SetCursorPos( ROW_UPLINK_PORT, 34 ); |
Wayne Roberts |
0:62e456e60083 | 209 | vt.printf( "%3u", fport ); |
Wayne Roberts |
0:62e456e60083 | 210 | // Data |
Wayne Roberts |
0:62e456e60083 | 211 | SerialDisplayUpdateData( ROW_UPLINK_PAYLOAD, buffer, bufferSize ); |
Wayne Roberts |
0:62e456e60083 | 212 | } |
Wayne Roberts |
0:62e456e60083 | 213 | |
Wayne Roberts |
0:62e456e60083 | 214 | void SerialDisplayMcpsConfirm( const McpsConfirm_t* mc) |
Wayne Roberts |
0:62e456e60083 | 215 | { |
Wayne Roberts |
0:62e456e60083 | 216 | char str[48]; |
Wayne Roberts |
0:62e456e60083 | 217 | static uint8_t lastStrLen = 0; |
Wayne Roberts |
0:62e456e60083 | 218 | // Acked |
Wayne Roberts |
0:62e456e60083 | 219 | SerialDisplayUpdateUplinkAcked(mc->AckReceived); |
Wayne Roberts |
0:62e456e60083 | 220 | LoRaMacEventInfoStatus_to_string(mc->Status, str); |
Wayne Roberts |
0:62e456e60083 | 221 | vt.printf("] %s", str); |
Wayne Roberts |
0:62e456e60083 | 222 | for (unsigned n = 0; n < lastStrLen; n++) |
Wayne Roberts |
0:62e456e60083 | 223 | vt.putc(' ' ); |
Wayne Roberts |
0:62e456e60083 | 224 | lastStrLen = strlen(str); |
Wayne Roberts |
0:62e456e60083 | 225 | // Datarate |
Wayne Roberts |
0:62e456e60083 | 226 | vt.SetCursorPos( ROW_UPLINK_DR, 33 ); |
Wayne Roberts |
0:62e456e60083 | 227 | vt.printf( "DR%u", mc->Datarate); |
Wayne Roberts |
0:62e456e60083 | 228 | // Counter |
Wayne Roberts |
0:62e456e60083 | 229 | vt.SetCursorPos( ROW_UPLINK_FCNT, 27 ); |
Wayne Roberts |
0:62e456e60083 | 230 | vt.printf( "%10" PRIu32, mc->UpLinkCounter); |
Wayne Roberts |
0:62e456e60083 | 231 | } |
Wayne Roberts |
0:62e456e60083 | 232 | |
Wayne Roberts |
0:62e456e60083 | 233 | void SerialDisplayMcpsIndication() |
Wayne Roberts |
0:62e456e60083 | 234 | { |
Wayne Roberts |
0:62e456e60083 | 235 | } |
Wayne Roberts |
0:62e456e60083 | 236 | |
Wayne Roberts |
0:62e456e60083 | 237 | void SerialDisplayUpdateDonwlinkRxData( bool state ) |
Wayne Roberts |
0:62e456e60083 | 238 | { |
Wayne Roberts |
0:62e456e60083 | 239 | vt.SetCursorPos( ROW_DOWNLINK_SNR, 4 ); |
Wayne Roberts |
0:62e456e60083 | 240 | SerialPrintCheckBox( state, VT100::GREEN ); |
Wayne Roberts |
0:62e456e60083 | 241 | } |
Wayne Roberts |
0:62e456e60083 | 242 | |
Wayne Roberts |
0:62e456e60083 | 243 | void SerialDisplayMcpsIndication(const McpsIndication_t* mi) |
Wayne Roberts |
0:62e456e60083 | 244 | { |
Wayne Roberts |
0:62e456e60083 | 245 | int8_t Snr; |
Wayne Roberts |
0:62e456e60083 | 246 | |
Wayne Roberts |
0:62e456e60083 | 247 | vt.SetCursorPos( ROW_DOWNLINK_RSSI, 32 ); |
Wayne Roberts |
0:62e456e60083 | 248 | vt.printf( "%5d", mi->Rssi ); |
Wayne Roberts |
0:62e456e60083 | 249 | |
Wayne Roberts |
0:62e456e60083 | 250 | if (mi->Snr & 0x80) { // The SNR sign bit is 1 |
Wayne Roberts |
0:62e456e60083 | 251 | // Invert and divide by 4 |
Wayne Roberts |
0:62e456e60083 | 252 | Snr = ( ( ~mi->Snr + 1 ) & 0xFF ) >> 2; |
Wayne Roberts |
0:62e456e60083 | 253 | Snr = -Snr; |
Wayne Roberts |
0:62e456e60083 | 254 | } else { |
Wayne Roberts |
0:62e456e60083 | 255 | // Divide by 4 |
Wayne Roberts |
0:62e456e60083 | 256 | Snr = ( mi->Snr & 0xFF ) >> 2; |
Wayne Roberts |
0:62e456e60083 | 257 | } |
Wayne Roberts |
0:62e456e60083 | 258 | vt.SetCursorPos( ROW_DOWNLINK_SNR, 32 ); |
Wayne Roberts |
0:62e456e60083 | 259 | vt.printf( "%5d", Snr ); |
Wayne Roberts |
0:62e456e60083 | 260 | |
Wayne Roberts |
0:62e456e60083 | 261 | vt.SetCursorPos( ROW_DOWNLINK_FCNT, 27 ); |
Wayne Roberts |
0:62e456e60083 | 262 | vt.printf( "%10" PRIu32, mi->receivedFCntDown); |
Wayne Roberts |
0:62e456e60083 | 263 | |
Wayne Roberts |
0:62e456e60083 | 264 | SerialDisplayUpdateDonwlinkRxData(mi->RxData); |
Wayne Roberts |
0:62e456e60083 | 265 | vt.SetCursorPos( ROW_DOWNLINK_FPORT, 34 ); |
Wayne Roberts |
0:62e456e60083 | 266 | if (mi->RxData) { |
Wayne Roberts |
0:62e456e60083 | 267 | vt.printf( "%3u", mi->Port); |
Wayne Roberts |
0:62e456e60083 | 268 | SerialDisplayUpdateData( ROW_DOWNLINK_PAYLOAD, mi->Buffer, mi->BufferSize ); |
Wayne Roberts |
0:62e456e60083 | 269 | } else { |
Wayne Roberts |
0:62e456e60083 | 270 | vt.printf(" "); |
Wayne Roberts |
0:62e456e60083 | 271 | SerialDisplayUpdateData( ROW_DOWNLINK_PAYLOAD, NULL, 0 ); |
Wayne Roberts |
0:62e456e60083 | 272 | } |
Wayne Roberts |
0:62e456e60083 | 273 | /*if (mcpsIndication->RxData) { |
Wayne Roberts |
0:62e456e60083 | 274 | LoRaMacDownlinkStatus.Port = mcpsIndication->Port; |
Wayne Roberts |
0:62e456e60083 | 275 | LoRaMacDownlinkStatus.Buffer = mcpsIndication->Buffer; |
Wayne Roberts |
0:62e456e60083 | 276 | LoRaMacDownlinkStatus.BufferSize = mcpsIndication->BufferSize; |
Wayne Roberts |
0:62e456e60083 | 277 | } else |
Wayne Roberts |
0:62e456e60083 | 278 | LoRaMacDownlinkStatus.Buffer = NULL;*/ |
Wayne Roberts |
0:62e456e60083 | 279 | } |
Wayne Roberts |
0:62e456e60083 | 280 | |
Wayne Roberts |
0:62e456e60083 | 281 | #if 0 |
Wayne Roberts |
0:62e456e60083 | 282 | void SerialDisplayUpdateDownlink( int16_t rssi, int8_t snr, uint32_t counter, uint8_t port, uint8_t *buffer, uint8_t bufferSize ) |
Wayne Roberts |
0:62e456e60083 | 283 | { |
Wayne Roberts |
0:62e456e60083 | 284 | // Rx data |
Wayne Roberts |
0:62e456e60083 | 285 | SerialDisplayUpdateDonwlinkRxData( buffer != NULL ); |
Wayne Roberts |
0:62e456e60083 | 286 | // RSSI |
Wayne Roberts |
0:62e456e60083 | 287 | vt.SetCursorPos( ROW_DOWNLINK_RSSI, 32 ); |
Wayne Roberts |
0:62e456e60083 | 288 | vt.printf( "%5d", rssi ); |
Wayne Roberts |
0:62e456e60083 | 289 | // SNR |
Wayne Roberts |
0:62e456e60083 | 290 | vt.SetCursorPos( ROW_DOWNLINK_SNR, 32 ); |
Wayne Roberts |
0:62e456e60083 | 291 | vt.printf( "%5d", snr ); |
Wayne Roberts |
0:62e456e60083 | 292 | // Counter |
Wayne Roberts |
0:62e456e60083 | 293 | vt.SetCursorPos( ROW_DOWNLINK_FCNT, 27 ); |
Wayne Roberts |
0:62e456e60083 | 294 | vt.printf( "%10" PRIu32, counter ); |
Wayne Roberts |
0:62e456e60083 | 295 | if( buffer != NULL ) |
Wayne Roberts |
0:62e456e60083 | 296 | { |
Wayne Roberts |
0:62e456e60083 | 297 | // Port |
Wayne Roberts |
0:62e456e60083 | 298 | vt.SetCursorPos( ROW_DOWNLINK_FPORT, 34 ); |
Wayne Roberts |
0:62e456e60083 | 299 | vt.printf( "%3u", port ); |
Wayne Roberts |
0:62e456e60083 | 300 | // Data |
Wayne Roberts |
0:62e456e60083 | 301 | SerialDisplayUpdateData( ROW_DOWNLINK_PAYLOAD, buffer, bufferSize ); |
Wayne Roberts |
0:62e456e60083 | 302 | } |
Wayne Roberts |
0:62e456e60083 | 303 | else |
Wayne Roberts |
0:62e456e60083 | 304 | { |
Wayne Roberts |
0:62e456e60083 | 305 | // Port |
Wayne Roberts |
0:62e456e60083 | 306 | vt.SetCursorPos( ROW_DOWNLINK_FPORT, 34 ); |
Wayne Roberts |
0:62e456e60083 | 307 | vt.printf( " " ); |
Wayne Roberts |
0:62e456e60083 | 308 | // Data |
Wayne Roberts |
0:62e456e60083 | 309 | SerialDisplayUpdateData( ROW_DOWNLINK_PAYLOAD, NULL, 0 ); |
Wayne Roberts |
0:62e456e60083 | 310 | } |
Wayne Roberts |
0:62e456e60083 | 311 | } |
Wayne Roberts |
0:62e456e60083 | 312 | #endif /* if 0 */ |
Wayne Roberts |
0:62e456e60083 | 313 | |
Wayne Roberts |
0:62e456e60083 | 314 | void SerialDisplayDrawFirstLine( void ) |
Wayne Roberts |
0:62e456e60083 | 315 | { |
Wayne Roberts |
0:62e456e60083 | 316 | vt.PutBoxDrawingChar( 'l' ); |
Wayne Roberts |
0:62e456e60083 | 317 | for( int8_t i = 0; i <= 77; i++ ) |
Wayne Roberts |
0:62e456e60083 | 318 | { |
Wayne Roberts |
0:62e456e60083 | 319 | vt.PutBoxDrawingChar( 'q' ); |
Wayne Roberts |
0:62e456e60083 | 320 | } |
Wayne Roberts |
0:62e456e60083 | 321 | vt.PutBoxDrawingChar( 'k' ); |
Wayne Roberts |
0:62e456e60083 | 322 | vt.printf( "\r\n" ); |
Wayne Roberts |
0:62e456e60083 | 323 | } |
Wayne Roberts |
0:62e456e60083 | 324 | |
Wayne Roberts |
0:62e456e60083 | 325 | void SerialDisplayDrawTitle( const char* title ) |
Wayne Roberts |
0:62e456e60083 | 326 | { |
Wayne Roberts |
0:62e456e60083 | 327 | vt.PutBoxDrawingChar( 'x' ); |
Wayne Roberts |
0:62e456e60083 | 328 | vt.printf( "%s", title ); |
Wayne Roberts |
0:62e456e60083 | 329 | vt.PutBoxDrawingChar( 'x' ); |
Wayne Roberts |
0:62e456e60083 | 330 | vt.printf( "\r\n" ); |
Wayne Roberts |
0:62e456e60083 | 331 | } |
Wayne Roberts |
0:62e456e60083 | 332 | void SerialDisplayDrawTopSeparator( void ) |
Wayne Roberts |
0:62e456e60083 | 333 | { |
Wayne Roberts |
0:62e456e60083 | 334 | vt.PutBoxDrawingChar( 't' ); |
Wayne Roberts |
0:62e456e60083 | 335 | for( int8_t i = 0; i <= 11; i++ ) |
Wayne Roberts |
0:62e456e60083 | 336 | { |
Wayne Roberts |
0:62e456e60083 | 337 | vt.PutBoxDrawingChar( 'q' ); |
Wayne Roberts |
0:62e456e60083 | 338 | } |
Wayne Roberts |
0:62e456e60083 | 339 | vt.PutBoxDrawingChar( 'w' ); |
Wayne Roberts |
0:62e456e60083 | 340 | for( int8_t i = 0; i <= 64; i++ ) |
Wayne Roberts |
0:62e456e60083 | 341 | { |
Wayne Roberts |
0:62e456e60083 | 342 | vt.PutBoxDrawingChar( 'q' ); |
Wayne Roberts |
0:62e456e60083 | 343 | } |
Wayne Roberts |
0:62e456e60083 | 344 | vt.PutBoxDrawingChar( 'u' ); |
Wayne Roberts |
0:62e456e60083 | 345 | vt.printf( "\r\n" ); |
Wayne Roberts |
0:62e456e60083 | 346 | } |
Wayne Roberts |
0:62e456e60083 | 347 | |
Wayne Roberts |
0:62e456e60083 | 348 | void SerialDisplayDrawColSeparator( void ) |
Wayne Roberts |
0:62e456e60083 | 349 | { |
Wayne Roberts |
0:62e456e60083 | 350 | vt.PutBoxDrawingChar( 'x' ); |
Wayne Roberts |
0:62e456e60083 | 351 | for( int8_t i = 0; i <= 11; i++ ) |
Wayne Roberts |
0:62e456e60083 | 352 | { |
Wayne Roberts |
0:62e456e60083 | 353 | vt.PutBoxDrawingChar( ' ' ); |
Wayne Roberts |
0:62e456e60083 | 354 | } |
Wayne Roberts |
0:62e456e60083 | 355 | vt.PutBoxDrawingChar( 't' ); |
Wayne Roberts |
0:62e456e60083 | 356 | for( int8_t i = 0; i <= 64; i++ ) |
Wayne Roberts |
0:62e456e60083 | 357 | { |
Wayne Roberts |
0:62e456e60083 | 358 | vt.PutBoxDrawingChar( 'q' ); |
Wayne Roberts |
0:62e456e60083 | 359 | } |
Wayne Roberts |
0:62e456e60083 | 360 | vt.PutBoxDrawingChar( 'u' ); |
Wayne Roberts |
0:62e456e60083 | 361 | vt.printf( "\r\n" ); |
Wayne Roberts |
0:62e456e60083 | 362 | } |
Wayne Roberts |
0:62e456e60083 | 363 | |
Wayne Roberts |
0:62e456e60083 | 364 | void SerialDisplayDrawSeparator( void ) |
Wayne Roberts |
0:62e456e60083 | 365 | { |
Wayne Roberts |
0:62e456e60083 | 366 | vt.PutBoxDrawingChar( 't' ); |
Wayne Roberts |
0:62e456e60083 | 367 | for( int8_t i = 0; i <= 11; i++ ) |
Wayne Roberts |
0:62e456e60083 | 368 | { |
Wayne Roberts |
0:62e456e60083 | 369 | vt.PutBoxDrawingChar( 'q' ); |
Wayne Roberts |
0:62e456e60083 | 370 | } |
Wayne Roberts |
0:62e456e60083 | 371 | vt.PutBoxDrawingChar( 'n' ); |
Wayne Roberts |
0:62e456e60083 | 372 | for( int8_t i = 0; i <= 64; i++ ) |
Wayne Roberts |
0:62e456e60083 | 373 | { |
Wayne Roberts |
0:62e456e60083 | 374 | vt.PutBoxDrawingChar( 'q' ); |
Wayne Roberts |
0:62e456e60083 | 375 | } |
Wayne Roberts |
0:62e456e60083 | 376 | vt.PutBoxDrawingChar( 'u' ); |
Wayne Roberts |
0:62e456e60083 | 377 | vt.printf( "\r\n" ); |
Wayne Roberts |
0:62e456e60083 | 378 | } |
Wayne Roberts |
0:62e456e60083 | 379 | |
Wayne Roberts |
0:62e456e60083 | 380 | void SerialDisplayDrawLine( const char* firstCol, const char* secondCol ) |
Wayne Roberts |
0:62e456e60083 | 381 | { |
Wayne Roberts |
0:62e456e60083 | 382 | vt.PutBoxDrawingChar( 'x' ); |
Wayne Roberts |
0:62e456e60083 | 383 | vt.printf( "%s", firstCol ); |
Wayne Roberts |
0:62e456e60083 | 384 | vt.PutBoxDrawingChar( 'x' ); |
Wayne Roberts |
0:62e456e60083 | 385 | vt.printf( "%s", secondCol ); |
Wayne Roberts |
0:62e456e60083 | 386 | vt.PutBoxDrawingChar( 'x' ); |
Wayne Roberts |
0:62e456e60083 | 387 | vt.printf( "\r\n" ); |
Wayne Roberts |
0:62e456e60083 | 388 | } |
Wayne Roberts |
0:62e456e60083 | 389 | |
Wayne Roberts |
0:62e456e60083 | 390 | void SerialDisplayDrawBottomLine( void ) |
Wayne Roberts |
0:62e456e60083 | 391 | { |
Wayne Roberts |
0:62e456e60083 | 392 | vt.PutBoxDrawingChar( 'm' ); |
Wayne Roberts |
0:62e456e60083 | 393 | for( int8_t i = 0; i <= 11; i++ ) |
Wayne Roberts |
0:62e456e60083 | 394 | { |
Wayne Roberts |
0:62e456e60083 | 395 | vt.PutBoxDrawingChar( 'q' ); |
Wayne Roberts |
0:62e456e60083 | 396 | } |
Wayne Roberts |
0:62e456e60083 | 397 | vt.PutBoxDrawingChar( 'v' ); |
Wayne Roberts |
0:62e456e60083 | 398 | for( int8_t i = 0; i <= 64; i++ ) |
Wayne Roberts |
0:62e456e60083 | 399 | { |
Wayne Roberts |
0:62e456e60083 | 400 | vt.PutBoxDrawingChar( 'q' ); |
Wayne Roberts |
0:62e456e60083 | 401 | } |
Wayne Roberts |
0:62e456e60083 | 402 | vt.PutBoxDrawingChar( 'j' ); |
Wayne Roberts |
0:62e456e60083 | 403 | vt.printf( "\r\n" ); |
Wayne Roberts |
0:62e456e60083 | 404 | } |
Wayne Roberts |
0:62e456e60083 | 405 | |
Wayne Roberts |
0:62e456e60083 | 406 | void SerialDisplayInit( void ) |
Wayne Roberts |
0:62e456e60083 | 407 | { |
Wayne Roberts |
0:62e456e60083 | 408 | vt.ClearScreen( 2 ); |
Wayne Roberts |
0:62e456e60083 | 409 | vt.SetCursorMode( false ); |
Wayne Roberts |
0:62e456e60083 | 410 | vt.SetCursorPos( 0, 0 ); |
Wayne Roberts |
0:62e456e60083 | 411 | |
Wayne Roberts |
0:62e456e60083 | 412 | // "+-----------------------------------------------------------------------------+" ); |
Wayne Roberts |
0:62e456e60083 | 413 | SerialDisplayDrawFirstLine( ); |
Wayne Roberts |
0:62e456e60083 | 414 | // "¦ LoRaWAN Demonstration Application ¦" ); |
Wayne Roberts |
0:62e456e60083 | 415 | SerialDisplayDrawTitle( " LoRaWAN Demonstration Application " ); |
Wayne Roberts |
0:62e456e60083 | 416 | // "+------------+----------------------------------------------------------------¦" ); |
Wayne Roberts |
0:62e456e60083 | 417 | SerialDisplayDrawTopSeparator( ); |
Wayne Roberts |
0:62e456e60083 | 418 | #ifdef LORAWAN_JOIN_EUI |
Wayne Roberts |
0:62e456e60083 | 419 | // "¦ Activation ¦ [ ]Over The Air ¦" ); |
Wayne Roberts |
0:62e456e60083 | 420 | SerialDisplayDrawLine( " Activation ", " [ ]Over The Air " ); |
Wayne Roberts |
0:62e456e60083 | 421 | // "¦ ¦ DevEui [__ __ __ __ __ __ __ __] ¦" ); |
Wayne Roberts |
0:62e456e60083 | 422 | SerialDisplayDrawLine( " ", " DevEui [__ __ __ __ __ __ __ __] " ); |
Wayne Roberts |
0:62e456e60083 | 423 | // "¦ ¦ JoinEui [__ __ __ __ __ __ __ __] ¦" ); |
Wayne Roberts |
0:62e456e60083 | 424 | SerialDisplayDrawLine( " ", " JoinEui [__ __ __ __ __ __ __ __] " ); |
Wayne Roberts |
0:62e456e60083 | 425 | // "¦ ¦ NwkKey [__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __] ¦" ); |
Wayne Roberts |
0:62e456e60083 | 426 | SerialDisplayDrawLine( " ", " NwkKey [__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __] " ); |
Wayne Roberts |
0:62e456e60083 | 427 | #ifdef OPTNEG |
Wayne Roberts |
0:62e456e60083 | 428 | SerialDisplayDrawLine( " ", " AppKey [__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __] " ); |
Wayne Roberts |
0:62e456e60083 | 429 | #endif |
Wayne Roberts |
0:62e456e60083 | 430 | // "¦ +----------------------------------------------------------------¦" ); |
Wayne Roberts |
0:62e456e60083 | 431 | SerialDisplayDrawColSeparator( ); |
Wayne Roberts |
0:62e456e60083 | 432 | #endif /* LORAWAN_JOIN_EUI */ |
Wayne Roberts |
0:62e456e60083 | 433 | // "¦ ¦ [x]Personalisation ¦" ); |
Wayne Roberts |
0:62e456e60083 | 434 | SerialDisplayDrawLine( " ", " [ ]Personalisation " ); |
Wayne Roberts |
0:62e456e60083 | 435 | // "¦ ¦ NwkId [___] ¦" ); |
Wayne Roberts |
0:62e456e60083 | 436 | SerialDisplayDrawLine( " ", " NwkId [___] " ); |
Wayne Roberts |
0:62e456e60083 | 437 | // "¦ ¦ DevAddr [__ __ __ __] ¦" ); |
Wayne Roberts |
0:62e456e60083 | 438 | SerialDisplayDrawLine( " ", " DevAddr [__ __ __ __] " ); |
Wayne Roberts |
0:62e456e60083 | 439 | #ifdef OPTNEG |
Wayne Roberts |
0:62e456e60083 | 440 | SerialDisplayDrawLine( " ", " FNwkSIntKey [__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __] "); |
Wayne Roberts |
0:62e456e60083 | 441 | SerialDisplayDrawLine( " ", " SNwkSIntKey [__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __] "); |
Wayne Roberts |
0:62e456e60083 | 442 | SerialDisplayDrawLine( " ", " NwkSEncKey [__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __] "); |
Wayne Roberts |
0:62e456e60083 | 443 | #else |
Wayne Roberts |
0:62e456e60083 | 444 | // "¦ ¦ NwkSKey [__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __] ¦" ); |
Wayne Roberts |
0:62e456e60083 | 445 | SerialDisplayDrawLine( " ", " NwkSKey [__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __] "); |
Wayne Roberts |
0:62e456e60083 | 446 | #endif |
Wayne Roberts |
0:62e456e60083 | 447 | // "¦ ¦ AppSKey [__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __] ¦" ); |
Wayne Roberts |
0:62e456e60083 | 448 | SerialDisplayDrawLine( " ", " AppSKey [__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __] "); |
Wayne Roberts |
0:62e456e60083 | 449 | // "+------------+----------------------------------------------------------------¦" ); |
Wayne Roberts |
0:62e456e60083 | 450 | SerialDisplayDrawSeparator( ); |
Wayne Roberts |
0:62e456e60083 | 451 | // "¦ MAC params ¦ [ ]Confirmed / [ ]Unconfirmed ¦" ); |
Wayne Roberts |
0:62e456e60083 | 452 | SerialDisplayDrawLine( " MAC params ", " [ ]Confirmed / [ ]Unconfirmed " ); |
Wayne Roberts |
0:62e456e60083 | 453 | // "¦ ¦ ADR [ ] ¦" ); |
Wayne Roberts |
0:62e456e60083 | 454 | SerialDisplayDrawLine( " ", " ADR [ ] " ); |
Wayne Roberts |
0:62e456e60083 | 455 | // "¦ ¦ Duty cycle[ ] ¦" ); |
Wayne Roberts |
0:62e456e60083 | 456 | SerialDisplayDrawLine( " ", " Duty cycle[ ] " ); |
Wayne Roberts |
0:62e456e60083 | 457 | // "+------------+----------------------------------------------------------------¦" ); |
Wayne Roberts |
0:62e456e60083 | 458 | SerialDisplayDrawSeparator( ); |
Wayne Roberts |
0:62e456e60083 | 459 | // "¦ Network ¦ [ ]Public / [ ]Private ¦" ); |
Wayne Roberts |
0:62e456e60083 | 460 | SerialDisplayDrawLine( " Network ", " [ ]Public / [ ]Private " ); |
Wayne Roberts |
0:62e456e60083 | 461 | #ifdef LORAWAN_JOIN_EUI |
Wayne Roberts |
0:62e456e60083 | 462 | // "¦ ¦ [ ]Joining / [ ]Joined ¦" ); |
Wayne Roberts |
0:62e456e60083 | 463 | SerialDisplayDrawLine( " ", " [ ]Joining / [ ]Joined " ); |
Wayne Roberts |
0:62e456e60083 | 464 | #endif /* LORAWAN_JOIN_EUI */ |
Wayne Roberts |
0:62e456e60083 | 465 | // "+------------+----------------------------------------------------------------¦" ); |
Wayne Roberts |
0:62e456e60083 | 466 | SerialDisplayDrawSeparator( ); |
Wayne Roberts |
0:62e456e60083 | 467 | // "¦ Uplink ¦ Acked [ ] ¦" ); |
Wayne Roberts |
0:62e456e60083 | 468 | SerialDisplayDrawLine( " Uplink ", " Acked [ ] " ); |
Wayne Roberts |
0:62e456e60083 | 469 | // "¦ ¦ Datarate [ ] ¦" ); |
Wayne Roberts |
0:62e456e60083 | 470 | SerialDisplayDrawLine( " ", " Datarate [ ] " ); |
Wayne Roberts |
0:62e456e60083 | 471 | // "¦ ¦ Counter [ ] ¦" ); |
Wayne Roberts |
0:62e456e60083 | 472 | SerialDisplayDrawLine( " ", " Counter [ ] " ); |
Wayne Roberts |
0:62e456e60083 | 473 | // "¦ ¦ Port [ ] ¦" ); |
Wayne Roberts |
0:62e456e60083 | 474 | SerialDisplayDrawLine( " ", " Port [ ] " ); |
Wayne Roberts |
0:62e456e60083 | 475 | // "¦ ¦ Data [__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ ¦" ); |
Wayne Roberts |
0:62e456e60083 | 476 | SerialDisplayDrawLine( " ", " Data [__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ " ); |
Wayne Roberts |
0:62e456e60083 | 477 | // "¦ ¦ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ ¦" ); |
Wayne Roberts |
0:62e456e60083 | 478 | SerialDisplayDrawLine( " ", " __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ " ); |
Wayne Roberts |
0:62e456e60083 | 479 | // "¦ ¦ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ ¦" ); |
Wayne Roberts |
0:62e456e60083 | 480 | SerialDisplayDrawLine( " ", " __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ " ); |
Wayne Roberts |
0:62e456e60083 | 481 | // "¦ ¦ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ ¦" ); |
Wayne Roberts |
0:62e456e60083 | 482 | SerialDisplayDrawLine( " ", " __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ " ); |
Wayne Roberts |
0:62e456e60083 | 483 | // "+------------+----------------------------------------------------------------¦" ); |
Wayne Roberts |
0:62e456e60083 | 484 | SerialDisplayDrawSeparator( ); |
Wayne Roberts |
0:62e456e60083 | 485 | // "¦ Downlink ¦ RSSI [ ] dBm ¦" ); |
Wayne Roberts |
0:62e456e60083 | 486 | SerialDisplayDrawLine( " Downlink ", " RSSI [ ] dBm " ); |
Wayne Roberts |
0:62e456e60083 | 487 | // "¦ [ ]Data ¦ SNR [ ] dB ¦" ); |
Wayne Roberts |
0:62e456e60083 | 488 | SerialDisplayDrawLine( " [ ]Data ", " SNR [ ] dB " ); |
Wayne Roberts |
0:62e456e60083 | 489 | // "¦ ¦ Counter [ ] ¦" ); |
Wayne Roberts |
0:62e456e60083 | 490 | // "¦ ¦ Counter [ ] ¦" ); |
Wayne Roberts |
0:62e456e60083 | 491 | SerialDisplayDrawLine( " ", " Counter [ ] " ); |
Wayne Roberts |
0:62e456e60083 | 492 | // "¦ ¦ Port [ ] ¦" ); |
Wayne Roberts |
0:62e456e60083 | 493 | SerialDisplayDrawLine( " ", " Port [ ] " ); |
Wayne Roberts |
0:62e456e60083 | 494 | // "¦ ¦ Data [__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ ¦" ); |
Wayne Roberts |
0:62e456e60083 | 495 | SerialDisplayDrawLine( " ", " Data [__ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ " ); |
Wayne Roberts |
0:62e456e60083 | 496 | // "¦ ¦ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ ¦" ); |
Wayne Roberts |
0:62e456e60083 | 497 | SerialDisplayDrawLine( " ", " __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ " ); |
Wayne Roberts |
0:62e456e60083 | 498 | // "¦ ¦ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ ¦" ); |
Wayne Roberts |
0:62e456e60083 | 499 | SerialDisplayDrawLine( " ", " __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ " ); |
Wayne Roberts |
0:62e456e60083 | 500 | // "¦ ¦ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ ¦" ); |
Wayne Roberts |
0:62e456e60083 | 501 | SerialDisplayDrawLine( " ", " __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ " ); |
Wayne Roberts |
0:62e456e60083 | 502 | // "+------------+----------------------------------------------------------------+" ); |
Wayne Roberts |
0:62e456e60083 | 503 | SerialDisplayDrawBottomLine( ); |
Wayne Roberts |
0:62e456e60083 | 504 | vt.printf( "To refresh screen please hit 'r' key.\r\n" ); |
Wayne Roberts |
0:62e456e60083 | 505 | } |
Wayne Roberts |
0:62e456e60083 | 506 | |
Wayne Roberts |
0:62e456e60083 | 507 | bool SerialDisplayReadable( void ) |
Wayne Roberts |
0:62e456e60083 | 508 | { |
Wayne Roberts |
0:62e456e60083 | 509 | return vt.Readable( ); |
Wayne Roberts |
0:62e456e60083 | 510 | } |
Wayne Roberts |
0:62e456e60083 | 511 | |
Wayne Roberts |
0:62e456e60083 | 512 | uint8_t SerialDisplayGetChar( void ) |
Wayne Roberts |
0:62e456e60083 | 513 | { |
Wayne Roberts |
0:62e456e60083 | 514 | return vt.GetChar( ); |
Wayne Roberts |
0:62e456e60083 | 515 | } |
Wayne Roberts |
0:62e456e60083 | 516 | |
Wayne Roberts |
0:62e456e60083 | 517 | #endif /* ENABLE_VT100 */ |
Wayne Roberts |
0:62e456e60083 | 518 |