Dual CANbus monitor and instrumentation cluster

Dependencies:   SPI_TFTx2 TFT_fonts TOUCH_TFTx2 beep mbed

Fork of CANary by Tick Tock

Files at this revision

API Documentation at this revision

Comitter:
garygid
Date:
Tue Apr 09 06:16:26 2013 +0000
Parent:
51:6187c5264a73
Child:
55:591406a71fa8
Commit message:
GG changed v51 to use 4x4 buttons and touch areas.

Changed in this revision

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
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/common.h	Sun Apr 07 17:11:28 2013 +0000
+++ b/common.h	Tue Apr 09 06:16:26 2013 +0000
@@ -12,7 +12,9 @@
 #define playbackScreen 11
 #define dateScreen 12
 #define config1Screen 13
-#define maxScreens 13
+#define indexScreen 14
+#define maxScreens 14
+
 #define btnGap 10
 #define ttSkin 0
 #define ggSkin 1
@@ -20,3 +22,8 @@
 #define maxBufLen 512
 #define canTimeout 5
 #define userTimeout 15
+
+// gg - 4x4 touch
+// #define tNavRow = 2 ; // for 3x3
+extern unsigned char tNavRow ; // gg - 4x4
+
--- a/displayModes.cpp	Sun Apr 07 17:11:28 2013 +0000
+++ b/displayModes.cpp	Tue Apr 09 06:16:26 2013 +0000
@@ -19,11 +19,9 @@
         tt.foreground(Yellow);
         tt.background(DarkCyan);
         tt.set_font((unsigned char*) Arial12x12);
-        sprintf(sTemp1,"<up>");
-        sprintf(sTemp2,"");
-        showButton(0,0,sTemp1,sTemp2,3,3);
-        sprintf(sTemp1,"<down>");
-        showButton(2,0,sTemp1,sTemp2,3,3);
+        
+        showButton(0,0," <up>","",4,4);
+        showButton(2,0,"<down>","",4,4);
     }
 }
 
@@ -49,14 +47,10 @@
         tt.foreground(Yellow);
         tt.background(DarkCyan);
         tt.set_font((unsigned char*) Arial12x12);
-        sprintf(sTemp1,"<up>");
-        sprintf(sTemp2,"");
-        showButton(0,0,sTemp1,sTemp2,3,3);
-        sprintf(sTemp1,"   <down>");
-        showButton(2,0,sTemp1,sTemp2,3,3);
-        sprintf(sTemp1,"  Reset");
-        sprintf(sTemp2," Baseline");
-        showButton(1,0,sTemp1,sTemp2,3,3);
+        
+        showButton(0,0,"  <up>","",4,4);
+        showButton(2,0," <down>","",4,4);
+        showButton(1,0," Reset","Baseline",4,4);
     }
 }
 
@@ -359,9 +353,8 @@
         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);               
+        
+        showButton(1,0,"Request","CP Data",4,4);               
     }
 }
 
@@ -485,9 +478,8 @@
         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);               
+        
+        showButton(1,0,"Request","CP Data",4,4);               
     }
 }
 
@@ -592,10 +584,9 @@
         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);               
-    }
+        
+        showButton(1,0,"Request","CP Data",4,4);               
+        }
 }
 
 //---------------
@@ -607,41 +598,35 @@
     tt.foreground(Yellow);
     tt.background(DarkCyan);
     tt.set_font((unsigned char*) Arial12x12);
-    sprintf(sTemp1," Calibrate");
-    sprintf(sTemp2,"  Touch");
-    showButton(0,0,sTemp1,sTemp2,3,3);
-    sprintf(sTemp1,"  Reset");
-    sprintf(sTemp2,"");
-    showButton(1,0,sTemp1,sTemp2,3,3);
-    sprintf(sTemp1,"  Save");
-    sprintf(sTemp2,"  Config");
-    showButton(2,0,sTemp1,sTemp2,3,3);
+ 
+    showButton(0,0,"Calibrate"," Touch",4,4); // gg - 4x4
+    
+    showButton(1,0," Reset","",4,4);
+    
+    showButton(2,0," Save"," Config",4,4);
     
     //------- second row -----
     if (logEn) {
-        sprintf(sTemp1," Disable");
+        sprintf(sTemp1,"Disable");
     } else {
-        sprintf(sTemp1," Enable");
+        sprintf(sTemp1,"Enable");
     }
