Attempts to merge SPI_TFT2 & SPI_TFT_ILI9341

Dependencies:   SPI_TFTx2 TFT_fonts TOUCH_TFTx2 mbed

Fork of CANary by Tick Tock

Revision:
36:dbd39c315258
Parent:
35:5acbd8a64a89
Child:
37:fea2c1d52c5f
--- a/main.cpp	Thu Mar 21 12:05:22 2013 +0000
+++ b/main.cpp	Sat Mar 23 04:43:45 2013 +0000
@@ -32,7 +32,8 @@
 
 time_t seconds ;
 
-Ticker ticker;
+Ticker autoPoll;
+Ticker playback;
 Timer timer;
 
 DigitalOut led1(LED1);
@@ -84,13 +85,21 @@
 unsigned short pollInt = 300; // polling interval=5 minutes (until config file read)
 bool accOn = false; // Accessories on
 float scale12V = 16.2; // R1:R2 ratio
+signed long kWh = 0;
+unsigned long miles = 0;
+float mpkWh = 0;
 float accV = 0;
+bool playbackEn = false;
+bool playbackOpen = false;
+float playbackInt = 1; //read one message every 64 ms
+bool step = false;
+char data[8];
 
 int main() {
     int readPointer=0;
     char sTemp[40];
     unsigned long secs;
-    char i,j,display=0;
+    unsigned char i,j,display=0;
     point lastTouch;
 
     can1.monitor(true); // set to snoop mode
@@ -223,7 +232,7 @@
                 logOpen=false;
             }
         } // if logOpen
-        if (canIdle&&userIdle) { // canbus idle --> sleep to save power
+        if (canIdle&&userIdle&&!playbackEn) { // canbus idle --> sleep to save power
             if (logOpen){
                 fclose(file);
             } // if (logOpen)*/
@@ -296,6 +305,12 @@
                                 } else if (dMode[i]==config1Screen) {
                                     wait_ms(500);
                                     tt.calibrate();
+                                } else if (dMode[i]==config2Screen) { // slower
+                                        playbackInt *=2;
+                                    if(playbackEn){
+                                        playback.detach();
+                                        playback.attach(&playbackISR,playbackInt);
+                                    }
                                 }
                                 break;
                             case 10:
@@ -307,6 +322,13 @@
                                     pollCP=true;
                                 } else if (dMode[i]==config1Screen) {
                                     mbed_reset();
+                                } else if (dMode[i]==config2Screen) { // pause/unpause
+                                    playbackEn=!playbackEn;
+                                    if(playbackEn){
+                                        playback.attach(&playbackISR,playbackInt);
+                                    }else{
+                                        playback.detach();
+                                    }
                                 }
                                 break;
                             case 20:
@@ -318,6 +340,14 @@
                                     logMsg(sTemp);
                                     saveConfig();
                                     spkr.beep(2000,0.25);
+                                } else if (dMode[i]==config2Screen) { // faster
+                                    if(playbackInt>.002){
+                                        playbackInt/=2;
+                                        if(playbackEn){
+                                            playback.detach();
+                                            playback.attach(&playbackISR,playbackInt);
+                                        }
+                                    }
                                 }
                                 break;
                             case 01:
@@ -325,28 +355,58 @@
                                 if (dMode[i]==config1Screen) {
                                     logEn = !logEn;
                                     if (!logEn) repeatPoll=false;
-                                } else if (dMode[i]==config2Screen){
+                                } else if (dMode[i]==dateScreen){
                                     dtMode=(dtMode<6)?dtMode+1:0;
                                     lastDMode[i]=99;
                                 }
                                 break;
                             case 11:
                             case 41:
-                                if (dMode[i]==config1Screen) {
+                                if (dMode[i]==config1Screen){
                                     repeatPoll = !repeatPoll&&logEn;
                                     if (repeatPoll) {
-                                        ticker.attach(&tickerISR,pollInt);
+                                        autoPoll.attach(&autoPollISR,pollInt);
                                     } else {
-                                        ticker.detach();
+                                        autoPoll.detach();
                                     }
-                                } else if (dMode[i]==config2Screen){
+                                } else if (dMode[i]==config2Screen) {
+                                    // Start/stop playback
+                                    if(!playbackOpen){
+                                        if(!logOpen){
+                                            file = fopen("/usb/playback.alc", "rb");                                          
+                                            if(file==NULL){
+                                                sprintf(sTemp,"Unable to open /usb/playback.alc\n");
+                                                logMsg(sTemp);
+                                                spkr.beep(1000,0.25);
+                                            } else {
+                                                playbackOpen = true;
+                                                sprintf(sTemp,"Starting playback\n");
+                                                logMsg(sTemp);
+                                                spkr.beep(2000,0.25);
+                                                can1.attach(&doNothing);// Stop recieving CAN data
+                                                can2.attach(&doNothing);
+                                            }
+                                        } else {
+                                            sprintf(sTemp,"Must stop logging first\n");
+                                            logMsg(sTemp);
+                                        }
+                                    } else {
+                                        playback.detach();
+                                        fclose(file);
+                                        playbackOpen=false;
+                                        can1.attach(&recieve1);// Restore CAN data recieve
+                                        can2.attach(&recieve2);
+                                        lastDMode[i]=99;
+                                    }
+                                    playbackEn=false;
+                                } else if (dMode[i]==dateScreen){
                                     upDate(dtMode,true);
                                     lastDMode[i]=99;
                                 }
                                 break;
                             case 21:
                             case 51:
-                                if (dMode[i]==config2Screen){
+                                if (dMode[i]==dateScreen){
                                     upDate(dtMode,false);
                                     lastDMode[i]=99;
                                 }
@@ -398,14 +458,42 @@
         if(tick){ // Executes once a second
             accV=mon12V*scale12V;
             accOn=(accV>5)?true:false;
-            if(!accOn&&!logEn&&userIdle){
+            if(!accOn&&!logEn&&userIdle&&!playbackEn){
                 dled = 0; // turn off display if car off and logging disabled and no user activity
             }else if(!headlights){
                 dled = ledHi;
             }else{
                 dled = ledLo;
             }
+            if(kWh>0){
+                mpkWh=miles/kWh;
+            }else{
+                mpkWh=99;
+            }
+            miles=0;
+            kWh=0;
             tick=false;
         }
+
+        if(step){ // playback
+            if(playbackOpen&&playbackEn){
+                //sprintf(sTemp,"step\n");
+                //logMsg(sTemp);
+                for(i=0;i<200;i++){
+                    if(!feof(file)){
+                        //for (j = 0; j<5; j++){
+                            fscanf(file,"%5c",&writeBuffer[0][0]);
+                        //}
+                        fscanf(file,"%8c",&data[0]);
+                        logCan(writeBuffer[0][0],CANMessage(0x7ff&((writeBuffer[0][4]<<8)+writeBuffer[0][3]), data, 8));
+                    }else{
+                        fclose(file); // restart
+                        file = fopen("/usb/playback.alc", "rb");                                          
+                        spkr.beep(2000,0.25);
+                    }
+                }
+            }
+            step=false;
+        }
     } //while (true)
 }
\ No newline at end of file