System Management code

Dependencies:   mbed CANBuffer Watchdog MODSERIAL mbed-rtos xbeeRelay IAP

Fork of SystemManagement by Martin Deng

Revision:
39:ddf38df9699e
Parent:
38:8efacce315ae
--- a/outDiagnostics/outDiagnostics.cpp	Sat Feb 07 08:54:51 2015 +0000
+++ b/outDiagnostics/outDiagnostics.cpp	Wed Feb 11 23:09:57 2015 +0000
@@ -122,9 +122,6 @@
             ADD_SPRINTF_LINE
             snprintf(temp, max_charsPerLine, "CANtxSize:   %4d %sCANrxSize: %4d %sSerialBaud: %6d%sSerialTx:  %5d",  dashParam->CANtxSize,barSpace, dashParam->CANrxSize,barSpace, dashParam->SerialBaud,barSpace, dashParam->SerialTxSize);
             ADD_SPRINTF_LINE
-            snprintf(temp, max_charsPerLine, "XbeeBaud:  %6d %sXbeeTxSize: %4d%sXbeeRxSize: %4d  %s CANack:   %5s",  dashParam->XbeeBaud, barSpace, dashParam->XbeeTxSize,barSpace, dashParam->XbeeRxSize,barSpace, dashParam->CANnoAck?"NOACK":"ACK");
-            ADD_SPRINTF_LINE
-
             BLANK_LINE
         }
         snprintf(temp, max_charsPerLine, " Operating Info %s", freeze?"(Viewing Freeze of Last Fault) ":"");
@@ -257,8 +254,15 @@
         BLANK_LINE
         snprintf(temp, max_charsPerLine, " IMD %s", freeze?"(Viewing Freeze of Last Fault) ":"");
         TITLE(temp)
-        const char IMDstr[7][12] = {"OFF","NORMAL","UNDERVOLT","SPEEDSTART","ERROR","GROUNDFLT","INVALID"};
-        sprintf(temp, "Status: %10s   Resistance: %7.0fKohm   Error: %3s", IMDstr[dashOp->imd.status], dashOp->imd.resistance/1.0e3, dashOp->imd.error?"ERR":"OK");
+        char imdStatN=6;
+        if (dashOp->imd.status & OFF) imdStatN=0;
+        if (dashOp->imd.status & NORMAL) imdStatN=1;
+        if (dashOp->imd.status & UNDERVOLT) imdStatN=2;
+        if (dashOp->imd.status & SPEEDSTART) imdStatN=3;
+        if (dashOp->imd.status & ERROR) imdStatN=4;
+        if (dashOp->imd.status & GROUNDERR) imdStatN=5;
+        const char IMDstr[7][12] = {"OFF","NORMAL","UNDERVOLT","SPEEDSTART","ERROR","GROUNDERR","INVALID"};
+        sprintf(temp, "Status: %10s   Resistance: %7.0fKohm   Error: %3s", IMDstr[imdStatN], dashOp->imd.resistance/1.0e3, dashOp->imd.error?"ERR":"OK");
         ADD_SPRINTF_LINE
 
         BLANK_LINE
@@ -280,14 +284,6 @@
         else sprintf(temp, "%s is OPEN.", switchNames[switches-1]);
         ADD_SPRINTF_LINE
 
