![](/media/cache/group/underwritten_car_negative.png.50x50_q85.png)
System Management code
Dependencies: mbed CANBuffer Watchdog MODSERIAL mbed-rtos xbeeRelay IAP
Fork of SystemManagement by
serviceCAN/serviceCAN.cpp
- Committer:
- pspatel321
- Date:
- 2015-01-06
- Revision:
- 33:6bc82b6b62e5
- Parent:
- 31:7eaa5e881b56
File content as of revision 33:6bc82b6b62e5:
#include "serviceCAN.h" #include "CAN_RxIDs.h" bool canbus::serviceCAN(CANMessage* fromXbee) { CANMessage msg; if (fromXbee != NULL) { memcpy((void*)&msg, (void*)fromXbee, sizeof(CANMessage)); } else { if (!can.rxRead(msg)) return false; } switch (msg.id) { case FAN_CONTROL_ID: if (msg.len != 2*sizeof(float)) break; memcpy((void*)&CANdata.dcdcFan1Duty, &msg.data[0], sizeof(float)); memcpy((void*)&CANdata.dcdcFan2Duty, &msg.data[4], sizeof(float)); dcdc.setPwm(FAN1, CANdata.dcdcFan1Duty); dcdc.setPwm(FAN2, CANdata.dcdcFan2Duty); break; case PUMP_CONTROL_ID: if (msg.len != 2*sizeof(float)) break; memcpy((void*)&CANdata.dcdcPump1Duty, &msg.data[0], sizeof(float)); memcpy((void*)&CANdata.dcdcPump2Duty, &msg.data[4], sizeof(float)); dcdc.setPwm(PUMP1, CANdata.dcdcPump1Duty); dcdc.setPwm(PUMP2, CANdata.dcdcPump2Duty); break; case DCDC_CONTROL_ID: if (msg.len != sizeof(char)) break; if (msg.data[0] == 1) dcdc.set(1); else dcdc.set(0); break; case AMS_RELAYS_ID: if (msg.len != sizeof(char)) break; if ((msg.data[0] & (1<<3|1<<4|1<<5)) == (1<<3|1<<4|1<<5)) { // AIRs closed? 1<<3=posAIR, 1<<4=negAIR, 1<<5=tractiveEnable signal CANdata.airsClosed = true; dcdc.set(1); } else { CANdata.airsClosed = false; dcdc.set(0); } break; case GLVBAT_CLEARSOC_ID: if (msg.len != sizeof(float)) break; glvBat.resetToSOC(*((float*)(&msg.data[0]))); break; case GLVBAT_CLEARAH_ID: if (msg.len != sizeof(float)) break; glvBat.resetToAh(*((float*)(&msg.data[0]))); break; case GLVBAT_SETCAPAC_ID: if (msg.len != sizeof(float)) break; glvBat.changeCapacity(*((float*)(&msg.data[0]))); break; case STEERING_RESET_ID: NVIC_SystemReset(); break; default: break; } return true; } // Check for incoming messages from the xbees bool canbus::receiveMsgXbee() { CANMessage msg; if (xbeeRelay.receive(msg)) { // Incoming CAN message string received if (!can.txWrite(msg)) data.canFault = true; // Send it out on the CAN bus serviceCAN(&msg); // Send it into the local serviceCAN routine return true; } else return false; }