Dual CANbus monitor and instrumentation cluster supporting ILI9341 display controller
Dependencies: SPI_TFTx2_ILI9341 TOUCH_TFTx2_ILI9341 TFT_fonts mbed
Fork of CANary by
Diff: displayModes.cpp
- Revision:
- 36:dbd39c315258
- Parent:
- 35:5acbd8a64a89
- Child:
- 37:fea2c1d52c5f
diff -r 5acbd8a64a89 -r dbd39c315258 displayModes.cpp --- a/displayModes.cpp Thu Mar 21 12:05:22 2013 +0000 +++ b/displayModes.cpp Sat Mar 23 04:43:45 2013 +0000 @@ -196,6 +196,286 @@ lr=r; } +void cpData(bool force){ + short unsigned max, min, jv, i, bd; + unsigned avg; + if(force){ + tt.foreground(White); + tt.background(Navy); + tt.set_font((unsigned char*) Arial12x12_prop); // select the font + max=0; + min=9999; + avg=0; + for(i=0; i<96; i++){ + bd=(battData[i*2+3]<<8)+battData[i*2+4]; + avg+=bd; + if(bd>max) max=bd; + if(bd<min) min=bd; + } + avg /= 96; + if(min<3713) { + jv=avg-(max-avg)*1.5; + } else { // Only compute judgement value if min cellpair meets <= 3712mV requirement + jv=0; + } + tt.cls(); + tt.locate(0,6); + printf(" MAX MIN AVG CVLI T1 T2 T3 T4\n %04d %04d %04d %04d %02dC %02dC %02dC %02dC\n\n",max,min,avg,jv,battData[224+5],battData[224+8],battData[224+11],battData[224+14]); + tt.locate(0,36); + for(i=0; i<16; i++){ + printf("%02d-%02d : %04d %04d %04d %04d %04d %04d\n",i*6+1,i*6+6,(battData[i*12+3]<<8)+battData[i*12+4],(battData[i*12+5]<<8)+battData[i*12+6],(battData[i*12+7]<<8)+battData[i*12+8],(battData[i*12+9]<<8)+battData[i*12+10],(battData[i*12+11]<<8)+battData[i*12+12],(battData[i*12+13]<<8)+battData[i*12+14]); + } + tt.rect(8+0*41,16,40+0*41,28,Green); + tt.rect(8+1*41,16,40+1*41,28,Yellow); + //tt.rect(8+2*41,16,40+2*41,28,White); + tt.rect(8+3*41,16,40+3*41,28,Red); + for(i=0; i<96; i++){ + bd=(battData[i*2+3]<<8)+battData[i*2+4]; + if(bd>0){ + if(bd==max) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,Green); + //if(bd==avg) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,White); + if(bd==min) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,Yellow); + if(bd<jv) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,Red); + } + } + 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){ + if (force) { + tt.background(Black); + tt.cls(); + } + 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); + if (logEn) { + sprintf(sTemp1," Disable"); + } else { + sprintf(sTemp1," Enable"); + } + sprintf(sTemp2," Logging"); + showButton(0,1,sTemp1,sTemp2,3,3); + if (repeatPoll) { + sprintf(sTemp1," Disable"); + } else { + sprintf(sTemp1," Enable"); + } + sprintf(sTemp2," Auto CP"); + showButton(1,1,sTemp1,sTemp2,3,3); + sprintf(sTemp1," Start"); + sprintf(sTemp2,"Playback"); + showButton(2,1,sTemp1,sTemp2,3,3); +} + +void config2(bool force){ + if (force) { + tt.background(Black); + tt.cls(); + } + tt.foreground(Yellow); + tt.background(DarkCyan); + tt.set_font((unsigned char*) Arial12x12); + if(playbackOpen){ + sprintf(sTemp1,"Slower"); + sprintf(sTemp2," <--"); + showButton(0,0,sTemp1,sTemp2,3,3); + if(playbackEn){ + sprintf(sTemp1," Pause"); + }else{ + 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); + } + if(playbackOpen){ + sprintf(sTemp1," Stop"); + }else{ + sprintf(sTemp1," Start"); + } + sprintf(sTemp2,"Playback"); + showButton(1,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(sTemp2,""); + switch(dtMode){ + case 0: + sprintf(sTemp1,"Year"); + break; + case 1: + sprintf(sTemp1,"Month"); + break; + case 2: + sprintf(sTemp1,"Day"); + break; + case 3: + sprintf(sTemp1,"Hour"); + break; + case 4: + sprintf(sTemp1,"Minute"); + break; + case 5: + sprintf(sTemp1,"Second"); + break; + case 6: + sprintf(sTemp1,"Select"); + break; + default: + break; + } + 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); + } + } +} + +void updateDisplay(char display){ + bool changed; + changed = dMode[display]!=lastDMode[display]; + tt.set_display(display); + switch (dMode[display]) { + case logScreen: + printLog(changed); + break; + case dteScreen: + printDTE(changed); + break; + case brakeScreen: + braking(changed); + break; + case powerScreen: + //braking(changed, true); + //break; + case monitorScreen: + printLast(changed); + break; + case changedScreen: + printChanged(changed); + break; + case cpScreen: + cpData(changed||showCP); + break; + case config1Screen: + config1(changed); + break; + case config2Screen: + config2(changed); + break; + case dateScreen: + showDateTime(changed); + break; + default: + tt.background(Black); + tt.cls(); + break; + } + lastDMode[display]=dMode[display]; + + switch (sMode) { + 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," Select %d",dMode[display]); + showButton(1,2,sTemp1,sTemp2,3,3); + sprintf(sTemp1," Next->"); + showButton(2,2,sTemp1,sTemp2,3,3); + 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); + case 3: + break; + default: + break; + } +} + +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); + printf("%s\n",text1); + tt.locate(x1+btnGap,y1+btnGap+30); + printf("%s\n",text2); +} + /*void braking (bool force, bool prdata=false){ unsigned long targetBraking, regenBraking, speed; static unsigned long maxTarget = 20000, maxRegen = 20000, tarDivReg = 1000; @@ -286,247 +566,4 @@ } lt=t; lr=r; -}*/ - -void cpData(bool force){ - short unsigned max, min, jv, i, bd; - unsigned avg; - if(force){ - tt.foreground(White); - tt.background(Navy); - tt.set_font((unsigned char*) Arial12x12_prop); // select the font - max=0; - min=9999; - avg=0; - for(i=0; i<96; i++){ - bd=(battData[i*2+3]<<8)+battData[i*2+4]; - avg+=bd; - if(bd>max) max=bd; - if(bd<min) min=bd; - } - avg /= 96; - if(min<3713) { - jv=avg-(max-avg)*1.5; - } else { // Only compute judgement value if min cellpair meets <= 3712mV requirement - jv=0; - } - tt.cls(); - tt.locate(0,6); - printf(" MAX MIN AVG CVLI T1 T2 T3 T4\n %04d %04d %04d %04d %02dC %02dC %02dC %02dC\n\n",max,min,avg,jv,battData[224+5],battData[224+8],battData[224+11],battData[224+14]); - tt.locate(0,36); - for(i=0; i<16; i++){ - printf("%02d-%02d : %04d %04d %04d %04d %04d %04d\n",i*6+1,i*6+6,(battData[i*12+3]<<8)+battData[i*12+4],(battData[i*12+5]<<8)+battData[i*12+6],(battData[i*12+7]<<8)+battData[i*12+8],(battData[i*12+9]<<8)+battData[i*12+10],(battData[i*12+11]<<8)+battData[i*12+12],(battData[i*12+13]<<8)+battData[i*12+14]); - } - tt.rect(8+0*41,16,40+0*41,28,Green); - tt.rect(8+1*41,16,40+1*41,28,Yellow); - //tt.rect(8+2*41,16,40+2*41,28,White); - tt.rect(8+3*41,16,40+3*41,28,Red); - for(i=0; i<96; i++){ - bd=(battData[i*2+3]<<8)+battData[i*2+4]; - if(bd>0){ - if(bd==max) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,Green); - //if(bd==avg) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,White); - if(bd==min) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,Yellow); - if(bd<jv) tt.rect(58+(i%6)*41,34+(int)(i/6)*12,90+(i%6)*41,46+(int)(i/6)*12,Red); - } - } - 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){ - if (force) { - tt.background(Black); - tt.cls(); - } - 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); - if (logEn) { - sprintf(sTemp1," Disable"); - } else { - sprintf(sTemp1," Enable"); - } - sprintf(sTemp2," Logging"); - showButton(0,1,sTemp1,sTemp2,3,3); - if (repeatPoll) { - sprintf(sTemp1," Disable"); - } else { - sprintf(sTemp1," Enable"); - } - sprintf(sTemp2," Auto CP"); - showButton(1,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(sTemp2,""); - switch(dtMode){ - case 0: - sprintf(sTemp1,"Year"); - break; - case 1: - sprintf(sTemp1,"Month"); - break; - case 2: - sprintf(sTemp1,"Day"); - break; - case 3: - sprintf(sTemp1,"Hour"); - break; - case 4: - sprintf(sTemp1,"Minute"); - break; - case 5: - sprintf(sTemp1,"Second"); - break; - case 6: - sprintf(sTemp1,"Select"); - break; - default: - break; - } - 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); - } - } -} - -void updateDisplay(char display){ - bool changed; - changed = dMode[display]!=lastDMode[display]; - tt.set_display(display); - switch (dMode[display]) { - case logScreen: - printLog(changed); - break; - case dteScreen: - printDTE(changed); - break; - case brakeScreen: - braking(changed); - break; - case powerScreen: - //braking(changed, true); - //break; - case monitorScreen: - printLast(changed); - break; - case changedScreen: - printChanged(changed); - break; - case cpScreen: - cpData(changed||showCP); - break; - case config1Screen: - config1(changed); - break; - case config2Screen: - showDateTime(changed); - break; - default: - tt.background(Black); - tt.cls(); - break; - } - lastDMode[display]=dMode[display]; - - switch (sMode) { - 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," Select %d",dMode[display]); - showButton(1,2,sTemp1,sTemp2,3,3); - sprintf(sTemp1," Next->"); - showButton(2,2,sTemp1,sTemp2,3,3); - 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); - case 3: - break; - default: - break; - } -} - -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); - printf("%s\n",text1); - tt.locate(x1+btnGap,y1+btnGap+30); - printf("%s\n",text2); -} - +}*/ \ No newline at end of file