Attempts to merge SPI_TFT2 & SPI_TFT_ILI9341

Dependencies:   SPI_TFTx2 TFT_fonts TOUCH_TFTx2 mbed

Fork of CANary by Tick Tock

Files at this revision

API Documentation at this revision

Comitter:
TickTock
Date:
Fri Mar 15 04:28:34 2013 +0000
Parent:
24:6cf76ed8c432
Child:
26:462ccb580472
Commit message:
Added date/time entry, fixed braking display, added reset

Changed in this revision

SPI_TFTx2.lib Show annotated file Show diff for this revision Revisions of this file
common.h Show annotated file Show diff for this revision Revisions of this file
displayModes.cpp Show annotated file Show diff for this revision Revisions of this file
displayModes.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
utility.cpp Show annotated file Show diff for this revision Revisions of this file
utility.h Show annotated file Show diff for this revision Revisions of this file
--- a/SPI_TFTx2.lib	Thu Mar 14 05:02:15 2013 +0000
+++ b/SPI_TFTx2.lib	Fri Mar 15 04:28:34 2013 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/TickTock/code/SPI_TFTx2/#6693193c1fd6
+http://mbed.org/users/TickTock/code/SPI_TFTx2/#c39d5b3745af
--- a/common.h	Thu Mar 14 05:02:15 2013 +0000
+++ b/common.h	Fri Mar 15 04:28:34 2013 +0000
@@ -1,4 +1,3 @@
-#define maxScreens 8
 #define offScreen 0
 #define logScreen 1
 #define dteScreen 2
@@ -7,9 +6,11 @@
 #define monitorScreen 5
 #define changedScreen 6
 #define cpScreen 7
-#define configScreen 8
-#define upLine "\033[1A"
+#define config1Screen 8
+#define config2Screen 9
+#define maxScreens 9
+#define btnGap 10
+
 #define maxBufLen 768
 #define canTimeout 5
 #define userTimeout 10
-#define btnGap 10
\ No newline at end of file
--- a/displayModes.cpp	Thu Mar 14 05:02:15 2013 +0000
+++ b/displayModes.cpp	Fri Mar 15 04:28:34 2013 +0000
@@ -1,7 +1,7 @@
 //displayModes.cpp
 
 #include "displayModes.h"
-char sTemp1[16];
+char sTemp1[40];
 char sTemp2[16];
 
 void printLast (bool force){
@@ -15,6 +15,19 @@
         msg = lastMsg[i+indexOffset];
         printf("%03x : %02x %02x %02x %02x %02x %02x %02x %02x    \n",msg.id,msg.data[0],msg.data[1],msg.data[2],msg.data[3],msg.data[4],msg.data[5],msg.data[6],msg.data[7]);
     }
+    if(sMode==1){
+        tt.foreground(Yellow);
+        tt.background(DarkCyan);
+        tt.set_font((unsigned char*) Arial12x12);
+        sprintf(sTemp1,"<up>");
+        sprintf(sTemp2,"");
+        showButton(0,0,sTemp1,sTemp2,3,3);
+        tt.foreground(Yellow);
+        tt.background(DarkCyan);
+        tt.set_font((unsigned char*) Arial12x12);
+        sprintf(sTemp1,"<down>");
+        showButton(2,0,sTemp1,sTemp2,3,3);
+    }
 }
 
 void printChanged (bool force){
@@ -68,7 +81,7 @@
     tt.background(Navy);
     if(force) tt.cls();
     if(force||gids!=lgids){
-        tt.foreground(Amber);
+        tt.foreground(Yellow);
         tt.set_font((unsigned char*) Arial28x28);
         tt.locate(10,10);
         printf("%4d gids\n",gids);
@@ -82,14 +95,14 @@
         lgids=gids;
     }
     if(force||SOC!=lSOC){
-        tt.foreground(Amber);
+        tt.foreground(Yellow);
         tt.set_font((unsigned char*) Arial28x28);
         tt.locate(200,10);
         printf("%4.1f%s\n",(float)SOC/10,"%");
         lSOC=SOC;
     }
     if(force||packV!=lpackV){
-        tt.foreground(Amber);
+        tt.foreground(Yellow);
         tt.set_font((unsigned char*) Arial28x28);
         tt.locate(200,200);
         printf("%4.1fV\n",(float)packV/2);
@@ -97,9 +110,9 @@
     }
 }
 
