![](/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@33:6bc82b6b62e5, 2015-01-06 (annotated)
- Committer:
- pspatel321
- Date:
- Tue Jan 06 20:45:26 2015 +0000
- Revision:
- 33:6bc82b6b62e5
- Parent:
- 31:7eaa5e881b56
Updated IDs to match AMS, added a constants.h file.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pspatel321 | 30:91af74a299e1 | 1 | #include "serviceCAN.h" |
pspatel321 | 31:7eaa5e881b56 | 2 | #include "CAN_RxIDs.h" |
pspatel321 | 30:91af74a299e1 | 3 | |
pspatel321 | 33:6bc82b6b62e5 | 4 | bool canbus::serviceCAN(CANMessage* fromXbee) |
pspatel321 | 33:6bc82b6b62e5 | 5 | { |
pspatel321 | 30:91af74a299e1 | 6 | CANMessage msg; |
pspatel321 | 33:6bc82b6b62e5 | 7 | if (fromXbee != NULL) { |
pspatel321 | 33:6bc82b6b62e5 | 8 | memcpy((void*)&msg, (void*)fromXbee, sizeof(CANMessage)); |
pspatel321 | 33:6bc82b6b62e5 | 9 | } else { |
pspatel321 | 33:6bc82b6b62e5 | 10 | if (!can.rxRead(msg)) return false; |
pspatel321 | 33:6bc82b6b62e5 | 11 | } |
pspatel321 | 33:6bc82b6b62e5 | 12 | |
pspatel321 | 33:6bc82b6b62e5 | 13 | switch (msg.id) { |
pspatel321 | 33:6bc82b6b62e5 | 14 | case FAN_CONTROL_ID: |
pspatel321 | 33:6bc82b6b62e5 | 15 | if (msg.len != 2*sizeof(float)) break; |
pspatel321 | 33:6bc82b6b62e5 | 16 | memcpy((void*)&CANdata.dcdcFan1Duty, &msg.data[0], sizeof(float)); |
pspatel321 | 33:6bc82b6b62e5 | 17 | memcpy((void*)&CANdata.dcdcFan2Duty, &msg.data[4], sizeof(float)); |
pspatel321 | 33:6bc82b6b62e5 | 18 | dcdc.setPwm(FAN1, CANdata.dcdcFan1Duty); |
pspatel321 | 33:6bc82b6b62e5 | 19 | dcdc.setPwm(FAN2, CANdata.dcdcFan2Duty); |
pspatel321 | 33:6bc82b6b62e5 | 20 | break; |
pspatel321 | 33:6bc82b6b62e5 | 21 | |
pspatel321 | 33:6bc82b6b62e5 | 22 | case PUMP_CONTROL_ID: |
pspatel321 | 33:6bc82b6b62e5 | 23 | if (msg.len != 2*sizeof(float)) break; |
pspatel321 | 33:6bc82b6b62e5 | 24 | memcpy((void*)&CANdata.dcdcPump1Duty, &msg.data[0], sizeof(float)); |
pspatel321 | 33:6bc82b6b62e5 | 25 | memcpy((void*)&CANdata.dcdcPump2Duty, &msg.data[4], sizeof(float)); |
pspatel321 | 33:6bc82b6b62e5 | 26 | dcdc.setPwm(PUMP1, CANdata.dcdcPump1Duty); |
pspatel321 | 33:6bc82b6b62e5 | 27 | dcdc.setPwm(PUMP2, CANdata.dcdcPump2Duty); |
pspatel321 | 33:6bc82b6b62e5 | 28 | break; |
pspatel321 | 33:6bc82b6b62e5 | 29 | |
pspatel321 | 33:6bc82b6b62e5 | 30 | case DCDC_CONTROL_ID: |
pspatel321 | 33:6bc82b6b62e5 | 31 | if (msg.len != sizeof(char)) break; |
pspatel321 | 33:6bc82b6b62e5 | 32 | if (msg.data[0] == 1) dcdc.set(1); |
pspatel321 | 33:6bc82b6b62e5 | 33 | else dcdc.set(0); |
pspatel321 | 33:6bc82b6b62e5 | 34 | break; |
pspatel321 | 33:6bc82b6b62e5 | 35 | |
pspatel321 | 33:6bc82b6b62e5 | 36 | case AMS_RELAYS_ID: |
pspatel321 | 33:6bc82b6b62e5 | 37 | if (msg.len != sizeof(char)) break; |
pspatel321 | 33:6bc82b6b62e5 | 38 | 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 |
pspatel321 | 33:6bc82b6b62e5 | 39 | CANdata.airsClosed = true; |
pspatel321 | 33:6bc82b6b62e5 | 40 | dcdc.set(1); |
pspatel321 | 33:6bc82b6b62e5 | 41 | } else { |
pspatel321 | 33:6bc82b6b62e5 | 42 | CANdata.airsClosed = false; |
pspatel321 | 33:6bc82b6b62e5 | 43 | dcdc.set(0); |
pspatel321 | 33:6bc82b6b62e5 | 44 | } |
pspatel321 | 33:6bc82b6b62e5 | 45 | break; |
pspatel321 | 33:6bc82b6b62e5 | 46 | |
pspatel321 | 33:6bc82b6b62e5 | 47 | case GLVBAT_CLEARSOC_ID: |
pspatel321 | 33:6bc82b6b62e5 | 48 | if (msg.len != sizeof(float)) break; |
pspatel321 | 33:6bc82b6b62e5 | 49 | glvBat.resetToSOC(*((float*)(&msg.data[0]))); |
pspatel321 | 33:6bc82b6b62e5 | 50 | break; |
pspatel321 | 33:6bc82b6b62e5 | 51 | |
pspatel321 | 33:6bc82b6b62e5 | 52 | case GLVBAT_CLEARAH_ID: |
pspatel321 | 33:6bc82b6b62e5 | 53 | if (msg.len != sizeof(float)) break; |
pspatel321 | 33:6bc82b6b62e5 | 54 | glvBat.resetToAh(*((float*)(&msg.data[0]))); |
pspatel321 | 33:6bc82b6b62e5 | 55 | break; |
pspatel321 | 33:6bc82b6b62e5 | 56 | |
pspatel321 | 33:6bc82b6b62e5 | 57 | case GLVBAT_SETCAPAC_ID: |
pspatel321 | 33:6bc82b6b62e5 | 58 | if (msg.len != sizeof(float)) break; |
pspatel321 | 33:6bc82b6b62e5 | 59 | glvBat.changeCapacity(*((float*)(&msg.data[0]))); |
pspatel321 | 33:6bc82b6b62e5 | 60 | break; |
pspatel321 | 33:6bc82b6b62e5 | 61 | case STEERING_RESET_ID: |
pspatel321 | 33:6bc82b6b62e5 | 62 | NVIC_SystemReset(); |
pspatel321 | 33:6bc82b6b62e5 | 63 | break; |
pspatel321 | 33:6bc82b6b62e5 | 64 | default: |
pspatel321 | 33:6bc82b6b62e5 | 65 | break; |
pspatel321 | 33:6bc82b6b62e5 | 66 | } |
pspatel321 | 33:6bc82b6b62e5 | 67 | |
pspatel321 | 33:6bc82b6b62e5 | 68 | return true; |
pspatel321 | 33:6bc82b6b62e5 | 69 | |
pspatel321 | 33:6bc82b6b62e5 | 70 | } |
pspatel321 | 33:6bc82b6b62e5 | 71 | // Check for incoming messages from the xbees |
pspatel321 | 33:6bc82b6b62e5 | 72 | bool canbus::receiveMsgXbee() |
pspatel321 | 33:6bc82b6b62e5 | 73 | { |
pspatel321 | 33:6bc82b6b62e5 | 74 | CANMessage msg; |
pspatel321 | 33:6bc82b6b62e5 | 75 | if (xbeeRelay.receive(msg)) { // Incoming CAN message string received |
pspatel321 | 33:6bc82b6b62e5 | 76 | if (!can.txWrite(msg)) data.canFault = true; // Send it out on the CAN bus |
pspatel321 | 33:6bc82b6b62e5 | 77 | serviceCAN(&msg); // Send it into the local serviceCAN routine |
pspatel321 | 31:7eaa5e881b56 | 78 | return true; |
pspatel321 | 33:6bc82b6b62e5 | 79 | } else return false; |
pspatel321 | 30:91af74a299e1 | 80 | } |