.

Dependencies:   SDHCFileSystem mbed

Revision:
24:4c823092012a
Parent:
23:7e6a9684f647
Child:
25:bfbe84136774
--- a/main.cpp	Sat Apr 13 05:05:23 2013 +0000
+++ b/main.cpp	Wed Jul 17 19:09:27 2013 +0000
@@ -86,9 +86,20 @@
 #define maxBufLen 2048
 #define canTimeout 5
 #define maxFileNum 30
+#define pollInt 60
+#define BatDataBaseG1 0x00 // 6 frames - SOH, SOC, Ah
+#define BatDataBaseG2 0x06 // 29 frames - Cell Pair data
+#define BatDataBaseG3 0x23 // 5 frames
+#define BatDataBaseG4 0x28 // 3 frames - Temperature data
+#define BatDataBaseG5 0x2B // 11 frames
+#define BatDataBaseG6 0x36 // 4 frames
+#define BatDataBaseG7 0x3A
+#define BatDataBufMax 0x196 // 7 x 3A bytes
 
-void Log (char *message); //delete
-void LogErr (char *message); //deltete
+//void Log (char *message);
+//void LogErr (char *message);
+//void autoPollISR();
+//void sendReq();
 extern "C" void mbed_reset();
 
 time_t seconds ;
@@ -114,6 +125,9 @@
 volatile int secsIdle = 0;
 volatile bool canIdle = false;
 Serial pc(USBTX, USBRX);
+Ticker autoPoll;
+Ticker msgReq;
+unsigned char reqMsgCnt = 99;
 
 extern "C" void RTC_IRQHandler() {
     timer.reset(); // zero ms at the-seconds-tic
@@ -220,6 +234,62 @@
     led2 = !led2;
 }
 
+void sendReq() {
+    static char data[8] = {0x02, 0x21, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff};
+    if(reqMsgCnt<99){
+        switch (reqMsgCnt){
+            case BatDataBaseG1:
+                can1.monitor(false); // set to active mode
+                can1_SleepMode = 0; // enable TX
+                data[0]=0x02; //change to request group 1
+                data[1]=0x21;
+                data[2]=0x01;
+                break;
+            case BatDataBaseG2: // group 1 has 6 frames
+                data[0]=0x02; //change to request group 2 (cp data)
+                data[1]=0x21;
+                data[2]=0x02;
+                break;
+            case BatDataBaseG3: // group 2 has 29 frames
+                data[0]=0x02; //change to request group 3
+                data[1]=0x21;
+                data[2]=0x03;
+                break;
+            case BatDataBaseG4: // group 3 has 5 frames
+                data[0]=0x02; //change to request group 4 (temperature)
+                data[1]=0x21;
+                data[2]=0x04;
+                break;
+            case BatDataBaseG5: // group 4 has 3 frames
+                data[0]=0x02; //change to request group 5
+                data[1]=0x21;
+                data[2]=0x05;
+                break;
+            case BatDataBaseG6: // group 4 has 3 frames
+                data[0]=0x02; //change to request group 5
+                data[1]=0x21;
+                data[2]=0x06;
+                break;
+            case BatDataBaseG7: // group 5 has 11 frames
+                reqMsgCnt = 99;
+                can1_SleepMode = 1; // disable TX
+                can1.monitor(true); // set to snoop mode
+                msgReq.detach(); // stop ticker
+            default:
+                data[0]=0x30; //change to request next line message
+                data[1]=0x01;
+                data[2]=0x00;
+        }
+        can1.write(CANMessage(0x79b, data, 8));
+        reqMsgCnt++;
+    }
+}
+
+void autoPollISR(){
+    reqMsgCnt = 0; //reset message counter
+    msgReq.attach(&sendReq,0.015);
+}
+
 int main() {
     int readPointer=0;
     int fmon;
@@ -237,7 +307,9 @@
     PB1.mode(PullUp) ; //Pushbutton 1
     can1.attach(&recieve1);
     can2.attach(&recieve2);
-    
+    autoPoll.attach(&autoPollISR,pollInt); // Poll battery data every 60 seconds
+    msgReq.attach(&sendReq,0.015);  // Each poll message separated by 15ms
+        
     timer.start() ;
     RTC_Init(); // start the RTC Interrupts that sync the timer
 
@@ -419,4 +491,3 @@
         } //if (CD==1)
     } //while (true)
 }
-