MSCAN Updated
Fork of MSCAN by
Diff: CANComms.cpp
- 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