TFT + Ethernet

Dependencies:   TFTv2 nihh-utils xpl

Committer:
richnash
Date:
Tue Oct 09 18:26:33 2018 +0000
Revision:
0:06d4a05a7849
https://os.mbed.com/users/richnash/code/nihh-utils/

Who changed what in which revision?

UserRevisionLine numberNew contents of line
richnash 0:06d4a05a7849 1
richnash 0:06d4a05a7849 2 // ##################################################################################
richnash 0:06d4a05a7849 3 // XPL with TFT Screen Application
richnash 0:06d4a05a7849 4 // ##################################################################################
richnash 0:06d4a05a7849 5
richnash 0:06d4a05a7849 6 // generate XPL debug level output on the serial line
richnash 0:06d4a05a7849 7 //#define DEBUG_OUTPUT_XPL
richnash 0:06d4a05a7849 8
richnash 0:06d4a05a7849 9 // turn OFF dependency on being connected to ethernet
richnash 0:06d4a05a7849 10 #define CONNECTED_OFF
richnash 0:06d4a05a7849 11
richnash 0:06d4a05a7849 12 // -----------------------------------------------------------
richnash 0:06d4a05a7849 13 // MBED Headers
richnash 0:06d4a05a7849 14 #include "mbed.h"
richnash 0:06d4a05a7849 15 #include "EthernetInterface.h"
richnash 0:06d4a05a7849 16 #include <math.h>
richnash 0:06d4a05a7849 17
richnash 0:06d4a05a7849 18 // -----------------------------------------------------------
richnash 0:06d4a05a7849 19 // Graphics Headers
richnash 0:06d4a05a7849 20 #include "ILI9341.h"
richnash 0:06d4a05a7849 21 #include "SPI_STMPE610.h"
richnash 0:06d4a05a7849 22 #include "Arial12x12.h"
richnash 0:06d4a05a7849 23 #include "Arial24x23.h"
richnash 0:06d4a05a7849 24 #include "Arial28x28.h"
richnash 0:06d4a05a7849 25 #include "Arial43x48_numb.h"
richnash 0:06d4a05a7849 26
richnash 0:06d4a05a7849 27 // -----------------------------------------------------------
richnash 0:06d4a05a7849 28 // My Headers
richnash 0:06d4a05a7849 29 #include "Watchdog.h"
richnash 0:06d4a05a7849 30 #include "xPL.h"
richnash 0:06d4a05a7849 31 #include "nihh_utils.h"
richnash 0:06d4a05a7849 32
richnash 0:06d4a05a7849 33 // -----------------------------------------------------------
richnash 0:06d4a05a7849 34 // XPL defines
richnash 0:06d4a05a7849 35 #define UDP_PORT 3865
richnash 0:06d4a05a7849 36 #define UDP_BUFFER_SIZE 500
richnash 0:06d4a05a7849 37
richnash 0:06d4a05a7849 38 #define XPL_NAME "NUCLEO1"
richnash 0:06d4a05a7849 39
richnash 0:06d4a05a7849 40 // -----------------------------------------------------------
richnash 0:06d4a05a7849 41 // global variables
richnash 0:06d4a05a7849 42 Watchdog wd;
richnash 0:06d4a05a7849 43 xPL xpl;
richnash 0:06d4a05a7849 44
richnash 0:06d4a05a7849 45 DigitalOut led1(LED1);
richnash 0:06d4a05a7849 46 DigitalOut led2(LED2);
richnash 0:06d4a05a7849 47 DigitalOut led3(LED3);
richnash 0:06d4a05a7849 48 DigitalOut led4(LED4);
richnash 0:06d4a05a7849 49
richnash 0:06d4a05a7849 50 Serial logger(SERIAL_TX, SERIAL_RX);
richnash 0:06d4a05a7849 51
richnash 0:06d4a05a7849 52 EthernetInterface gEth;
richnash 0:06d4a05a7849 53 UDPSocket _socket;
richnash 0:06d4a05a7849 54 UDPSocket _socketSender;
richnash 0:06d4a05a7849 55 char in_buffer[UDP_BUFFER_SIZE];
richnash 0:06d4a05a7849 56
richnash 0:06d4a05a7849 57
richnash 0:06d4a05a7849 58 #define PIN_RESET_TFT PC_13 /* place holder */
richnash 0:06d4a05a7849 59
richnash 0:06d4a05a7849 60 // ------------- FROM WORKING VERSION
richnash 0:06d4a05a7849 61
richnash 0:06d4a05a7849 62 #define PIN_MOSI D10 // WAS D11 !!!!!!!!!!!!!!! CLASHES WITH ETHERNET ON NUCLEO !!!
richnash 0:06d4a05a7849 63 #define PIN_MISO D12
richnash 0:06d4a05a7849 64 #define PIN_SCLK D13
richnash 0:06d4a05a7849 65 #define PIN_CS_TFT D5
richnash 0:06d4a05a7849 66 #define PIN_DC_TFT D6
richnash 0:06d4a05a7849 67 #define PIN_BL_TFT D7
richnash 0:06d4a05a7849 68 #define PIN_CS_SD D4
richnash 0:06d4a05a7849 69
richnash 0:06d4a05a7849 70 // =====================================
richnash 0:06d4a05a7849 71
richnash 0:06d4a05a7849 72 #define PIN_XP A2
richnash 0:06d4a05a7849 73 #define PIN_XM A0
richnash 0:06d4a05a7849 74 #define PIN_YP A3
richnash 0:06d4a05a7849 75 #define PIN_YM A1
richnash 0:06d4a05a7849 76
richnash 0:06d4a05a7849 77
richnash 0:06d4a05a7849 78 struct point {
richnash 0:06d4a05a7849 79 int x;
richnash 0:06d4a05a7849 80 int y;
richnash 0:06d4a05a7849 81 };
richnash 0:06d4a05a7849 82
richnash 0:06d4a05a7849 83 void calibrate(void);
richnash 0:06d4a05a7849 84 bool getPixel(point& p);
richnash 0:06d4a05a7849 85 point toPixel(point p);
richnash 0:06d4a05a7849 86
richnash 0:06d4a05a7849 87 typedef enum { YES, MAYBE, NO } TOUCH;
richnash 0:06d4a05a7849 88
richnash 0:06d4a05a7849 89 TOUCH getTouch(point& p);
richnash 0:06d4a05a7849 90
richnash 0:06d4a05a7849 91 int readTouch(PinName p, PinName m, PinName a, PinName i);
richnash 0:06d4a05a7849 92
richnash 0:06d4a05a7849 93
richnash 0:06d4a05a7849 94 int x_off = 22071;
richnash 0:06d4a05a7849 95 int y_off = 18707;
richnash 0:06d4a05a7849 96 int pp_tx = 373;
richnash 0:06d4a05a7849 97 int pp_ty = 297;
richnash 0:06d4a05a7849 98
richnash 0:06d4a05a7849 99 // =====================================
richnash 0:06d4a05a7849 100
richnash 0:06d4a05a7849 101 DigitalOut backlight(PIN_BL_TFT) ;
richnash 0:06d4a05a7849 102
richnash 0:06d4a05a7849 103 ILI9341 TFT(SPI_8, 10000000, PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_TFT, PIN_RESET_TFT, PIN_DC_TFT, "Seeed2.8") ;
richnash 0:06d4a05a7849 104
richnash 0:06d4a05a7849 105 int page = 1 ;
richnash 0:06d4a05a7849 106 int numPage = 3 ;
richnash 0:06d4a05a7849 107
richnash 0:06d4a05a7849 108
richnash 0:06d4a05a7849 109 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
richnash 0:06d4a05a7849 110 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
richnash 0:06d4a05a7849 111 // ++++++++ TFT SCREEN FUNCTIONS
richnash 0:06d4a05a7849 112 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
richnash 0:06d4a05a7849 113 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
richnash 0:06d4a05a7849 114
richnash 0:06d4a05a7849 115 int readTouch(PinName p, PinName m, PinName a, PinName i)
richnash 0:06d4a05a7849 116 {
richnash 0:06d4a05a7849 117 DigitalOut _p(p);
richnash 0:06d4a05a7849 118 _p = 1;
richnash 0:06d4a05a7849 119 DigitalOut _m(m);
richnash 0:06d4a05a7849 120 _m = 0;
richnash 0:06d4a05a7849 121 AnalogIn _a(a);
richnash 0:06d4a05a7849 122 AnalogIn _i(i); // this pin has to be high Z (DigitalIn may also work)
richnash 0:06d4a05a7849 123 wait_us(10);
richnash 0:06d4a05a7849 124 return _a.read_u16();
richnash 0:06d4a05a7849 125 }
richnash 0:06d4a05a7849 126
richnash 0:06d4a05a7849 127 TOUCH getTouch(point& p)
richnash 0:06d4a05a7849 128 {
richnash 0:06d4a05a7849 129 int y2 = readTouch(PIN_XP,PIN_XM,PIN_YP,PIN_YM);
richnash 0:06d4a05a7849 130 int x2 = readTouch(PIN_YP,PIN_YM,PIN_XP,PIN_XM);
richnash 0:06d4a05a7849 131 int y1 = readTouch(PIN_XP,PIN_XM,PIN_YP,PIN_YM);
richnash 0:06d4a05a7849 132 int x1 = readTouch(PIN_YP,PIN_YM,PIN_XP,PIN_XM);
richnash 0:06d4a05a7849 133 int xd = x1 - x2;
richnash 0:06d4a05a7849 134 int yd = y1 - y2;
richnash 0:06d4a05a7849 135 xd = (xd > 0) ? xd : -xd;
richnash 0:06d4a05a7849 136 yd = (yd > 0) ? xd : -xd;
richnash 0:06d4a05a7849 137 p.x = x1 + x2;
richnash 0:06d4a05a7849 138 p.y = y1 + y2;
richnash 0:06d4a05a7849 139
richnash 0:06d4a05a7849 140 const int th = 8000;
richnash 0:06d4a05a7849 141 const int df = 100;
richnash 0:06d4a05a7849 142 TOUCH touch;
richnash 0:06d4a05a7849 143 if (x1 < th || x2 < th ||
richnash 0:06d4a05a7849 144 y1 < th || y2 < th) {
richnash 0:06d4a05a7849 145 p.x = 0;
richnash 0:06d4a05a7849 146 p.y = 0;
richnash 0:06d4a05a7849 147 touch = NO;
richnash 0:06d4a05a7849 148 } else if (xd > df || yd > df) {
richnash 0:06d4a05a7849 149 touch = MAYBE;
richnash 0:06d4a05a7849 150 } else {
richnash 0:06d4a05a7849 151 touch = YES;
richnash 0:06d4a05a7849 152 }
richnash 0:06d4a05a7849 153 //TFT.locate(0,50);
richnash 0:06d4a05a7849 154 //TFT.printf("x: %6i y: %6i",p.x,p.y);
richnash 0:06d4a05a7849 155 return touch;
richnash 0:06d4a05a7849 156 }
richnash 0:06d4a05a7849 157
richnash 0:06d4a05a7849 158 void calibrate(void)
richnash 0:06d4a05a7849 159 {
richnash 0:06d4a05a7849 160 int i;
richnash 0:06d4a05a7849 161 int a = 0,b = 0,c = 0, d = 0;
richnash 0:06d4a05a7849 162 int pos_x = 0, pos_y = 0;
richnash 0:06d4a05a7849 163 point p;
richnash 0:06d4a05a7849 164
richnash 0:06d4a05a7849 165 backlight = 0 ;
richnash 0:06d4a05a7849 166 //TFT.BusEnable(true) ;
richnash 0:06d4a05a7849 167
richnash 0:06d4a05a7849 168 TFT.background(Black);
richnash 0:06d4a05a7849 169 wait(0.1) ;
richnash 0:06d4a05a7849 170 TFT.foreground(White);
richnash 0:06d4a05a7849 171 wait(0.1) ;
richnash 0:06d4a05a7849 172 TFT.cls() ;
richnash 0:06d4a05a7849 173 wait(0.1) ;
richnash 0:06d4a05a7849 174 TFT.set_font((unsigned char*) Arial12x12);
richnash 0:06d4a05a7849 175 TFT.locate(90,0);
richnash 0:06d4a05a7849 176 TFT.printf("Graphics");
richnash 0:06d4a05a7849 177
richnash 0:06d4a05a7849 178 TFT.line(0,3,6,3,White);
richnash 0:06d4a05a7849 179 TFT.line(3,0,3,6,White);
richnash 0:06d4a05a7849 180
richnash 0:06d4a05a7849 181 backlight = 1 ;
richnash 0:06d4a05a7849 182
richnash 0:06d4a05a7849 183 //if (font)
richnash 0:06d4a05a7849 184 //{
richnash 0:06d4a05a7849 185 // get the center of the screen
richnash 0:06d4a05a7849 186 pos_x = TFT.columns() / 2 - 3;
richnash 0:06d4a05a7849 187 pos_x = pos_x * Arial12x12[1];
richnash 0:06d4a05a7849 188 pos_y = (TFT.rows() / 2) - 1;
richnash 0:06d4a05a7849 189 pos_y = pos_y * Arial12x12[2];
richnash 0:06d4a05a7849 190 TFT.locate(pos_x,pos_y);
richnash 0:06d4a05a7849 191 TFT.printf("press cross ");
richnash 0:06d4a05a7849 192 TFT.locate(pos_x,pos_y + Arial12x12[2]);
richnash 0:06d4a05a7849 193 TFT.printf("to calibrate ");
richnash 0:06d4a05a7849 194 //}
richnash 0:06d4a05a7849 195
richnash 0:06d4a05a7849 196 for (i=0; i<5; i++) {
richnash 0:06d4a05a7849 197 while (getTouch(p) != YES)
richnash 0:06d4a05a7849 198 /*nothing*/;
richnash 0:06d4a05a7849 199 a += p.x;
richnash 0:06d4a05a7849 200 b += p.y;
richnash 0:06d4a05a7849 201 }
richnash 0:06d4a05a7849 202 a = a / 5;
richnash 0:06d4a05a7849 203 b = b / 5;
richnash 0:06d4a05a7849 204 //if (font)
richnash 0:06d4a05a7849 205 //{
richnash 0:06d4a05a7849 206 TFT.locate(pos_x,pos_y);
richnash 0:06d4a05a7849 207 TFT.printf("ok ");
richnash 0:06d4a05a7849 208 TFT.locate(pos_x,pos_y + Arial12x12[2]);
richnash 0:06d4a05a7849 209 TFT.printf("release touch ");
richnash 0:06d4a05a7849 210 //}
richnash 0:06d4a05a7849 211 while (getTouch(p) != NO)
richnash 0:06d4a05a7849 212 /*nothing*/;
richnash 0:06d4a05a7849 213
richnash 0:06d4a05a7849 214 TFT.cls();
richnash 0:06d4a05a7849 215 TFT.line(TFT.width() -5, TFT.height() - 8,TFT.width() - 5,TFT.height() -1,White); // paint cross
richnash 0:06d4a05a7849 216 TFT.line(TFT.width() - 8,TFT.height() - 5,TFT.width() - 1,TFT.height() - 5,White);
richnash 0:06d4a05a7849 217 //if (font)
richnash 0:06d4a05a7849 218 //{
richnash 0:06d4a05a7849 219 TFT.locate(pos_x,pos_y);
richnash 0:06d4a05a7849 220 TFT.printf("press cross ");
richnash 0:06d4a05a7849 221 TFT.locate(pos_x,pos_y + Arial12x12[2]);
richnash 0:06d4a05a7849 222 TFT.printf("to calibrate ");
richnash 0:06d4a05a7849 223 //}
richnash 0:06d4a05a7849 224 for (i=0; i<5; i++) {
richnash 0:06d4a05a7849 225 while (getTouch(p) != YES)
richnash 0:06d4a05a7849 226 /*nothing*/;
richnash 0:06d4a05a7849 227 c+= p.x;
richnash 0:06d4a05a7849 228 d+= p.y;
richnash 0:06d4a05a7849 229 }
richnash 0:06d4a05a7849 230 c = c / 5;
richnash 0:06d4a05a7849 231 d = d / 5;
richnash 0:06d4a05a7849 232 x_off = a;
richnash 0:06d4a05a7849 233 y_off = b;
richnash 0:06d4a05a7849 234 i = c-a; // delta x
richnash 0:06d4a05a7849 235 pp_tx = i / (TFT.width() - 6);
richnash 0:06d4a05a7849 236 i = d-b; // delta y
richnash 0:06d4a05a7849 237 pp_ty = i / (TFT.height() - 6);
richnash 0:06d4a05a7849 238 //if (font)
richnash 0:06d4a05a7849 239 //{
richnash 0:06d4a05a7849 240 TFT.locate(pos_x,pos_y);
richnash 0:06d4a05a7849 241 TFT.printf("Calibrated ");
richnash 0:06d4a05a7849 242 TFT.locate(pos_x,pos_y + Arial12x12[2]);
richnash 0:06d4a05a7849 243 TFT.printf("x %6i %4i", x_off, pp_tx);
richnash 0:06d4a05a7849 244 TFT.locate(pos_x,pos_y + 2*Arial12x12[2]);
richnash 0:06d4a05a7849 245 TFT.printf("y %6i %4i", y_off, pp_ty);
richnash 0:06d4a05a7849 246 //}
richnash 0:06d4a05a7849 247 while (getTouch(p) != NO)
richnash 0:06d4a05a7849 248 /*nothing*/;
richnash 0:06d4a05a7849 249 TFT.cls();
richnash 0:06d4a05a7849 250
richnash 0:06d4a05a7849 251 //TFT.BusEnable(false) ;
richnash 0:06d4a05a7849 252
richnash 0:06d4a05a7849 253 printf("x_off:%6i pp_tx:%4i \n\r", x_off, pp_tx);
richnash 0:06d4a05a7849 254 printf("y_off:%6i pp_ty:%4i \n\r", y_off, pp_ty);
richnash 0:06d4a05a7849 255 }
richnash 0:06d4a05a7849 256
richnash 0:06d4a05a7849 257 point toPixel(point p)
richnash 0:06d4a05a7849 258 {
richnash 0:06d4a05a7849 259 p.x -= x_off;
richnash 0:06d4a05a7849 260 p.x /= pp_tx;
richnash 0:06d4a05a7849 261 int w = TFT.width();
richnash 0:06d4a05a7849 262 if (p.x > w) p.x = w;
richnash 0:06d4a05a7849 263 if (p.x < 0) p.x = 0;
richnash 0:06d4a05a7849 264 p.y -= y_off;
richnash 0:06d4a05a7849 265 p.y /= pp_ty;
richnash 0:06d4a05a7849 266 int h = TFT.height();
richnash 0:06d4a05a7849 267 if (p.y > h) p.y = h;
richnash 0:06d4a05a7849 268 if (p.y < 0) p.y = 0;
richnash 0:06d4a05a7849 269 return (p);
richnash 0:06d4a05a7849 270 }
richnash 0:06d4a05a7849 271
richnash 0:06d4a05a7849 272 bool getPixel(point& p)
richnash 0:06d4a05a7849 273 {
richnash 0:06d4a05a7849 274 TOUCH touch = getTouch(p);
richnash 0:06d4a05a7849 275 p = toPixel(p);
richnash 0:06d4a05a7849 276 return touch == YES;
richnash 0:06d4a05a7849 277 }
richnash 0:06d4a05a7849 278
richnash 0:06d4a05a7849 279
richnash 0:06d4a05a7849 280 // ===================================================
richnash 0:06d4a05a7849 281
richnash 0:06d4a05a7849 282 void initTFT(void)
richnash 0:06d4a05a7849 283 {
richnash 0:06d4a05a7849 284 //Configure the display driver
richnash 0:06d4a05a7849 285 //TFT.BusEnable(true) ;
richnash 0:06d4a05a7849 286 TFT.FastWindow(true) ;
richnash 0:06d4a05a7849 287 TFT.background(Black);
richnash 0:06d4a05a7849 288 TFT.foreground(White);
richnash 0:06d4a05a7849 289 wait(0.01) ;
richnash 0:06d4a05a7849 290 TFT.cls();
richnash 0:06d4a05a7849 291 //TFT.BusEnable(false) ;
richnash 0:06d4a05a7849 292 }
richnash 0:06d4a05a7849 293
richnash 0:06d4a05a7849 294 void screen1(void) // Welcome Screen
richnash 0:06d4a05a7849 295 {
richnash 0:06d4a05a7849 296 printf("screen1\r\n" );
richnash 0:06d4a05a7849 297
richnash 0:06d4a05a7849 298 //TFT.BusEnable(true) ;
richnash 0:06d4a05a7849 299 backlight = 0 ;
richnash 0:06d4a05a7849 300 TFT.background(White) ;
richnash 0:06d4a05a7849 301 wait(0.1) ;
richnash 0:06d4a05a7849 302 TFT.cls() ;
richnash 0:06d4a05a7849 303 wait(0.1) ;
richnash 0:06d4a05a7849 304
richnash 0:06d4a05a7849 305 TFT.set_font((unsigned char*) Arial24x23);
richnash 0:06d4a05a7849 306 TFT.foreground(Red) ;
richnash 0:06d4a05a7849 307 TFT.locate(80, 40) ;
richnash 0:06d4a05a7849 308 TFT.printf("MBED") ;
richnash 0:06d4a05a7849 309 TFT.foreground(Blue);
richnash 0:06d4a05a7849 310 TFT.locate(60, 80) ;
richnash 0:06d4a05a7849 311 TFT.printf("2.8\"TFT") ;
richnash 0:06d4a05a7849 312 TFT.locate(40, 120) ;
richnash 0:06d4a05a7849 313 TFT.printf("with touch") ;
richnash 0:06d4a05a7849 314 TFT.foreground(Black);
richnash 0:06d4a05a7849 315 TFT.set_font((unsigned char*) Arial12x12);
richnash 0:06d4a05a7849 316 TFT.foreground(Blue) ;
richnash 0:06d4a05a7849 317 TFT.locate(30, 180) ;
richnash 0:06d4a05a7849 318 TFT.printf("This program is running on") ;
richnash 0:06d4a05a7849 319 TFT.locate(30, 200) ;
richnash 0:06d4a05a7849 320 TFT.printf("ST Nucleo F411RE with") ;
richnash 0:06d4a05a7849 321 TFT.locate(30, 220) ;
richnash 0:06d4a05a7849 322 TFT.printf("a program developed in mbed") ;
richnash 0:06d4a05a7849 323 TFT.foreground(Green) ;
richnash 0:06d4a05a7849 324 TFT.locate(30, 260) ;
richnash 0:06d4a05a7849 325 TFT.printf("To advance demo page, touch") ;
richnash 0:06d4a05a7849 326 TFT.locate(30, 280) ;
richnash 0:06d4a05a7849 327 TFT.printf("and hold right side of screen") ;
richnash 0:06d4a05a7849 328 TFT.locate(30, 300) ;
richnash 0:06d4a05a7849 329 TFT.printf("until the next screen starts") ;
richnash 0:06d4a05a7849 330 //TFT.BusEnable(false) ;
richnash 0:06d4a05a7849 331 backlight = 1 ;
richnash 0:06d4a05a7849 332 }
richnash 0:06d4a05a7849 333
richnash 0:06d4a05a7849 334 void screen2(void) // Graphics
richnash 0:06d4a05a7849 335 {
richnash 0:06d4a05a7849 336 printf("screen2\r\n" );
richnash 0:06d4a05a7849 337
richnash 0:06d4a05a7849 338 //Draw some graphics
richnash 0:06d4a05a7849 339 int i, x[2], y[2] ;
richnash 0:06d4a05a7849 340 backlight = 0 ;
richnash 0:06d4a05a7849 341 //TFT.BusEnable(true) ;
richnash 0:06d4a05a7849 342 TFT.background(Black);
richnash 0:06d4a05a7849 343 wait(0.1) ;
richnash 0:06d4a05a7849 344 TFT.foreground(White);
richnash 0:06d4a05a7849 345 wait(0.1) ;
richnash 0:06d4a05a7849 346 TFT.cls() ;
richnash 0:06d4a05a7849 347 wait(0.1) ;
richnash 0:06d4a05a7849 348 TFT.set_font((unsigned char*) Arial12x12);
richnash 0:06d4a05a7849 349 TFT.locate(90,0);
richnash 0:06d4a05a7849 350 TFT.printf("Graphics");
richnash 0:06d4a05a7849 351
richnash 0:06d4a05a7849 352 x[0] = 25 ; x[1] = 224 ;
richnash 0:06d4a05a7849 353 y[0] = 20 ; y[1] = 219 ;
richnash 0:06d4a05a7849 354 for (i = 20 ; i < 220 ; i += 10) {
richnash 0:06d4a05a7849 355 TFT.line(i+5, y[0], i+5, y[1], Blue) ;
richnash 0:06d4a05a7849 356 TFT.line(x[0], i, x[1], i, Blue) ;
richnash 0:06d4a05a7849 357 }
richnash 0:06d4a05a7849 358 TFT.line(125, y[0], 125, y[1], Green) ;
richnash 0:06d4a05a7849 359 TFT.line(x[0], 120, x[1], 120, Green) ;
richnash 0:06d4a05a7849 360 TFT.rect(x[0],y[0], x[1], y[1], Green) ;
richnash 0:06d4a05a7849 361 TFT.locate(10, 20) ;
richnash 0:06d4a05a7849 362 TFT.printf("V") ;
richnash 0:06d4a05a7849 363 TFT.locate(0, 115) ;
richnash 0:06d4a05a7849 364 TFT.printf("0.0") ;
richnash 0:06d4a05a7849 365 TFT.locate(115, 225) ;
richnash 0:06d4a05a7849 366 TFT.printf("0.0") ;
richnash 0:06d4a05a7849 367 TFT.locate(215, 225) ;
richnash 0:06d4a05a7849 368 TFT.printf("T") ;
richnash 0:06d4a05a7849 369
richnash 0:06d4a05a7849 370 double s;
richnash 0:06d4a05a7849 371 for (int i = x[0]; i < 225; i++) {
richnash 0:06d4a05a7849 372 s = 40 * sin((long double)i / 20);
richnash 0:06d4a05a7849 373 TFT.pixel(i, 120 + (int)s, White);
richnash 0:06d4a05a7849 374 }
richnash 0:06d4a05a7849 375
richnash 0:06d4a05a7849 376 TFT.fillrect(10, 240, 229, 309, White) ;
richnash 0:06d4a05a7849 377 TFT.rect(10, 240, 229, 309, Red) ;
richnash 0:06d4a05a7849 378 TFT.rect(11, 241, 228, 308, Red) ;
richnash 0:06d4a05a7849 379
richnash 0:06d4a05a7849 380 TFT.background(White) ;
richnash 0:06d4a05a7849 381 TFT.foreground(Black) ;
richnash 0:06d4a05a7849 382 TFT.locate(20, 250) ;
richnash 0:06d4a05a7849 383 TFT.printf("With QVGA resolution") ;
richnash 0:06d4a05a7849 384 TFT.locate(20, 270) ;
richnash 0:06d4a05a7849 385 TFT.printf("simple graphics drawing") ;
richnash 0:06d4a05a7849 386 TFT.locate(20, 290) ;
richnash 0:06d4a05a7849 387 TFT.printf("capability is provided") ;
richnash 0:06d4a05a7849 388 //TFT.BusEnable(false) ;
richnash 0:06d4a05a7849 389 backlight = 1 ;
richnash 0:06d4a05a7849 390 }
richnash 0:06d4a05a7849 391
richnash 0:06d4a05a7849 392 void screen3(void) // Graphics
richnash 0:06d4a05a7849 393 {
richnash 0:06d4a05a7849 394 printf("screen3\r\n" );
richnash 0:06d4a05a7849 395
richnash 0:06d4a05a7849 396 //int rowX;
richnash 0:06d4a05a7849 397 int rowY;
richnash 0:06d4a05a7849 398 //int x = Terminal6x8[1];
richnash 0:06d4a05a7849 399 int y = Terminal6x8[2];
richnash 0:06d4a05a7849 400
richnash 0:06d4a05a7849 401 //Draw some text
richnash 0:06d4a05a7849 402 backlight = 0 ;
richnash 0:06d4a05a7849 403
richnash 0:06d4a05a7849 404 TFT.background(Black);
richnash 0:06d4a05a7849 405 wait(0.1) ;
richnash 0:06d4a05a7849 406 TFT.foreground(White);
richnash 0:06d4a05a7849 407 wait(0.1) ;
richnash 0:06d4a05a7849 408 TFT.cls() ;
richnash 0:06d4a05a7849 409 wait(0.1) ;
richnash 0:06d4a05a7849 410
richnash 0:06d4a05a7849 411 backlight = 1 ;
richnash 0:06d4a05a7849 412
richnash 0:06d4a05a7849 413 TFT.set_font((unsigned char*) Terminal6x8);
richnash 0:06d4a05a7849 414
richnash 0:06d4a05a7849 415 for( rowY=0; rowY<100; ++rowY )
richnash 0:06d4a05a7849 416 {
richnash 0:06d4a05a7849 417 TFT.locate(0, (rowY%25)*y);
richnash 0:06d4a05a7849 418 TFT.printf("%3d TFT width = %d, height = %d", rowY, TFT.width(), TFT.height()) ;
richnash 0:06d4a05a7849 419 }
richnash 0:06d4a05a7849 420
richnash 0:06d4a05a7849 421 }
richnash 0:06d4a05a7849 422
richnash 0:06d4a05a7849 423 void incPage(void)
richnash 0:06d4a05a7849 424 {
richnash 0:06d4a05a7849 425 page++ ;
richnash 0:06d4a05a7849 426 if (page >= numPage) {
richnash 0:06d4a05a7849 427 page = 0 ;
richnash 0:06d4a05a7849 428 }
richnash 0:06d4a05a7849 429 }
richnash 0:06d4a05a7849 430
richnash 0:06d4a05a7849 431 void decPage(void)
richnash 0:06d4a05a7849 432 {
richnash 0:06d4a05a7849 433 page-- ;
richnash 0:06d4a05a7849 434 if (page < 0) {
richnash 0:06d4a05a7849 435 page = numPage - 1 ;
richnash 0:06d4a05a7849 436 }
richnash 0:06d4a05a7849 437 }
richnash 0:06d4a05a7849 438
richnash 0:06d4a05a7849 439 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
richnash 0:06d4a05a7849 440 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
richnash 0:06d4a05a7849 441 // ++++++++ ETHERNET
richnash 0:06d4a05a7849 442 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
richnash 0:06d4a05a7849 443 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
richnash 0:06d4a05a7849 444
richnash 0:06d4a05a7849 445 // -----------------------------------------------------------
richnash 0:06d4a05a7849 446 //
richnash 0:06d4a05a7849 447 // -----------------------------------------------------------
richnash 0:06d4a05a7849 448 void terminal_error_state( void )
richnash 0:06d4a05a7849 449 {
richnash 0:06d4a05a7849 450 led1=0;
richnash 0:06d4a05a7849 451 led2=0;
richnash 0:06d4a05a7849 452 led3=0;
richnash 0:06d4a05a7849 453 logger.printf("\r\n\r\nJUST TO BE CLEAR - THIS IS BAD BAD NEWS !!! \r\n");
richnash 0:06d4a05a7849 454 logger.printf("\r\n\r\n---- WAITING FOR THE WATCHDOG TO RESET US ---- \r\n");
richnash 0:06d4a05a7849 455 while( 1 )
richnash 0:06d4a05a7849 456 {
richnash 0:06d4a05a7849 457 led1 = !led1;
richnash 0:06d4a05a7849 458 led2 = !led2;
richnash 0:06d4a05a7849 459 led3 = !led3;
richnash 0:06d4a05a7849 460 wait(0.3);
richnash 0:06d4a05a7849 461 }
richnash 0:06d4a05a7849 462 }
richnash 0:06d4a05a7849 463
richnash 0:06d4a05a7849 464 // -----------------------------------------------------------
richnash 0:06d4a05a7849 465 //
richnash 0:06d4a05a7849 466 // -----------------------------------------------------------
richnash 0:06d4a05a7849 467 static bool DeviceConnect()
richnash 0:06d4a05a7849 468 {
richnash 0:06d4a05a7849 469 int retries = 10;
richnash 0:06d4a05a7849 470 int rc = 0;
richnash 0:06d4a05a7849 471
richnash 0:06d4a05a7849 472 while (retries--)
richnash 0:06d4a05a7849 473 {
richnash 0:06d4a05a7849 474 rc = gEth.connect();
richnash 0:06d4a05a7849 475 if (rc == 0) {
richnash 0:06d4a05a7849 476 // done
richnash 0:06d4a05a7849 477 return true;
richnash 0:06d4a05a7849 478 }
richnash 0:06d4a05a7849 479 else
richnash 0:06d4a05a7849 480 {
richnash 0:06d4a05a7849 481 logger.printf("Connecting... ERR %d\r\n", rc);
richnash 0:06d4a05a7849 482 }
richnash 0:06d4a05a7849 483 }
richnash 0:06d4a05a7849 484
richnash 0:06d4a05a7849 485 logger.printf("Connecting... FAILED\r\n");
richnash 0:06d4a05a7849 486 return false;
richnash 0:06d4a05a7849 487 }
richnash 0:06d4a05a7849 488
richnash 0:06d4a05a7849 489 // -----------------------------------------------------------
richnash 0:06d4a05a7849 490 //
richnash 0:06d4a05a7849 491 // -----------------------------------------------------------
richnash 0:06d4a05a7849 492 #ifndef CONNECTED_OFF_NOPE
richnash 0:06d4a05a7849 493 static bool DeviceEthStartup()
richnash 0:06d4a05a7849 494 {
richnash 0:06d4a05a7849 495 int rc = 0;
richnash 0:06d4a05a7849 496
richnash 0:06d4a05a7849 497 // get ethernet up !
richnash 0:06d4a05a7849 498 if( !DeviceConnect() ) terminal_error_state();
richnash 0:06d4a05a7849 499
richnash 0:06d4a05a7849 500 // Output the network address
richnash 0:06d4a05a7849 501 const char *ip = gEth.get_ip_address();
richnash 0:06d4a05a7849 502 const char *netmask = gEth.get_netmask();
richnash 0:06d4a05a7849 503 const char *gateway = gEth.get_gateway();
richnash 0:06d4a05a7849 504 logger.printf("IP address: %s\r\n", ip ? ip : "None");
richnash 0:06d4a05a7849 505 logger.printf("Netmask: %s\r\n", netmask ? netmask : "None");
richnash 0:06d4a05a7849 506 logger.printf("Gateway: %s\r\n", gateway ? gateway : "None");
richnash 0:06d4a05a7849 507
richnash 0:06d4a05a7849 508 // setup a UDP listener
richnash 0:06d4a05a7849 509 _socket.set_blocking(true);
richnash 0:06d4a05a7849 510 _socket.set_timeout(3000);
richnash 0:06d4a05a7849 511 //_socket.set_broadcasting(true);
richnash 0:06d4a05a7849 512
richnash 0:06d4a05a7849 513 // open the socket
richnash 0:06d4a05a7849 514 rc = _socket.open((NetworkInterface*)&gEth);
richnash 0:06d4a05a7849 515 if( rc != 0)
richnash 0:06d4a05a7849 516 {
richnash 0:06d4a05a7849 517 logger.printf("UDPSocket RECEIVER OPEN ERROR (rc=%d)\r\n", rc);
richnash 0:06d4a05a7849 518 terminal_error_state();
richnash 0:06d4a05a7849 519 }
richnash 0:06d4a05a7849 520
richnash 0:06d4a05a7849 521 // bind the XPL port
richnash 0:06d4a05a7849 522 rc = _socket.bind(UDP_PORT);
richnash 0:06d4a05a7849 523 logger.printf("Binding port %d\r\n", UDP_PORT);
richnash 0:06d4a05a7849 524 if( rc != 0)
richnash 0:06d4a05a7849 525 {
richnash 0:06d4a05a7849 526 logger.printf("UDPSocket BIND ERROR (rc=%d)\r\n", rc);
richnash 0:06d4a05a7849 527 terminal_error_state();
richnash 0:06d4a05a7849 528 }
richnash 0:06d4a05a7849 529
richnash 0:06d4a05a7849 530 // open the sender socket
richnash 0:06d4a05a7849 531 rc = _socketSender.open((NetworkInterface*)&gEth);
richnash 0:06d4a05a7849 532 if( rc != 0)
richnash 0:06d4a05a7849 533 {
richnash 0:06d4a05a7849 534 logger.printf("UDPSocket SENDER OPEN ERROR (rc=%d)\r\n", rc);
richnash 0:06d4a05a7849 535 terminal_error_state();
richnash 0:06d4a05a7849 536 }
richnash 0:06d4a05a7849 537 //_socketSender.set_broadcasting(true);
richnash 0:06d4a05a7849 538
richnash 0:06d4a05a7849 539 return true;
richnash 0:06d4a05a7849 540 }
richnash 0:06d4a05a7849 541 #endif
richnash 0:06d4a05a7849 542
richnash 0:06d4a05a7849 543 // -----------------------------------------------------------
richnash 0:06d4a05a7849 544 //
richnash 0:06d4a05a7849 545 // -----------------------------------------------------------
richnash 0:06d4a05a7849 546 void SendUdPMessage(char *buffer)
richnash 0:06d4a05a7849 547 {
richnash 0:06d4a05a7849 548 #ifndef CONNECTED_OFF
richnash 0:06d4a05a7849 549 // send the UDP data as broadcast
richnash 0:06d4a05a7849 550 int rc = _socketSender.sendto( "255.255.255.255", UDP_PORT, (const void *)buffer, strlen( buffer ) );
richnash 0:06d4a05a7849 551
richnash 0:06d4a05a7849 552 #ifdef DEBUG_OUTPUT_XPL
richnash 0:06d4a05a7849 553 logger.printf("[SEND rc=%d] buffer[%d]\r\n%s\r\n", rc, strlen(buffer), buffer);
richnash 0:06d4a05a7849 554 #endif
richnash 0:06d4a05a7849 555
richnash 0:06d4a05a7849 556 #else
richnash 0:06d4a05a7849 557 logger.printf("[OFFLINE] XPLsend [%d]\r\n%s\r\n", strlen(buffer), buffer);
richnash 0:06d4a05a7849 558 #endif
richnash 0:06d4a05a7849 559 }
richnash 0:06d4a05a7849 560
richnash 0:06d4a05a7849 561
richnash 0:06d4a05a7849 562 // -----------------------------------------------------------
richnash 0:06d4a05a7849 563 //
richnash 0:06d4a05a7849 564 // -----------------------------------------------------------
richnash 0:06d4a05a7849 565 void SendXPLint(char *Device, int iCurrent )
richnash 0:06d4a05a7849 566 {
richnash 0:06d4a05a7849 567 // xPL_Message _message;
richnash 0:06d4a05a7849 568 // _message.SetTarget( "*" );
richnash 0:06d4a05a7849 569 // _message.AddCommand("device", "xxxxx");
richnash 0:06d4a05a7849 570 // _message.AddCommand("current", "0");
richnash 0:06d4a05a7849 571 // xpl.SendMessage( &_message, true );
richnash 0:06d4a05a7849 572 }
richnash 0:06d4a05a7849 573
richnash 0:06d4a05a7849 574
richnash 0:06d4a05a7849 575 // -----------------------------------------------------------
richnash 0:06d4a05a7849 576 //
richnash 0:06d4a05a7849 577 // -----------------------------------------------------------
richnash 0:06d4a05a7849 578 void SendXPLString(char *Device, char *szCurrent )
richnash 0:06d4a05a7849 579 {
richnash 0:06d4a05a7849 580 // xPL_Message _message;
richnash 0:06d4a05a7849 581 // _message.SetTarget( "*" );
richnash 0:06d4a05a7849 582 // _message.AddCommand("device", "xxxxx");
richnash 0:06d4a05a7849 583 // _message.AddCommand("current", "0");
richnash 0:06d4a05a7849 584 // xpl.SendMessage( &_message, true );
richnash 0:06d4a05a7849 585 }
richnash 0:06d4a05a7849 586
richnash 0:06d4a05a7849 587
richnash 0:06d4a05a7849 588 // -----------------------------------------------------------
richnash 0:06d4a05a7849 589 //
richnash 0:06d4a05a7849 590 // -----------------------------------------------------------
richnash 0:06d4a05a7849 591 void AfterParseAction(xPL_Message * message)
richnash 0:06d4a05a7849 592 {
richnash 0:06d4a05a7849 593 // is this a message for me ?
richnash 0:06d4a05a7849 594 if (xpl.TargetIsMe(message))
richnash 0:06d4a05a7849 595 {
richnash 0:06d4a05a7849 596 logger.printf("XPL: MSG IS FOR ME !");
richnash 0:06d4a05a7849 597
richnash 0:06d4a05a7849 598 logger.printf("%s\r\n", message->toString());
richnash 0:06d4a05a7849 599
richnash 0:06d4a05a7849 600 // is this a control message?
richnash 0:06d4a05a7849 601 if (message->IsSchema("control", "basic"))
richnash 0:06d4a05a7849 602 {
richnash 0:06d4a05a7849 603 logger.printf("XPL: {control.basic}");
richnash 0:06d4a05a7849 604 }
richnash 0:06d4a05a7849 605 }
richnash 0:06d4a05a7849 606
richnash 0:06d4a05a7849 607 //logger.printf("XPL: [%s]\r\n", message->source.device_id );
richnash 0:06d4a05a7849 608 logger.printf("XPL: [%s] %d items\r\n", message->source.device_id, message->command_count );
richnash 0:06d4a05a7849 609
richnash 0:06d4a05a7849 610 // do we have any data ??? maybe the parse failed....
richnash 0:06d4a05a7849 611 if( message->command_count == 0 )
richnash 0:06d4a05a7849 612 {
richnash 0:06d4a05a7849 613 //
richnash 0:06d4a05a7849 614 logger.printf("XPL: no data?\r\n%s\r\n", in_buffer );
richnash 0:06d4a05a7849 615 }
richnash 0:06d4a05a7849 616 else
richnash 0:06d4a05a7849 617 {
richnash 0:06d4a05a7849 618 // output the message data
richnash 0:06d4a05a7849 619 for (short i=0; i<message->command_count; i++)
richnash 0:06d4a05a7849 620 {
richnash 0:06d4a05a7849 621 // grab each item and do something with it
richnash 0:06d4a05a7849 622 //logger.printf("%s=%s\r\n", message->command[i].name, message->command[i].value);
richnash 0:06d4a05a7849 623 }
richnash 0:06d4a05a7849 624 logger.printf("XPL: %d items processed\r\n", message->command_count );
richnash 0:06d4a05a7849 625 }
richnash 0:06d4a05a7849 626
richnash 0:06d4a05a7849 627 // output the full msg!
richnash 0:06d4a05a7849 628 //logger.printf("%s\r\n", message->toString());
richnash 0:06d4a05a7849 629 }
richnash 0:06d4a05a7849 630
richnash 0:06d4a05a7849 631
richnash 0:06d4a05a7849 632
richnash 0:06d4a05a7849 633 // -----------------------------------------------------------
richnash 0:06d4a05a7849 634 //
richnash 0:06d4a05a7849 635 // -----------------------------------------------------------
richnash 0:06d4a05a7849 636 //void Receiver_Thread(void const *argument)
richnash 0:06d4a05a7849 637 void Receiver_Thread()
richnash 0:06d4a05a7849 638 {
richnash 0:06d4a05a7849 639 SocketAddress _sAddr;
richnash 0:06d4a05a7849 640 int iNoDataCount = 0;
richnash 0:06d4a05a7849 641
richnash 0:06d4a05a7849 642 // loop forever
richnash 0:06d4a05a7849 643 while(1)
richnash 0:06d4a05a7849 644 {
richnash 0:06d4a05a7849 645 // receive from the udp socket
richnash 0:06d4a05a7849 646 led2 = 0;
richnash 0:06d4a05a7849 647
richnash 0:06d4a05a7849 648 #ifndef CONNECTED_OFF
richnash 0:06d4a05a7849 649 int n = _socket.recvfrom(&_sAddr, in_buffer, UDP_BUFFER_SIZE);
richnash 0:06d4a05a7849 650 //led2 = 1;
richnash 0:06d4a05a7849 651
richnash 0:06d4a05a7849 652 // see what weve got !
richnash 0:06d4a05a7849 653 if (n == NSAPI_ERROR_WOULD_BLOCK)
richnash 0:06d4a05a7849 654 {
richnash 0:06d4a05a7849 655 // timeout with no data...
richnash 0:06d4a05a7849 656 ++iNoDataCount;
richnash 0:06d4a05a7849 657 //logger.printf("-- NoData (TIMEOUT)\r\n");
richnash 0:06d4a05a7849 658 led2 = 0;
richnash 0:06d4a05a7849 659 }
richnash 0:06d4a05a7849 660 else if (n < 0)
richnash 0:06d4a05a7849 661 {
richnash 0:06d4a05a7849 662 // some other error
richnash 0:06d4a05a7849 663 ++iNoDataCount;
richnash 0:06d4a05a7849 664 //logger.printf("-- NoData (ERR) %i\r\n", n);
richnash 0:06d4a05a7849 665 led2 = 0;
richnash 0:06d4a05a7849 666 }
richnash 0:06d4a05a7849 667 else if( n > 0)
richnash 0:06d4a05a7849 668 {
richnash 0:06d4a05a7849 669 // good data :)
richnash 0:06d4a05a7849 670 iNoDataCount = 0;
richnash 0:06d4a05a7849 671 in_buffer[n] = '\0';
richnash 0:06d4a05a7849 672 // logger.printf("[%d bytes] %s:%d\r\n", n, _sAddr.get_ip_address(), _sAddr.get_port());
richnash 0:06d4a05a7849 673 // logger.printf("%s\r\n", in_buffer);
richnash 0:06d4a05a7849 674 led2 = 1;
richnash 0:06d4a05a7849 675
richnash 0:06d4a05a7849 676 // try and parse the msg
richnash 0:06d4a05a7849 677 xpl.ParseInputMessage(in_buffer);
richnash 0:06d4a05a7849 678 }
richnash 0:06d4a05a7849 679
richnash 0:06d4a05a7849 680 // have we stopped receiving data ?!?!?
richnash 0:06d4a05a7849 681 if( iNoDataCount > 20 )
richnash 0:06d4a05a7849 682 {
richnash 0:06d4a05a7849 683 logger.printf("ERROR: No UDP data repeatidly...\r\n");
richnash 0:06d4a05a7849 684 terminal_error_state();
richnash 0:06d4a05a7849 685 }
richnash 0:06d4a05a7849 686 #endif
richnash 0:06d4a05a7849 687
richnash 0:06d4a05a7849 688 // stroke the WD
richnash 0:06d4a05a7849 689 wd.Service();
richnash 0:06d4a05a7849 690
richnash 0:06d4a05a7849 691 ThisThread::sleep_for(300);
richnash 0:06d4a05a7849 692 }
richnash 0:06d4a05a7849 693 }
richnash 0:06d4a05a7849 694
richnash 0:06d4a05a7849 695
richnash 0:06d4a05a7849 696 // -----------------------------------------------------------
richnash 0:06d4a05a7849 697 //
richnash 0:06d4a05a7849 698 // -----------------------------------------------------------
richnash 0:06d4a05a7849 699
richnash 0:06d4a05a7849 700 Thread thread1;
richnash 0:06d4a05a7849 701
richnash 0:06d4a05a7849 702 int main()
richnash 0:06d4a05a7849 703 {
richnash 0:06d4a05a7849 704 const char *ip;
richnash 0:06d4a05a7849 705 char xpl_ip[16];
richnash 0:06d4a05a7849 706 int iAppLoop=0;
richnash 0:06d4a05a7849 707
richnash 0:06d4a05a7849 708 point p;
richnash 0:06d4a05a7849 709
richnash 0:06d4a05a7849 710
richnash 0:06d4a05a7849 711 int prevPage = 99 ;
richnash 0:06d4a05a7849 712 bool waitTouch = false ;
richnash 0:06d4a05a7849 713
richnash 0:06d4a05a7849 714 // FIRST THINGS FIRST!!! set the WD timeout interval...
richnash 0:06d4a05a7849 715 // enough to get up and running!
richnash 0:06d4a05a7849 716 wd.Configure(1000.0);
richnash 0:06d4a05a7849 717
richnash 0:06d4a05a7849 718 // setup the pc serial logger
richnash 0:06d4a05a7849 719 logger.baud(115200);
richnash 0:06d4a05a7849 720 logger.printf("\r\n\r\n<<<<<<<<< Basic UDP XPL Listener >>>>>>>>>>\r\n");
richnash 0:06d4a05a7849 721
richnash 0:06d4a05a7849 722
richnash 0:06d4a05a7849 723
richnash 0:06d4a05a7849 724 // Fireup the TFT Screen
richnash 0:06d4a05a7849 725 initTFT() ;
richnash 0:06d4a05a7849 726 printf("TFT Started {width = %d, height = %d}\n\r", TFT.width(), TFT.height()) ;
richnash 0:06d4a05a7849 727 //calibrate();
richnash 0:06d4a05a7849 728 screen1() ;
richnash 0:06d4a05a7849 729
richnash 0:06d4a05a7849 730
richnash 0:06d4a05a7849 731 led1 = 0;
richnash 0:06d4a05a7849 732 led2 = 0;
richnash 0:06d4a05a7849 733 led3 = 0;
richnash 0:06d4a05a7849 734 led4 = 0;
richnash 0:06d4a05a7849 735
richnash 0:06d4a05a7849 736 // WatchDog Startup Information
richnash 0:06d4a05a7849 737 logger.printf("\r\n------------------------------------------------------\r\n" );
richnash 0:06d4a05a7849 738 logger.printf("[SystemCoreClock] %d Hz\r\n", SystemCoreClock);
richnash 0:06d4a05a7849 739 logger.printf("[Reset reason] ");
richnash 0:06d4a05a7849 740 if (__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST)) logger.printf("Independant-Watchdog ");
richnash 0:06d4a05a7849 741 if (__HAL_RCC_GET_FLAG(RCC_FLAG_WWDGRST)) logger.printf("Window-Watchdog ");
richnash 0:06d4a05a7849 742 if (__HAL_RCC_GET_FLAG(RCC_FLAG_LPWRRST)) logger.printf("Low-Power-Reset ");
richnash 0:06d4a05a7849 743 if (__HAL_RCC_GET_FLAG(RCC_FLAG_SFTRST)) logger.printf("Software-Reset ");
richnash 0:06d4a05a7849 744 if (__HAL_RCC_GET_FLAG(RCC_FLAG_PORRST)) logger.printf("Power-On/Down-Reset ");
richnash 0:06d4a05a7849 745 if (__HAL_RCC_GET_FLAG(RCC_FLAG_PINRST)) logger.printf("Reset-pin ");
richnash 0:06d4a05a7849 746 if (__HAL_RCC_GET_FLAG(RCC_FLAG_BORRST)) logger.printf("Brownout ");
richnash 0:06d4a05a7849 747 if (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY)) logger.printf("Low-speed-internal-clock-ready ");
richnash 0:06d4a05a7849 748 __HAL_RCC_CLEAR_RESET_FLAGS();
richnash 0:06d4a05a7849 749 logger.printf("\r\n------------------------------------------------------\r\n");
richnash 0:06d4a05a7849 750
richnash 0:06d4a05a7849 751 if (wd.WatchdogCausedReset())
richnash 0:06d4a05a7849 752 {
richnash 0:06d4a05a7849 753 logger.printf("<<Watchdog caused reset>>\r\n");
richnash 0:06d4a05a7849 754 led3 = 1;
richnash 0:06d4a05a7849 755 }
richnash 0:06d4a05a7849 756 else
richnash 0:06d4a05a7849 757 {
richnash 0:06d4a05a7849 758 logger.printf("<<Normal Startup>>\r\n");
richnash 0:06d4a05a7849 759 led1 = 1;
richnash 0:06d4a05a7849 760 led2 = 1;
richnash 0:06d4a05a7849 761 led3 = 0;
richnash 0:06d4a05a7849 762 }
richnash 0:06d4a05a7849 763 logger.printf("------------------------------------------------------\r\n\r\n");
richnash 0:06d4a05a7849 764
richnash 0:06d4a05a7849 765
richnash 0:06d4a05a7849 766
richnash 0:06d4a05a7849 767 ThisThread::sleep_for(100);
richnash 0:06d4a05a7849 768
richnash 0:06d4a05a7849 769 screen2() ;
richnash 0:06d4a05a7849 770
richnash 0:06d4a05a7849 771 #ifndef CONNECTED_OFF
richnash 0:06d4a05a7849 772 // Fireup the Ethernet
richnash 0:06d4a05a7849 773 DeviceEthStartup();
richnash 0:06d4a05a7849 774
richnash 0:06d4a05a7849 775 // process the devices ip adress into the XPL instance ID
richnash 0:06d4a05a7849 776 ip = gEth.get_ip_address();
richnash 0:06d4a05a7849 777 strcpy( xpl_ip, ip );
richnash 0:06d4a05a7849 778 UTILS_strip_char_in_string( xpl_ip, '.' );
richnash 0:06d4a05a7849 779 #endif
richnash 0:06d4a05a7849 780
richnash 0:06d4a05a7849 781 screen1() ;
richnash 0:06d4a05a7849 782
richnash 0:06d4a05a7849 783 // now set the WD to something to run with - between receving data
richnash 0:06d4a05a7849 784 wd.Service();
richnash 0:06d4a05a7849 785 wd.Configure(300.0);
richnash 0:06d4a05a7849 786
richnash 0:06d4a05a7849 787 // setup xpl
richnash 0:06d4a05a7849 788 xpl.SendExternal = &SendUdPMessage; // pointer to the send callback
richnash 0:06d4a05a7849 789 xpl.AfterParseAction = &AfterParseAction; // pointer to a post parsing action callback
richnash 0:06d4a05a7849 790 xpl.SetSource( "NIHH", XPL_NAME, xpl_ip); // parameters for hearbeat message
richnash 0:06d4a05a7849 791
richnash 0:06d4a05a7849 792 // kick off the XPL receiver thread to run in the background
richnash 0:06d4a05a7849 793 //Thread thread1(Receiver_Thread, NULL, osPriorityNormal); //, DEFAULT_STACK_SIZE); //osPriorityHigh
richnash 0:06d4a05a7849 794 // thread1.set_priority(osPriorityLow);
richnash 0:06d4a05a7849 795 // thread1.start( Receiver_Thread );
richnash 0:06d4a05a7849 796
richnash 0:06d4a05a7849 797 #ifndef CONNECTED_OFF
richnash 0:06d4a05a7849 798 // i like to do this on startup to announce ourself
richnash 0:06d4a05a7849 799 logger.printf("XPL: STARTED {VendorID:%s, DeviceID:%s, InstanceID:%s}\n\r", "NIHH", XPL_NAME, xpl_ip );
richnash 0:06d4a05a7849 800 xpl.SendHBeat();
richnash 0:06d4a05a7849 801 #endif
richnash 0:06d4a05a7849 802
richnash 0:06d4a05a7849 803 // Fireup the TFT Screen
richnash 0:06d4a05a7849 804 //initTFT() ;
richnash 0:06d4a05a7849 805 //printf("TFT Started {width = %d, height = %d}\n\r", TFT.width(), TFT.height()) ;
richnash 0:06d4a05a7849 806 //calibrate();
richnash 0:06d4a05a7849 807
richnash 0:06d4a05a7849 808
richnash 0:06d4a05a7849 809
richnash 0:06d4a05a7849 810
richnash 0:06d4a05a7849 811 // start running the main processing stuff here
richnash 0:06d4a05a7849 812 while (true)
richnash 0:06d4a05a7849 813 {
richnash 0:06d4a05a7849 814
richnash 0:06d4a05a7849 815
richnash 0:06d4a05a7849 816 printf("page %d of %d\r\n", page, numPage );
richnash 0:06d4a05a7849 817
richnash 0:06d4a05a7849 818 switch(page) {
richnash 0:06d4a05a7849 819 case 0:
richnash 0:06d4a05a7849 820 if (prevPage != page) {
richnash 0:06d4a05a7849 821 screen1() ;
richnash 0:06d4a05a7849 822 }
richnash 0:06d4a05a7849 823 waitTouch = true ;
richnash 0:06d4a05a7849 824 break ;
richnash 0:06d4a05a7849 825 case 1:
richnash 0:06d4a05a7849 826 if (prevPage != page) {
richnash 0:06d4a05a7849 827 screen2() ;
richnash 0:06d4a05a7849 828 }
richnash 0:06d4a05a7849 829 waitTouch = true ;
richnash 0:06d4a05a7849 830 break ;
richnash 0:06d4a05a7849 831 case 2:
richnash 0:06d4a05a7849 832 if (prevPage != page) {
richnash 0:06d4a05a7849 833 screen3() ;
richnash 0:06d4a05a7849 834 }
richnash 0:06d4a05a7849 835 waitTouch = true ;
richnash 0:06d4a05a7849 836 break ;
richnash 0:06d4a05a7849 837 default:
richnash 0:06d4a05a7849 838 page = 0 ;
richnash 0:06d4a05a7849 839 break ;
richnash 0:06d4a05a7849 840 }
richnash 0:06d4a05a7849 841 prevPage = page ;
richnash 0:06d4a05a7849 842
richnash 0:06d4a05a7849 843
richnash 0:06d4a05a7849 844 do {
richnash 0:06d4a05a7849 845
richnash 0:06d4a05a7849 846 ThisThread::sleep_for(10);
richnash 0:06d4a05a7849 847
richnash 0:06d4a05a7849 848 // allow xpl to do its thing...
richnash 0:06d4a05a7849 849 #ifndef CONNECTED_OFF
richnash 0:06d4a05a7849 850 xpl.Process();
richnash 0:06d4a05a7849 851 #endif
richnash 0:06d4a05a7849 852
richnash 0:06d4a05a7849 853 if( getPixel(p) )
richnash 0:06d4a05a7849 854 {
richnash 0:06d4a05a7849 855 printf("TFT Touch x = %d, y = %d\n\r", p.x, p.y) ;
richnash 0:06d4a05a7849 856
richnash 0:06d4a05a7849 857 if (p.x < 100)
richnash 0:06d4a05a7849 858 { // left
richnash 0:06d4a05a7849 859 decPage() ;
richnash 0:06d4a05a7849 860 }
richnash 0:06d4a05a7849 861 else if (p.x > 150)
richnash 0:06d4a05a7849 862 { // right
richnash 0:06d4a05a7849 863 incPage() ;
richnash 0:06d4a05a7849 864 }
richnash 0:06d4a05a7849 865 waitTouch = false ;
richnash 0:06d4a05a7849 866 }
richnash 0:06d4a05a7849 867
richnash 0:06d4a05a7849 868 // SIMPLE TEST - every 50 loops send a test XPL msg
richnash 0:06d4a05a7849 869 ++iAppLoop;
richnash 0:06d4a05a7849 870 if( iAppLoop >= 20000 )
richnash 0:06d4a05a7849 871 {
richnash 0:06d4a05a7849 872 xPL_Message _message;
richnash 0:06d4a05a7849 873
richnash 0:06d4a05a7849 874 /*
richnash 0:06d4a05a7849 875 _message.SetSchema( "clock", "update" );
richnash 0:06d4a05a7849 876 _message.SetTarget( "*" );
richnash 0:06d4a05a7849 877 _message.type = XPL_STAT;
richnash 0:06d4a05a7849 878 _message.hop = 1;
richnash 0:06d4a05a7849 879 _message.AddCommand("time", "20180730113315");
richnash 0:06d4a05a7849 880 xpl.SendMessage( (xPL_Message *)&_message, true );
richnash 0:06d4a05a7849 881 */
richnash 0:06d4a05a7849 882
richnash 0:06d4a05a7849 883 _message.SetSchema( "sensor", "basic" );
richnash 0:06d4a05a7849 884 _message.SetTarget( "*" );
richnash 0:06d4a05a7849 885 _message.type = XPL_STAT;
richnash 0:06d4a05a7849 886 _message.hop = 1;
richnash 0:06d4a05a7849 887 _message.AddCommand("device", "test1");
richnash 0:06d4a05a7849 888 _message.AddCommand("type", "test");
richnash 0:06d4a05a7849 889 _message.AddCommand("current", "1");
richnash 0:06d4a05a7849 890 xpl.SendMessage( (xPL_Message *)&_message, true );
richnash 0:06d4a05a7849 891
richnash 0:06d4a05a7849 892 logger.printf("<<<<<< Sample Message Sent >>>>>>\r\n");
richnash 0:06d4a05a7849 893
richnash 0:06d4a05a7849 894 // reset
richnash 0:06d4a05a7849 895 iAppLoop = 0;
richnash 0:06d4a05a7849 896 }
richnash 0:06d4a05a7849 897
richnash 0:06d4a05a7849 898 } while(waitTouch != false) ;
richnash 0:06d4a05a7849 899
richnash 0:06d4a05a7849 900 }
richnash 0:06d4a05a7849 901 }