Publish for Testing

Dependencies:   SX127x lorawan1v1

Fork of LoRaWAN-grove-cayenne by wayne roberts

Committer:
bootcamps
Date:
Thu Oct 11 23:01:12 2018 +0000
Revision:
12:94b7971c7146
Parent:
9:1a94f4a5e716
Test for LoRaWAN grove cayenne Oct 11th A

Who changed what in which revision?

UserRevisionLine numberNew 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 terminal support class
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 #ifndef __VT100_H__
Wayne Roberts 0:62e456e60083 16 #define __VT100_H__
Wayne Roberts 0:62e456e60083 17
Wayne Roberts 0:62e456e60083 18 #ifndef STRING_STACK_LIMIT
Wayne Roberts 0:62e456e60083 19 #define STRING_STACK_LIMIT 120
Wayne Roberts 0:62e456e60083 20 #endif
Wayne Roberts 0:62e456e60083 21
Wayne Roberts 0:62e456e60083 22 #ifdef TARGET_MOTE_L152RC
Wayne Roberts 0:62e456e60083 23 #define VT100_BAUD 115200
Wayne Roberts 0:62e456e60083 24 #elif defined(TARGET_DISCO_L072CZ_LRWAN1)
Wayne Roberts 0:62e456e60083 25 #define VT100_BAUD 38400 /* HSI? */
Wayne Roberts 0:62e456e60083 26 #elif defined(TARGET_NUCLEO_L152RE)
Wayne Roberts 0:62e456e60083 27 #define VT100_BAUD 115200
Wayne Roberts 0:62e456e60083 28 #elif defined(TARGET_NUCLEO_L073RZ)
Wayne Roberts 0:62e456e60083 29 #define VT100_BAUD 115200
Wayne Roberts 9:1a94f4a5e716 30 #elif defined(TARGET_NRF52_DK)
Wayne Roberts 9:1a94f4a5e716 31 #define VT100_BAUD 115200
Wayne Roberts 0:62e456e60083 32 #else
Wayne Roberts 0:62e456e60083 33 #error find_usable_vt100_baudrate
Wayne Roberts 0:62e456e60083 34 #endif
Wayne Roberts 0:62e456e60083 35
Wayne Roberts 0:62e456e60083 36 /**
Wayne Roberts 0:62e456e60083 37 * Implements VT100 terminal commands support.
Wayne Roberts 0:62e456e60083 38 * Implments also the same behaviour has RawSerial class. The only difference
Wayne Roberts 0:62e456e60083 39 * is located in putc fucntion where writeable check is made befor sending the character.
Wayne Roberts 0:62e456e60083 40 */
Wayne Roberts 0:62e456e60083 41 class VT100 : public SerialBase
Wayne Roberts 0:62e456e60083 42 {
Wayne Roberts 0:62e456e60083 43 public:
Wayne Roberts 0:62e456e60083 44 enum TextAttributes
Wayne Roberts 0:62e456e60083 45 {
Wayne Roberts 0:62e456e60083 46 ATTR_OFF = 0,
Wayne Roberts 0:62e456e60083 47 BOLD = 1,
Wayne Roberts 0:62e456e60083 48 USCORE = 4,
Wayne Roberts 0:62e456e60083 49 BLINK = 5,
Wayne Roberts 0:62e456e60083 50 REVERSE = 7,
Wayne Roberts 0:62e456e60083 51 BOLD_OFF = 21,
Wayne Roberts 0:62e456e60083 52 USCORE_OFF = 24,
Wayne Roberts 0:62e456e60083 53 BLINK_OFF = 25,
Wayne Roberts 0:62e456e60083 54 REVERSE_OFF = 27,
Wayne Roberts 0:62e456e60083 55 };
Wayne Roberts 0:62e456e60083 56
Wayne Roberts 0:62e456e60083 57 enum Colors
Wayne Roberts 0:62e456e60083 58 {
Wayne Roberts 0:62e456e60083 59 BLACK = 0,
Wayne Roberts 0:62e456e60083 60 RED = 1,
Wayne Roberts 0:62e456e60083 61 GREEN = 2,
Wayne Roberts 0:62e456e60083 62 BROWN = 3,
Wayne Roberts 0:62e456e60083 63 BLUE = 4,
Wayne Roberts 0:62e456e60083 64 MAGENTA = 5,
Wayne Roberts 0:62e456e60083 65 CYAN = 6,
Wayne Roberts 0:62e456e60083 66 WHITE = 7,
Wayne Roberts 0:62e456e60083 67 };
Wayne Roberts 0:62e456e60083 68
Wayne Roberts 0:62e456e60083 69 VT100( PinName tx, PinName rx ): SerialBase(tx, rx, VT100_BAUD)
Wayne Roberts 0:62e456e60083 70 {
Wayne Roberts 0:62e456e60083 71 // initializes terminal to "power-on" settings
Wayne Roberts 0:62e456e60083 72 // ESC c
Wayne Roberts 0:62e456e60083 73 this->printf( "\x1B\x63" );
Wayne Roberts 0:62e456e60083 74 }
Wayne Roberts 0:62e456e60083 75
Wayne Roberts 0:62e456e60083 76 void ClearScreen( uint8_t param )
Wayne Roberts 0:62e456e60083 77 {
Wayne Roberts 0:62e456e60083 78 // ESC [ Ps J
Wayne Roberts 0:62e456e60083 79 // 0 Clear screen from cursor down
Wayne Roberts 0:62e456e60083 80 // 1 Clear screen from cursor up
Wayne Roberts 0:62e456e60083 81 // 2 Clear entire screen
Wayne Roberts 0:62e456e60083 82 this->printf( "\x1B[%dJ", param );
Wayne Roberts 0:62e456e60083 83 }
Wayne Roberts 0:62e456e60083 84
Wayne Roberts 0:62e456e60083 85 void ClearLine( uint8_t param )
Wayne Roberts 0:62e456e60083 86 {
Wayne Roberts 0:62e456e60083 87 // ESC [ Ps K
Wayne Roberts 0:62e456e60083 88 // 0 Erase from the active position to the end of the line, inclusive (default)
Wayne Roberts 0:62e456e60083 89 // 1 Erase from the start of the screen to the active position, inclusive
Wayne Roberts 0:62e456e60083 90 // 2 Erase all of the line, inclusive
Wayne Roberts 0:62e456e60083 91 this->printf( "\x1B[%dK", param );
Wayne Roberts 0:62e456e60083 92 }
Wayne Roberts 0:62e456e60083 93
Wayne Roberts 0:62e456e60083 94 void SetAttribute( uint8_t attr )
Wayne Roberts 0:62e456e60083 95 {
Wayne Roberts 0:62e456e60083 96 // ESC [ Ps;...;Ps m
Wayne Roberts 0:62e456e60083 97 this->printf( "\x1B[%dm", attr );
Wayne Roberts 0:62e456e60083 98 }
Wayne Roberts 0:62e456e60083 99
Wayne Roberts 0:62e456e60083 100 void SetAttribute( uint8_t attr, uint8_t fgcolor, uint8_t bgcolor )
Wayne Roberts 0:62e456e60083 101 {
Wayne Roberts 0:62e456e60083 102 // ESC [ Ps;...;Ps m
Wayne Roberts 0:62e456e60083 103 this->printf( "\x1B[%d;%d;%dm", attr, fgcolor + 30, bgcolor + 40 );
Wayne Roberts 0:62e456e60083 104 }
Wayne Roberts 0:62e456e60083 105
Wayne Roberts 0:62e456e60083 106 void SetCursorMode( uint8_t visible )
Wayne Roberts 0:62e456e60083 107 {
Wayne Roberts 0:62e456e60083 108 if( visible == true )
Wayne Roberts 0:62e456e60083 109 {
Wayne Roberts 0:62e456e60083 110 // ESC [ ? 25 h
Wayne Roberts 0:62e456e60083 111 this->printf( "\x1B[?25h" );
Wayne Roberts 0:62e456e60083 112 }
Wayne Roberts 0:62e456e60083 113 else
Wayne Roberts 0:62e456e60083 114 {
Wayne Roberts 0:62e456e60083 115 // ESC [ ? 25 l
Wayne Roberts 0:62e456e60083 116 this->printf( "\x1B[?25l" );
Wayne Roberts 0:62e456e60083 117 }
Wayne Roberts 0:62e456e60083 118 }
Wayne Roberts 0:62e456e60083 119
Wayne Roberts 0:62e456e60083 120 void SetCursorPos( uint8_t line, uint8_t col )
Wayne Roberts 0:62e456e60083 121 {
Wayne Roberts 0:62e456e60083 122 // ESC [ Pl ; Pc H
Wayne Roberts 0:62e456e60083 123 this->printf( "\x1B[%d;%dH", line, col );
Wayne Roberts 0:62e456e60083 124 }
Wayne Roberts 0:62e456e60083 125
Wayne Roberts 0:62e456e60083 126 void PutStringAt( uint8_t line, uint8_t col, const char *s )
Wayne Roberts 0:62e456e60083 127 {
Wayne Roberts 0:62e456e60083 128 this->SetCursorPos( line, col );
Wayne Roberts 0:62e456e60083 129 this->printf( "%s", s );
Wayne Roberts 0:62e456e60083 130 }
Wayne Roberts 0:62e456e60083 131
Wayne Roberts 0:62e456e60083 132 void PutCharAt( uint8_t line, uint8_t col, uint8_t c )
Wayne Roberts 0:62e456e60083 133 {
Wayne Roberts 0:62e456e60083 134 this->SetCursorPos( line, col );
Wayne Roberts 0:62e456e60083 135 this->printf( "%c", c );
Wayne Roberts 0:62e456e60083 136 }
Wayne Roberts 0:62e456e60083 137
Wayne Roberts 0:62e456e60083 138 void PutHexAt( uint8_t line, uint8_t col, uint16_t n )
Wayne Roberts 0:62e456e60083 139 {
Wayne Roberts 0:62e456e60083 140 this->SetCursorPos( line, col );
Wayne Roberts 0:62e456e60083 141 this->printf( "%X", n );
Wayne Roberts 0:62e456e60083 142 }
Wayne Roberts 0:62e456e60083 143
Wayne Roberts 0:62e456e60083 144 void PutBoxDrawingChar( uint8_t c )
Wayne Roberts 0:62e456e60083 145 {
Wayne Roberts 0:62e456e60083 146 this->printf( "\x1B(0%c\x1b(B", c );
Wayne Roberts 0:62e456e60083 147 }
Wayne Roberts 0:62e456e60083 148
Wayne Roberts 0:62e456e60083 149 bool Readable( void )
Wayne Roberts 0:62e456e60083 150 {
Wayne Roberts 0:62e456e60083 151 return this->readable( );
Wayne Roberts 0:62e456e60083 152 }
Wayne Roberts 0:62e456e60083 153
Wayne Roberts 0:62e456e60083 154 uint8_t GetChar( void )
Wayne Roberts 0:62e456e60083 155 {
Wayne Roberts 0:62e456e60083 156 return this->getc( );
Wayne Roberts 0:62e456e60083 157 }
Wayne Roberts 0:62e456e60083 158
Wayne Roberts 0:62e456e60083 159 /*
Wayne Roberts 0:62e456e60083 160 * RawSerial class implmentation copy.
Wayne Roberts 0:62e456e60083 161 */
Wayne Roberts 0:62e456e60083 162 /** Read a char from the serial port
Wayne Roberts 0:62e456e60083 163 *
Wayne Roberts 0:62e456e60083 164 * @returns The char read from the serial port
Wayne Roberts 0:62e456e60083 165 */
Wayne Roberts 0:62e456e60083 166 int getc( )
Wayne Roberts 0:62e456e60083 167 {
Wayne Roberts 0:62e456e60083 168 return _base_getc( );
Wayne Roberts 0:62e456e60083 169 }
Wayne Roberts 0:62e456e60083 170
Wayne Roberts 0:62e456e60083 171 /** Write a char to the serial port
Wayne Roberts 0:62e456e60083 172 *
Wayne Roberts 0:62e456e60083 173 * @param c The char to write
Wayne Roberts 0:62e456e60083 174 *
Wayne Roberts 0:62e456e60083 175 * @returns The written char or -1 if an error occured
Wayne Roberts 0:62e456e60083 176 */
Wayne Roberts 0:62e456e60083 177 int putc( int c )
Wayne Roberts 0:62e456e60083 178 {
Wayne Roberts 0:62e456e60083 179 while( this->writeable( ) != 1 );
Wayne Roberts 0:62e456e60083 180 return _base_putc( c );
Wayne Roberts 0:62e456e60083 181 }
Wayne Roberts 0:62e456e60083 182
Wayne Roberts 0:62e456e60083 183 /** Write a string to the serial port
Wayne Roberts 0:62e456e60083 184 *
Wayne Roberts 0:62e456e60083 185 * @param str The string to write
Wayne Roberts 0:62e456e60083 186 *
Wayne Roberts 0:62e456e60083 187 * @returns 0 if the write succeeds, EOF for error
Wayne Roberts 0:62e456e60083 188 */
Wayne Roberts 0:62e456e60083 189 int puts( const char *str )
Wayne Roberts 0:62e456e60083 190 {
Wayne Roberts 0:62e456e60083 191 while( *str )
Wayne Roberts 0:62e456e60083 192 putc( *str++ );
Wayne Roberts 0:62e456e60083 193 return 0;
Wayne Roberts 0:62e456e60083 194 }
Wayne Roberts 0:62e456e60083 195
Wayne Roberts 0:62e456e60083 196 // Experimental support for printf in RawSerial. No Stream inheritance
Wayne Roberts 0:62e456e60083 197 // means we can't call printf() directly, so we use sprintf() instead.
Wayne Roberts 0:62e456e60083 198 // We only call malloc() for the sprintf() buffer if the buffer
Wayne Roberts 0:62e456e60083 199 // length is above a certain threshold, otherwise we use just the stack.
Wayne Roberts 0:62e456e60083 200 int printf( const char *format, ... )
Wayne Roberts 0:62e456e60083 201 {
Wayne Roberts 0:62e456e60083 202 std::va_list arg;
Wayne Roberts 0:62e456e60083 203 va_start( arg, format );
Wayne Roberts 0:62e456e60083 204 int len = vsnprintf( NULL, 0, format, arg );
Wayne Roberts 0:62e456e60083 205 if( len < STRING_STACK_LIMIT )
Wayne Roberts 0:62e456e60083 206 {
Wayne Roberts 0:62e456e60083 207 char temp[STRING_STACK_LIMIT];
Wayne Roberts 0:62e456e60083 208 vsprintf( temp, format, arg );
Wayne Roberts 0:62e456e60083 209 puts( temp );
Wayne Roberts 0:62e456e60083 210 }
Wayne Roberts 0:62e456e60083 211 else
Wayne Roberts 0:62e456e60083 212 {
Wayne Roberts 0:62e456e60083 213 char *temp = new char[len + 1];
Wayne Roberts 0:62e456e60083 214 vsprintf( temp, format, arg );
Wayne Roberts 0:62e456e60083 215 puts( temp );
Wayne Roberts 0:62e456e60083 216 delete[] temp;
Wayne Roberts 0:62e456e60083 217 }
Wayne Roberts 0:62e456e60083 218 va_end( arg );
Wayne Roberts 0:62e456e60083 219 return len;
Wayne Roberts 0:62e456e60083 220 }
Wayne Roberts 0:62e456e60083 221
Wayne Roberts 0:62e456e60083 222 private:
Wayne Roberts 0:62e456e60083 223
Wayne Roberts 0:62e456e60083 224 };
Wayne Roberts 0:62e456e60083 225
Wayne Roberts 0:62e456e60083 226 #endif // __VT100_H__