MSCAN Updated

Dependents:   FBRLogger

Fork of MSCAN by Vesko Karadzhov

Revision:
5:55a074984183
Parent:
4:b0eeafffcfc7
Child:
6:c857749f9c0c
--- a/CANComms.cpp	Tue Feb 19 22:03:45 2013 +0000
+++ b/CANComms.cpp	Fri Mar 01 12:41:08 2013 +0000
@@ -8,12 +8,14 @@
 {
     can = new CAN(p30, p29);
     can->frequency(500000);
-    
+
     pollTicker = new Ticker();
     readTicker = new Ticker();
-    
-    pollTicker->attach(this, &CANComms::poll, 0.05);
-    
+
+    if(poll) {
+        pollTicker->attach(this, &CANComms::poll, 0.05);
+    }
+
     can->attach(this, &CANComms::receive);
 }
 
@@ -24,42 +26,39 @@
     //start 6, 22
     //int ids[] = {0x00189838, 0x00589838};
 
-    short offsets[] = {6, 22};    
-    
+    short offsets[] = {6, 22};
+
     MSCANHeader header(MSCAN_ID_MS, MSCAN_ID_DASH, MSCAN_REQ, MSCAN_BLOCK_OUTPC, 0);
 
-    for(i = 0; i < 2; i++)
-    {
+    for(i = 0; i < 2; i++) {
         header.var_offset = offsets[i];
         CANMessage msg(header.build(), 0, 3, CANData, CANExtended);
-        
+
         msg.data[0] = i; //Where to put the response - used when communicating between MS's to tell them where they wanted the data put
         msg.data[1] = 0; //Offset into the table specified in data[0]
         msg.data[2] = 8; //How many bytes of the source table we want
-        
+
         /*printf("Polling %d\n", i);*/
-        
-        if(can->write(msg))
-        {
-        
+
+        if(can->write(msg)) {
+
         }
     }
 }
 
 void CANComms::send(char message)
 {
-    
+
 }
 
 void CANComms::receive()
-{       
+{
     CANMessage msg;
     MSCANHeader header;
 
-    while(can->read(msg))
-    {
-        /*printf("CAN Message %08X %d %02X%02X%02X%02X%02X%02X%02X%02X\n", msg.id, msg.len, 
-            msg.data[0], 
+    while(can->read(msg)) {
+        /*printf("CAN Message %08X %d %02X%02X%02X%02X%02X%02X%02X%02X\n", msg.id, msg.len,
+            msg.data[0],
             msg.data[1],
             msg.data[2],
             msg.data[3],
@@ -68,23 +67,23 @@
             msg.data[6],
             msg.data[7]
             );*/
-        
+
         header.parse(msg.id);
-       
+
         //printf("Processing data, block %d\n", block);
-        
-        if(header.var_blk == 0)
-        {
-            values->rpm = (msg.data[0] << 8) | msg.data[1];
+        if(header.from_id == MSCAN_ID_MS) {
+            if(header.var_blk == 0) {
+                values->rpm = (msg.data[0] << 8) | msg.data[1];
+            } else if(header.var_blk == 1) {
+                values->manifold_pres = ((msg.data[2] << 8) | msg.data[3]) / 10.0;
+                values->air_temp = (((msg.data[4] << 8) | msg.data[5]) - 320.0) * 0.05555;
+                values->coolant_temp = (((msg.data[6] << 8) | msg.data[7]) - 320.0) * 0.05555;
+            } else {
+                values->throttle_pos = ((msg.data[2] << 8) | msg.data[3]) / 10.0;
+                values->voltage = ((msg.data[4] << 8) | msg.data[5]) / 10.0;
+            }
         }
-        else
-        {
-            values->coolant_temp = (((msg.data[0] << 8) | msg.data[1]) - 320.0) * 0.05555;
-            values->throttle_pos = ((msg.data[2] << 8) | msg.data[3]) / 10.0;
-            values->voltage = ((msg.data[4] << 8) | msg.data[5]) / 10.0;
-            printf("TPS: %f\n", values->throttle_pos);
-        }
-        
+
         //printf("Bat: %f\n", battery / 10.0);
     }
 }
\ No newline at end of file