-void braking (bool force, bool prdata){
+void braking (bool force, bool prdata=false){
     unsigned long targetBraking, regenBraking, speed;
-    static unsigned long maxTarget = 0, maxRegen = 0, tarDivReg = 0;
+    static unsigned long maxTarget = 0, maxRegen = 0, tarDivReg = 1000000;
     short rpm;
     unsigned long temp;
     static unsigned char lastPressure[4] = {200,200,200,200};
@@ -159,36 +172,39 @@
         temp *= 200;
         temp /= maxTarget;
         t = (char) temp;
-        if (t>238) t=238;
+        if (t>220) t=220;
         temp = regenBraking;
         temp *= tarDivReg;
         temp *= 200;
         temp /= maxTarget;
         r = (char) temp;
-        if (r>238) r=238;
+        if (r>220) r=220;
         if(lr!=r&&prdata){
-            tt.foreground(Amber);
+            tt.foreground(Red);
             tt.set_font((unsigned char*) Arial28x28);
-            tt.locate(100,50);
+            tt.locate(100,40);
             printf("%d %d    \n",regenBraking,maxRegen);
-            tt.locate(100,90);
-            printf("%3.1f (%3.1f%s)    \n",(float)tarDivReg/1000,(float)regenBraking*tarDivReg/targetBraking/1000,"%");
+            tt.locate(100,70);
+            printf("%3.1f (%3.1f%s)    \n",(float)tarDivReg/10,(float)regenBraking*tarDivReg/targetBraking/10,"%");
         }    
         if(lt!=t&&prdata){
-            tt.foreground(Amber);
+            tt.foreground(Red);
             tt.set_font((unsigned char*) Arial28x28);
             tt.locate(100,10);
             printf("%d %d    \n",targetBraking,maxTarget);
         }
         if((lr!=r||lt!=t)&&!prdata){
-            if(r<lr)
-                tt.fillrect(200,239-lr,300,239-r,Red);
-            else
-                tt.fillrect(200,239-r,300,239-lr,Green);
-            if(t<lt)
-                tt.fillrect(200,239-lt,300,239-t,Navy);
-            else
-                tt.fillrect(200,239-t,300,238-r,Red);
+            if(t<lt){
+                tt.fillrect(200,238-lt,300,237-t,Navy);
+                if(t<lr) lr=t;
+            } else {
+                tt.fillrect(200,238-t,300,238-lt,Red);
+            }
+            if(r<lr){
+                tt.fillrect(200,238-lr,300,237-r,Red);
+            } else {
+                tt.fillrect(200,238-r,300,238-lr,Green);
+            }
         }
         lt=t;
         lr=r;
@@ -239,6 +255,14 @@
         }
         showCP=false;
     }
+    if(sMode==1){
+        tt.foreground(Yellow);
+        tt.background(DarkCyan);
+        tt.set_font((unsigned char*) Arial12x12);
+        sprintf(sTemp1,"Request");
+        sprintf(sTemp2,"CP data");
+        showButton(1,0,sTemp1,sTemp2,3,3);               
+    }
 }
 
 void config1(bool force){
@@ -267,6 +291,58 @@
     showButton(0,1,sTemp1,sTemp2,3,3);
 }
 
