System Management code

Dependencies:   mbed CANBuffer Watchdog MODSERIAL mbed-rtos xbeeRelay IAP

Fork of SystemManagement by Martin Deng

serviceCAN/serviceCAN.cpp

Committer:
pspatel321
Date:
2014-11-14
Revision:
31:7eaa5e881b56
Parent:
30:91af74a299e1
Child:
33:6bc82b6b62e5

File content as of revision 31:7eaa5e881b56:

#include "serviceCAN.h"
#include "CAN_RxIDs.h"


bool canbus::serviceCAN() {
    CANMessage msg;
    if (can.rxRead(msg)) {
        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] & 0xC0) == 0xC0) {
                    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;
                
            default:
                break;
        }
        xbee.receive(msg);
        return true;
    }
    return false;
}