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.
vt100.h@9:1a94f4a5e716, 2018-07-23 (annotated)
- Committer:
- Wayne Roberts
- Date:
- Mon Jul 23 17:56:47 2018 -0700
- Revision:
- 9:1a94f4a5e716
- Parent:
- 0:62e456e60083
rename board.h to lorawan_board.h
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 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__ |