+void showDateTime(bool force){
+    struct tm t; // pointer to a static tm structure
+    time_t seconds ;
+    tt.foreground(Yellow);
+    tt.background(Navy);
+    if (force) {
+        tt.cls();
+        seconds = time(NULL);
+        t = *localtime(&seconds) ;
+        
+        tt.locate(10,10);
+        strftime(sTemp1, 32, "%a %m/%d/%Y %X  \n", &t);
+        printf("%s",sTemp1);
+        if(sMode==1){
+            tt.foreground(Yellow);
+            tt.background(DarkCyan);
+            tt.set_font((unsigned char*) Arial12x12);
+            sprintf(sTemp1,"");
+            switch(dtMode){
+                case 0:
+                    sprintf(sTemp2,"Year");
+                    break;
+                case 1:
+                    sprintf(sTemp2,"Month");
+                    break;
+                case 2:
+                    sprintf(sTemp2,"Day");
+                    break;
+                case 3:
+                    sprintf(sTemp2,"Hour");
+                    break;
+                case 4:
+                    sprintf(sTemp2,"Minute");
+                    break;
+                case 5:
+                    sprintf(sTemp2,"Second");
+                    break;
+                case 6:
+                    sprintf(sTemp2,"Select");
+                    break;
+                default:
+                    break;
+            }
+            showButton(0,1,sTemp1,sTemp2,3,3);               
+            sprintf(sTemp2,"   UP");
+            showButton(1,1,sTemp1,sTemp2,3,3);               
+            sprintf(sTemp2,"  DOWN");
+            showButton(2,1,sTemp1,sTemp2,3,3);               
+        }
+    }
+}
+
 void updateDisplay(char display){
     bool changed;
     changed = dMode[display]!=lastDMode[display];
@@ -282,41 +358,23 @@
             braking(changed,true);
             break;
         case powerScreen:
-            braking(changed,false);
+            braking(changed);
             break;
         case monitorScreen:
             printLast(changed);
-            if(sMode==1){
-                tt.foreground(Yellow);
-                tt.background(DarkCyan);
-                tt.set_font((unsigned char*) Arial12x12);
-                sprintf(sTemp1,"<up>");
-                sprintf(sTemp2,"");
-                showButton(0,0,sTemp1,sTemp2,3,3);
-                tt.foreground(Yellow);
-                tt.background(DarkCyan);
-                tt.set_font((unsigned char*) Arial12x12);
-                sprintf(sTemp1,"<down>");
-                showButton(2,0,sTemp1,sTemp2,3,3);
-            }
             break;
         case changedScreen:
             printChanged(changed);
             break;
         case cpScreen:
             cpData(changed||showCP);
-            if(sMode==1){
-                tt.foreground(Yellow);
-                tt.background(DarkCyan);
-                tt.set_font((unsigned char*) Arial12x12);
-                sprintf(sTemp1,"Request");
-                sprintf(sTemp2,"CP data");
-                showButton(1,0,sTemp1,sTemp2,3,3);               
-            }
             break;
-        case configScreen:
+        case config1Screen:
             config1(changed);
             break;
+        case config2Screen:
+            showDateTime(changed);
+            break;
         default:
             tt.background(Black);
             tt.cls();
--- a/displayModes.h	Thu Mar 14 05:02:15 2013 +0000
+++ b/displayModes.h	Fri Mar 15 04:28:34 2013 +0000
@@ -22,6 +22,7 @@
 extern unsigned char lastDMode[2];
 extern unsigned char sMode;
 extern TOUCH_TFTx2 tt;
+extern unsigned char dtMode;
 
 extern "C" {
     void printLast (bool force);
@@ -30,6 +31,7 @@
     void printDTE (bool force);
     void braking (bool force, bool prdata);
     void cpData(bool force);
+    void showDateTime(bool force);
     void updateDisplay(char display);
     void showButton(unsigned char column, unsigned char row, char * text1, char * text2, unsigned char columns, unsigned char rows);
 }
\ No newline at end of file
--- a/main.cpp	Thu Mar 14 05:02:15 2013 +0000
+++ b/main.cpp	Fri Mar 15 04:28:34 2013 +0000
@@ -63,9 +63,10 @@
 volatile bool userIdle;
 bool touched=0; //flag to read touchscreen
 char counter = 0;
-unsigned char dMode[2] = {1,8}; //display mode
+unsigned char dMode[2] = {dteScreen,brakeScreen}; //display mode
 unsigned char sMode = 0; // setup mode
 unsigned char lastDMode[2] = {0,0}; //last screen mode
+unsigned char dtMode = 6;
 char displayLog[20][40];
 unsigned char displayLoc = 0;
 unsigned char indexOffset = 1;
@@ -107,7 +108,7 @@
     secsNoTouch = 0;
 
     // is it a date before 2012 ?
-    if ((t.tm_year + 1900) < 2012 ) {
+    /*if ((t.tm_year + 1900) < 2012 ) {
         // before 2012, so the RTC probably lost power
         // So, set a near-recent date in 2012
         // enter people-values here
@@ -129,7 +130,7 @@
         //    printf("Set RTC to:\n" );
         //    strftime(sTemp, 32, "%a %m/%d/%Y %X", localtime(&seconds));
         //    printf("%s\n", sTemp); // DAY MM/DD/YYYY HH:MM:SS
-    }
+    }*/
     t = *localtime(&seconds) ;
     strftime(sTemp, 32, "%a %m/%d/%Y %X\n", &t);
     logMsg(sTemp);
@@ -218,15 +219,15 @@
             } // if > 1/16 full, canbus has stopped, or PB1 pressed
         } // if logOpen
         if (canIdle&&userIdle) { // canbus idle --> sleep to save power
-            if (logOpen){
+             if (logOpen){
                 fclose(file);
             } // if (logOpen)*/
             seconds = time(NULL);
             t = *localtime(&seconds) ;
             strftime(sTemp, 40, "Sleeping: %a %m/%d/%Y %X\n", &t);
             logMsg(sTemp);
-            //updateDisplay(0); //Added for turbo3 who has a display override and wants to see the sleep message before going to sleep
-            //updateDisplay(1);
+            updateDisplay(0); //Added for turbo3 who has a display override and wants to see the sleep message before going to sleep
+            updateDisplay(1);
             //LPC_RTC->CIIR=0x00; // block RTC interrupts
             led1=0;
             led2=0;
@@ -241,6 +242,7 @@
                 Sleep();
                 //DeepPowerDown();
             }
+            secsNoTouch=0;
             canIdle=secsNoMsg>canTimeout;
             userIdle=secsNoTouch>userTimeout;
             dled=0.8; // turn on display LED
@@ -289,7 +291,7 @@
                             case 30:
                                 if (dMode[i]==monitorScreen||dMode[i]==changedScreen) {
                                 indexOffset=indexOffset>4?indexOffset-4:1;
-                                } else if (dMode[i]==configScreen) {
+                                } else if (dMode[i]==config1Screen) {
                                     wait_ms(500);
                                     tt.calibrate();
                                 }
@@ -301,7 +303,7 @@
                                     lastDMode[i]=99;//force refresh
                                 } else if (dMode[i]==cpScreen) {
                                     pollCP=true;
-                                } else if (dMode[i]==configScreen) {
+                                } else if (dMode[i]==config1Screen) {
                                     mbed_reset();
                                 }
                                 break;