-        BLANK_LINE
-        snprintf(temp, max_charsPerLine, " Telemetry %s", freeze?"(Viewing Freeze of Last Fault) ":"");
-        TITLE(temp)
-        sprintf(temp, "Channel 1 -    MsgIn: %5d   MsgOut: %5d %5.2f", dashOp->xbee1.msgIn, dashOp->xbee1.msgOut, dashOp->xbee1.rateOut);
-        ADD_SPRINTF_LINE
-        sprintf(temp, "Channel 2 -    MsgIn: %5d   MsgOut: %5d %5.2f", dashOp->xbee2.msgIn, dashOp->xbee2.msgOut, dashOp->xbee2.rateOut);
-        ADD_SPRINTF_LINE
-
         // Erase screen every few counts to remove glitches
         static int count = 0;
         if (count % 50 == 0 || lastModeExtended != inExtendedMode) {
@@ -334,56 +330,53 @@
 
         // OPERATING DIAGNOSTICS
         // Error Frame
-        CAN_SINGLE(faultCode,   SYS_ERROR_ID)
+        CAN_SINGLE(faultCode,   FAULTCODE_TX_ID)
 
         // Mode
-        CAN_SINGLE(mode,        SYS_MODE_ID)
+        CAN_SINGLE(mode,        MODE_TX_ID)
 
         // Flags
-        CAN_SINGLE(signals,     SYS_FLAGS_ID)
+        CAN_SINGLE(signals,     SIGNALS_TX_ID)
 
         // Profile
-        char byte = (op->profileIndex != -1) ? op->profileIndex : 1<<6;   // Mark the second to last bit of the byte if using Freeze profile (data[0]=64 for freeze, data[0]=0 for default)
-        byte |= (op->profileModded) ? 1<<7 : 0;                           // Mark the last bit of the byte if the profile was modified (OR'd with profile id from above)
-        SEND_CAN_SINGLE(byte, SYS_PROFILE_ID);
+        char byte=0;
+        byte = (op->profileIndex != -1)? 1 << op->profileIndex : 1<<6;
+        byte |= (op->profileModded) ? 1<<7 : 0;     // Mark the last bit of the byte if the profile was modified (OR'd with profile id from above)
+        SEND_CAN_SINGLE(byte, PROFILE_TX_ID);
 
         // Time
-        CAN_PAIR(SysTime,       startTime,      SYS_TIME_ID)
-
-        // Xbee1 Counter
-        CAN_PAIR(xbee1.msgIn,   xbee1.msgOut,   SYS_XBEE1_MSG_ID)
-
-        // Xbee2 Counter
-        CAN_PAIR(xbee2.msgIn,   xbee2.msgOut,   SYS_XBEE2_MSG_ID)
+        CAN_PAIR(SysTime,       startTime,      TIME_TX_ID)
 
         // Internal temperature
-        CAN_SINGLE(internalTemp, SYS_TEMP_ID)
+        CAN_SINGLE(internalTemp, TEMP_TX_ID)
 
         // GLV Battery
-        CAN_SINGLE(glvBat.current,  SYS_GLV_CURRENT_ID)
-        CAN_SINGLE(glvBat.capacity, SYS_GLV_CAPACITY_ID)
-        CAN_SINGLE(glvBat.Ah,       SYS_GLV_AH_ID)
-        CAN_SINGLE(glvBat.SOC,      SYS_GLV_SOC_ID)
-        CAN_SINGLE(glvBat.error,    SYS_GLV_ERROR_ID)
+        CAN_SINGLE(glvBat.current,  GLV_CURRENT_TX_ID)
+        CAN_SINGLE(glvBat.capacity, GLV_CAPACITY_TX_ID)
+        CAN_SINGLE(glvBat.Ah,       GLV_AH_TX_ID)
+        CAN_SINGLE(glvBat.SOC,      GLV_SOC_TX_ID)
+        CAN_SINGLE(glvBat.error,    GLV_ERROR_TX_ID)
 
         // DC-DC Converter
-        CAN_SINGLE(dcdc.current,    SYS_DCDC_CURRENT_ID)
-        CAN_SINGLE(dcdc.status,     SYS_DCDC_STATUS_ID)
+        CAN_SINGLE(dcdc.current,    DCDC_CURRENT_TX_ID)
+        CAN_SINGLE(dcdc.status,     DCDC_STATUS_TX_ID)
 
         // PWM Channels
-        CAN_PAIR(dcdc.actual.fan1,  dcdc.actual.fan2,  SYS_PWM_FAN_ID)
-        CAN_PAIR(dcdc.actual.pump1, dcdc.actual.pump2, SYS_PWM_PUMP_ID)
+        CAN_PAIR(dcdc.actual.fan1,  dcdc.actual.fan2,  PWM_FAN_TX_ID)
+        CAN_PAIR(dcdc.actual.pump1, dcdc.actual.pump2, PWM_PUMP_TX_ID)
 
         // IMD
-        CAN_SINGLE(imd.status,      SYS_IMD_STATUS_ID)
-        CAN_SINGLE(imd.resistance,  SYS_IMD_RESIST_ID)
+        CAN_SINGLE(imd.status,      IMD_STATUS_TX_ID)
+        CAN_SINGLE(imd.resistance,  IMD_RESIST_TX_ID)
 
         // Latches
-        CAN_SINGLE(latch.imd,       SYS_IMD_LATCH_ID)
-        CAN_SINGLE(latch.ams,       SYS_AMS_LATCH_ID)
+        CAN_SINGLE(latch.imd,       IMD_LATCH_TX_ID)
+        CAN_SINGLE(latch.ams,       AMS_LATCH_TX_ID)
 
         // Shutdown Switches
-        CAN_SINGLE(switchState,     SYS_SWITCHES_ID)
+        uint16_t tmp=0;
+        if (op->switchState != 0) tmp |= 1 << (op->switchState-1);
+        SEND_CAN_SINGLE(tmp,        SWITCHES_TX_ID);
 
         osSignalSet((osThreadId)(tempData.wdtThreadId), 1<<4);      // Signal watchdog thread
         Thread::wait(CAN_LOOP*1000);