-    sprintf(sTemp2," Logging");
-    showButton(0,1,sTemp1,sTemp2,3,3);
+    showButton(0,1,sTemp1,"Logging",4,4);
     
     if (repeatPoll) {
-        sprintf(sTemp1," Disable");
+        sprintf(sTemp1,"Disable");
     } else {
-        sprintf(sTemp1," Enable");
+        sprintf(sTemp1,"Enable");
     }
-    sprintf(sTemp2," Auto CP");
-    showButton(1,1,sTemp1,sTemp2,3,3);
+    showButton(1,1,sTemp1,"Auto CP",4,4);
     
     // add Enable/Disable Batt Log gg - yesBattLog
     if (yesBattLog) {
-        sprintf(sTemp1," Disable");
+        sprintf(sTemp1,"Disable");
     } else {
-        sprintf(sTemp1," Enable");
+        sprintf(sTemp1,"Enable");
     }
-    sprintf(sTemp2," Batt Log");
-    showButton(2,1,sTemp1,sTemp2,3,3);
+    showButton(2,1,sTemp1,"Batt Log",4,4);
 }
 
 void pbScreen(bool force, bool showButtons){
@@ -653,27 +638,24 @@
     tt.background(DarkCyan);
     tt.set_font((unsigned char*) Arial12x12);
     if(playbackOpen){
-        sprintf(sTemp1,"Slower");
-        sprintf(sTemp2," <--");
-        showButton(0,0,sTemp1,sTemp2,3,3);
+        showButton(0,0,"Slower"," <--",4,4);
+        
         if(playbackEn){
-            sprintf(sTemp1," Pause");
+            sprintf(sTemp1,"Pause");
         }else{
-            sprintf(sTemp1,"  Run");
+            sprintf(sTemp1," Run");
         }
-        sprintf(sTemp2," %4.3f ",playbackInt);
-        showButton(1,0,sTemp1,sTemp2,3,3);
-        sprintf(sTemp1,"Faster");
-        sprintf(sTemp2,"     -->");
-        showButton(2,0,sTemp1,sTemp2,3,3);
+        sprintf(sTemp2,"%4.3f ",playbackInt);
+        showButton(1,0,sTemp1,sTemp2,4,4);
+        
+        showButton(2,0,"Faster","   -->",4,4);
     }
     if(playbackOpen){
         sprintf(sTemp1," Stop");
     }else{
-        sprintf(sTemp1," Start");
+        sprintf(sTemp1,"Start");
     }
-    sprintf(sTemp2,"Playback");
-    showButton(1,1,sTemp1,sTemp2,3,3);
+    showButton(1,1,sTemp1,"Playback",4,4);
 }
 
 void showDateTime(bool force, bool showButtons){
@@ -691,7 +673,6 @@
         strftime(sTemp1, 32, "%a %m/%d/%Y %X  \n", &t);
         printf("%s",sTemp1);
         if((sMode==1)&&showButtons){
-            sprintf(sTemp2,"");
             switch(dtMode){
                 case 0:
                     sprintf(sTemp1,"Year");
@@ -718,11 +699,10 @@
                     break;
             }
             tt.background(DarkCyan);
-            showButton(0,1,sTemp1,sTemp2,3,3);               
-            sprintf(sTemp1,"   UP");
-            showButton(1,1,sTemp1,sTemp2,3,3);               
-            sprintf(sTemp1,"  DOWN");
-            showButton(2,1,sTemp1,sTemp2,3,3);               
+            showButton(0,1,sTemp1,"",4,4);    
+                       
+            showButton(1,1,"  UP","",4,4);               
+            showButton(2,1," DOWN","",4,4);               
         }
     }
 }
@@ -914,91 +894,82 @@
             case 1: // Select screens
                 tt.foreground(Yellow);
                 tt.background(DarkCyan);