@@ -309,23 +311,34 @@
                             case 50:
                                 if (dMode[i]==monitorScreen||dMode[i]==changedScreen) {
                                     indexOffset=indexOffset<77?indexOffset+4:80;
-                                } else if (dMode[i]==configScreen) {
+                                } else if (dMode[i]==config1Screen) {
                                     sprintf(sTemp,"Saving config file.\n");
                                     logMsg(sTemp);
-                                    //zxcsaveConfig();
+                                    saveConfig();
                                 }
                                 break;
                             case 01:
                             case 31:
-                                if (dMode[i]==configScreen) {
+                                if (dMode[i]==config1Screen) {
                                     logEn = !logEn;
+                                } else if (dMode[i]==config2Screen){
+                                    dtMode=(dtMode<6)?dtMode+1:0;
+                                    lastDMode[i]=99;
                                 }
                                 break;
                             case 11:
                             case 41:
+                                if (dMode[i]==config2Screen){
+                                    upDate(dtMode,true);
+                                    lastDMode[i]=99;
+                                }
                                 break;
                             case 21:
                             case 51:
+                                if (dMode[i]==config2Screen){
+                                    upDate(dtMode,false);
+                                    lastDMode[i]=99;
+                                }
                                 break;
                             case 02:
                             case 32:
@@ -334,14 +347,15 @@
                             case 12:
                             case 42:
                                 secsNoTouch = userTimeout; // immediately exit config mode
-                                if (dMode[i]==configScreen) mbed_reset();
+                                if (dMode[i]==config1Screen) mbed_reset();
                                 break;
                             case 22:
                             case 52:
                                 dMode[i]=dMode[i]<maxScreens?dMode[i]+1:0;
                                 break;
                             default:
-                            }
+                                break;
+                        }
                         break;
                     case 2: // numpad
                         break;
