System Management code

Dependencies:   mbed CANBuffer Watchdog MODSERIAL mbed-rtos xbeeRelay IAP

Fork of SystemManagement by Martin Deng

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?

UserRevisionLine numberNew 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 }