Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -rd4f40c48a728c866c24bf44a59ff8ddd1e244ca1 -r76fc4506fd38ea6bd317abbaaf85db5aa589a7cc --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision d4f40c48a728c866c24bf44a59ff8ddd1e244ca1) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 76fc4506fd38ea6bd317abbaaf85db5aa589a7cc) @@ -7,8 +7,8 @@ * * @file SystemComm.c * -* @author (last) Dara Navaei -* @date (last) 26-Apr-2023 +* @author (last) Sean Nash +* @date (last) 24-Aug-2023 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -106,6 +106,7 @@ static U32 canXmitRetryCtr = 0; ///< counter for CAN transmit retries. static OVERRIDE_U32_T hdCommunicationStatus = {0, 0, 0, 0}; ///< has HD sent a message since last check static volatile U32 timeOfLastHDCheckIn = 0; ///< last time we received an HD broadcast +static OVERRIDE_U32_T pendingACKOverride = { 0, 0, 0, 0 }; ///< Pending ACK override data structure. // ********** private function prototypes ********** @@ -160,7 +161,7 @@ *************************************************************************/ BOOL isHDCommunicating( void ) { - return getU32OverrideValue(&hdCommunicationStatus); + return getU32OverrideValue( &hdCommunicationStatus ); } /*********************************************************************//** @@ -668,6 +669,7 @@ if ( TRUE == didTimeout( timeOfLastHDCheckIn, HD_COMM_TIMEOUT_IN_MS ) ) { hdCommunicationStatus.data = FALSE; + setHDOperationMode( 0, 0 ); // If HD off or not connected, consider HD mode is fault. } } @@ -780,7 +782,7 @@ { for ( i = 0; i < PENDING_ACK_LIST_SIZE; i++ ) { // pending ACK expired? - if ( ( TRUE == pendingAckList[ i ].used ) && ( TRUE == didTimeout( pendingAckList[ i ].timeStamp, MSG_NOT_ACKED_TIMEOUT_MS ) ) ) + if ( ( TRUE == pendingAckList[ i ].used ) && ( ( TRUE == didTimeout( pendingAckList[ i ].timeStamp, MSG_NOT_ACKED_TIMEOUT_MS ) ) || ( getU32OverrideValue( &pendingACKOverride ) > 0 ) ) ) { // if retries left, reset and resend pending message. Do not retry when in POST since the UI might not still be responsive if ( pendingAckList[ i ].retries > 0 ) { @@ -881,6 +883,10 @@ handleHDStartStopTrimmerHeaterCmd( message ); break; + case MSG_ID_DG_PARK_CONCENTRATE_PUMPS_CMD_REQUEST: + handleParkConecentratePumpsCmd( message ); + break; + case MSG_ID_DG_START_STOP_TRIMMER_HEATER_CMD: handleDGStartStopTrimmerHeater( message ); break; @@ -909,8 +915,8 @@ handleDGPOSTResultRequest( message ); break; - case MSG_ID_HD_DG_SERVICE_RECORD_REQUEST: - handleDGServiceScheduleRequest( message ); + case MSG_ID_UI_SERVICE_INFO_REQUEST: + handleDGServiceScheduleRequestToUI( message ); break; case MSG_ID_HD_DG_CONCENTRATE_MIXING_RATIOS_REQUEST: @@ -937,14 +943,26 @@ handleResendAllAlarmsCommand( message ); break; + case MSG_ID_UI_SET_DG_RO_MODE: + handleSetROOnlyMode( message ); + break; + case MSG_ID_HD_SEND_CHEM_FLUSH_SAMPLE_PASS_FAIL_TO_DG: handleReceiveChemFlushSampleResultsFromHD( message ); break; - case MSG_ID_UI_SET_DG_RO_MODE: - handleSetROOnlyMode( message ); + case MSG_ID_DG_START_STOP_RO_PERMEATE_SAMPLE_MODE_CMD_REQUEST: + handleStartStopDGROPermeateSample( message ); break; + case MSG_ID_HD_SEND_RO_PERMEATE_SAMPLE_DISPENSE_REQUEST_TO_DG: + handleReceiveROPermeatSampleDispenseRequest( message ); + break; + + case MSG_ID_HD_REQUEST_SERVICE_RECORD_FROM_HD: + handleSendDGServiceRecordToHD( message ); + break; + // NOTE: This case must be last case MSG_ID_DG_TESTER_LOGIN_REQUEST: handleTesterLogInRequest( message ); @@ -1016,7 +1034,7 @@ handleTestValveStateOverrideRequest( message ); break; - case MSG_ID_VALVES_STATES_PUBLISH_INTERVAL_OVERRIDE: + case MSG_ID_DG_VALVES_STATES_PUBLISH_INTERVAL_OVERRIDE: handleTestValvesStatesPublishIntervalOverrideRequest( message ); break; @@ -1212,13 +1230,15 @@ handleTestUsedBicarbVolumeMLOverrideRequest( message ); break; +#ifndef _RELEASE_ case MSG_ID_DG_GET_SW_CONFIG_RECORD: handleGetDGSoftwareConfigRecord( message ); break; case MSG_ID_DG_SET_SW_CONFIG_RECORD: handleSetDGSoftwareConfigRecord( message ); break; +#endif case MSG_ID_DG_FANS_DUTY_CYCLE_OVERRIDE: handleSetFansDutyCycleOverrideRequest( message ); @@ -1338,6 +1358,30 @@ handleTestDGSetConductivitySensorCalTable( message ); break; + case MSG_ID_DG_SIGNAL_RECOVER_FROM_FAULT_MODE: + handleTestDGSetRecoverFromFaultModeSignal( message ); + break; + + case MSG_ID_DG_DRAIN_MODE_BROADCAST_INTERVAL_OVERRIDE: + handleTestDGDrainModeBroadcastOverrideRequest( message ); + break; + + case MSG_ID_DG_DIALIN_RO_ONLY_MODE_STATUS_REQUEST: + handleDGROStatusRequest( message ); + break; + + case MSG_ID_DG_RAM_STATUS_OVERRIDE: + handleTestDGRAMStatusOverrideRequest( message ); + break; + + case MSG_ID_DG_RESERVOIR_BROADCAST_INTERVAL_OVERRIDE: + handleTestDGReservoirOverrideRequest( message ); + break; + + case MSG_ID_DG_CAN_RECEIVE_ACK_MESSAGE_OVERRIDE: + handleTestDGPendingACKOverrideRequest( message ); + break; + default: // TODO - unrecognized message ID received - ignore break; @@ -1395,4 +1439,48 @@ return result; } +/*********************************************************************//** + * @brief + * The testSetPendingACKOverride function overrides the + * pendingACKOverride variable. + * @details Inputs: none + * @details Outputs: pendingACKOverride + * @param value override for pendingACKOverride + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetPendingACKOverride( U32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + pendingACKOverride.ovData = value; + pendingACKOverride.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetPendingACKOverride function resets the override + * of the pendingACKOverride variable. + * @details Inputs: none + * @details Outputs: pendingACKOverride + * @return TRUE if override reset successful, FALSE if not + *************************************************************************/ +BOOL testResetPendingACKOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + pendingACKOverride.override = OVERRIDE_RESET; + pendingACKOverride.ovData = pendingACKOverride.ovInitData; + } + + return result; +} /**@}*/