Index: firmware/App/Drivers/CPLD.c =================================================================== diff -u -r4d637d588c0d78d95645e24ccbfdc01d45718a2f -r78b895b9f71a4f3d4b888a1072552a1c0f4cd43d --- firmware/App/Drivers/CPLD.c (.../CPLD.c) (revision 4d637d588c0d78d95645e24ccbfdc01d45718a2f) +++ firmware/App/Drivers/CPLD.c (.../CPLD.c) (revision 78b895b9f71a4f3d4b888a1072552a1c0f4cd43d) @@ -20,7 +20,9 @@ #include "het.h" #include "WatchdogMgmt.h" -#include "CPLD.h" +#include "CPLD.h" +#include "SystemComm.h" +#include "SystemCommMessages.h" /** * @addtogroup CPLD @@ -56,6 +58,14 @@ #define SET_WD_PET() gioSetBit( gioPORTB, WD_PET_GIO_PORT_PIN, PIN_SIGNAL_HIGH ) ///< Set watchdog GPIO macro. #define CLR_WD_PET() gioSetBit( gioPORTB, WD_PET_GIO_PORT_PIN, PIN_SIGNAL_LOW ) ///< Clear watchdog GPIO macro. +// ********** private data ********** + +CPLD_STATUS_T cpldStatus = { 0, 0, 0, CPLD_CLEAN_LED_OFF }; + +// ********** private function prototypes ********** + +static void broadcastCPLDStatus( void ); + /*********************************************************************//** * @brief * The initCPLD function initializes the CPLD module. @@ -72,6 +82,11 @@ CLR_CLEAN_LED(); CLR_FAULT_LED(); CLR_AUDIO_ALARM(); + + cpldStatus.wdog = getCPLDWatchdogExpired(); + cpldStatus.clean_led = CPLD_CLEAN_LED_OFF; + cpldStatus.fault_led = 0; + cpldStatus.audio = 0; } /*********************************************************************//** @@ -133,8 +148,11 @@ default: CLR_CLEAN_LED(); SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_INVALID_LED_COLOR_SELECTED, color ) + color = CPLD_CLEAN_LED_OFF; break; } + cpldStatus.clean_led = color; + broadcastCPLDStatus(); } /*********************************************************************//** @@ -155,6 +173,8 @@ { CLR_FAULT_LED(); } + cpldStatus.fault_led = level; + broadcastCPLDStatus(); } /*********************************************************************//** @@ -175,6 +195,39 @@ { CLR_AUDIO_ALARM(); } + cpldStatus.audio = level; + broadcastCPLDStatus(); } +/*********************************************************************//** + * @brief + * The getCPLDStatus function gets the CPLD Status. + * @details Inputs: none + * @details Outputs: none. + * @param status struct pointer + * @return updated status pointer + *************************************************************************/ +void getCPLDStatus( CPLD_STATUS_T *status ) +{ + // Watchdog status needs to be read. Others are updated on change. + cpldStatus.wdog = getCPLDWatchdogExpired(); + status->wdog = cpldStatus.wdog; + status->audio = cpldStatus.audio; + status->clean_led = cpldStatus.clean_led; + status->fault_led = cpldStatus.fault_led; +} + +/*********************************************************************//** + * @brief + * The broadcastCPLDStatus function broadcasts the CPLD Status. + * @details Inputs: cpldStatus + * @details Outputs: none + * @return none + *************************************************************************/ +static void broadcastCPLDStatus( void ) +{ + getCPLDStatus( &cpldStatus ); + broadcastData( MSG_ID_DG_CPLD_STATUS, COMM_BUFFER_OUT_CAN_DG_BROADCAST, (U08*)&cpldStatus, sizeof( CPLD_STATUS_T ) ); +} + /**@}*/ Index: firmware/App/Drivers/CPLD.h =================================================================== diff -u -r53110a8d810e392e8f75cf0bf85a3ec07927e846 -r78b895b9f71a4f3d4b888a1072552a1c0f4cd43d --- firmware/App/Drivers/CPLD.h (.../CPLD.h) (revision 53110a8d810e392e8f75cf0bf85a3ec07927e846) +++ firmware/App/Drivers/CPLD.h (.../CPLD.h) (revision 78b895b9f71a4f3d4b888a1072552a1c0f4cd43d) @@ -41,6 +41,14 @@ CPLD_CLEAN_LED_BLUE, ///< Blue NUM_OF_CPLD_CLEAN_LED_COLORS ///< Number of CPLD Clean LED colors } CPLD_CLEAN_LED_COLORS_T; + +typedef struct +{ + U08 wdog; ///< Watchdog status + U08 audio; ///< Audio Alarm status + U08 fault_led; ///< Fault LED + CPLD_CLEAN_LED_COLORS_T clean_led; ///< Disinfect LED (CPLD_CLEAN_LED_COLORS_T) +} CPLD_STATUS_T; // ********** public function prototypes ********** @@ -52,6 +60,7 @@ void setCPLDCleanLEDColor( CPLD_CLEAN_LED_COLORS_T color ); void setCPLDFaultLED( PIN_SIGNAL_STATE_T level ); void setCPLDFaultAudio( PIN_SIGNAL_STATE_T level ); +void getCPLDStatus( CPLD_STATUS_T *status ); /**@}*/ Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -rd5f2ac4d84453feb1b782f35f9d69432977a95f6 -r78b895b9f71a4f3d4b888a1072552a1c0f4cd43d --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision d5f2ac4d84453feb1b782f35f9d69432977a95f6) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 78b895b9f71a4f3d4b888a1072552a1c0f4cd43d) @@ -892,6 +892,10 @@ handleServiceModeRequest( message ); break; + case MSG_ID_REQUEST_CPLD_STATUS: + handleCpldStatusRequest( message ); + break; + // NOTE: This case must be last case MSG_ID_DG_TESTER_LOGIN_REQUEST: handleTesterLogInRequest( message ); Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -rd5f2ac4d84453feb1b782f35f9d69432977a95f6 -r78b895b9f71a4f3d4b888a1072552a1c0f4cd43d --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision d5f2ac4d84453feb1b782f35f9d69432977a95f6) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 78b895b9f71a4f3d4b888a1072552a1c0f4cd43d) @@ -23,6 +23,7 @@ #include "Compatible.h" #include "ConcentratePumps.h" #include "ConductivitySensors.h" +#include "CPLD.h" #include "Fans.h" #include "FPGA.h" #include "Heaters.h" @@ -884,8 +885,6 @@ // has been already checked in POST getNVRecord2Driver( GET_SRR_RECORD, (U08*)&scheduledService, sizeof( DG_SCHEDULED_RUN_RECORD_T ), 0, ALARM_ID_NO_ALARM ); - U08 *payloadPtr = msg.payload; - // Create a message record blankMessage( &msg ); msg.hdr.msgID = MSG_ID_DG_SCHEDULED_RUNS_DATA; @@ -3811,4 +3810,32 @@ return result; } +/*********************************************************************//** + * @brief + * The handleCpldStatusRequest function handles a CPLD Status request message. + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleCpldStatusRequest( MESSAGE_T *message ) +{ + MESSAGE_T msg; + CPLD_STATUS_T payload; + U08 *payloadPtr = msg.payload; + + // populate payload + getCPLDStatus( &payload ); + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DG_CPLD_STATUS; + msg.hdr.payloadLen = sizeof( CPLD_STATUS_T ); + + // fill message payload + memcpy( payloadPtr, &payload, sizeof( CPLD_STATUS_T ) ); + + // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + serializeMessage( msg, COMM_BUFFER_OUT_CAN_DG_BROADCAST, ACK_NOT_REQUIRED ); +} + /**@}*/ Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -rd5f2ac4d84453feb1b782f35f9d69432977a95f6 -r78b895b9f71a4f3d4b888a1072552a1c0f4cd43d --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision d5f2ac4d84453feb1b782f35f9d69432977a95f6) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 78b895b9f71a4f3d4b888a1072552a1c0f4cd43d) @@ -164,6 +164,9 @@ // MSG_ID_DG_RESPONSE_SERVICE_MODE_REQUEST BOOL sendServiceModeResponse( BOOL accepted, U32 rejCode ); +// MSG_ID_REQUEST_CPLD_STATUS +void handleCpldStatusRequest( MESSAGE_T *message ); + // *********** public test support message functions ********** // MSG_TESTER_LOG_IN