@@ -368,6 +382,11 @@
             showCP=true;
         }
         display=display<1?display+1:0; // toggle display
+        //spkr.beep(1000,0.2);
+        //wait(0.25);
         updateDisplay(display);
+        //updateDisplay(1);
+        //spkr.beep(2000,0.2);
+        //wait(0.25);
     } //while (true)
 }
\ No newline at end of file
--- a/utility.cpp	Thu Mar 14 05:02:15 2013 +0000
+++ b/utility.cpp	Fri Mar 15 04:28:34 2013 +0000
@@ -231,3 +231,59 @@
         fclose(cfile);
     }
 }
+
+void upDate(unsigned char field, bool upDownBar){
+    struct tm t; // pointer to a static tm structure
+    time_t seconds ;
+    seconds = time(NULL);
+    t = *localtime(&seconds) ;
+    switch(field){
+        case 0: // year
+            if (upDownBar) {
+                t.tm_year = t.tm_year+1;
+            } else {
+                t.tm_year = t.tm_year-1;
+            }
+            break;
+        case 1: // month
+            if (upDownBar) {
+                t.tm_mon = (t.tm_mon<12)?t.tm_mon+1:1;
+            } else {
+                t.tm_mon = (t.tm_mon>2)?t.tm_mon-1:12;
+            }
+            break;
+        case 2: // day
+            if (upDownBar) {
+                t.tm_mday = (t.tm_mday<31)?t.tm_mday+1:1;
+            } else {
+                t.tm_mday = (t.tm_mday>2)?t.tm_mday-1:31;
+            }
+            break;
+        case 3: // hour
+            if (upDownBar) {
+                t.tm_hour = (t.tm_hour<23)?t.tm_hour+1:0;
+            } else {
+                t.tm_hour = (t.tm_hour>1)?t.tm_hour-1:23;
+            }
+            break;
+        case 4: // minute
+            if (upDownBar) {
+                t.tm_min = (t.tm_min<59)?t.tm_min+1:0;
+            } else {
+                t.tm_min = (t.tm_min>1)?t.tm_min-1:59;
+            }
+            break;
+        case 5: // second
+            if (upDownBar) {
+                t.tm_sec = (t.tm_sec<59)?t.tm_sec+1:0;
+            } else {
+                t.tm_sec = (t.tm_sec>1)?t.tm_sec-1:59;
+            }
+            break;
+        default:
+            break;
+    }
+    set_time(mktime(&t));
+}
+
+
--- a/utility.h	Thu Mar 14 05:02:15 2013 +0000
+++ b/utility.h	Fri Mar 15 04:28:34 2013 +0000
@@ -44,7 +44,9 @@
     unsigned char buttonX(unsigned short X, unsigned char columns);
     unsigned char buttonY(unsigned short Y,unsigned char rows);
     void saveConfig();
-    void readConfig();}
+    void readConfig();
+    void upDate(unsigned char field, bool updownbar);
+}
 
 //LEAF OBD
 //1: