MSCAN Updated
Fork of MSCAN by
Diff: CANComms.cpp
- Revision:
- 0:4bd0966a0718
- Child:
- 1:a723bdf44e10
diff -r 000000000000 -r 4bd0966a0718 CANComms.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CANComms.cpp Sun Feb 17 18:41:27 2013 +0000 @@ -0,0 +1,92 @@ +#include "CANComms.h" +#include "mbed.h" +#include "State.h" + +#include "MSCANHeader.h" + +CANComms::CANComms(State* _values) : Comms(_values) +{ + can = new CAN(p30, p29); + can->frequency(500000); + + pollTicker = new Ticker(); + readTicker = new Ticker(); + + pollTicker->attach(this, &CANComms::poll, 0.05); + readTicker->attach(this, &CANComms::receive, 0.025); +} + +void CANComms::poll() +{ + char i; + + //start 6, 22 + //int ids[] = {0x00189838, 0x00589838}; + + short offsets[] = {6, 22}; + + MSCANHeader header(MSCAN_ID_MS, MSCAN_ID_DASH, MSCAN_REQ, MSCAN_BLOCK_OUTPC, 0); + + 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)) + { + + } + } +} + +void CANComms::send(char message) +{ + +} + +void CANComms::receive() +{ + float tps; + char block; + + 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], + msg.data[1], + msg.data[2], + msg.data[3], + msg.data[4], + msg.data[5], + 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]; + } + 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