Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r0687e1ce03e73a64c51cde7a6c8216bec7187fc7 -r3417933e6edf61a914c428e2fa944b3b349272a4 --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 0687e1ce03e73a64c51cde7a6c8216bec7187fc7) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 3417933e6edf61a914c428e2fa944b3b349272a4) @@ -1,50 +1,69 @@ /************************************************************************** * -* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* Copyright (c) 2024-2025 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file Messaging.c * -* @author (last) Vinayakam Mani -* @date (last) 06-Aug-2024 +* @author (last) Varshini Nagabooshanam +* @date (last) 02-Dec-2025 * * @author (original) Vinayakam Mani -* @date (original) 06-Aug-2024 +* @date (original) 07-Aug-2024 * ***************************************************************************/ #include // for memcpy() #include "reg_system.h" #include "BalancingChamber.h" +#include "BloodLeak.h" +#include "BoostPump.h" #include "Conductivity.h" #include "Compatible.h" #include "ConcentratePumps.h" #include "DialysatePumps.h" -#include "Heaters.h" +#include "Flow.h" +#include "FlowSensor.h" +#include "FluidPump.h" +#include "FlushConcentrate.h" +#include "FlushFilter.h" +#include "FlushPermeate.h" #include "FpgaDD.h" +#include "FPModeFault.h" +#include "FPModeInitPOST.h" +#include "FPModeStandby.h" +#include "FPOperationModes.h" +#include "Heaters.h" +#include "InletPressureCheck.h" #include "Level.h" #include "Messaging.h" #include "MessagePayloads.h" #include "ModeGenDialysate.h" +#include "ModeGenPermeate.h" #include "ModePreGenDialysate.h" +#include "ModePreGenPermeate.h" #include "ModePostGenDialysate.h" #include "ModeStandby.h" #include "OperationModes.h" #include "PAL.h" -#ifdef __PUMPTEST__ -#include "PistonPumpControl.h" -#endif +#include "PermeateTank.h" #include "Pressure.h" +#include "RinsePump.h" +#include "ROPump.h" +#include "SafetyShutdown.h" +#include "SpentChamberFill.h" #include "SystemCommDD.h" #include "Temperature.h" +#include "TestSupport.h" #include "TDInterface.h" #include "Utilities.h" +#include "Ultrafiltration.h" #include "Valves.h" +#include "Voltages.h" - /** * @addtogroup Messaging * @{ @@ -69,18 +88,18 @@ COMM_BUFFER_NOT_USED, ///< CAN message boxes start at 1 so we will not use this buffer COMM_BUFFER_OUT_CAN_DD_ALARM, ///< Buffer for responding to incoming TD alarm messages COMM_BUFFER_NOT_USED, ///< Buffer for outgoing DD alarm messages so no response buffer - COMM_BUFFER_OUT_CAN_DD_ALARM, ///< Buffer for responding to incoming RO alarm messages + COMM_BUFFER_NOT_USED, ///< Buffer for outgoing FP alarm messages so no response buffer COMM_BUFFER_OUT_CAN_DD_ALARM, ///< Buffer for responding to incoming UI alarm messages COMM_BUFFER_OUT_CAN_DD_2_TD, ///< Buffer for responding to incoming TD to DD messages COMM_BUFFER_NOT_USED, ///< Buffer for outgoing DD to TD messages so no response buffer - COMM_BUFFER_NOT_USED, ///< Buffer for outgoing DD to RO messages so no response buffer - COMM_BUFFER_OUT_CAN_DD_2_RO, ///< Buffer for responding to incoming RO to DD messages COMM_BUFFER_OUT_CAN_DD_BROADCAST, ///< Buffer for responding to incoming TD broadcast messages COMM_BUFFER_NOT_USED, ///< Buffer for outgoing DD broadcast messages so no response buffer - COMM_BUFFER_OUT_CAN_DD_BROADCAST, ///< Buffer for responding to incoming RO broadcast messages + COMM_BUFFER_NOT_USED, ///< Buffer for outgoing FP broadcast messages so no response buffer COMM_BUFFER_OUT_CAN_DD_BROADCAST, ///< Buffer for responding to incoming UI broadcast messages - COMM_BUFFER_OUT_CAN_PC, ///< Buffer for responding to incoming PC to TD messages - COMM_BUFFER_NOT_USED, ///< Buffer for outgoing HD to PC messages so no response buffer + COMM_BUFFER_OUT_DD_CAN_PC, ///< Buffer for responding to incoming PC to DD messages + COMM_BUFFER_NOT_USED, ///< Buffer for outgoing DD to PC messages so no response buffer + COMM_BUFFER_OUT_FP_CAN_PC, ///< Buffer for responding to incoming PC to FP messages + COMM_BUFFER_NOT_USED, ///< Buffer for outgoing FP to PC messages so no response buffer }; typedef BOOL (*MsgFuncPtr)( MESSAGE_T* ); @@ -100,29 +119,25 @@ { MSG_ID_DD_VALVE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testValvesStatesPublishIntervalOverride }, { MSG_ID_DD_VALVE_STATE_OVERRIDE_REQUEST, &testValveStateOverride }, { MSG_ID_DD_VALVE_SENSED_STATE_OVERRIDE_REQUEST, &testValveSensedStateOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_READINGS_OVERRIDE_REQUEST, &testPressureSensorReadingsOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testPressureSensorTemperatureReadingsOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_READ_COUNTER_OVERRIDE_REQUEST, &testPressureSensorReadCounterOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_ERROR_COUNTER_OVERRIDE_REQUEST, &testPressureSensorErrorCounterOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testPressureSensorDataPublishIntervalOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_FILTER_READINGS_OVERRIDE_REQUEST, &testPressureSensorFilteredReadingsOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_FILTER_TEMPERATURE_OVERRIDE_REQUEST, &testPressureSensorFilteredTemperatureReadingsOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_READINGS_OVERRIDE_REQUEST, &testConductivitySensorReadingsOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testConductivitySensorTemperatureReadingsOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_READ_COUNTER_OVERRIDE_REQUEST, &testConductivitySensorReadCounterOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_ERROR_COUNTER_OVERRIDE_REQUEST, &testConductivitySensorErrorCounterOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testConductivitySensorDataPublishIntervalOverride }, + { MSG_ID_DD_PRESSURE_SENSOR_READINGS_OVERRIDE_REQUEST, &testDDPressureSensorReadingsOverride }, + { MSG_ID_DD_PRESSURE_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testDDPressureSensorTemperatureReadingsOverride }, + { MSG_ID_DD_PRESSURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testDDPressureSensorDataPublishIntervalOverride }, + { MSG_ID_DD_PRESSURE_SENSOR_FILTER_READINGS_OVERRIDE_REQUEST, &testDDPressureSensorFilteredReadingsOverride }, + { MSG_ID_DD_PRESSURE_SENSOR_FILTER_TEMPERATURE_OVERRIDE_REQUEST, &testDDPressureSensorFilteredTemperatureReadingsOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_READINGS_OVERRIDE_REQUEST, &testDDConductivitySensorReadingsOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testDDConductivitySensorTemperatureReadingsOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_READ_COUNTER_OVERRIDE_REQUEST, &testDDConductivitySensorReadCounterOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_ERROR_COUNTER_OVERRIDE_REQUEST, &testDDConductivitySensorErrorCounterOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testDDConductivitySensorDataPublishIntervalOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testConcentratePumpDataPublishIntervalOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_TARGET_SPEED_OVERRIDE_REQUEST, &testConcentratePumpTargetSpeedOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_MEASURED_SPEED_OVERRIDE_REQUEST, &testConcentratePumpMeasuredSpeedOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_PARKED_OVERRIDE_REQUEST, &testConcentratePumpParkedOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_PARK_FAULT_OVERRIDE_REQUEST, &testConcentratePumpParkCmdFaultedOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_PARK_REQUEST_OVERRIDE_REQUEST, &testConcentratePumpParkRequestOverride }, - { MSG_ID_DD_TEMPERATURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testTemperatureSensorsDataPublishIntervalOverride }, + { MSG_ID_DD_TEMPERATURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testDDTemperatureSensorsDataPublishIntervalOverride }, { MSG_ID_DD_TEMPERATURE_SENSOR_MEASURED_TEMPERATURE_OVERRIDE_REQUEST, &testMeasuredTemperatureOverride }, { MSG_ID_DD_TEMPERATURE_SENSOR_READ_COUNTER_OVERRIDE_REQUEST, &testTemperatureReadCounterOverride }, - { MSG_ID_DD_TEMPERATURE_SENSOR_BARO_READ_COUNTER_OVERRIDE_REQUEST, &testBaroTemperatureReadCounterOverride }, - { MSG_ID_DD_TEMPERATURE_SENSOR_BARO_CRC_OVERRIDE_REQUEST, &testBaroTemperatureCRCOverride }, { MSG_ID_DD_DIALYSATE_PUMPS_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testDialysatePumpsDataPublishIntervalOverride }, { MSG_ID_DD_DIALYSATE_PUMPS_TARGET_SPEED_OVERRIDE_REQUEST, &testDialysatePumpTargetSpeedOverride }, { MSG_ID_DD_DIALYSATE_PUMPS_MEASURED_SPEED_OVERRIDE_REQUEST, &testDialysatePumpMeasuredSpeedOverride }, @@ -136,14 +151,13 @@ { MSD_ID_DD_TD_COMMUNICATION_STATUS_OVERRIDE_REQUEST, &testTDCommunicationStatusOverride }, { MSG_ID_DD_OP_MODE_STATUS_OVERRIDE_REQUEST, &testDDOpModePublishIntervalOverride }, { MSG_ID_DD_SET_OPERATION_MODE_OVERRIDE_REQUEST, &testSetOperationMode }, - { MSG_ID_DD_START_GEN_DIALYSATE_MODE_OVERRIDE_REQUEST, &testDDStartGenDialysateOverride }, { MSG_ID_DD_DIALYSATE_PUMPS_START_STOP_OVERRIDE_REQUEST, &testDialysatePumpStartStopOverride }, { MSG_ID_DD_GEND_MODE_DATA_PUBLISH_OVERRIDE_REQUEST, &testDDGenDialysateDataPublishIntervalOverride }, { MSG_ID_DD_CONCENTRATE_PUMPS_START_STOP_OVERRIDE_REQUEST, &testConcentratePumpStartStopOverride }, { MSG_ID_DD_HEATERS_START_STOP_OVERRIDE_REQUEST, &testHeaterStartStopOverride }, { MSG_ID_DD_VALVES_OPEN_CLOSE_STATE_OVERRIDE_REQUEST, &testValveOpenCloseStateOverride }, { MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, &handleDialysateDeliveryRequestMsg }, - { MSD_ID_DD_RO_COMMUNICATION_STATUS_OVERRIDE_REQUEST, &testROCommunicationStatusOverride }, + { MSD_ID_DD_FP_COMMUNICATION_STATUS_OVERRIDE_REQUEST, &testFPCommunicationStatusOverride }, { MSG_ID_DD_BAL_CHAMBER_DATA_PUBLISH_OVERRIDE_REQUEST, &testDDBalChamberDataPublishIntervalOverride }, { MSG_ID_DD_BAL_CHAMBER_SWITCH_FREQ_OVERRIDE_REQUEST, &testBalChamberSwFreqOverride }, { MSG_ID_DD_DIAL_DELIVERY_IN_PROGRESS_OVERRIDE_REQUEST, &testDialDeliveryInProgressOverride }, @@ -158,18 +172,77 @@ { MSG_ID_DD_HEATERS_PWM_PERIOD_OVERIDE_REQUEST, &testHeaterPWMPeriodOverride }, { MSG_ID_DD_PRE_GEND_MODE_DATA_PUBLISH_OVERRIDE_REQUEST, &testDDPreGenDialysateDataPublishIntervalOverride }, { MSG_ID_DD_POST_GEND_MODE_DATA_PUBLISH_OVERRIDE_REQUEST, &testDDPostGenDialysateDataPublishIntervalOverride }, - { MSG_ID_DD_START_PRE_GEN_DIALYSATE_MODE_OVERRIDE_REQUEST, &testDDStartPreGenDialysateOverride }, { MSG_ID_DD_PRE_GEN_DIALYSATE_REQUEST_DATA, &handlePreGenDialysateRequestMsg }, - { MSG_ID_DD_STOP_PRE_GEN_DIALYSATE_MODE_OVERRIDE_REQUEST, &testDDStopPreGenDialysateOverride }, - { MSG_ID_DD_STOP_GEN_DIALYSATE_MODE_OVERRIDE_REQUEST, &testDDStopGenDialysateOverride }, { MSG_ID_FW_VERSIONS_REQUEST, &handleVersionRequestMessage }, -#ifdef __PUMPTEST__ - { MSG_ID_DD_PISTON_PUMP_DATA_PUBLISH_OVERRIDE_REQUEST, &testDDPistonPumpControlDataPublishIntervalOverride }, - { MSG_ID_DD_PISTON_PUMP_START_STOP_OVERRIDE_REQUEST, &testDDPistonPumpStartStopOverride }, - { MSG_ID_DD_PISTON_PUMP_FILL_AFTER_DISPENSE_OVERRIDE_REQUEST, &testDDPistonPumpFillAfterDispenseOverride }, -#endif + { MSG_ID_DD_SAFETY_SHUTDOWN_OVERRIDE_REQUEST, &testSetResetSafetyShutdownOverride }, + { MSG_ID_DD_UF_DATA_PUBLISH_OVERRIDE_REQUEST, &testDDUFDataPublishIntervalOverride }, + { MSG_ID_DD_SET_TEST_CONFIGURATION, &testSetTestConfiguration }, + { MSG_ID_DD_GET_TEST_CONFIGURATION, &testGetTestConfiguration }, + { MSG_ID_DD_RESET_ALL_TEST_CONFIGURATIONS, &testResetAllTestConfigurations }, + { MSG_ID_DD_SPENT_CHAMB_FILL_DATA_PUBLISH_OVERRIDE_REQUEST, &testDDSpentChamberFillDataPublishIntervalOverride }, + { MSG_ID_DD_BLOOD_LEAK_DATA_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testBloodLeakDataPublishIntervalOverride }, + { MSG_ID_DD_BLOOD_LEAK_STATUS_OVERRIDE_REQUEST, &testBloodLeakStatusOverride }, + { MSG_ID_DD_BLOOD_LEAK_SET_TO_EMBEDDED_MODE_REQUEST, &testSetBloodLeak2EmbeddedMode }, + { MSG_ID_DD_BLOOD_LEAK_SET_EMBEDDED_MODE_CMD_REQUEST, &testSetBloodLeakEmbeddedModeCommand }, + { MSG_ID_DD_BLOOD_LEAK_EMBEDDED_MODE_INFO_OVERRIDE_REQUEST, &testBloodLeakEmbeddedModeInfoOverride }, + { MSG_ID_DD_BLOOD_LEAK_INTENSITY_MOVING_AVERAGE_OVERRIDE_REQUEST, &testBloodLeakIntensityMovingAverageOverride }, + { MSG_ID_DD_BLOOD_LEAK_ZEROING_INTERVAL_IN_MS_OVERRIDE_REQUEST, &testBloodLeakZeroingIntervalInMillisecondsOverride }, + { MSG_ID_DD_BLOOD_LEAK_ZERO_REQUEST, &testBloodLeakZeroSequenceRequest }, + { MSG_ID_DD_FILTERED_COND_SENSOR_READINGS_OVERRIDE_REQUEST, &testDDConductivitySensorFilteredReadingsOverride }, + { MSG_ID_DD_FILTERED_COND_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testDDConductivitySensorFilteredTemperatureReadingsOverride }, + { MSG_ID_FP_TESTER_LOGIN_REQUEST, &handleTesterFPLogInRequest }, + { MSG_ID_FP_SET_OPERATION_MODE_REQUEST, &testSetFPOperationMode }, + { MSG_ID_FP_OPERATION_MODE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testSetFPOpModePublishIntervalOverride }, + { MSG_ID_FP_PRE_GEN_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testPreGenDataPublishIntervalOverride }, + { MSG_ID_FP_INLET_PRES_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testInletPressureCheckDataPublishIntervalOverride }, + { MSG_ID_FP_INLET_PRES_CHECK_TIME_OVERRIDE_REQUEST, &testInletPressureCheckTimerOverride }, + { MSG_ID_FP_BOOST_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testBoostPumpDataPublishIntervalOverride }, + { MSG_ID_FP_BOOST_PUMP_TARGET_PRESSURE_OVERRIDE_REQUEST, &testBoostPumpTargetPressureOverride }, + { MSG_ID_FP_BOOST_PUMP_TARGET_FLOW_OVERRIDE_REQUEST, &testBoostPumpTargetFlowOverride }, + { MSG_ID_FP_BOOST_PUMP_TARGET_PWM_OVERRIDE_REQUEST, &testBoostPumpTargetDutyCycleOverride }, + { MSG_ID_FP_BOOST_PUMP_STOP_REQUEST, &testBoostPumpHardStop }, + { MSG_ID_FP_FLUID_PUMP_SET_PWM_REQUEST, &testSetFluidPumpPWM }, + { MSG_ID_FP_FLUID_PUMP_READ_PWM_OVERRIDE_REQUEST, &testFluidPumpPWMOverride }, + { MSG_ID_FP_FLUID_PUMP_SPEED_OVERRIDE_REQUEST, &testFluidPumpRPMOverride }, + { MSG_ID_FP_RO_PUMP_STOP_REQUEST, &testROPumpHardStop }, + { MSG_ID_FP_RO_PUMP_TARGET_PRESSURE_OVERRIDE_REQUEST, &testROPumpTargetPressureOverride }, + { MSG_ID_FP_RO_PUMP_TARGET_FLOW_OVERRIDE_REQUEST, &testROPumpTargetFlowOverride }, + { MSG_ID_FP_RO_PUMP_TARGET_PWM_OVERRIDE_REQUEST, &testROPumpTargetDutyCycleOverride }, + { MSG_ID_FP_PRESSURE_OVERRIDE_REQUEST, &testIOFPPressureSensorReadingsOverride }, + { MSG_ID_FP_PRESSURE_TEMP_OVERRIDE_REQUEST, &testIOFPPressureSensorTemperatureReadingsOverride }, + { MSG_ID_FP_PRESSURE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testIOFPPressureSensorDataPublishIntervalOverride }, + { MSG_ID_FP_PRESSURE_SENSOR_FILTER_READINGS_OVERRIDE_REQUEST, &testIOFPPressureSensorFilteredReadingsOverride }, + { MSG_ID_FP_PRESSURE_SENSOR_FILTER_TEMPERATURE_OVERRIDE_REQUEST, &testIOFPPressureSensorFilteredTemperatureReadingsOverride }, + { MSG_ID_FP_TEMPERATURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testIOFPTemperatureSensorsDataPublishIntervalOverride }, + { MSG_ID_FP_VALVE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testIOFPValvesStatesPublishIntervalOverride }, + { MSG_ID_FP_VALVE_CMD_STATE_OVERRIDE_REQUEST, &testIOFPValveStateOverride }, + { MSG_ID_FP_VALVE_SENSED_STATE_OVERRIDE_REQUEST, &testIOFPValveSensedStateOverride }, + { MSG_ID_FP_FLOWS_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testFlowSensorDataPublishIntervalOverride }, + { MSG_ID_FP_FLOW_RATE_OVERRIDE_REQUEST, &testFlowSensorReadingsOverride }, + { MSG_ID_FP_FLOW_TEMP_OVERRIDE_REQUEST, &testFlowSensorTemperatureReadingsOverride }, + { MSG_ID_FP_FILTERED_FLOW_RATE_OVERRIDE_REQUEST, &testFlowSensorFilteredReadingsOverride }, + { MSG_ID_FP_FILTERED_FLOW_TEMP_OVERRIDE_REQUEST, &testFlowSensorFilteredTemperatureReadingsOverride }, + { MSG_ID_FP_ALARM_STATE_OVERRIDE_REQUEST, &testAlarmStateOverride }, + { MSG_ID_FP_ALARM_CLEAR_ALL_ALARMS_REQUEST, &testFPClearAllAlarms }, + { MSG_ID_FP_CONDUCTIVITY_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testFPConductivitySensorDataPublishIntervalOverride }, + { MSG_ID_FP_CONDUCTIVITY_OVERRIDE_REQUEST, &testFPConductivitySensorReadingsOverride }, + { MSG_ID_FP_CONDUCTIVITY_TEMP_OVERRIDE_REQUEST, &testFPConductivitySensorTemperatureReadingsOverride }, + { MSG_ID_FP_CONDUCTIVITY_READ_COUNT_OVERRIDE_REQUEST, &testFPConductivitySensorReadCounterOverride }, + { MSG_ID_FP_CONDUCTIVITY_ERROR_COUNT_OVERRIDE_REQUEST, &testFPConductivitySensorErrorCounterOverride }, + { MSG_ID_FP_FILTERED_COND_SENSOR_READINGS_OVERRIDE_REQUEST, &testFPConductivitySensorFilteredReadingsOverride }, + { MSG_ID_FP_FILTERED_COND_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testFPConductivitySensorFilteredTemperatureReadingsOverride }, + { MSG_ID_DD_VOLTAGE_DATA_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testVoltageDataPublishIntervalOverride }, + { MSG_ID_DD_MONITORED_VOLTAGE_OVERRIDE_REQUEST, &testVoltageOverride }, + { MSG_ID_DD_TREATMENT_PARAMS_OVERRIDE_REQUEST, &testTDTreatmentParamsOverride }, + { MSG_ID_FP_LEVEL_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testFPLevelsDataPublishIntervalOverride }, + { MSG_ID_FP_LEVEL_OVERRIDE_REQUEST, &testFPLevelStateOverride }, + { MSG_ID_FP_PERMEATE_TANK_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testPermeateTankDataPublishIntervalOverride }, + { MSG_ID_FP_RO_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testROPumpDataPublishIntervalOverride }, + { MSG_ID_DD_RINSE_PUMP_DATA_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testRinsePumpDataPublishIntervalOverride }, + { MSG_ID_FP_SET_START_STOP_OVERRIDE_REQUEST, &testSetGeneratePermeateSignal }, }; +/// Calculation for number of entries in the incoming message function handler look-up table. #define NUM_OF_FUNCTION_HANDLERS (sizeof(MSG_FUNCTION_HANDLER_LOOKUP) / sizeof(MSG_HANDLER_LOOKUP_T)) // ********** private data ********** @@ -370,6 +443,7 @@ // if Dialin message, ensure Dialin is logged in before processing it if ( ( message->hdr.msgID < MSG_ID_FIRST_TD_TESTER_MESSAGE ) || ( MSG_ID_FIRST_DD_TESTER_MESSAGE == message->hdr.msgID ) || + ( MSG_ID_FIRST_FP_TESTER_MESSAGE == message->hdr.msgID ) || ( TRUE == isTestingActivated() ) ) { MsgFuncPtr msgFuncPtr; @@ -385,10 +459,7 @@ // ACK/NAK request if ( message->hdr.msgID < MSG_ID_FIRST_TD_TESTER_MESSAGE ) { - if ( respBuffer != COMM_BUFFER_NOT_USED ) - { - sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, respBuffer, ack ); - } + // only Sending Test ACK for dialin messages. } else { @@ -425,14 +496,29 @@ // Create a message record blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DD_EVENT; + if ( ( event >= FP_EVENT_FIRST ) && ( event <= FP_EVENT_LAST ) ) + { + msg.hdr.msgID = MSG_ID_FP_EVENT; + } + else + { + msg.hdr.msgID = MSG_ID_DD_EVENT; + } + msg.hdr.payloadLen = sizeof( EVENT_PAYLOAD_T ); memcpy( &msg.payload, &eventStruct, sizeof( EVENT_PAYLOAD_T ) ); // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer // TODO : validate the change , DD -> UI channel removed and added DD broadcast instead. - result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_BROADCAST, ACK_NOT_REQUIRED ); + if ( msg.hdr.msgID == MSG_ID_FP_EVENT ) + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_FP_BROADCAST, ACK_NOT_REQUIRED ); + } + else + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_BROADCAST, ACK_NOT_REQUIRED ); + } return result; } @@ -448,7 +534,7 @@ * @param almData2 2nd data associated with alarm * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastAlarmTriggered( U32 alarm, ALARM_DATA_T almData1, ALARM_DATA_T almData2 ) +BOOL broadcastAlarmTriggered( U32 alarm, ALARM_DATA_T almData1, ALARM_DATA_T almData2, ALARM_SOURCE_T almSource ) { BOOL result; MESSAGE_T msg; @@ -478,7 +564,14 @@ memset( payloadPtr, 0, sizeof( U32) * 3 ); // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer - result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_ALARM, ACK_REQUIRED ); + if ( ALM_SRC_FP == almSource ) + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_FP_ALARM, ACK_REQUIRED ); + } + else + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_ALARM, ACK_REQUIRED ); + } return result; } @@ -492,7 +585,7 @@ * @param alarm ID of alarm cleared * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastAlarmCleared( U32 alarm ) +BOOL broadcastAlarmCleared( U32 alarm, ALARM_SOURCE_T almSource ) { BOOL result; MESSAGE_T msg; @@ -506,7 +599,14 @@ memcpy( payloadPtr, &alarm, sizeof( U32 ) ); // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer - result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_ALARM, ACK_REQUIRED ); + if ( ALM_SRC_FP == almSource ) + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_FP_ALARM, ACK_REQUIRED ); + } + else + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_ALARM, ACK_REQUIRED ); + } return result; } @@ -521,7 +621,7 @@ * @param alarm ID of alarm which alarm condition is cleared * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastAlarmConditionCleared( U32 alarm ) +BOOL broadcastAlarmConditionCleared( U32 alarm, ALARM_SOURCE_T almSource ) { BOOL result; MESSAGE_T msg; @@ -535,7 +635,14 @@ memcpy( payloadPtr, &alarm, sizeof( U32 ) ); // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer - result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_ALARM, ACK_REQUIRED ); + if ( ALM_SRC_FP == almSource ) + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_FP_ALARM, ACK_REQUIRED ); + } + else + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_ALARM, ACK_REQUIRED ); + } return result; } @@ -665,7 +772,15 @@ msg.payload[ 0 ] = (U08)ack; // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer - result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_PC, ACK_NOT_REQUIRED ); + // check msgID to determine what channel to use and default to DD's channels + if( ( MSG_ID_FIRST_FP_TESTER_MESSAGE <= msgID ) && ( MSG_ID_TD_DEBUG_EVENT > msgID ) ) + { + result = serializeMessage( msg, COMM_BUFFER_OUT_FP_CAN_PC, ACK_NOT_REQUIRED ); + } + else + { + result = serializeMessage( msg, COMM_BUFFER_OUT_DD_CAN_PC, ACK_NOT_REQUIRED ); + } return result; } @@ -698,6 +813,32 @@ /*********************************************************************//** * @brief + * The handleTesterFPLogInRequest function handles a request to login as a tester. + * @details \b Inputs: none + * @details \b Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +BOOL handleTesterFPLogInRequest( MESSAGE_T *message ) +{ + // verify pass code + // TODO - placeholder - how do we want to authenticate tester? + if ( ( 3 == message->hdr.payloadLen ) && ( 0x31 == message->payload[ 0 ] ) && ( 0x32 == message->payload[ 1 ] ) && ( 0x33 == message->payload[ 2 ] ) ) + { + testerLoggedIn = TRUE; + // The user logged in, so the set the dialin expiration date until the first check in from dialin is received + setDialinCheckInTimeStamp(); + } + else + { + testerLoggedIn = FALSE; + } + + return testerLoggedIn; +} + +/*********************************************************************//** + * @brief * The handleTDSoftwareResetRequest function handles a request to reset the * TD firmware processor. * @details \b Inputs: none @@ -716,9 +857,90 @@ setSystemREG1_SYSECR( (0x2) << 14 ); // Reset processor } - sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); + return result; +} +/*********************************************************************//** + * @brief + * The testSetTestConfiguration function handles a request to set a + * test configuration. + * @details \b Inputs: none + * @details \b Outputs: message handled + * @param message a pointer to the message to handle + * @return TRUE if command accepted, FALSE if rejected + *************************************************************************/ +BOOL testSetTestConfiguration( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + // Verify payload length + if ( sizeof( TEST_CONFIG_PAYLOAD_T ) == message->hdr.payloadLen ) + { + TEST_CONFIG_PAYLOAD_T payload; + + // copy message payload to local variable + memcpy( (U08*)&payload, &message->payload[0], sizeof( TEST_CONFIG_PAYLOAD_T ) ); + + // Verify given test configuration is valid + if ( payload.config < NUM_OF_TEST_CONFIGS ) + { + result = TRUE; + if ( FALSE == payload.reset ) + { + setTestConfig( (TEST_CONFIG_T)payload.config ); + } + else + { + resetTestConfig( (TEST_CONFIG_T)payload.config ); + } + } + } + return result; } +/*********************************************************************//** + * @brief + * The testGetTestConfiguration function handles a request to get a + * test configuration. + * @details \b Inputs: none + * @details \b Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +BOOL testGetTestConfiguration( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + // verify payload length + if ( 0 == message->hdr.payloadLen ) + { + result = sendTestConfigStatusToDialin(); + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetTestConfiguration function handles a request to reset all + * test configurations. + * @details \b Inputs: none + * @details \b Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +BOOL testResetAllTestConfigurations( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + // verify payload length + if ( 0 == message->hdr.payloadLen ) + { + result = resetAllTestConfigs(); + } + + return result; +} + /**@}*/