Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r051cd0430ef8342bd606115c98871e26dc24acf1 -r9cbb00a9eba347697bdf5cee63962061ffa36c92 --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 051cd0430ef8342bd606115c98871e26dc24acf1) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 9cbb00a9eba347697bdf5cee63962061ffa36c92) @@ -1,23 +1,28 @@ + #include // for memcpy() +#include "BoostPump.h" #include "Compatible.h" #include "Conductivity.h" #include "DDInterface.h" #include "Flow.h" #include "FluidPump.h" +#include "FpgaFP.h" +#include "FPOperationModes.h" #include "Level.h" #include "Messaging.h" -#include "ModeWaterGen.h" -#include "ModeWaterPreGen.h" -#include "OperationModes.h" +#include "ModeGenPermeate.h" +#include "ModePreGenPermeate.h" #include "PAL.h" #include "Pressure.h" #include "ROPump.h" -#include "SystemCommRO.h" +#include "SafetyShutdown.h" +#include "SystemCommFP.h" #include "Temperature.h" #include "Utilities.h" #include "Valves.h" +#include "WaterQualityMonitor.h" /** * @addtogroup Messaging @@ -41,16 +46,16 @@ static const COMM_BUFFER_T tdResponseBuffers[ NUM_OF_COMM_BUFFERS ] = { COMM_BUFFER_NOT_USED, ///< CAN message boxes start at 1 so we will not use this buffer - COMM_BUFFER_OUT_CAN_RO_ALARM, ///< Buffer for responding to incoming TD alarm messages - COMM_BUFFER_OUT_CAN_RO_ALARM, ///< Buffer for responding to incoming DD alarm messages + COMM_BUFFER_OUT_CAN_FP_ALARM, ///< Buffer for responding to incoming TD alarm messages + COMM_BUFFER_OUT_CAN_FP_ALARM, ///< Buffer for responding to incoming DD alarm messages COMM_BUFFER_NOT_USED, ///< Buffer for outgoing RO alarm messages so no response buffer - COMM_BUFFER_OUT_CAN_RO_ALARM, ///< Buffer for responding to incoming UI alarm messages - COMM_BUFFER_OUT_CAN_RO_2_DD, ///< Buffer for responding to incoming DD to RO messages + COMM_BUFFER_OUT_CAN_FP_ALARM, ///< Buffer for responding to incoming UI alarm messages + COMM_BUFFER_OUT_CAN_FP_2_DD, ///< Buffer for responding to incoming DD to RO messages COMM_BUFFER_NOT_USED, ///< Buffer for outgoing RO to DD messages so no response buffer - COMM_BUFFER_OUT_CAN_RO_BROADCAST, ///< Buffer for responding to incoming TD broadcast messages - COMM_BUFFER_OUT_CAN_RO_BROADCAST, ///< Buffer for responding to incoming DD broadcast messages + COMM_BUFFER_OUT_CAN_FP_BROADCAST, ///< Buffer for responding to incoming TD broadcast messages + COMM_BUFFER_OUT_CAN_FP_BROADCAST, ///< Buffer for responding to incoming DD broadcast messages COMM_BUFFER_NOT_USED, ///< Buffer for outgoing RO broadcast messages so no response buffer - COMM_BUFFER_OUT_CAN_RO_BROADCAST, ///< Buffer for responding to incoming UI broadcast messages + COMM_BUFFER_OUT_CAN_FP_BROADCAST, ///< Buffer for responding to incoming UI broadcast messages COMM_BUFFER_OUT_CAN_PC, ///< Buffer for responding to incoming PC to RO messages COMM_BUFFER_NOT_USED, ///< Buffer for outgoing RO to PC messages so no response buffer }; @@ -67,14 +72,17 @@ static const MSG_HANDLER_LOOKUP_T MSG_FUNCTION_HANDLER_LOOKUP[] = { { MSG_ID_FP_TESTER_LOGIN_REQUEST, &handleTesterLogInRequest }, { MSG_ID_FP_SOFTWARE_RESET_REQUEST, &handleROSoftwareResetRequest }, +{ MSG_ID_FW_VERSIONS_REQUEST, &handleVersionRequestMessage }, +{ MSG_ID_DD_FP_START_STOP_CMD_REQUEST, &handleGenerateWaterRequestMsg }, // TODO: alarm handling for x2,x3,and x4 msg id's. +{ MSG_ID_FP_RO_PUMP_STOP_REQUEST, &testROPumpHardStop }, { MSG_ID_FP_SEND_TEST_CONFIGURATION, &handleROTestConfiguration }, { MSG_ID_FP_VALVE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testValvesStatesPublishIntervalOverride }, { MSG_ID_FP_VALVE_CMD_STATE_OVERRIDE_REQUEST, &testValveStateOverride }, { MSG_ID_FP_VALVE_SENSED_STATE_OVERRIDE_REQUEST, &testValveSensedStateOverride }, -{ MSG_ID_FP_BOOST_PUMP_SET_PWM_REQUEST, &testSetFluidPumpPWM }, -{ MSG_ID_FP_BOOST_PUMP_READ_PWM_OVERRIDE_REQUEST, &testFluidPumpPWMOverride }, -{ MSG_ID_FP_BOOST_PUMP_SPEED_OVERRIDE_REQUEST, &testFluidPumpRPMOverride }, -{ MSG_ID_FP_BOOST_PUMPS_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testROPumpDataPublishIntervalOverride }, +{ 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_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testROPumpDataPublishIntervalOverride }, { MSG_ID_FP_PRESSURE_OVERRIDE_REQUEST, &testPressureSensorReadingsOverride }, { MSG_ID_FP_PRESSURE_TEMP_OVERRIDE_REQUEST, &testPressureSensorTemperatureReadingsOverride }, { MSG_ID_FP_PRESSURE_READ_COUNT_OVERRIDE_REQUEST, &testPressureSensorReadCounterOverride }, @@ -92,11 +100,22 @@ { MSG_ID_FP_CONDUCTIVITY_TEMP_OVERRIDE_REQUEST, &testConductivitySensorTemperatureReadingsOverride }, { MSG_ID_FP_CONDUCTIVITY_READ_COUNT_OVERRIDE_REQUEST, &testConductivitySensorReadCounterOverride }, { MSG_ID_FP_CONDUCTIVITY_ERROR_COUNT_OVERRIDE_REQUEST, &testConductivitySensorErrorCounterOverride }, -{ MSG_ID_FP_TEMPERATURE_OVERRIDE_REQUEST, &testMeasuredTemperatureOverride }, -{ MSG_ID_DD_FP_START_STOP_CMD_REQUEST, &handleGenerateWaterRequestMsg }, -{ MSG_ID_FP_PRE_GEN_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testPreGenWaterDataPublishIntervalOverride }, +{ MSG_ID_FP_PRE_GEN_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testPreGenDataPublishIntervalOverride }, { MSG_ID_FP_SET_OPERATION_MODE_REQUEST, &testSetOperationMode }, { MSG_ID_FP_TEMPERATURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testTemperatureSensorsDataPublishIntervalOverride }, +{ 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_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_SAFETY_SHUTDOWN_OVERRIDE_REQUEST, &testSetResetSafetyShutdownOverride }, +{ MSG_ID_FP_ALARM_STATE_OVERRIDE_REQUEST, &testAlarmStateOverride }, +{ MSG_ID_FP_ALARM_CLEAR_ALL_ALARMS_REQUEST, &testClearAllAlarms }, + + }; #define NUM_OF_FUNCTION_HANDLERS (sizeof(MSG_FUNCTION_HANDLER_LOOKUP) / sizeof(MSG_HANDLER_LOOKUP_T)) @@ -108,6 +127,9 @@ /// List of message IDs that are requested not to be transmitted. //static BLOCKED_MSGS_DATA_T blockedMessagesForXmit = { 0, 0, 0, 0, 0, 0, 0, 0 }; +/// UI version information +static UI_VERSIONS_T uiVersionRecord = { 0, 0, 0, 0, 0 }; + // ********** private function prototypes ********** static MsgFuncPtr getMsgHandler( U16 msgID ); @@ -222,7 +244,7 @@ msg.hdr.payloadLen = 0; // serialize and queue the message for transmit on broadcast channel - result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_RO_BROADCAST, ACK_NOT_REQUIRED ); + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_FP_BROADCAST, ACK_NOT_REQUIRED ); return result; } @@ -313,10 +335,10 @@ // 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 ); - } +// if ( respBuffer != COMM_BUFFER_NOT_USED ) +// { +// sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, respBuffer, ack ); +// } } else { @@ -382,7 +404,7 @@ 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_RO_ALARM, ACK_REQUIRED ); + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_FP_ALARM, ACK_REQUIRED ); return result; } @@ -410,7 +432,7 @@ 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_RO_ALARM, ACK_REQUIRED ); + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_FP_ALARM, ACK_REQUIRED ); return result; } @@ -439,7 +461,7 @@ 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_RO_ALARM, ACK_REQUIRED ); + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_FP_ALARM, ACK_REQUIRED ); return result; } @@ -455,7 +477,7 @@ * @param dat2 Second data associated with event * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL sendEvent( RO_EVENT_ID_T event, EVENT_DATA_T dat1, EVENT_DATA_T dat2 ) +BOOL sendEvent( FP_EVENT_ID_T event, EVENT_DATA_T dat1, EVENT_DATA_T dat2 ) { BOOL result; MESSAGE_T msg; @@ -475,7 +497,7 @@ 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 - result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_RO_BROADCAST, ACK_NOT_REQUIRED ); + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_FP_BROADCAST, ACK_NOT_REQUIRED ); return result; } @@ -516,6 +538,43 @@ return status; } +/*********************************************************************//** + * @brief + * The handleVersionRequestMessage function handles a UI request for FP + * version information. + * @details \b Message \b Sent: MSG_ID_FP_VERSION_RESPONSE + * @details \b Inputs: none + * @details \b Outputs: UI version info. + * @param message Pointer to the UI version request message which contains + * the UI version information as well. + * @return TRUE if request handled successfully, FALSE if not + *************************************************************************/ +BOOL handleVersionRequestMessage( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == sizeof( UI_VERSIONS_T ) ) + { + FP_VERSIONS_T fpVersionRecord; + + // Record UI version information + memcpy( (U08*)(&uiVersionRecord), &message->payload, sizeof( UI_VERSIONS_T ) ); + + // Build FP version record + fpVersionRecord.major = FP_VERSION_MAJOR; + fpVersionRecord.minor = FP_VERSION_MINOR; + fpVersionRecord.micro = FP_VERSION_MICRO; + fpVersionRecord.build = FP_VERSION_BUILD; + getFPGAVersions( &fpVersionRecord.fpgaId, &fpVersionRecord.fpgaMajor, &fpVersionRecord.fpgaMinor, &fpVersionRecord.fpgaLab ); + fpVersionRecord.compatibilityRev = SW_COMPATIBILITY_REV; + + // Send FP version information + result = sendMessage( MSG_ID_FP_VERSION_RESPONSE, COMM_BUFFER_OUT_CAN_FP_BROADCAST, (U08*)&fpVersionRecord, sizeof( FP_VERSIONS_T ) ); + } + + return result; +} + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/