A general demonstration color etch-a-sketch program using the QVGA TFT with HX8347D controller, Orange Board. Saves touchscreen calibaration data saved in tft.ini. Creates /local/tft.ini if missing. Also included is an Ethernet NTP client to update the RTC. Assumes all other Orange Board devices attached: Text LCD, SDHC Flash, Ethernet.

Dependencies:   EthernetNetIf TextLCD mbed

Committer:
loopsva
Date:
Mon Aug 01 16:29:58 2011 +0000
Revision:
0:e065ca40f28a
Inititial Release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loopsva 0:e065ca40f28a 1 /*
loopsva 0:e065ca40f28a 2 Rev Date Changes:
loopsva 0:e065ca40f28a 3 ------------------------------------------------------------------------------------------------------------------------------------------
loopsva 0:e065ca40f28a 4 100 7/19/11 - initial offering
loopsva 0:e065ca40f28a 5 101 7/25/11 - Adding RTC display-only functions. No provisions for setting the clock
loopsva 0:e065ca40f28a 6 - Added red "clear_drawing" box to TFT
loopsva 0:e065ca40f28a 7 - Added multi-color "change_pen_color" box
loopsva 0:e065ca40f28a 8 - Added blue, pen_fattness circle (1-8)
loopsva 0:e065ca40f28a 9 - Added "orange" color to pen_color selection
loopsva 0:e065ca40f28a 10 - Added hidden system_reset function w/pen touch near "TFT" text
loopsva 0:e065ca40f28a 11 102 7/26/11 - Added EthernetNetIF and TinySNTP for updating RTC over Ethernet
loopsva 0:e065ca40f28a 12 - Added a color choice palette after reset. Palette goes away after clear_screen
loopsva 0:e065ca40f28a 13 103 7/28/11 - Expqanded NTP service to two possible NTP servers. In and IP address, the other named
loopsva 0:e065ca40f28a 14 - Added tube symbol for display
loopsva 0:e065ca40f28a 15 - Modified the start-up splash screen
loopsva 0:e065ca40f28a 16 104 7/28/11 - Made tube display indepentent of rotation
loopsva 0:e065ca40f28a 17 - Added more NTP server options
loopsva 0:e065ca40f28a 18 ------------------------------------------------------------------------------------------------------------------------------------------
loopsva 0:e065ca40f28a 19 Known issues:
loopsva 0:e065ca40f28a 20 ------------------------------------------------------------------------------------------------------------------------------------------
loopsva 0:e065ca40f28a 21 */
loopsva 0:e065ca40f28a 22 int revision = 104; // revision of this code
loopsva 0:e065ca40f28a 23 #include "mbed.h"
loopsva 0:e065ca40f28a 24 #include "SDHCFileSystem.h" // MUST be before EthernetNetIf.h or compile error occurs!!!!
loopsva 0:e065ca40f28a 25 #include "adc.h"
loopsva 0:e065ca40f28a 26 #include "EthernetNetIf.h"
loopsva 0:e065ca40f28a 27 #include "TinySNTP.h"
loopsva 0:e065ca40f28a 28 #include "TextLCD.h"
loopsva 0:e065ca40f28a 29 #include "SPI_TFT.h"
loopsva 0:e065ca40f28a 30 #include "Arial12x12.h"
loopsva 0:e065ca40f28a 31 #include "Arial24x23.h"
loopsva 0:e065ca40f28a 32 #include "Arial28x28.h"
loopsva 0:e065ca40f28a 33 #include "font_big.h"
loopsva 0:e065ca40f28a 34 #include "Courier10x13-12B.h" // kb modified font created by GLCD_Font_Creator.1.20.exe
loopsva 0:e065ca40f28a 35 #include "Verdana22x21-16.h" // kb modified font created by GLCD_Font_Creator.1.20.exe
loopsva 0:e065ca40f28a 36 #include "BookAntiqua19x19-14.h" // kb modified font created by GLCD_Font_Creator.1.20.exe
loopsva 0:e065ca40f28a 37 #include "touch_tft.h"
loopsva 0:e065ca40f28a 38
loopsva 0:e065ca40f28a 39 #define DEFAULTHOSTNAME "mbed-c3p1"
loopsva 0:e065ca40f28a 40 char *hostname = DEFAULTHOSTNAME;
loopsva 0:e065ca40f28a 41
loopsva 0:e065ca40f28a 42 //#define RTCCOLOR "Red"
loopsva 0:e065ca40f28a 43 //char *JunkText = RTCCOLOR;
loopsva 0:e065ca40f28a 44 //char *RtcColor = RTCCOLOR;
loopsva 0:e065ca40f28a 45
loopsva 0:e065ca40f28a 46 #define SAMPLE_RATE 150000
loopsva 0:e065ca40f28a 47 #define CLS "\033[2J"
loopsva 0:e065ca40f28a 48 extern "C" void mbed_reset();
loopsva 0:e065ca40f28a 49 #define Orange 0xF9E0
loopsva 0:e065ca40f28a 50
loopsva 0:e065ca40f28a 51 /*--------------------------------------------------------------------------------------------------------------------------------------*/
loopsva 0:e065ca40f28a 52 //I/O Pin Definitions
loopsva 0:e065ca40f28a 53
loopsva 0:e065ca40f28a 54 LocalFileSystem local("local");
loopsva 0:e065ca40f28a 55 PwmOut led1(LED1, "led1");
loopsva 0:e065ca40f28a 56 DigitalOut led2(LED2, "led2");
loopsva 0:e065ca40f28a 57 DigitalOut led3(LED3, "led3");
loopsva 0:e065ca40f28a 58 DigitalOut led4(LED4, "led4");
loopsva 0:e065ca40f28a 59 EthernetNetIf eth;
loopsva 0:e065ca40f28a 60 Serial pc(USBTX, USBRX); // Serial USB communications over mbed USB port
loopsva 0:e065ca40f28a 61 SDFileSystem sd(p5, p6, p7, p8, "sd"); // mosi, miso, sclk, cs
loopsva 0:e065ca40f28a 62 touch_tft tt(p19, p15, p16, p17, p5, p6, p7, p9, p14,"TFT"); // x+,x-,y+,y-,mosi, miso, sclk, cs, reset
loopsva 0:e065ca40f28a 63 TextLCD lcdt(p24, /*p25, */p26, p27, p28, p29, p30, TextLCD::LCD16x2); // rs, rw, e, d0, d1, d2, d3
loopsva 0:e065ca40f28a 64 DigitalOut LCDrw(p25, "LCDrw"); // new LCD code no longer requries R/W pin - tie low (J5 on Orange Board)
loopsva 0:e065ca40f28a 65
loopsva 0:e065ca40f28a 66 /*--------------------------------------------------------------------------------------------------------------------------------------*/
loopsva 0:e065ca40f28a 67 // Global Variables
loopsva 0:e065ca40f28a 68
loopsva 0:e065ca40f28a 69 int gDebug = 1; // display debog level (0 - 3)
loopsva 0:e065ca40f28a 70 int OldgDebug = gDebug; // copy of gDebug for updating tft.ini
loopsva 0:e065ca40f28a 71 ADC adc(SAMPLE_RATE, 1);
loopsva 0:e065ca40f28a 72 bool use_sd = false; // flag for using SDHC file system
loopsva 0:e065ca40f28a 73 bool ZeroMinFlag = false; // alignment to 00:00:00 flag
loopsva 0:e065ca40f28a 74 float Led1Pwm = 0.01; // LED1 brightness
loopsva 0:e065ca40f28a 75 bool Led1Up = true; // LED1 auto up-down
loopsva 0:e065ca40f28a 76 float gWait = 0.005; // Main loop wait timeout
loopsva 0:e065ca40f28a 77 float const DISP_SLOW(2.0); // Long wait for LCD display
loopsva 0:e065ca40f28a 78 float const DISP_FAST(0.5); // Faster wait for LCD
loopsva 0:e065ca40f28a 79 char timebuf[32]; // local time format buffer
loopsva 0:e065ca40f28a 80 char timebuf_d[32]; // local time format buffer - date only
loopsva 0:e065ca40f28a 81 char timebufUTC[32]; // UTC time format buffer
loopsva 0:e065ca40f28a 82 int DST = 0; // Daylight Saving Time (or as defined in tft.ini)
loopsva 0:e065ca40f28a 83 int OldDST = DST; // Copy of DST for updating tft.ini
loopsva 0:e065ca40f28a 84 int TZone = -8; // Time Zone from UTC (or as defined in tft.ini)
loopsva 0:e065ca40f28a 85 int OldTZone = TZone; // copy for updating tft.ini
loopsva 0:e065ca40f28a 86 time_t ctTime; // get time structure
loopsva 0:e065ca40f28a 87 int StartTime; // time we powered up
loopsva 0:e065ca40f28a 88 int SysUpTime; // time we've been alive
loopsva 0:e065ca40f28a 89 int RTCstep; // value for NTP update interval timer
loopsva 0:e065ca40f28a 90 int NTPUpdateValue = 86400; // update RTC every 24 hours (or as defined in tft.ini)
loopsva 0:e065ca40f28a 91 int TftCalib = 1; // TFT touchpad calibration, 1=yes (as defined in tft.ini)
loopsva 0:e065ca40f28a 92 unsigned int SerialNum[5] = {58,0,0,0,0}; // mbed serial number data
loopsva 0:e065ca40f28a 93 int TftDrawColor = 0; // pick pencil color
loopsva 0:e065ca40f28a 94 int PenColor = 0xFFFF; // color of pen
loopsva 0:e065ca40f28a 95 int PenWidth = 3; // fattness of pen
loopsva 0:e065ca40f28a 96 bool PenSizeUp = true; // fatter or skinnier
loopsva 0:e065ca40f28a 97 char pOnce = 0; // display the palette only once
loopsva 0:e065ca40f28a 98 int CurRot = 0; // object rotation 0-3
loopsva 0:e065ca40f28a 99 int PosX = 120; // object X location
loopsva 0:e065ca40f28a 100 int PosY = 160; // object Y location
loopsva 0:e065ca40f28a 101
loopsva 0:e065ca40f28a 102 int RTCupdate = 0; // parameter update timer
loopsva 0:e065ca40f28a 103 int const RTCUpdateValue = 60; // 600; // update values every minute
loopsva 0:e065ca40f28a 104 unsigned int Align1Min=0; // used to align sensor access to exactly every minute, on the minute
loopsva 0:e065ca40f28a 105 unsigned int Align10Min=0; // same as above for 10 minute (i.e. 0:00min, 10:00min, 20:00min, etc.
loopsva 0:e065ca40f28a 106 int minuteAvg = 0.0; // number of minutes between accesses to storage of data
loopsva 0:e065ca40f28a 107
loopsva 0:e065ca40f28a 108 unsigned short pp_txm = 0; // tft touchscreen calibration values
loopsva 0:e065ca40f28a 109 unsigned short pp_tym = 0;
loopsva 0:e065ca40f28a 110 unsigned short pp_txoff = 0;
loopsva 0:e065ca40f28a 111 unsigned short pp_tyoff = 0;
loopsva 0:e065ca40f28a 112
loopsva 0:e065ca40f28a 113 float Press0Ft = 102.4; // altimeter - assumed pressure at sea level
loopsva 0:e065ca40f28a 114 float Saved0Ft = Press0Ft; // saved for later comparison if changed by HTTP
loopsva 0:e065ca40f28a 115 float OldPress0Ft = Press0Ft; // another copy for updating tft.ini
loopsva 0:e065ca40f28a 116
loopsva 0:e065ca40f28a 117 /*--------------------------------------------------------------------------------------------------------------------------------------*/
loopsva 0:e065ca40f28a 118 // initialize mbed "ini" configuration file if it doesn't already exist -or- updates the ini file if a change is made in s/w
loopsva 0:e065ca40f28a 119
loopsva 0:e065ca40f28a 120 void InitIniFile() {
loopsva 0:e065ca40f28a 121 FILE *fp = fopen("/local/tft.ini", "w");
loopsva 0:e065ca40f28a 122 if (fp == NULL) {
loopsva 0:e065ca40f28a 123 pc.printf("*** Cannot create tft.ini file!!!\n");
loopsva 0:e065ca40f28a 124 } else {
loopsva 0:e065ca40f28a 125 // if(gDebug > 1) pc.printf("*** Updating/Creating tft.ini file...\n");
loopsva 0:e065ca40f28a 126 fprintf(fp, "# mbed configuration file\r\n");
loopsva 0:e065ca40f28a 127 fprintf(fp, "\r\n[NTP Servers]\r\n");
loopsva 0:e065ca40f28a 128 // for (int i=0; i<sntp_num_servers; i++) {
loopsva 0:e065ca40f28a 129 // fprintf(f, "%s" CRLF, sntp_server_addresses[i]);
loopsva 0:e065ca40f28a 130 // }
loopsva 0:e065ca40f28a 131 fprintf(fp, "\r\n[Global]\r\n");
loopsva 0:e065ca40f28a 132 char *hostname = DEFAULTHOSTNAME;
loopsva 0:e065ca40f28a 133 fprintf(fp, "xMyName=%s\r\n",hostname); //***MyName is broken***
loopsva 0:e065ca40f28a 134 fprintf(fp, "TftCalib=%d\r\n", TftCalib); // 1= calibration required
loopsva 0:e065ca40f28a 135 fprintf(fp, "TftCalTxm=%d\r\n", pp_txm);
loopsva 0:e065ca40f28a 136 fprintf(fp, "TftCalTym=%d\r\n", pp_tym);
loopsva 0:e065ca40f28a 137 fprintf(fp, "TftCalTxOff=%d\r\n", pp_txoff);
loopsva 0:e065ca40f28a 138 fprintf(fp, "TftCalTyOff=%d\r\n", pp_tyoff);
loopsva 0:e065ca40f28a 139 // char *RtcColor = RTCCOLOR;
loopsva 0:e065ca40f28a 140 // char *JunkText = RTCCOLOR;
loopsva 0:e065ca40f28a 141 // fprintf(fp, "TftRtcColor=%s\r\n", RtcColor);
loopsva 0:e065ca40f28a 142 fprintf(fp, "Timezone(hrs)=%d\r\n", TZone);
loopsva 0:e065ca40f28a 143 fprintf(fp, "DstZone(hrs)=%d\r\n", DST);
loopsva 0:e065ca40f28a 144 fprintf(fp, "NTPRefresh(sec)=%d\r\n", NTPUpdateValue);
loopsva 0:e065ca40f28a 145 fprintf(fp, "PressureSeaLevel=%f\r\n", Press0Ft);
loopsva 0:e065ca40f28a 146 fprintf(fp, "gDebugLevel=%d\r\n", gDebug);
loopsva 0:e065ca40f28a 147 fprintf(fp, "\r\n##END\r\n");
loopsva 0:e065ca40f28a 148 fclose(fp);
loopsva 0:e065ca40f28a 149 }
loopsva 0:e065ca40f28a 150 OldgDebug = gDebug;
loopsva 0:e065ca40f28a 151 OldDST = DST;
loopsva 0:e065ca40f28a 152 OldTZone = TZone;
loopsva 0:e065ca40f28a 153 OldPress0Ft = Press0Ft;
loopsva 0:e065ca40f28a 154 }
loopsva 0:e065ca40f28a 155
loopsva 0:e065ca40f28a 156 /*--------------------------------------------------------------------------------------------------------------------------------------*/
loopsva 0:e065ca40f28a 157 // Trim whitespace/CRLFs from both ends of a given string
loopsva 0:e065ca40f28a 158 // for use with routine below
loopsva 0:e065ca40f28a 159
loopsva 0:e065ca40f28a 160 char * str_cleanup(char *in) {
loopsva 0:e065ca40f28a 161 char * out = in;
loopsva 0:e065ca40f28a 162 // Trim leading spaces and CR/LF
loopsva 0:e065ca40f28a 163 while (*out == ' ' || *out == '\t' || *out == '\r' || *out == '\n')
loopsva 0:e065ca40f28a 164 out ++;
loopsva 0:e065ca40f28a 165 // Trim trailing spaces and CR/LF
loopsva 0:e065ca40f28a 166 int len = strlen(out)-1;
loopsva 0:e065ca40f28a 167 while (out[len] == ' ' || out[len] == '\t' || out[len] == '\r' || out[len] == '\n') {
loopsva 0:e065ca40f28a 168 out[len] = '\0';
loopsva 0:e065ca40f28a 169 len--;
loopsva 0:e065ca40f28a 170 }
loopsva 0:e065ca40f28a 171 return out;
loopsva 0:e065ca40f28a 172 }
loopsva 0:e065ca40f28a 173
loopsva 0:e065ca40f28a 174 /*--------------------------------------------------------------------------------------------------------------------------------------*/
loopsva 0:e065ca40f28a 175 // Simple ini file parser for SNTP configuration (Case-sensitive!)
loopsva 0:e065ca40f28a 176 // This function is intended to be called only before SNTPClientInit().
loopsva 0:e065ca40f28a 177 // Returns: 0 if OK, errno otherwise
loopsva 0:e065ca40f28a 178
loopsva 0:e065ca40f28a 179 enum {
loopsva 0:e065ca40f28a 180 SECT_NONE,
loopsva 0:e065ca40f28a 181 SECT_SERVERS,
loopsva 0:e065ca40f28a 182 SECT_GLOBAL,
loopsva 0:e065ca40f28a 183 };
loopsva 0:e065ca40f28a 184
loopsva 0:e065ca40f28a 185 //int _SNTPClrAddresses();
loopsva 0:e065ca40f28a 186
loopsva 0:e065ca40f28a 187 /*--------------------------------------------------------------------------------------------------------------------------------------*/
loopsva 0:e065ca40f28a 188 // This routine reads the "ini" file and sets the appropriate variables
loopsva 0:e065ca40f28a 189
loopsva 0:e065ca40f28a 190 int SNTPReadIniFile(const char* filename) {
loopsva 0:e065ca40f28a 191 if (gDebug > 1) pc.printf("Before: tz:%d dst:%d ntpupd:%d baroZ:%.1f name:%s\n", TZone, DST, NTPUpdateValue, Press0Ft, hostname);
loopsva 0:e065ca40f28a 192 FILE *f;
loopsva 0:e065ca40f28a 193 char buf[512];
loopsva 0:e065ca40f28a 194 // bool addresses_cleared = false;
loopsva 0:e065ca40f28a 195 bool hname = false;
loopsva 0:e065ca40f28a 196 f = fopen(filename, "r");
loopsva 0:e065ca40f28a 197 if (!f)
loopsva 0:e065ca40f28a 198 return -1; // errno not used?
loopsva 0:e065ca40f28a 199 char *buf1, *buf2;
loopsva 0:e065ca40f28a 200 int section=SECT_NONE;
loopsva 0:e065ca40f28a 201 int line = 0;
loopsva 0:e065ca40f28a 202 while (fgets(buf, sizeof(buf)/sizeof(buf[0]), f)) {
loopsva 0:e065ca40f28a 203 line++;
loopsva 0:e065ca40f28a 204 buf1 = str_cleanup(buf);
loopsva 0:e065ca40f28a 205 if (*buf1 == '#' || *buf1 == '\0')
loopsva 0:e065ca40f28a 206 continue; // Comment line or empty line - skip
loopsva 0:e065ca40f28a 207 if (*buf1 == '[') {
loopsva 0:e065ca40f28a 208 // New section
loopsva 0:e065ca40f28a 209 if (0 == strncmp(buf1,"[NTP Servers]", sizeof("[NTP Servers]")-1)) {
loopsva 0:e065ca40f28a 210 section=SECT_SERVERS;
loopsva 0:e065ca40f28a 211 /* if (!addresses_cleared) {
loopsva 0:e065ca40f28a 212 // Clear addresses only once.
loopsva 0:e065ca40f28a 213 _SNTPClrAddresses();
loopsva 0:e065ca40f28a 214 addresses_cleared = true;
loopsva 0:e065ca40f28a 215 }
loopsva 0:e065ca40f28a 216 */ } else if (0 == strncmp(buf1,"[Global]", sizeof("[Global]")-1)) {
loopsva 0:e065ca40f28a 217 section=SECT_GLOBAL;
loopsva 0:e065ca40f28a 218 } else {
loopsva 0:e065ca40f28a 219 section=SECT_NONE;
loopsva 0:e065ca40f28a 220 fprintf(stderr, "*** File \"%s\", line %d - section \"%s\" is not understood.\r\n", filename, line, buf1);
loopsva 0:e065ca40f28a 221 }
loopsva 0:e065ca40f28a 222 } else {
loopsva 0:e065ca40f28a 223 // Section values
loopsva 0:e065ca40f28a 224 switch (section) {
loopsva 0:e065ca40f28a 225 case SECT_SERVERS:
loopsva 0:e065ca40f28a 226 /* if (_SNTPAddAddress(buf1)) {
loopsva 0:e065ca40f28a 227 fprintf(stderr, "File \"%s\", line %d - cannot add server \"%s\" - exceeded allocated slots.\r\n", filename, line, buf1);
loopsva 0:e065ca40f28a 228 }
loopsva 0:e065ca40f28a 229 break;
loopsva 0:e065ca40f28a 230 */ case SECT_GLOBAL:
loopsva 0:e065ca40f28a 231 buf2 = strchr(buf1, '=');
loopsva 0:e065ca40f28a 232 if (buf2) {
loopsva 0:e065ca40f28a 233 *buf2++ = '\0'; // Now buf1 has variable name, buf2 has value
loopsva 0:e065ca40f28a 234 buf2 = str_cleanup(buf2);
loopsva 0:e065ca40f28a 235 if (0 == strncmp(buf1, "Timezone(hrs)", sizeof("Timezone(hrs)")-1)) {
loopsva 0:e065ca40f28a 236 TZone = strtod(buf2, &buf2);
loopsva 0:e065ca40f28a 237 } else if (0 == strncmp(buf1, "NTPRefresh(sec)", sizeof("NTPRefresh(sec)")-1)) {
loopsva 0:e065ca40f28a 238 NTPUpdateValue = strtod(buf2, &buf2);
loopsva 0:e065ca40f28a 239 } else if (0 == strncmp(buf1, "gDebugLevel", sizeof("gDebugLevel")-1)) {
loopsva 0:e065ca40f28a 240 gDebug = strtod(buf2, &buf2);
loopsva 0:e065ca40f28a 241 } else if (0 == strncmp(buf1, "TftCalib", sizeof("TftCalib")-1)) {
loopsva 0:e065ca40f28a 242 TftCalib = strtod(buf2, &buf2);
loopsva 0:e065ca40f28a 243 } else if (0 == strncmp(buf1, "TftCalTxm", sizeof("TftCalTxm")-1)) {
loopsva 0:e065ca40f28a 244 pp_txm = strtod(buf2, &buf2);
loopsva 0:e065ca40f28a 245 } else if (0 == strncmp(buf1, "TftCalTym", sizeof("TftCalTym")-1)) {
loopsva 0:e065ca40f28a 246 pp_tym = strtod(buf2, &buf2);
loopsva 0:e065ca40f28a 247 } else if (0 == strncmp(buf1, "TftCalTxOff", sizeof("TftCalTxOff")-1)) {
loopsva 0:e065ca40f28a 248 pp_txoff = strtod(buf2, &buf2);
loopsva 0:e065ca40f28a 249 } else if (0 == strncmp(buf1, "TftCalTyOff", sizeof("TftCalTyOff")-1)) {
loopsva 0:e065ca40f28a 250 pp_tyoff = strtod(buf2, &buf2);
loopsva 0:e065ca40f28a 251 // } else if (0 == strncmp(buf1, "TftRtcColor", sizeof("TftRtcColor")-1)) {
loopsva 0:e065ca40f28a 252 // JunkText = buf2; //pp_tyoff = strtod(buf2, &buf2);
loopsva 0:e065ca40f28a 253 // RtcColor = JunkText;
loopsva 0:e065ca40f28a 254 // pc.printf("buf2 >> %s JunkText >> %s RtcColor >> %s\n", buf2, JunkText, RtcColor);
loopsva 0:e065ca40f28a 255 } else if (0 == strncmp(buf1, "MyName", sizeof("MyName")-1)) {
loopsva 0:e065ca40f28a 256 if (hname == false) {
loopsva 0:e065ca40f28a 257 hname = true;
loopsva 0:e065ca40f28a 258 hostname = buf2;
loopsva 0:e065ca40f28a 259 if (gDebug > 1) pc.printf("buf2:%s hn:%s\n", buf2, hostname);
loopsva 0:e065ca40f28a 260 }
loopsva 0:e065ca40f28a 261 } else if (0 == strncmp(buf1, "PressureSeaLevel", sizeof("PressureSeaLevel")-1)) {
loopsva 0:e065ca40f28a 262 Press0Ft = strtof(buf2, &buf2);
loopsva 0:e065ca40f28a 263 //} else if (0 == strncmp(buf1, "RtcUtc", sizeof("RtcUtc")-1)) {
loopsva 0:e065ca40f28a 264 // gSntpRtcUtc = (bool)strtol(buf2, &buf2, 10);
loopsva 0:e065ca40f28a 265 } else if (0 == strncmp(buf1, "DstZone(hrs)", sizeof("DstZone(hrs)")-1)) {
loopsva 0:e065ca40f28a 266 DST = strtod(buf2, &buf2);
loopsva 0:e065ca40f28a 267 } else {
loopsva 0:e065ca40f28a 268 pc.printf("*** File \"%s\", line %d - unrecognized variable \"%s\" in section [Global]\r\n", filename, line, buf1);
loopsva 0:e065ca40f28a 269 }
loopsva 0:e065ca40f28a 270 } else {
loopsva 0:e065ca40f28a 271 pc.printf("*** File \"%s\", line %d - unrecognized statement in section [Global]: %s\r\n", filename, line, buf1);
loopsva 0:e065ca40f28a 272 }
loopsva 0:e065ca40f28a 273 break;
loopsva 0:e065ca40f28a 274 default:
loopsva 0:e065ca40f28a 275 pc.printf("*** File \"%s\", line %d - unrecognized statement / no section: %s\r\n", filename, line, buf1);
loopsva 0:e065ca40f28a 276 }
loopsva 0:e065ca40f28a 277 }
loopsva 0:e065ca40f28a 278 }
loopsva 0:e065ca40f28a 279 fclose(f);
loopsva 0:e065ca40f28a 280 pc.printf("mbed configuration read from \"%s\", %d lines.\r\n", filename, line);
loopsva 0:e065ca40f28a 281 pc.printf("- gDebug display level: %d\n", gDebug);
loopsva 0:e065ca40f28a 282 pc.printf("- Time Zone: %d hours\n", TZone);
loopsva 0:e065ca40f28a 283 if (DST == 0) {
loopsva 0:e065ca40f28a 284 pc.printf("- Standard Time\n");
loopsva 0:e065ca40f28a 285 } else {
loopsva 0:e065ca40f28a 286 pc.printf("- Daylight Saving Time\n");
loopsva 0:e065ca40f28a 287 }
loopsva 0:e065ca40f28a 288 pc.printf("- NTC update: %d seconds\n", NTPUpdateValue);
loopsva 0:e065ca40f28a 289 // pc.printf("- Pressure at Seal Level: %.1f kPa\n", Press0Ft);
loopsva 0:e065ca40f28a 290 if (TftCalib == 1) {
loopsva 0:e065ca40f28a 291 pc.printf("- TFT touchpad calibration required\n");
loopsva 0:e065ca40f28a 292 } else {
loopsva 0:e065ca40f28a 293 pc.printf("- No TFT touchpad calibration needed\n");
loopsva 0:e065ca40f28a 294 }
loopsva 0:e065ca40f28a 295 pc.printf("- Touch Cal X Base %d\n", pp_txm);
loopsva 0:e065ca40f28a 296 pc.printf("- Touch Cal Y Base %d\n", pp_tym);
loopsva 0:e065ca40f28a 297 pc.printf("- Touch Cal X Offset %d\n", pp_txoff);
loopsva 0:e065ca40f28a 298 pc.printf("- Touch Cal Y Offset %d\n", pp_tyoff);
loopsva 0:e065ca40f28a 299 // pc.printf("- RTC Color %s\n", RtcColor);
loopsva 0:e065ca40f28a 300
loopsva 0:e065ca40f28a 301 if (gDebug > 1) pc.printf("After: tz:%d dst:%d ntpupd:%d baroZ:%.1f name:%s\n", TZone, DST, NTPUpdateValue, Press0Ft, hostname);
loopsva 0:e065ca40f28a 302
loopsva 0:e065ca40f28a 303 OldgDebug = gDebug;
loopsva 0:e065ca40f28a 304 OldDST = DST;
loopsva 0:e065ca40f28a 305 OldTZone = TZone;
loopsva 0:e065ca40f28a 306 OldPress0Ft = Press0Ft;
loopsva 0:e065ca40f28a 307 return 0;
loopsva 0:e065ca40f28a 308 }
loopsva 0:e065ca40f28a 309
loopsva 0:e065ca40f28a 310
loopsva 0:e065ca40f28a 311 /*--------------------------------------------------------------------------------------------------------------------------------------*/
loopsva 0:e065ca40f28a 312 // This routine attempts to update the RTC via an Ethernet NTP server
loopsva 0:e065ca40f28a 313
loopsva 0:e065ca40f28a 314 int SetEthTime() {
loopsva 0:e065ca40f28a 315 pc.printf("Getting Time from NTP Server\n- Old Time (UTC): %d %s", ctTime, ctime(&ctTime));
loopsva 0:e065ca40f28a 316 int ntpFlag = 0;
loopsva 0:e065ca40f28a 317 if(gDebug) pc.printf("- Trying NTP Server: time-a.nist.gov... ");
loopsva 0:e065ca40f28a 318 ntpFlag = ntpdate("time-a.nist.gov", &ctTime);
loopsva 0:e065ca40f28a 319 if((gDebug) && (ntpFlag)) pc.printf("failed\n- Trying NTP Server: pool.ntp.org... ");
loopsva 0:e065ca40f28a 320 if(ntpFlag) {
loopsva 0:e065ca40f28a 321 ntpFlag = 0;
loopsva 0:e065ca40f28a 322 ntpFlag = ntpdate("pool.ntp.org", &ctTime);
loopsva 0:e065ca40f28a 323 if((gDebug) && (ntpFlag)) pc.printf("failed\n- Trying NTP Server: 10.77.127.1... ");
loopsva 0:e065ca40f28a 324 if(ntpFlag) {
loopsva 0:e065ca40f28a 325 ntpFlag = 0;
loopsva 0:e065ca40f28a 326 ntpFlag = ntpdate("10.77.127.1", &ctTime);
loopsva 0:e065ca40f28a 327 if((gDebug) && (ntpFlag)) pc.printf("failed\n");
loopsva 0:e065ca40f28a 328 }
loopsva 0:e065ca40f28a 329 }
loopsva 0:e065ca40f28a 330
loopsva 0:e065ca40f28a 331
loopsva 0:e065ca40f28a 332 // pc.printf("ntpFlag: %d\n", ntpFlag);
loopsva 0:e065ca40f28a 333 /*
loopsva 0:e065ca40f28a 334 //
loopsva 0:e065ca40f28a 335 // Server selection code from HTTPS_618
loopsva 0:e065ca40f28a 336 //
loopsva 0:e065ca40f28a 337 Host server(IpAddr(), 123, "time-a.nist.gov");
loopsva 0:e065ca40f28a 338 if (gDebug > 1) pc.printf("NTP result 1 : %d time-a.nist.gov\n", ntp.setTime(server));
loopsva 0:e065ca40f28a 339 if(ntp.setTime(server) == 4) {
loopsva 0:e065ca40f28a 340 server.setName("time-b.nist.gov");
loopsva 0:e065ca40f28a 341 if (gDebug > 1) pc.printf("NTP result 2 : %d time-b.nist.gov\n", ntp.setTime(server));
loopsva 0:e065ca40f28a 342 if(ntp.setTime(server) == 4) {
loopsva 0:e065ca40f28a 343 server.setName("pool.ntp.org");
loopsva 0:e065ca40f28a 344 if (gDebug > 1) pc.printf("NTP result 3 : %d pool.ntp.org\n", ntp.setTime(server));
loopsva 0:e065ca40f28a 345 if(ntp.setTime(server) == 4) {
loopsva 0:e065ca40f28a 346 server.setName("north-america.pool.ntp.org");
loopsva 0:e065ca40f28a 347 if (gDebug > 1) pc.printf("NTP result 4 : %d north-america.pool.ntp.org\n", ntp.setTime(server));
loopsva 0:e065ca40f28a 348 if(ntp.setTime(server) > 2) {
loopsva 0:e065ca40f28a 349 server.setName("10.77.127.1");
loopsva 0:e065ca40f28a 350 if (gDebug > 1) pc.printf("NTP result 5 : %d 10.77.127.1\n", ntp.setTime(server));
loopsva 0:e065ca40f28a 351 if(ntp.setTime(server) > 2) {
loopsva 0:e065ca40f28a 352 server.setName("74.218.141.2");
loopsva 0:e065ca40f28a 353 if (gDebug > 1) pc.printf("NTP result 6 : %d 74.218.141.2\n", ntp.setTime(server));
loopsva 0:e065ca40f28a 354 pc.printf(" No NTP Server found!!!\n");
loopsva 0:e065ca40f28a 355 lcdt.locate(15,1); //column(0-15), row(0-1)
loopsva 0:e065ca40f28a 356 lcdt.printf("x"); //set no NTP flag on LCD
loopsva 0:e065ca40f28a 357 }
loopsva 0:e065ca40f28a 358 }
loopsva 0:e065ca40f28a 359 }
loopsva 0:e065ca40f28a 360 }
loopsva 0:e065ca40f28a 361 }
loopsva 0:e065ca40f28a 362 */
loopsva 0:e065ca40f28a 363
loopsva 0:e065ca40f28a 364
loopsva 0:e065ca40f28a 365 if(ntpFlag == 0) {
loopsva 0:e065ca40f28a 366 pc.printf("ok\nSuccessful Time Update\n");
loopsva 0:e065ca40f28a 367 pc.printf("- Time post NTP (UTC): %d %s", ctTime, ctime(&ctTime));
loopsva 0:e065ca40f28a 368 StartTime = ctTime;
loopsva 0:e065ca40f28a 369 set_time(ctTime);
loopsva 0:e065ca40f28a 370 ctTime = ctTime + ((TZone+DST)*3600); //timezone and dst offsets
loopsva 0:e065ca40f28a 371 pc.printf("- Time post NTP (local): %d %s", ctTime, ctime(&ctTime));
loopsva 0:e065ca40f28a 372 RTCstep = ctTime + NTPUpdateValue; //next NTP update
loopsva 0:e065ca40f28a 373 ctTime = ctTime + NTPUpdateValue; //next NTP update
loopsva 0:e065ca40f28a 374 pc.printf("- Next Update (local): %d %s", ctTime, ctime(&ctTime));
loopsva 0:e065ca40f28a 375 ctTime = ctTime - NTPUpdateValue;
loopsva 0:e065ca40f28a 376 return 0;
loopsva 0:e065ca40f28a 377 } else {
loopsva 0:e065ca40f28a 378 pc.printf("*** NTP Server not Found!!!\n");
loopsva 0:e065ca40f28a 379 return -1;
loopsva 0:e065ca40f28a 380 }
loopsva 0:e065ca40f28a 381 }
loopsva 0:e065ca40f28a 382
loopsva 0:e065ca40f28a 383 /*--------------------------------------------------------------------------------------------------------------------------------------*/
loopsva 0:e065ca40f28a 384 // This routine is used to align "display events" at exactly RTC 60 second and 10 minute intervals
loopsva 0:e065ca40f28a 385
loopsva 0:e065ca40f28a 386 void align_access_time() {
loopsva 0:e065ca40f28a 387 ctTime = time(NULL);
loopsva 0:e065ca40f28a 388 ctTime = ctTime + ((TZone+DST)*3600); //timezone and dst offsets
loopsva 0:e065ca40f28a 389 float getMod = fmod(ctTime, 600.0); // modulus count for exact 10 minute adjustments
loopsva 0:e065ca40f28a 390 Align1Min = (ctTime + (600 - int(getMod))); // init 10 minute ticker
loopsva 0:e065ca40f28a 391 minuteAvg = 1 + (Align1Min - ctTime) / 60; // how many access minutes before 1st store
loopsva 0:e065ca40f28a 392 pc.printf("Align10min ct: %d gM: %3d tsA: %d mA: %d \n",
loopsva 0:e065ca40f28a 393 ctTime, int(getMod), Align1Min, minuteAvg);
loopsva 0:e065ca40f28a 394 getMod = fmod(ctTime,60.0);
loopsva 0:e065ca40f28a 395 Align10Min = (ctTime + (60 - int(getMod)));
loopsva 0:e065ca40f28a 396 RTCupdate = Align10Min; //Align1Min;
loopsva 0:e065ca40f28a 397 pc.printf("Align1min gM: %3d lts: %d\n", int(getMod), Align10Min);
loopsva 0:e065ca40f28a 398 }
loopsva 0:e065ca40f28a 399
loopsva 0:e065ca40f28a 400 /*--------------------------------------------------------------------------------------------------------------------------------------*/
loopsva 0:e065ca40f28a 401 // This is the initial splash screen for the TEXT LCD
loopsva 0:e065ca40f28a 402
loopsva 0:e065ca40f28a 403 void TextLCDTitle() {
loopsva 0:e065ca40f28a 404 lcdt.cls(); //init the LCD
loopsva 0:e065ca40f28a 405 lcdt.locate(0,0); //column(0-15), row(0-1)
loopsva 0:e065ca40f28a 406 lcdt.printf("TFT Driver %d", revision); //print revision on LCD
loopsva 0:e065ca40f28a 407 lcdt.locate(0,1); //column(0-15), row(0-1)
loopsva 0:e065ca40f28a 408 lcdt.printf("K Braun"); //print -me- on LCD
loopsva 0:e065ca40f28a 409 }
loopsva 0:e065ca40f28a 410
loopsva 0:e065ca40f28a 411 /*--------------------------------------------------------------------------------------------------------------------------------------*/
loopsva 0:e065ca40f28a 412 // This is the initial TFT splash screen -and- the follow-on screen if the pen selects the "clear_screen" box
loopsva 0:e065ca40f28a 413
loopsva 0:e065ca40f28a 414 void InitTft() {
loopsva 0:e065ca40f28a 415 int CurrentColor = PenColor;
loopsva 0:e065ca40f28a 416 int CurrentTft = TftDrawColor;
loopsva 0:e065ca40f28a 417 tt.foreground(Yellow); // set chars to white
loopsva 0:e065ca40f28a 418 tt.cls(); // clear the screen
loopsva 0:e065ca40f28a 419 tt.set_font((unsigned char*) Arial12x12); // select the font
loopsva 0:e065ca40f28a 420 // tt.set_font((unsigned char*) FONT8x8);
loopsva 0:e065ca40f28a 421 // tt.set_font((unsigned char*) Courier10x13);
loopsva 0:e065ca40f28a 422 // tt.set_font((unsigned char*) Verdana22x21);
loopsva 0:e065ca40f28a 423 // tt.set_font((unsigned char*) Book_Antiqua19x19);
loopsva 0:e065ca40f28a 424 // tt.cls();
loopsva 0:e065ca40f28a 425 tt.foreground(Yellow); // set chars to white
loopsva 0:e065ca40f28a 426 tt.set_orientation(0);
loopsva 0:e065ca40f28a 427 tt.locate(0,0);
loopsva 0:e065ca40f28a 428 tt.printf(" TFT Touch Test");
loopsva 0:e065ca40f28a 429 tt.locate(0,1);
loopsva 0:e065ca40f28a 430 tt.printf(" K. Braun");
loopsva 0:e065ca40f28a 431 tt.locate(0,2);
loopsva 0:e065ca40f28a 432 tt.printf(" Rev: %d", revision);
loopsva 0:e065ca40f28a 433 tt.locate(13,1);
loopsva 0:e065ca40f28a 434 tt.printf("%d", PenWidth);
loopsva 0:e065ca40f28a 435 tt.foreground(White); // set chars to white
loopsva 0:e065ca40f28a 436 tt.set_orientation(1);
loopsva 0:e065ca40f28a 437 tt.rect(5,5,30,30,Red);
loopsva 0:e065ca40f28a 438 tt.fillrect(5,35,30,60,CurrentColor);
loopsva 0:e065ca40f28a 439 if(CurrentColor == Black) {
loopsva 0:e065ca40f28a 440 tt.rect(5,35,30,60,White); // if black, put on white frame
loopsva 0:e065ca40f28a 441 }
loopsva 0:e065ca40f28a 442 tt.circle(16,80,10, Blue);
loopsva 0:e065ca40f28a 443 // PenColor = 0xFFFF; // color of pen
loopsva 0:e065ca40f28a 444 // TftDrawColor = 0; // pick pencil color
loopsva 0:e065ca40f28a 445
loopsva 0:e065ca40f28a 446 // The following draws that color palette, but only once after a reset
loopsva 0:e065ca40f28a 447 if((gDebug >> 0) && (pOnce == 0)) {
loopsva 0:e065ca40f28a 448 pOnce = 1;
loopsva 0:e065ca40f28a 449 tt.set_orientation(0);
loopsva 0:e065ca40f28a 450 tt.set_font((unsigned char*) Arial24x23);
loopsva 0:e065ca40f28a 451 tt.locate(3,3);
loopsva 0:e065ca40f28a 452 tt.printf("Palette");
loopsva 0:e065ca40f28a 453 tt.set_font((unsigned char*) Arial12x12);
loopsva 0:e065ca40f28a 454 int tX = 17;
loopsva 0:e065ca40f28a 455 int tY = 90;
loopsva 0:e065ca40f28a 456 int tB = 25;
loopsva 0:e065ca40f28a 457 tt.fillrect(tX,tY,tX+tB,tY+tB,White);
loopsva 0:e065ca40f28a 458 tX = tX+tB+1;
loopsva 0:e065ca40f28a 459 tt.fillrect(tX,tY,tX+tB,tY+tB,Orange);
loopsva 0:e065ca40f28a 460 tX = tX+tB+1;
loopsva 0:e065ca40f28a 461 tt.fillrect(tX,tY,tX+tB,tY+tB,Yellow);
loopsva 0:e065ca40f28a 462 tX = tX+tB+1;
loopsva 0:e065ca40f28a 463 tt.fillrect(tX,tY,tX+tB,tY+tB,Magenta);
loopsva 0:e065ca40f28a 464 tX = tX+tB+1;
loopsva 0:e065ca40f28a 465 tt.fillrect(tX,tY,tX+tB,tY+tB,Red);
loopsva 0:e065ca40f28a 466 tX = tX+tB+1;
loopsva 0:e065ca40f28a 467 tt.fillrect(tX,tY,tX+tB,tY+tB,Cyan);
loopsva 0:e065ca40f28a 468 tX = tX+tB+1;
loopsva 0:e065ca40f28a 469 tt.fillrect(tX,tY,tX+tB,tY+tB,Green);
loopsva 0:e065ca40f28a 470 tX = tX+tB+1;
loopsva 0:e065ca40f28a 471 tt.fillrect(tX,tY,tX+tB,tY+tB,Blue);
loopsva 0:e065ca40f28a 472 tY = tY+tB+1;
loopsva 0:e065ca40f28a 473 tX = 17;
loopsva 0:e065ca40f28a 474 tt.fillrect(tX,tY,tX+tB,tY+tB,LightGrey);
loopsva 0:e065ca40f28a 475 tX = tX+tB+1;
loopsva 0:e065ca40f28a 476 tt.fillrect(tX,tY,tX+tB,tY+tB,DarkGrey);
loopsva 0:e065ca40f28a 477 tX = tX+tB+1;
loopsva 0:e065ca40f28a 478 tt.fillrect(tX,tY,tX+tB,tY+tB,Olive);
loopsva 0:e065ca40f28a 479 tX = tX+tB+1;
loopsva 0:e065ca40f28a 480 tt.fillrect(tX,tY,tX+tB,tY+tB,Purple);
loopsva 0:e065ca40f28a 481 tX = tX+tB+1;
loopsva 0:e065ca40f28a 482 tt.fillrect(tX,tY,tX+tB,tY+tB,Maroon);
loopsva 0:e065ca40f28a 483 tX = tX+tB+1;
loopsva 0:e065ca40f28a 484 tt.fillrect(tX,tY,tX+tB,tY+tB,DarkCyan);
loopsva 0:e065ca40f28a 485 tX = tX+tB+1;
loopsva 0:e065ca40f28a 486 tt.fillrect(tX,tY,tX+tB,tY+tB,DarkGreen);
loopsva 0:e065ca40f28a 487 tX = tX+tB+1;
loopsva 0:e065ca40f28a 488 tt.fillrect(tX,tY,tX+tB,tY+tB,Navy);
loopsva 0:e065ca40f28a 489 tt.set_orientation(1);
loopsva 0:e065ca40f28a 490 }
loopsva 0:e065ca40f28a 491
loopsva 0:e065ca40f28a 492 PenColor = CurrentColor;
loopsva 0:e065ca40f28a 493 TftDrawColor = CurrentTft;
loopsva 0:e065ca40f28a 494
loopsva 0:e065ca40f28a 495 //wait for no-touch
loopsva 0:e065ca40f28a 496 point p;
loopsva 0:e065ca40f28a 497 do {
loopsva 0:e065ca40f28a 498 p = tt.get_touch();
loopsva 0:e065ca40f28a 499 tt.is_touched(p);
loopsva 0:e065ca40f28a 500 }
loopsva 0:e065ca40f28a 501 while (p.y > 0x2000 | p.x > 0x2000); // { // wait for no touch
loopsva 0:e065ca40f28a 502 }
loopsva 0:e065ca40f28a 503
loopsva 0:e065ca40f28a 504 /*--------------------------------------------------------------------------------------------------------------------------------------*/
loopsva 0:e065ca40f28a 505 // The following draws an object of a triode tube. It's location is set by PosX and PosY and CurRot
loopsva 0:e065ca40f28a 506
loopsva 0:e065ca40f28a 507 void DrawTubeX() {
loopsva 0:e065ca40f28a 508 int xx = PosX;
loopsva 0:e065ca40f28a 509 int yy = PosY;
loopsva 0:e065ca40f28a 510 if((CurRot == 0) || (CurRot == 2)) {
loopsva 0:e065ca40f28a 511 xx = PosX;
loopsva 0:e065ca40f28a 512 yy = PosY;
loopsva 0:e065ca40f28a 513 } else {
loopsva 0:e065ca40f28a 514 xx = PosY;
loopsva 0:e065ca40f28a 515 yy = PosX;
loopsva 0:e065ca40f28a 516 }
loopsva 0:e065ca40f28a 517 tt.set_orientation(CurRot);
loopsva 0:e065ca40f28a 518 tt.fillcircle(xx,yy,60,Orange);
loopsva 0:e065ca40f28a 519 tt.circle(xx,yy,60,Navy);
loopsva 0:e065ca40f28a 520 tt.circle(xx,yy,59,Blue);
loopsva 0:e065ca40f28a 521 tt.circle(xx,yy,58,Navy);
loopsva 0:e065ca40f28a 522 tt.fillrect(xx-2,yy+40,xx+2,yy+70,Purple);
loopsva 0:e065ca40f28a 523 tt.fillrect(xx-2,yy+10,xx+2,yy+30,Purple);
loopsva 0:e065ca40f28a 524 tt.fillrect(xx-2,yy-20,xx+2,yy+00,Purple);
loopsva 0:e065ca40f28a 525 tt.fillrect(xx-2,yy-50,xx+2,yy-30,Purple);
loopsva 0:e065ca40f28a 526 tt.fillrect(xx-80,yy-2,xx-30,yy+2,DarkGreen);
loopsva 0:e065ca40f28a 527 tt.fillrect(xx-30,yy-30,xx-25,yy+30,DarkGreen);
loopsva 0:e065ca40f28a 528 tt.fillrect(xx+25,yy-30,xx+30,yy+30,Maroon);
loopsva 0:e065ca40f28a 529 tt.fillrect(xx+25,yy-30,xx+40,yy-25,Maroon);
loopsva 0:e065ca40f28a 530 tt.fillrect(xx+25,yy+25,xx+75,yy+30,Maroon);
loopsva 0:e065ca40f28a 531 }
loopsva 0:e065ca40f28a 532
loopsva 0:e065ca40f28a 533 /*--------------------------------------------------------------------------------------------------------------------------------------*/
loopsva 0:e065ca40f28a 534 // The following draws the tube object in all for rotations, based on CurRot
loopsva 0:e065ca40f28a 535
loopsva 0:e065ca40f28a 536 void DrawTube() {
loopsva 0:e065ca40f28a 537 CurRot = 2;
loopsva 0:e065ca40f28a 538 DrawTubeX();
loopsva 0:e065ca40f28a 539 wait(DISP_SLOW);
loopsva 0:e065ca40f28a 540 wait(DISP_SLOW);
loopsva 0:e065ca40f28a 541 for(CurRot = 0 ; CurRot < 4 ; CurRot++) {
loopsva 0:e065ca40f28a 542 tt.cls();
loopsva 0:e065ca40f28a 543 DrawTubeX();
loopsva 0:e065ca40f28a 544 wait(DISP_FAST);
loopsva 0:e065ca40f28a 545 // wait(DISP_SLOW);
loopsva 0:e065ca40f28a 546 }
loopsva 0:e065ca40f28a 547 }
loopsva 0:e065ca40f28a 548
loopsva 0:e065ca40f28a 549 /*--------------------------------------------------------------------------------------------------------------------------------------*/
loopsva 0:e065ca40f28a 550 // Routine used to change the pen's color palette on the TFT
loopsva 0:e065ca40f28a 551
loopsva 0:e065ca40f28a 552 void TftNewColor() {
loopsva 0:e065ca40f28a 553 // point p;
loopsva 0:e065ca40f28a 554 TftDrawColor++;
loopsva 0:e065ca40f28a 555 if(TftDrawColor >= 17) {
loopsva 0:e065ca40f28a 556 TftDrawColor = 0;
loopsva 0:e065ca40f28a 557 }
loopsva 0:e065ca40f28a 558 switch (TftDrawColor) {
loopsva 0:e065ca40f28a 559 case 0: {
loopsva 0:e065ca40f28a 560 tt.fillrect(5,35,30,60,White);
loopsva 0:e065ca40f28a 561 PenColor = White;
loopsva 0:e065ca40f28a 562 }
loopsva 0:e065ca40f28a 563 break;
loopsva 0:e065ca40f28a 564 case 1: {
loopsva 0:e065ca40f28a 565 tt.fillrect(5,35,30,60,Orange);
loopsva 0:e065ca40f28a 566 PenColor = Orange;
loopsva 0:e065ca40f28a 567 }
loopsva 0:e065ca40f28a 568 break;
loopsva 0:e065ca40f28a 569 case 2: {
loopsva 0:e065ca40f28a 570 tt.fillrect(5,35,30,60,Yellow);
loopsva 0:e065ca40f28a 571 PenColor = Yellow;
loopsva 0:e065ca40f28a 572 }
loopsva 0:e065ca40f28a 573 break;
loopsva 0:e065ca40f28a 574 case 3: {
loopsva 0:e065ca40f28a 575 tt.fillrect(5,35,30,60,Magenta);
loopsva 0:e065ca40f28a 576 PenColor = 0xF81F;
loopsva 0:e065ca40f28a 577 }
loopsva 0:e065ca40f28a 578 break;
loopsva 0:e065ca40f28a 579 case 4: {
loopsva 0:e065ca40f28a 580 tt.fillrect(5,35,30,60,Red);
loopsva 0:e065ca40f28a 581 PenColor = 0xF800;
loopsva 0:e065ca40f28a 582 }
loopsva 0:e065ca40f28a 583 break;
loopsva 0:e065ca40f28a 584 case 5: {
loopsva 0:e065ca40f28a 585 tt.fillrect(5,35,30,60,Cyan);
loopsva 0:e065ca40f28a 586 PenColor = 0x07FF;
loopsva 0:e065ca40f28a 587 }
loopsva 0:e065ca40f28a 588 break;
loopsva 0:e065ca40f28a 589 case 6: {
loopsva 0:e065ca40f28a 590 tt.fillrect(5,35,30,60,Green);
loopsva 0:e065ca40f28a 591 PenColor = 0x07E0;
loopsva 0:e065ca40f28a 592 }
loopsva 0:e065ca40f28a 593 break;
loopsva 0:e065ca40f28a 594 case 7: {
loopsva 0:e065ca40f28a 595 tt.fillrect(5,35,30,60,Blue);
loopsva 0:e065ca40f28a 596 PenColor = 0x001F;
loopsva 0:e065ca40f28a 597 }
loopsva 0:e065ca40f28a 598 break;
loopsva 0:e065ca40f28a 599 case 8: {
loopsva 0:e065ca40f28a 600 tt.fillrect(5,35,30,60,LightGrey);
loopsva 0:e065ca40f28a 601 PenColor = 0x7BEF;
loopsva 0:e065ca40f28a 602 }
loopsva 0:e065ca40f28a 603 break;
loopsva 0:e065ca40f28a 604 case 9: {
loopsva 0:e065ca40f28a 605 tt.fillrect(5,35,30,60,DarkGrey);
loopsva 0:e065ca40f28a 606 PenColor = 0xC618;
loopsva 0:e065ca40f28a 607 }
loopsva 0:e065ca40f28a 608 break;
loopsva 0:e065ca40f28a 609 case 10: {
loopsva 0:e065ca40f28a 610 tt.fillrect(5,35,30,60,Olive);
loopsva 0:e065ca40f28a 611 PenColor = 0x7BE0;
loopsva 0:e065ca40f28a 612 }
loopsva 0:e065ca40f28a 613 break;
loopsva 0:e065ca40f28a 614 case 11: {
loopsva 0:e065ca40f28a 615 tt.fillrect(5,35,30,60,Purple);
loopsva 0:e065ca40f28a 616 PenColor = 0x780F;
loopsva 0:e065ca40f28a 617 }
loopsva 0:e065ca40f28a 618 break;
loopsva 0:e065ca40f28a 619 case 12: {
loopsva 0:e065ca40f28a 620 tt.fillrect(5,35,30,60,Maroon);
loopsva 0:e065ca40f28a 621 PenColor = 0x7800;
loopsva 0:e065ca40f28a 622 }
loopsva 0:e065ca40f28a 623 break;
loopsva 0:e065ca40f28a 624 case 13: {
loopsva 0:e065ca40f28a 625 tt.fillrect(5,35,30,60,DarkCyan);
loopsva 0:e065ca40f28a 626 PenColor = 0x03EF;
loopsva 0:e065ca40f28a 627 }
loopsva 0:e065ca40f28a 628 break;
loopsva 0:e065ca40f28a 629 case 14: {
loopsva 0:e065ca40f28a 630 tt.fillrect(5,35,30,60,DarkGreen);
loopsva 0:e065ca40f28a 631 PenColor = 0x03E0;
loopsva 0:e065ca40f28a 632 }
loopsva 0:e065ca40f28a 633 break;
loopsva 0:e065ca40f28a 634 case 15: {
loopsva 0:e065ca40f28a 635 tt.fillrect(5,35,30,60,Navy);
loopsva 0:e065ca40f28a 636 PenColor = 0x000F;
loopsva 0:e065ca40f28a 637 }
loopsva 0:e065ca40f28a 638 break;
loopsva 0:e065ca40f28a 639 case 16: {
loopsva 0:e065ca40f28a 640 tt.fillrect(5,35,30,60,Black);
loopsva 0:e065ca40f28a 641 tt.rect(5,35,30,60,White);
loopsva 0:e065ca40f28a 642 PenColor = 0x0000;
loopsva 0:e065ca40f28a 643 }
loopsva 0:e065ca40f28a 644 break;
loopsva 0:e065ca40f28a 645
loopsva 0:e065ca40f28a 646 } // end of switch
loopsva 0:e065ca40f28a 647
loopsva 0:e065ca40f28a 648 //wait for no-touch
loopsva 0:e065ca40f28a 649 point p;
loopsva 0:e065ca40f28a 650 do {
loopsva 0:e065ca40f28a 651 p = tt.get_touch();
loopsva 0:e065ca40f28a 652 tt.is_touched(p);
loopsva 0:e065ca40f28a 653 // pc.printf("pr1: %d %d\n", p.x, p.y);
loopsva 0:e065ca40f28a 654 }
loopsva 0:e065ca40f28a 655 while (p.y > 0x2000 | p.x > 0x2000); // { // wait for no touch
loopsva 0:e065ca40f28a 656 }
loopsva 0:e065ca40f28a 657
loopsva 0:e065ca40f28a 658 /*--------------------------------------------------------------------------------------------------------------------------------------*/
loopsva 0:e065ca40f28a 659 // Find the "secret spot" on the TFT, RESET the mbed
loopsva 0:e065ca40f28a 660
loopsva 0:e065ca40f28a 661 void KillMbed() {
loopsva 0:e065ca40f28a 662 // text LCD
loopsva 0:e065ca40f28a 663 lcdt.cls(); // clear out text LCD
loopsva 0:e065ca40f28a 664 lcdt.locate(0,0); // column(0-15), row(0-1)
loopsva 0:e065ca40f28a 665 lcdt.printf("Pen select\n");
loopsva 0:e065ca40f28a 666 lcdt.printf("resetting mbed!!");
loopsva 0:e065ca40f28a 667 // CRT
loopsva 0:e065ca40f28a 668 pc.printf("### Pen detected reset area. Resetting mbed!!!! ###\n");
loopsva 0:e065ca40f28a 669
loopsva 0:e065ca40f28a 670 //wait for no-touch
loopsva 0:e065ca40f28a 671 point p;
loopsva 0:e065ca40f28a 672 do {
loopsva 0:e065ca40f28a 673 p = tt.get_touch();
loopsva 0:e065ca40f28a 674 tt.is_touched(p);
loopsva 0:e065ca40f28a 675 }
loopsva 0:e065ca40f28a 676 while (p.y > 0x2000 | p.x > 0x2000); // { // wait for no touch
loopsva 0:e065ca40f28a 677
loopsva 0:e065ca40f28a 678 // TFT LCD
loopsva 0:e065ca40f28a 679 tt.cls();
loopsva 0:e065ca40f28a 680 tt.foreground(Yellow);
loopsva 0:e065ca40f28a 681 tt.set_orientation(1);
loopsva 0:e065ca40f28a 682 tt.set_font((unsigned char*) Book_Antiqua19x19);
loopsva 0:e065ca40f28a 683 tt.locate(2,5); // x,y
loopsva 0:e065ca40f28a 684 tt.printf("### Reset mbed ###");
loopsva 0:e065ca40f28a 685
loopsva 0:e065ca40f28a 686 wait(DISP_SLOW);
loopsva 0:e065ca40f28a 687 wait(DISP_SLOW);
loopsva 0:e065ca40f28a 688 mbed_reset();
loopsva 0:e065ca40f28a 689 }
loopsva 0:e065ca40f28a 690
loopsva 0:e065ca40f28a 691 /*--------------------------------------------------------------------------------------------------------------------------------------*/
loopsva 0:e065ca40f28a 692 // This routing changes the "width" or "fatness" of the drawing pen on the TFT
loopsva 0:e065ca40f28a 693
loopsva 0:e065ca40f28a 694 void TftNewPenSize() {
loopsva 0:e065ca40f28a 695 PenWidth++;
loopsva 0:e065ca40f28a 696 if(PenWidth > 8) {
loopsva 0:e065ca40f28a 697 PenWidth = 1;
loopsva 0:e065ca40f28a 698 }
loopsva 0:e065ca40f28a 699 tt.foreground(Yellow); // set chars to white
loopsva 0:e065ca40f28a 700 tt.set_orientation(0);
loopsva 0:e065ca40f28a 701 tt.locate(13,1);
loopsva 0:e065ca40f28a 702 tt.printf("%d", PenWidth);
loopsva 0:e065ca40f28a 703 tt.set_orientation(1);
loopsva 0:e065ca40f28a 704 tt.circle(16,80,10, Blue);
loopsva 0:e065ca40f28a 705 tt.foreground(PenColor);
loopsva 0:e065ca40f28a 706
loopsva 0:e065ca40f28a 707 //wait for no-touch
loopsva 0:e065ca40f28a 708 point p;
loopsva 0:e065ca40f28a 709 do {
loopsva 0:e065ca40f28a 710 p = tt.get_touch();
loopsva 0:e065ca40f28a 711 tt.is_touched(p);
loopsva 0:e065ca40f28a 712 // pc.printf("pr1: %d %d\n", p.x, p.y);
loopsva 0:e065ca40f28a 713 }
loopsva 0:e065ca40f28a 714 while (p.y > 0x2000 | p.x > 0x2000); // { // wait for no touch
loopsva 0:e065ca40f28a 715 }
loopsva 0:e065ca40f28a 716
loopsva 0:e065ca40f28a 717 /*--------------------------------------------------------------------------------------------------------------------------------------*/
loopsva 0:e065ca40f28a 718 //A generic QUICK BROWN FOX routine to check out various fonts
loopsva 0:e065ca40f28a 719
loopsva 0:e065ca40f28a 720 void QuickBrownFox() {
loopsva 0:e065ca40f28a 721 tt.foreground(Yellow); // set chars to white
loopsva 0:e065ca40f28a 722 tt.cls(); // clear the screen
loopsva 0:e065ca40f28a 723 // tt.set_font((unsigned char*) Arial12x12); // select the font
loopsva 0:e065ca40f28a 724 // tt.set_font((unsigned char*) Courier10x13); // select the font
loopsva 0:e065ca40f28a 725 // tt.set_font((unsigned char*) Verdana22x21); // select the font
loopsva 0:e065ca40f28a 726 // tt.set_font((unsigned char*) Book_Antiqua19x19); // select the font
loopsva 0:e065ca40f28a 727 tt.set_orientation(1);
loopsva 0:e065ca40f28a 728 tt.locate(0,0);
loopsva 0:e065ca40f28a 729 tt.printf("THE QUICK BROWN FOX");
loopsva 0:e065ca40f28a 730 tt.locate(0,1);
loopsva 0:e065ca40f28a 731 tt.printf("JUMPED OVER THE LAZY");
loopsva 0:e065ca40f28a 732 tt.locate(0,2);
loopsva 0:e065ca40f28a 733 tt.printf("DOG'S BACK 0123456789");
loopsva 0:e065ca40f28a 734 tt.locate(0,3);
loopsva 0:e065ca40f28a 735 tt.printf("!@#$%^&*(){|}[\]:;<,./?>");
loopsva 0:e065ca40f28a 736 tt.locate(0,5);
loopsva 0:e065ca40f28a 737 tt.printf("the quick brown fox");
loopsva 0:e065ca40f28a 738 tt.locate(0,6);
loopsva 0:e065ca40f28a 739 tt.printf("jumped over the lazy ");
loopsva 0:e065ca40f28a 740 tt.locate(0,7);
loopsva 0:e065ca40f28a 741 tt.printf("dog's back \n");
loopsva 0:e065ca40f28a 742 tt.foreground(White); // set chars to white
loopsva 0:e065ca40f28a 743 tt.set_orientation(1);
loopsva 0:e065ca40f28a 744 }
loopsva 0:e065ca40f28a 745
loopsva 0:e065ca40f28a 746 /*--------------------------------------------------------------------------------------------------------------------------------------*/
loopsva 0:e065ca40f28a 747 int main() {
loopsva 0:e065ca40f28a 748 pc.baud(921600); //set up USB serial speed
loopsva 0:e065ca40f28a 749 // time_t ctTime;
loopsva 0:e065ca40f28a 750 ctTime = time(NULL);
loopsva 0:e065ca40f28a 751 StartTime = ctTime; //get time we started up
loopsva 0:e065ca40f28a 752 ctTime = ctTime + ((TZone+DST)*3600); //timezone and dst offsets
loopsva 0:e065ca40f28a 753 RTCstep = ctTime;
loopsva 0:e065ca40f28a 754
loopsva 0:e065ca40f28a 755 pc.printf("\n\n");
loopsva 0:e065ca40f28a 756 pc.printf("-------------------------------------------------------------------\n");
loopsva 0:e065ca40f28a 757 pc.printf("TFT and Touch Screen Test Routines Rev: %d K Braun\n", revision);
loopsva 0:e065ca40f28a 758 TextLCDTitle();
loopsva 0:e065ca40f28a 759 pc.printf("Graphic elements/text displayed\n");
loopsva 0:e065ca40f28a 760 // point p;
loopsva 0:e065ca40f28a 761
loopsva 0:e065ca40f28a 762 // tt.claim(stdout); // send stdout to the TFT display
loopsva 0:e065ca40f28a 763 tt.background(Black); // set background to black
loopsva 0:e065ca40f28a 764 tt.foreground(Yellow); // set chars to white
loopsva 0:e065ca40f28a 765 tt.cls(); // clear the screen
loopsva 0:e065ca40f28a 766 tt.set_font((unsigned char*) Arial12x12); // select the font
loopsva 0:e065ca40f28a 767 tt.set_orientation(0);
loopsva 0:e065ca40f28a 768 tt.locate(0,0);
loopsva 0:e065ca40f28a 769 tt.printf(" Revision: %d", revision);
loopsva 0:e065ca40f28a 770
loopsva 0:e065ca40f28a 771 tt.foreground(White); // set chars to white
loopsva 0:e065ca40f28a 772 tt.set_orientation(1);
loopsva 0:e065ca40f28a 773
loopsva 0:e065ca40f28a 774 tt.set_font((unsigned char*) Arial24x23);
loopsva 0:e065ca40f28a 775 tt.locate(3,9); // x,y
loopsva 0:e065ca40f28a 776 tt.printf("Graphic Test");
loopsva 0:e065ca40f28a 777 // some graphics
loopsva 0:e065ca40f28a 778 tt.line(0,0,100,200,Green);
loopsva 0:e065ca40f28a 779 tt.rect(20,40,70,90,Red);
loopsva 0:e065ca40f28a 780 tt.fillrect(240,25,260,70,Blue);
loopsva 0:e065ca40f28a 781 tt.fillrect(265,25,285,70,Blue);
loopsva 0:e065ca40f28a 782 tt.circle(30,180,10,Purple);
loopsva 0:e065ca40f28a 783 tt.circle(55,175,10,DarkGreen);
loopsva 0:e065ca40f28a 784 tt.circle(40,155,10,DarkCyan);
loopsva 0:e065ca40f28a 785 DrawTube();
loopsva 0:e065ca40f28a 786 CurRot = 1;
loopsva 0:e065ca40f28a 787 tt.cls();
loopsva 0:e065ca40f28a 788 DrawTubeX();
loopsva 0:e065ca40f28a 789 PosX = 40;
loopsva 0:e065ca40f28a 790 PosY = 50;
loopsva 0:e065ca40f28a 791 DrawTubeX();
loopsva 0:e065ca40f28a 792 PosX = 190;
loopsva 0:e065ca40f28a 793 PosY = 50;
loopsva 0:e065ca40f28a 794 DrawTubeX();
loopsva 0:e065ca40f28a 795 PosX = 40;
loopsva 0:e065ca40f28a 796 PosY = 280;
loopsva 0:e065ca40f28a 797 DrawTubeX();
loopsva 0:e065ca40f28a 798 PosX = 190;
loopsva 0:e065ca40f28a 799 PosY = 280;
loopsva 0:e065ca40f28a 800 DrawTubeX();
loopsva 0:e065ca40f28a 801 wait(DISP_SLOW);
loopsva 0:e065ca40f28a 802 wait(DISP_SLOW);
loopsva 0:e065ca40f28a 803
loopsva 0:e065ca40f28a 804 // Check if we can use modify the http name of the mbed
loopsva 0:e065ca40f28a 805 FILE *fp = fopen("/local/whoami.ini", "r");
loopsva 0:e065ca40f28a 806 if (fp == NULL) {
loopsva 0:e065ca40f28a 807 pc.printf("*** No /local/whoami.ini file, defaulting to: %s\n",hostname);
loopsva 0:e065ca40f28a 808 } else {
loopsva 0:e065ca40f28a 809 char localbuf[64];
loopsva 0:e065ca40f28a 810 hostname = fgets(localbuf, sizeof(localbuf)-1, fp);
loopsva 0:e065ca40f28a 811 pc.printf("Found /local/whoami.ini file. my name is: %s\n",hostname);
loopsva 0:e065ca40f28a 812 fclose(fp);
loopsva 0:e065ca40f28a 813 }
loopsva 0:e065ca40f28a 814
loopsva 0:e065ca40f28a 815 // Check for main ini file, create if does not exist
loopsva 0:e065ca40f28a 816 FILE *fpi = fopen("/local/tft.ini", "r");
loopsva 0:e065ca40f28a 817 if (fpi == NULL) {
loopsva 0:e065ca40f28a 818 InitIniFile();
loopsva 0:e065ca40f28a 819 pc.printf("*** rebooting after file creation....");
loopsva 0:e065ca40f28a 820 wait(2.0);
loopsva 0:e065ca40f28a 821 mbed_reset();
loopsva 0:e065ca40f28a 822 } else {
loopsva 0:e065ca40f28a 823 pc.printf("Found /local/tft.ini file...\n");
loopsva 0:e065ca40f28a 824 fclose(fpi);
loopsva 0:e065ca40f28a 825 SNTPReadIniFile("/local/tft.ini");
loopsva 0:e065ca40f28a 826 }
loopsva 0:e065ca40f28a 827
loopsva 0:e065ca40f28a 828 /*See if INDEX.HTM can be created on SD micro drive */
loopsva 0:e065ca40f28a 829 //
loopsva 0:e065ca40f28a 830 //NOTE: mbed hangs if no SD card installed - need to fix!!!!!!
loopsva 0:e065ca40f28a 831 //
loopsva 0:e065ca40f28a 832 lcdt.cls(); //init the LCD
loopsva 0:e065ca40f28a 833 lcdt.locate(0,0); //column(0-15), row(0-1)
loopsva 0:e065ca40f28a 834 lcdt.printf("SD Card Missing!"); //---in case SD drive hangs forever---
loopsva 0:e065ca40f28a 835
loopsva 0:e065ca40f28a 836 if (gDebug > 3) {
loopsva 0:e065ca40f28a 837 // char *WriteTest = "This is a Test!!!";
loopsva 0:e065ca40f28a 838 fp = fopen("/sd/INDEX.HTM", "w+");
loopsva 0:e065ca40f28a 839 if (fp == NULL) {
loopsva 0:e065ca40f28a 840 pc.printf("*** Cannot create INDEX.HTM file\n");
loopsva 0:e065ca40f28a 841 } else {
loopsva 0:e065ca40f28a 842 // char localbuf[32];
loopsva 0:e065ca40f28a 843 // localbuf = WriteTest;
loopsva 0:e065ca40f28a 844 fprintf(fp, "This is a Test!!!\n");
loopsva 0:e065ca40f28a 845 pc.printf("Creating /sd/INDEX.HTM file\n");
loopsva 0:e065ca40f28a 846 fclose(fp);
loopsva 0:e065ca40f28a 847 }
loopsva 0:e065ca40f28a 848 }
loopsva 0:e065ca40f28a 849
loopsva 0:e065ca40f28a 850 fp = fopen("/sd/index.htm", "r");
loopsva 0:e065ca40f28a 851 if (fp == NULL) {
loopsva 0:e065ca40f28a 852 use_sd = false;
loopsva 0:e065ca40f28a 853 if (gDebug) pc.printf("*** Found SD card, -no- INDEX.HTM file\n");
loopsva 0:e065ca40f28a 854 } else {
loopsva 0:e065ca40f28a 855 use_sd = true;
loopsva 0:e065ca40f28a 856 fclose(fp);
loopsva 0:e065ca40f28a 857 if (gDebug) pc.printf("Found SD card with INDEX.HTM file\n");
loopsva 0:e065ca40f28a 858 }
loopsva 0:e065ca40f28a 859
loopsva 0:e065ca40f28a 860 lcdt.cls();
loopsva 0:e065ca40f28a 861
loopsva 0:e065ca40f28a 862 // if (0 != SNTPReadIniFile("/sd/sntp.ini") )
loopsva 0:e065ca40f28a 863 // SNTPReadIniFile("/local/sntp.ini");
loopsva 0:e065ca40f28a 864 // SNTPWriteIniFile(stdout);
loopsva 0:e065ca40f28a 865 // fclose(fpi);
loopsva 0:e065ca40f28a 866 // lcdt.cls(); //init the LCD
loopsva 0:e065ca40f28a 867 if ((use_sd == true) && (gDebug > 3)) pc.printf(" "); // to get rid of use_sd "never used" warning
loopsva 0:e065ca40f28a 868
loopsva 0:e065ca40f28a 869 //Check RTC
loopsva 0:e065ca40f28a 870 ctTime = time(NULL);
loopsva 0:e065ca40f28a 871 ctTime = ctTime + ((TZone+DST)*3600); //timezone and dst offsets
loopsva 0:e065ca40f28a 872 if (RTCstep == ctTime) {
loopsva 0:e065ca40f28a 873 pc.printf("*** RTC stopped, initializing the RTC. !!CHECK BATTERY!!\n");
loopsva 0:e065ca40f28a 874 pc.printf("*** Note: Time is incorrect, needs to be updated!!!\n");
loopsva 0:e065ca40f28a 875 set_time(1296473737);
loopsva 0:e065ca40f28a 876 lcdt.cls(); //init the LCD
loopsva 0:e065ca40f28a 877 lcdt.locate(0,0); //column(0-15), row(0-1)
loopsva 0:e065ca40f28a 878 lcdt.printf("RTC Stopped!!");
loopsva 0:e065ca40f28a 879 wait(DISP_SLOW);
loopsva 0:e065ca40f28a 880
loopsva 0:e065ca40f28a 881 // strftime(timebuf, 32, "%H:%M\n", localtime(&ctTime));
loopsva 0:e065ca40f28a 882 } else {
loopsva 0:e065ca40f28a 883 lcdt.cls(); //init the LCD
loopsva 0:e065ca40f28a 884 lcdt.locate(0,0); //column(0-15), row(0-1)
loopsva 0:e065ca40f28a 885 lcdt.printf("RTC running");
loopsva 0:e065ca40f28a 886 pc.printf("RTC running\n");
loopsva 0:e065ca40f28a 887 }
loopsva 0:e065ca40f28a 888 tt.cls();
loopsva 0:e065ca40f28a 889 if(TftCalib == 1) {
loopsva 0:e065ca40f28a 890 lcdt.locate(0,1); //column(0-15), row(0-1)
loopsva 0:e065ca40f28a 891 lcdt.printf("Cal t-pad...");
loopsva 0:e065ca40f28a 892 pc.printf("Calibrating touchpad.....");
loopsva 0:e065ca40f28a 893 tt.calibrate(); // calibrate the touch
loopsva 0:e065ca40f28a 894 pc.printf(" Updating /local/tft.ini file.....");
loopsva 0:e065ca40f28a 895 TftCalib = 0; //set -no cal reqd- flag
loopsva 0:e065ca40f28a 896 pp_txm = tt.getCalDataX(); //get calibration values
loopsva 0:e065ca40f28a 897 pp_tym = tt.getCalDataY();
loopsva 0:e065ca40f28a 898 pp_txoff = tt.getCalOffX();
loopsva 0:e065ca40f28a 899 pp_tyoff = tt.getCalOffY();
loopsva 0:e065ca40f28a 900 InitIniFile(); //save in ini file
loopsva 0:e065ca40f28a 901 pc.printf(" done\n");
loopsva 0:e065ca40f28a 902 pc.printf("New Touch Cal Values:\n- Touch Cal X Base %d\n- Touch Cal Y Base %d\n- Touch Cal X Offset %d\n- Touch Cal Y Offset %d\n"
loopsva 0:e065ca40f28a 903 , pp_txm, pp_tym, pp_txoff, pp_tyoff);
loopsva 0:e065ca40f28a 904 lcdt.cls();
loopsva 0:e065ca40f28a 905 } else {
loopsva 0:e065ca40f28a 906 pc.printf("No touchpad cal needed\n");
loopsva 0:e065ca40f28a 907 tt.setCalDataX(pp_txm); //set calibration values
loopsva 0:e065ca40f28a 908 tt.setCalDataY(pp_tym);
loopsva 0:e065ca40f28a 909 tt.setCalOffX(pp_txoff);
loopsva 0:e065ca40f28a 910 tt.setCalOffY(pp_tyoff);
loopsva 0:e065ca40f28a 911 }
loopsva 0:e065ca40f28a 912
loopsva 0:e065ca40f28a 913 TextLCDTitle();
loopsva 0:e065ca40f28a 914
loopsva 0:e065ca40f28a 915 tt.cls();
loopsva 0:e065ca40f28a 916 tt.foreground(Yellow); // set chars to white
loopsva 0:e065ca40f28a 917 // tt.cls(); // clear the screen
loopsva 0:e065ca40f28a 918 // tt.set_font((unsigned char*) Arial12x12); // select the font
loopsva 0:e065ca40f28a 919 tt.set_font((unsigned char*) Courier10x13); // select the font
loopsva 0:e065ca40f28a 920 // tt.set_font((unsigned char*) Verdana22x21); // select the font
loopsva 0:e065ca40f28a 921 // tt.set_font((unsigned char*) Book_Antiqua19x19); // select the font
loopsva 0:e065ca40f28a 922 pc.printf("Quick Brown Fox displayed\n");
loopsva 0:e065ca40f28a 923 QuickBrownFox();
loopsva 0:e065ca40f28a 924 // wait(DISP_SLOW);
loopsva 0:e065ca40f28a 925 // wait(DISP_SLOW);
loopsva 0:e065ca40f28a 926 // pc.printf("(before) ctTime %d\n", ctTime);
loopsva 0:e065ca40f28a 927
loopsva 0:e065ca40f28a 928 //Set up Ethernet
loopsva 0:e065ca40f28a 929 EthernetErr ethErr;
loopsva 0:e065ca40f28a 930 pc.printf("Starting Ethernet...\n");
loopsva 0:e065ca40f28a 931 ethErr = eth.setup();
loopsva 0:e065ca40f28a 932 if(ethErr) {
loopsva 0:e065ca40f28a 933 pc.printf("*** No Ethernet Link!!!\n");
loopsva 0:e065ca40f28a 934 } else {
loopsva 0:e065ca40f28a 935 IpAddr ethIp = eth.getIp();
loopsva 0:e065ca40f28a 936 pc.printf("IP address : %d.%d.%d.%d\n", ethIp[0], ethIp[1], ethIp[2], ethIp[3]);
loopsva 0:e065ca40f28a 937 lcdt.cls();
loopsva 0:e065ca40f28a 938 lcdt.printf("%d.%d.%d.%d\n", ethIp[0], ethIp[1], ethIp[2], ethIp[3]);
loopsva 0:e065ca40f28a 939 lcdt.locate(0,1); //column(0-15), row(0-1)
loopsva 0:e065ca40f28a 940 lcdt.printf("tft%d", revision);
loopsva 0:e065ca40f28a 941 SetEthTime();
loopsva 0:e065ca40f28a 942 }
loopsva 0:e065ca40f28a 943 InitTft();
loopsva 0:e065ca40f28a 944 point p;
loopsva 0:e065ca40f28a 945 int LedDelay = 0;
loopsva 0:e065ca40f28a 946 int xTime = ctTime;
loopsva 0:e065ca40f28a 947 // pc.printf("RtcColor %s\n", RtcColor);
loopsva 0:e065ca40f28a 948 pc.printf("Ready...\n");
loopsva 0:e065ca40f28a 949 // pc.printf("(after) ctTime %d\ xTime %d\n", ctTime, xTime);
loopsva 0:e065ca40f28a 950 while (1) {
loopsva 0:e065ca40f28a 951 ctTime = time(NULL);
loopsva 0:e065ca40f28a 952 SysUpTime = ctTime - StartTime; //number of seconds we've been alive
loopsva 0:e065ca40f28a 953 // if(gDebug > 1) pc.printf("cT: %d sT: %d suT: %d\n", ctTime, StartTime, SysUpTime);
loopsva 0:e065ca40f28a 954 ctTime = ctTime + ((TZone + DST) * 3600); //timezone and dst offsets
loopsva 0:e065ca40f28a 955 strftime(timebuf, 32, "%H:%M:%S", localtime(&ctTime));
loopsva 0:e065ca40f28a 956 if(xTime != ctTime) {
loopsva 0:e065ca40f28a 957 xTime = ctTime;
loopsva 0:e065ca40f28a 958 if(gDebug > 1) pc.printf("cT: %d sT: %d suT: %d\n", ctTime, StartTime, SysUpTime);
loopsva 0:e065ca40f28a 959 lcdt.locate(8,1); //column(0-15), row(0-1)
loopsva 0:e065ca40f28a 960 lcdt.printf("%s\n", timebuf);
loopsva 0:e065ca40f28a 961 lcdt.locate(15,1);
loopsva 0:e065ca40f28a 962
loopsva 0:e065ca40f28a 963 tt.foreground (Cyan);
loopsva 0:e065ca40f28a 964 tt.set_orientation(0);
loopsva 0:e065ca40f28a 965 tt.locate(14,25); //25
loopsva 0:e065ca40f28a 966 tt.printf("%s", timebuf );
loopsva 0:e065ca40f28a 967 strftime(timebuf, 32, "%m/%d/%y", localtime(&ctTime));
loopsva 0:e065ca40f28a 968 tt.locate(14,24); //24
loopsva 0:e065ca40f28a 969 tt.printf("%s", timebuf );
loopsva 0:e065ca40f28a 970 }
loopsva 0:e065ca40f28a 971 // Winking LED1
loopsva 0:e065ca40f28a 972 LedDelay++;
loopsva 0:e065ca40f28a 973 if(LedDelay >= 24) {
loopsva 0:e065ca40f28a 974 LedDelay = 0;
loopsva 0:e065ca40f28a 975 if(Led1Up == true) {
loopsva 0:e065ca40f28a 976 Led1Pwm = Led1Pwm + 0.005;
loopsva 0:e065ca40f28a 977 led1 = Led1Pwm;
loopsva 0:e065ca40f28a 978 if(Led1Pwm >= 0.20) {
loopsva 0:e065ca40f28a 979 Led1Up = false;
loopsva 0:e065ca40f28a 980 }
loopsva 0:e065ca40f28a 981 } else {
loopsva 0:e065ca40f28a 982 Led1Pwm = Led1Pwm - 0.005;
loopsva 0:e065ca40f28a 983 led1 = Led1Pwm;
loopsva 0:e065ca40f28a 984 if(Led1Pwm <= 0.005) {
loopsva 0:e065ca40f28a 985 Led1Up = true;
loopsva 0:e065ca40f28a 986 }
loopsva 0:e065ca40f28a 987 }
loopsva 0:e065ca40f28a 988 }
loopsva 0:e065ca40f28a 989 tt.set_orientation(1);
loopsva 0:e065ca40f28a 990 p = tt.get_touch(); // read analog pos.
loopsva 0:e065ca40f28a 991 if (tt.is_touched(p)) { // test if touched
loopsva 0:e065ca40f28a 992 // pc.printf("p1: %d %d\n", p.x, p.y);
loopsva 0:e065ca40f28a 993
loopsva 0:e065ca40f28a 994 // inside the red box tt.rect(5,5,30,30,Red);
loopsva 0:e065ca40f28a 995 if((p.x >= 10000) && (p.x <= 15500) && (p.y >= 10500) && (p.y <= 16300)) { // clear out TFT LCD red box
loopsva 0:e065ca40f28a 996 InitTft();
loopsva 0:e065ca40f28a 997 } else if((p.x >= 10000) && (p.x <= 15500) && (p.y >= 16400) && (p.y <= 21300)) { // pen color select colored box
loopsva 0:e065ca40f28a 998 TftNewColor();
loopsva 0:e065ca40f28a 999 } else if((p.x >= 10000) && (p.x <= 15500) && (p.y >= 21400) && (p.y <= 29000)) { // pen width select blue circle
loopsva 0:e065ca40f28a 1000 TftNewPenSize();
loopsva 0:e065ca40f28a 1001 } else if((p.x >= 10000) && (p.x <= 12000) && (p.y >= 50000) && (p.y <= 55000)) { // hidden system-reboot near "TFT" text
loopsva 0:e065ca40f28a 1002 KillMbed();
loopsva 0:e065ca40f28a 1003 } else {
loopsva 0:e065ca40f28a 1004 p = tt.to_pixel(p); // convert to pixel pos
loopsva 0:e065ca40f28a 1005 tt.fillcircle(p.x,p.y,PenWidth,PenColor); // print a blue dot on the screen
loopsva 0:e065ca40f28a 1006 }
loopsva 0:e065ca40f28a 1007 // pc.printf("p2: %d\n", p);
loopsva 0:e065ca40f28a 1008 }
loopsva 0:e065ca40f28a 1009 }
loopsva 0:e065ca40f28a 1010 }
loopsva 0:e065ca40f28a 1011