-                tt.set_font((unsigned char*) Arial12x12);
-                sprintf(sTemp1,"<-Prev");
-                sprintf(sTemp2,"");
-                showButton(0,2,sTemp1,sTemp2,3,3);
-                sprintf(sTemp1,"    Next->");
-                showButton(2,2,sTemp1,sTemp2,3,3);
-                sprintf(sTemp1,"  Select");
+                tt.set_font((unsigned char*) Arial12x12);   
+                           
+                showButton(0,tNavRow," <-Prev","",4,4); // gg - 4x4
+                showButton(3,tNavRow," Next->","",4,4); // gg - move next
+                               
+                showButton(2,tNavRow," Go To"," Main",4,4); // gg - index
+                
                 switch (dMode[display]) {
                     case offScreen:
-                        sprintf(sTemp2,"   Off");
+                        sprintf(sTemp2,"  Off");
                         break;
                     case logScreen:
-                        sprintf(sTemp2,"   Log");
+                        sprintf(sTemp2,"  Log");
                         break;
                     case mainScreen:
-                        sprintf(sTemp2,"   Main");
+                        sprintf(sTemp2,"  Main");
                         break;
                     case brakeScreen:
-                        sprintf(sTemp2," Braking");
+                        sprintf(sTemp2,"Braking");
                         break;
                     case dteScreen:
-                        sprintf(sTemp2,"   DTE");
+                        sprintf(sTemp2,"  DTE");
                         break;
                     case effScreen:
-                        sprintf(sTemp2,"   Eff");
+                        sprintf(sTemp2,"  Eff");
                         break;
                     case monitorScreen:
-                        sprintf(sTemp2,"  Monitor");
+                        sprintf(sTemp2," Monitor");
                         break;
                     case changedScreen:
-                        sprintf(sTemp2,"Delta Mon");
+                        sprintf(sTemp2,"DeltaMon");
                         break;
                     case cpScreen:
-                        sprintf(sTemp2," Cell Pair");
+                        sprintf(sTemp2,"Cell Pair");
                         break;
                     case config1Screen:
-                        sprintf(sTemp2,"  Config");
+                        sprintf(sTemp2," Config");
                         break;
                     case playbackScreen:
-                        sprintf(sTemp2," Playback");
+                        sprintf(sTemp2,"Playback");
                         break;
                     case dateScreen:
-                        sprintf(sTemp2," Set Time");
+                        sprintf(sTemp2,"Set Time");
                         break;
                     case cpHistScreen: // gg - hist
-                        sprintf(sTemp2," CP Hist");
+                        sprintf(sTemp2,"CP Hist");
                         break;
                     case cpBarScreen: // gg - cpbars
-                        sprintf(sTemp2," CP Bars");
+                        sprintf(sTemp2,"CP Bars");
                         break;
                 }
-                showButton(1,2,sTemp1,sTemp2,3,3);
+                showButton(1,tNavRow," Select",sTemp2,4,4);
+                
                 wait_ms(100); //  pause a moment to reduce flicker
                 break;
+                
             case 2: // numpad
-                sprintf(sTemp2,"");
                 tt.foreground(Yellow);
                 tt.background(DarkCyan);
                 tt.set_font((unsigned char*) Arial24x23);
-                sprintf(sTemp1," 1");
-                showButton(0,0,sTemp1,sTemp2,4,4);
-                sprintf(sTemp1," 2");
-                showButton(1,0,sTemp1,sTemp2,4,4);
-                sprintf(sTemp1," 3");
-                showButton(2,0,sTemp1,sTemp2,4,4);
-                sprintf(sTemp1," 4");
-                showButton(0,1,sTemp1,sTemp2,4,4);
-                sprintf(sTemp1," 5");
-                showButton(1,1,sTemp1,sTemp2,4,4);
-                sprintf(sTemp1," 6");
-                showButton(2,1,sTemp1,sTemp2,4,4);
-                sprintf(sTemp1," 7");
-                showButton(0,2,sTemp1,sTemp2,4,4);
-                sprintf(sTemp1," 8");
-                showButton(1,2,sTemp1,sTemp2,4,4);
-                sprintf(sTemp1," 9");
-                showButton(2,2,sTemp1,sTemp2,4,4);
-                sprintf(sTemp1," 0");
-                showButton(1,3,sTemp1,sTemp2,4,4);
-                sprintf(sTemp1,"<--");
-                showButton(0,3,sTemp1,sTemp2,4,4);
-                sprintf(sTemp1,"-->");
-                showButton(2,3,sTemp1,sTemp2,4,4);
-                sprintf(sTemp1,"return");
-                showButton(3,3,sTemp1,sTemp2,4,4);
+
+                sprintf(sTemp2,"");
+                showButton(0,0," 1",sTemp2,4,4);
+                showButton(1,0," 2",sTemp2,4,4);
+                showButton(2,0," 3",sTemp2,4,4);
+                showButton(0,1," 4",sTemp2,4,4);
+                showButton(1,1," 5",sTemp2,4,4);
+                showButton(2,1," 6",sTemp2,4,4);
+                showButton(0,2," 7",sTemp2,4,4);
+                showButton(1,2," 8",sTemp2,4,4);
+                showButton(2,2," 9",sTemp2,4,4);
+                showButton(1,3," 0",sTemp2,4,4);
+                
+                showButton(0,3,"<--",sTemp2,4,4);
+                showButton(2,3,"-->",sTemp2,4,4);
+                showButton(3,3,"return",sTemp2,4,4);
             case 3:
                 break;
             default:
@@ -1009,16 +980,22 @@
 
 void showButton(unsigned char column, unsigned char row, char * text1, char * text2, unsigned char columns, unsigned char rows){
     unsigned short x1,x2,y1,y2;
+    
     x1=column*(320/columns)+btnGap/2;
     x2=(column+1)*(320/columns)-btnGap/2;
     y1=row*(240/rows)+btnGap/2;
     y2=(row+1)*(240/rows)-btnGap/2;
     tt.fillrect(x1,y1,x2,y2,DarkCyan);
-    tt.locate(x1+btnGap,y1+btnGap);
+    
+    // adapt formatting of text to the smaller 4x4 box
+    tt.locate(x1+btnGap/2,y1+btnGap); // gg - 4x4
     printf("%s\n",text1);
-    tt.locate(x1+btnGap,y1+btnGap+30);
+    
+    tt.locate(x1+btnGap/2,y1+btnGap+20);
     printf("%s\n",text2);
 }
+
+//-------------
 // below is braking screen normalized to power rather than force
 // changed to force since power had too large a dynamic range
 /*void braking (bool force, bool showButtons, bool prdata=false){
--- a/main.cpp	Sun Apr 07 17:11:28 2013 +0000
+++ b/main.cpp	Tue Apr 09 06:16:26 2013 +0000
@@ -47,6 +47,8 @@
 
 bool logEn = false, logOpen = false; 
 bool yesBattLog = false ; // gg - Batt Log
+unsigned char tNavRow = 3 ; // gg - 4x4 touch
+
 FILE *cfile;
 FILE *file;
 char fileName[35] = "" ;
@@ -155,7 +157,12 @@
     t = *localtime(&seconds) ;
     strftime(sTemp, 32, "%a %m/%d/%Y %X\n", &t);
     logMsg(sTemp);
-    sprintf(sTemp,"CANary firmware rev51\n");
+    
+    // revisions
+    // sprintf(sTemp,"CANary firmware rev51-gg1\n"); // gg - shows 4x4 buttons, 
+            // but the touch areas are still 3x3 
+    //sprintf(sTemp,"CANary firmware rev51-gg2\n"); // gg - decodes 4x4 button touches, 
+    sprintf(sTemp,"CANary firmware rev51-gg3\n"); // gg - cleaned 4x4 button and touches, 
     logMsg(sTemp);
 
     // Look for new binary on thumbdrive
@@ -342,6 +349,12 @@
             //logMsg(sTemp);
             touched = false; // clear interrupt flag
         }
+        //---------------
+        // gg - 4x4 touch
+        unsigned char tScrn = 0 ; // screen 0
+        unsigned char tCol ;                        
+        unsigned char tRow ;
+                        
         if (!userIdle) {
             if (secsNoTouch<2) {// Recently touched
                 secsNoTouch +=2; // increment to prevent double touch
@@ -352,9 +365,20 @@
                     case 0: // no select
                         break;
                     case 1: // select screen
-                        switch (buttonX(lastTouch.x,3)*10+buttonY(lastTouch.y,3)) {
-                            case 00:
-                            case 30:
+                        // is this col(0:2)*10 + row(0:2) + screen(0:1)*30
+                        //switch (buttonX(lastTouch.x,3)*10+buttonY(lastTouch.y,3)) {
+                        
+                        //--------------
+                        // gg - 4x4 touch
+                        tCol = buttonX(lastTouch.x,4) ;
+                        if( tCol >= 4 ){ tCol -= 4; tScrn = 1 ; } // touch is on screen 1
+                        
+                        tRow = buttonY(lastTouch.y,4) ;
+                        if( tRow == tNavRow ) tRow = 7 ;
+                        
+                        switch ( (tCol*10) + tRow ) {
+                            //---------------------------------
+                            case 00: // 00 on screen 0 or 1
                                 if (dMode[whichTouched]==monitorScreen||dMode[whichTouched]==changedScreen) {
                                 indexOffset=indexOffset>4?indexOffset-4:1;
                                 } else if (dMode[whichTouched]==config1Screen) {
@@ -369,8 +393,8 @@
                                     }
                                 }
                                 break;
-                            case 10:
-                            case 40: 
+                            //-----------------------------------------------
+                            case 10: // 1,0 (col,row) on screen 0 or 1
                                 if (dMode[whichTouched]==changedScreen) {
                                     for(j=0;j<100;j++) msgChanged[j]=0; // clear changed data
                                     lastDMode[whichTouched]=99;//force refresh
@@ -391,8 +415,8 @@
                                     }
                                 }
                                 break;
-                            case 20:
-                            case 50:
+                            //--------------------------------------
+                            case 20: // col 2 and row 0 on either screen 0 or 1
                                 if (dMode[whichTouched]==monitorScreen||dMode[whichTouched]==changedScreen) {
                                     indexOffset=indexOffset<77?indexOffset+4:80;
                                 } else if (dMode[whichTouched]==config1Screen) {
@@ -410,8 +434,9 @@
                                     }
                                 }
                                 break;
-                            case 01:
-                            case 31: // row 2 left
+                            //----------------------------------
+                            //----------------------------------
+                            case 01: // col 0 row 1
                                 if (dMode[whichTouched]==config1Screen) {
                                     logEn = !logEn;
                                     if (!logEn) repeatPoll=false; // disable auto polling, too
@@ -420,8 +445,8 @@
                                     lastDMode[whichTouched]=99;
                                 }
                                 break;
+                            //------------------------------
                             case 11:
-                            case 41: // row 2 center
                                 if (dMode[whichTouched]==config1Screen){
                                     repeatPoll = !repeatPoll&&logEn;
                                     if (repeatPoll) {
@@ -467,8 +492,8 @@
                                     lastDMode[whichTouched]=99;
                                 }
                                 break;
-                            case 21:
-                            case 51: // row 2 right button
+                            //---------------------------------
+                            case 21: // col 2 row 1
                                 if (dMode[whichTouched]==config1Screen) { // gg - Batt Log Enable Button
                                     yesBattLog = !yesBattLog;
                                     
@@ -477,20 +502,32 @@
                                     lastDMode[whichTouched]=99;
                                 }
                                 break;
-                            case 02:
-                            case 32:
+                                
+                            //-----------------------------------
+                            //-----------------------------------
+                            // Prev Navigation
+                            case 07: // col 0 row tNavRow
                                 dMode[whichTouched]=dMode[whichTouched]>0?dMode[whichTouched]-1:maxScreens;
                                 break;
-                            case 12:
-                            case 42:
+                            //-----------------------------------
+                            // Select Screen Navigation
+                            case 17:
                                 //secsNoTouch = userTimeout; // immediately exit config mode
                                 sMode=0;
                                 lastDMode[whichTouched]=99; // Repaint
                                 break;
-                            case 22:
-                            case 52:
+                            //-----------------------------------
+                            // Index Navigation
+                            case 27: // col 2 row tNavRow
+                                dMode[whichTouched]= mainScreen; // indexScreen ; // gg - index
+                                break;
+                            //------------------------------------
+                            // Next Navigation
+                            case 37: // lower right on Nav Line gg - move next                            
                                 dMode[whichTouched]=dMode[whichTouched]<maxScreens?dMode[whichTouched]+1:0;
                                 break;
+                            //------------------------------------
+                            //------------------------------------
                             default:
                                 break;
                         }