Attempts to merge SPI_TFT2 & SPI_TFT_ILI9341
Dependencies: SPI_TFTx2 TFT_fonts TOUCH_TFTx2 mbed
Fork of CANary by
Diff: utility.h
- Revision:
- 13:62e0f7f39ff5
- Parent:
- 12:8e42d7ba8468
- Child:
- 22:a43df3905863
diff -r 8e42d7ba8468 -r 62e0f7f39ff5 utility.h --- a/utility.h Sun Mar 03 15:50:54 2013 +0000 +++ b/utility.h Sun Mar 03 17:06:12 2013 +0000 @@ -1,251 +1,44 @@ -// utility.cpp +// utility.h + #include "mbed.h" #include "CAN.h" -#include "beep.h" -#include "MSCFileSystem.h" -#include "PowerControl.h" -#include "EthernetPowerControl.h" - -#define upLine "\033[1A" -#define maxBufLen 768 -#define canTimeout 500 -#define userTimeout 10 -#define btn31x1 12 -#define btn31x2 101 -#define btn32x1 115 -#define btn32x2 204 -#define btn33x1 218 -#define btn33x2 307 -#define btn11y1 180 -#define btn11y2 229 -#define maxScreens 7 -#define offScreen 0 -#define logScreen 1 -#define dteScreen 2 -#define brakeScreen 3 -#define powerScreen 4 -#define monitorScreen 5 -#define changedScreen 6 -#define cpScreen 7 -LocalFileSystem local("local"); - -// to write to USB Flash Drives, or equivalent (SD card in Reader/Writer) -MSCFileSystem fs("fs"); // to write to a USB Flash Drive - -time_t seconds ; -Beep spkr(p21); +#include "common.h" -Ticker ticker; -Timer timer; -DigitalOut led1(LED1); -DigitalOut led2(LED2); -DigitalOut led3(LED3); -DigitalOut led4(LED4); -PwmOut dled(p24); - -InterruptIn touchpad(p17); -CAN can1(p9, p10); // CAN1 (EV) uses pins 9 and 10 (rx, tx) and pin 8 (rs) -DigitalOut can1SleepMode(p8); // Use pin 8 to control the sleep mode of can2 -CAN can2(p30, p29); // CAN2 (CAR) uses pins 30 and 29 (rx, tx) and pin 28 (rs) -DigitalOut can2SleepMode(p28); // Use pin 28 to control the sleep mode of can1 - -bool logEn = true,logOpen = false; -FILE *rfile; -FILE *file; -char fileName[35] = "" ; -char writeBuffer[maxBufLen][13]; // buffer for USB write -char indexLastMsg[0x800]={0}; // index table for last message -CANMessage lastMsg[100]; // table to store last message of eachtype -unsigned char battData[256]={0}; -unsigned char msgChanged[100]; // inidcates which bytes changed -char c; -volatile int writePointer = 0; -volatile int secsNoMsg = 0, secsNoTouch = 0; -volatile bool canIdle = false, userIdle = false; -bool touched=0; //flag to read touchscreen -char counter = 0; -unsigned char dMode[2] = {7,2}; //display mode -unsigned char sMode = 0; // setup mode -unsigned char lastDMode[2] = {0,0}; //last screen mode -char displayLog[20][40]; -unsigned char displayLoc = 0; -unsigned char indexOffset = 1; -bool showCP = false; -bool pollCP = false; +extern Timer timer; +extern volatile int secsNoMsg; +extern volatile int secsNoTouch; +extern volatile bool canIdle; +extern volatile bool userIdle; +extern char displayLog[20][40]; +extern unsigned char displayLoc; +extern bool touched; +extern bool logOpen; +extern char writeBuffer[maxBufLen][13]; +extern volatile int writePointer; +extern DigitalOut led1,led2,led3,led4; +extern char indexLastMsg[0x800]; +extern unsigned char dMode[2]; +extern unsigned char msgChanged[100]; +extern unsigned char battData[256]; +extern CANMessage lastMsg[100]; +extern CAN can1,can2; +extern DigitalOut can1SleepMode,can2SleepMode; +extern bool pollCP; extern "C" { void mbed_reset(); - void RTC_IRQHandler() { - timer.reset(); // zero ms at the-seconds-tic - canIdle=(++secsNoMsg>canTimeout); - userIdle=(++secsNoTouch>userTimeout); - LPC_RTC->ILR |= (1<<0); // clear interrupt to prepare for next - } - - extern "C" void RTC_Init (void) { - LPC_RTC->ILR=0x00; // set up the RTC interrupts - LPC_RTC->CIIR=0x01; // interrupts each second - LPC_RTC->CCR = 0x01; // Clock enable - //NVIC_SetPriority( RTC_IRQn, 10 ); - NVIC_EnableIRQ( RTC_IRQn ); - } - - void logMsg (char *msg) { - strcpy(displayLog[displayLoc],msg); - displayLoc=displayLoc>17?0:displayLoc+1; - } - - void touch_ISR(){ - LPC_GPIOINT->IO2IntClr = (LPC_GPIOINT->IO2IntStatR | LPC_GPIOINT->IO2IntStatF); - secsNoTouch = 0; - touched=true; - } - - unsigned short getTimeStamp() { - unsigned short msec = timer.read_ms() ; // read ms from the timer - unsigned long secs = time(NULL); // seconds past 12:00:00 AM 1 Jan 1900 - unsigned short isecs = secs%60 ; // modulo 60 for 0-59 seconds from RTC - return ((isecs<<10)+msec) ; // return the two byte time stamp - } - - void logCan (char mType, CANMessage canRXmsg) { - char sTemp[40]; - unsigned short ts = getTimeStamp(); - unsigned long secs = time(NULL); // seconds past 12:00:00 AM 1 Jan 1900 - static unsigned char ii = 0, lasti = 0; // indexindex - unsigned char changed,i; - static unsigned char bdi; - if(logOpen){ - if(canRXmsg.id>0) { - writeBuffer[writePointer][0]=mType; - writeBuffer[writePointer][1]=((secs%60)<<2)+((ts&0x300)>>8); - writeBuffer[writePointer][2]=ts&0xff; - writeBuffer[writePointer][3]=canRXmsg.id&0xff; - writeBuffer[writePointer][4]=(canRXmsg.id>>8)+(canRXmsg.len<<4); - for(i=5;i<13;i++){ - writeBuffer[writePointer][i]=canRXmsg.data[i-5]; - } - if (++writePointer >= maxBufLen) { - writePointer = 0; - led3 = !led3; - } - } - }//if logOpen - if(indexLastMsg[canRXmsg.id]==0) { //Check if no entry - ii=ii<99?ii+1:0; - indexLastMsg[canRXmsg.id]=ii; //Create entry if first message - } - if(dMode[0]==changedScreen||dMode[1]==changedScreen){ - changed=msgChanged[indexLastMsg[canRXmsg.id]]; - for(i=0;i<8;i++){ - if(lastMsg[indexLastMsg[canRXmsg.id]].data[i]!=canRXmsg.data[i]){ - changed |= 1<<i; - } - } - msgChanged[indexLastMsg[canRXmsg.id]]=changed; - } - lastMsg[indexLastMsg[canRXmsg.id]]=canRXmsg; //Store in table - if(mType==1&&canRXmsg.id==0x7bb){ // is battery data? Need to store all responses - if(canRXmsg.data[0]<0x20){ - if(canRXmsg.data[3]==2){//cellpair data - bdi=0; - sprintf(sTemp,"Getting cell pair data\n"); - logMsg(sTemp); - }else if(canRXmsg.data[3]==4){//temperature data - bdi=0x20; - sprintf(sTemp,"Getting temperature data\n"); - logMsg(sTemp); - }else bdi=0; - lasti=0; - } - i=canRXmsg.data[0]&0x0f; //lower nibble of D0 is index - if(lasti>i){ //detect rolloever and offset index appropriately - bdi=0x10; - } - lasti=i; //remember the msb to detect rollover next time around - i+=bdi; - i*=7; - if(i<0xfa){ - battData[i+0]=canRXmsg.data[1]; - battData[i+1]=canRXmsg.data[2]; - battData[i+2]=canRXmsg.data[3]; - battData[i+3]=canRXmsg.data[4]; - battData[i+4]=canRXmsg.data[5]; - battData[i+5]=canRXmsg.data[6]; - battData[i+6]=canRXmsg.data[7]; - } - }//if 0x7bb - } - - void logTS () { - CANMessage tsMsg; - unsigned long secs = time(NULL); // seconds past 12:00:00 AM 1 Jan 1900 - tsMsg.id=0xfff; - tsMsg.len=0xf; - tsMsg.data[0]=secs&0xff; - tsMsg.data[1]=(secs>>8)&0xff; - tsMsg.data[2]=(secs>>16)&0xff; - tsMsg.data[3]=secs>>24; - tsMsg.data[4]=0xff; - tsMsg.data[5]=0xff; - tsMsg.data[6]=0xff; - tsMsg.data[7]=0xff; - logCan(0,tsMsg); - } - - void sendCPreq() { - char i; - char data[8] = {0x02, 0x21, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff}; - can1.monitor(false); // set to active mode - can1SleepMode = 0; // enable TX - can1.write(CANMessage(0x79b, data, 8)); - data[0]=0x30; //change to request next line message - data[1]=0x01; - data[2]=0x00; - for(i=0;i<27;i++){ - wait_ms(16); //wait 16ms - can1.write(CANMessage(0x79b, data, 8)); - } - can1SleepMode = 1; // disable TX - can1.monitor(true); // set to snoop mode - } - - void sendTreq() { - char i; - char data[8] = {0x02, 0x21, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff}; - can1.monitor(false); // set to active mode - can1SleepMode = 0; // enable TX - can1.write(CANMessage(0x79b, data, 8)); - data[0]=0x30; //change to request next line message - data[1]=0x01; - data[2]=0x00; - for(i=0;i<2;i++){ - wait_ms(16); //wait 16ms - can1.write(CANMessage(0x79b, data, 8)); - } - can1SleepMode = 1; // disable TX - can1.monitor(true); // set to snoop mode - } - - void tickerISR() { //This is the ticker ISR for auto-polling - pollCP=true; //Set a flag to do in main loop instead of here - } //since ticker blocks other interrupts - - void recieve1() { - CANMessage msg1; - secsNoMsg=0; // reset deadman switch - can1.read(msg1); - logCan(1, msg1); - led1 = !led1; - } - - void recieve2() { - CANMessage msg2; - secsNoMsg=0; // reset deadman switch - can2.read(msg2); - logCan(2, msg2); - led2 = !led2; - } + void RTC_IRQHandler(); + void RTC_Init (void); + void logMsg (char *msg); + void touch_ISR(); + unsigned short getTimeStamp(); + void logCan (char mType, CANMessage canRXmsg); + void logTS (); + void sendCPreq(); + void sendTreq(); + void tickerISR(); + void recieve1(); + void recieve2(); } //LEAF OBD