Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r036a75d76ab01912646a480b935d97187a231a19 -rb05bbd09d430425d907779b02feadde8addc8c79 --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 036a75d76ab01912646a480b935d97187a231a19) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision b05bbd09d430425d907779b02feadde8addc8c79) @@ -26,6 +26,8 @@ #include "Compatible.h" #include "CpldInterface.h" #include "DDInterface.h" +#include "Ejector.h" +#include "FpgaTD.h" #include "LevelSensors.h" #include "Messaging.h" #include "ModeTxParams.h" @@ -85,122 +87,78 @@ typedef BOOL (*MsgFuncPtr)( MESSAGE_T* ); + +/// Message handling look-up table record type. +typedef struct +{ + U16 msgID; ///< ID of received message to handle. + MsgFuncPtr msgHandler; ///< Pointer to message handling function associated with a message ID. +} MSG_HANDLER_LOOKUP_T; + /// Message handling function lookup table -static const U16 MSG_FUNCTION_HANDLER_LOOKUP[] = { - MSG_ID_DD_OP_MODE_DATA, - MSG_ID_DD_PRESSURES_DATA, - MSG_ID_UI_TREATMENT_PARAMS_TO_VALIDATE, - MSG_ID_UI_ULTRAFILTRATION_VOLUME_TO_VALIDATE, - MSG_ID_UI_TREATMENT_PARAMS_CONFIRMED, - MSG_ID_UI_INITIATE_TREATMENT_WORKFLOW, - MSG_ID_UI_UF_PAUSE_RESUME_REQUEST, - MSG_ID_TESTER_LOGIN_REQUEST, - MSG_ID_TD_SOFTWARE_RESET_REQUEST, - MSG_ID_TD_BUBBLE_OVERRIDE_REQUEST, - MSG_ID_TD_BUBBLE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, - MSG_ID_TD_VOLTAGE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, - MSG_ID_TD_VOLTAGE_OVERRIDE_REQUEST, - MSG_ID_TD_PRESSURE_OVERRIDE_REQUEST, - MSG_ID_TD_PRESSURE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, - MSG_ID_TD_AIR_PUMP_SET_STATE_REQUEST, - MSG_ID_TD_AIR_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST, - MSG_ID_TD_SWITCHES_PUBLISH_INTERVAL_OVERRIDE_REQUEST, - MSG_ID_TD_SWITCH_STATE_OVERRIDE_REQUEST, - MSG_ID_TD_OFF_BUTTON_OVERRIDE_REQUEST, - MSG_ID_TD_STOP_BUTTON_OVERRIDE_REQUEST, - MSG_ID_TD_ALARM_LAMP_PATTERN_OVERRIDE_REQUEST, - MSG_ID_TD_ALARM_AUDIO_LEVEL_OVERRIDE_REQUEST, - MSG_ID_TD_ALARM_AUDIO_CURRENT_HG_OVERRIDE_REQUEST, - MSG_ID_TD_ALARM_AUDIO_CURRENT_LG_OVERRIDE_REQUEST, - MSG_ID_TD_BACKUP_ALARM_AUDIO_CURRENT_OVERRIDE_REQUEST, - MSG_ID_TD_AIR_TRAP_LEVEL_OVERRIDE_REQUEST, - MSG_ID_TD_AIR_TRAP_LEVEL_RAW_OVERRIDE_REQUEST, - MSG_ID_TD_AIR_TRAP_PUBLISH_INTERVAL_OVERRIDE_REQUEST, - MSG_ID_TD_3_WAY_VALVE_SET_STATE_REQUEST, - MSG_ID_TD_ROTARY_PINCH_VALVE_SET_POS_REQUEST, - MSG_ID_TD_ROTARY_PINCH_VALVE_STATUS_OVERRIDE_REQUEST, - MSG_ID_TD_ROTARY_PINCH_VALVE_POSITION_OVERRIDE_REQUEST, - MSG_ID_TD_VALVES_PUBLISH_INTERVAL_OVERRIDE_REQUEST, - MSG_ID_TD_PINCH_VALVE_SET_POSITION_REQUEST, - MSG_ID_TD_PINCH_VALVE_HOME_REQUEST, - MSG_ID_TD_ALARM_STATUS_PUBLISH_INTERVAL_OVERRIDE_REQUEST, - MSG_ID_TD_ALARM_INFO_PUBLISH_INTERVAL_OVERRIDE_REQUEST, - MSG_ID_TD_ALARM_START_TIME_OVERRIDE_REQUEST, - MSG_ID_TD_ALARM_CLEAR_ALL_ALARMS_REQUEST, - MSG_ID_TD_WATCHDOG_OVERRIDE_REQUEST, - MSG_ID_TD_ALARM_STATE_OVERRIDE_REQUEST, - MSG_ID_TD_SAFETY_SHUTDOWN_OVERRIDE_REQUEST, - MSG_ID_TD_BLOOD_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST, - MSG_ID_TD_BLOOD_PUMP_SET_FLOW_RATE_REQUEST, - MSG_ID_TD_BLOOD_PUMP_SET_SPEED_REQUEST, - MSG_ID_TD_BLOOD_PUMP_MEASURED_FLOW_RATE_OVERRIDE_REQUEST, - MSG_ID_TD_BLOOD_PUMP_MEASURED_MOTOR_SPEED_OVERRIDE_REQUEST, - MSG_ID_TD_BLOOD_PUMP_MEASURED_ROTOR_SPEED_OVERRIDE_REQUEST, - MSG_ID_TD_BLOOD_PUMP_ROTOR_COUNT_OVERRIDE_REQUEST, - MSG_ID_TD_TMP_PRESSURE_OVERRIDE_REQUEST, - MSG_ID_TD_OP_MODE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, - MSG_ID_TD_OP_MODE_OVERRIDE_REQUEST +static const MSG_HANDLER_LOOKUP_T MSG_FUNCTION_HANDLER_LOOKUP[] = { + { MSG_ID_FW_VERSIONS_REQUEST, &handleVersionRequestMessage }, + { MSG_ID_DD_OP_MODE_DATA, &setDDOpMode }, + { MSG_ID_DD_PRESSURES_DATA, &setDialysatePressure }, + { MSG_ID_UI_TREATMENT_PARAMS_TO_VALIDATE, &validateAndSetTreatmentParameters }, + { MSG_ID_UI_ULTRAFILTRATION_VOLUME_TO_VALIDATE, &validateAndSetUFVolume }, + { MSG_ID_UI_TREATMENT_PARAMS_CONFIRMED, &signalUserConfirmationOfTreatmentParameters }, + { MSG_ID_UI_INITIATE_TREATMENT_WORKFLOW, &signalUserInitiateTreatment }, + { MSG_ID_UI_UF_PAUSE_RESUME_REQUEST, &signalPauseResumeUF }, + { MSG_ID_TESTER_LOGIN_REQUEST, &handleTesterLogInRequest }, + { MSG_ID_TD_SOFTWARE_RESET_REQUEST, &testTDSoftwareResetRequest }, + { MSG_ID_TD_BUBBLE_OVERRIDE_REQUEST, &testBubbleDetectOverride }, + { MSG_ID_TD_BUBBLE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testBubblesDataPublishIntervalOverride }, + { MSG_ID_TD_VOLTAGE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testVoltageDataPublishIntervalOverride }, + { MSG_ID_TD_VOLTAGE_OVERRIDE_REQUEST, &testVoltageOverride }, + { MSG_ID_TD_PRESSURE_OVERRIDE_REQUEST, &testPressureSensorOverride }, + { MSG_ID_TD_PRESSURE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testSwitchesDataPublishIntervalOverride }, + { MSG_ID_TD_AIR_PUMP_SET_STATE_REQUEST, &testSetAirPump }, + { MSG_ID_TD_AIR_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testAirPumpDataPublishIntervalOverride }, + { MSG_ID_TD_SWITCHES_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testSwitchesDataPublishIntervalOverride }, + { MSG_ID_TD_SWITCH_STATE_OVERRIDE_REQUEST, &testSwitchOverride }, + { MSG_ID_TD_OFF_BUTTON_OVERRIDE_REQUEST, &testOffButtonOverride }, + { MSG_ID_TD_STOP_BUTTON_OVERRIDE_REQUEST, &testStopButtonOverride }, + { MSG_ID_TD_ALARM_LAMP_PATTERN_OVERRIDE_REQUEST, &testAlarmLampPatternOverride }, + { MSG_ID_TD_ALARM_AUDIO_LEVEL_OVERRIDE_REQUEST, &testAlarmAudioVolumeLevelOverride }, + { MSG_ID_TD_ALARM_AUDIO_CURRENT_HG_OVERRIDE_REQUEST, &testPrimaryAlarmAudioCurrentHGOverride }, + { MSG_ID_TD_ALARM_AUDIO_CURRENT_LG_OVERRIDE_REQUEST, &testPrimaryAlarmAudioCurrentLGOverride }, + { MSG_ID_TD_BACKUP_ALARM_AUDIO_CURRENT_OVERRIDE_REQUEST, &testBackupAlarmAudioCurrentOverride }, + { MSG_ID_TD_AIR_TRAP_LEVEL_OVERRIDE_REQUEST, &testLevelSensorOverride }, + { MSG_ID_TD_AIR_TRAP_LEVEL_RAW_OVERRIDE_REQUEST, &testRawLevelSensorOverride }, + { MSG_ID_TD_AIR_TRAP_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testAirTrapDataPublishIntervalOverride }, + { MSG_ID_TD_3_WAY_VALVE_SET_STATE_REQUEST, &testSet3WayValve }, + { MSG_ID_TD_ROTARY_PINCH_VALVE_SET_POS_REQUEST, &testSetValve }, + { MSG_ID_TD_ROTARY_PINCH_VALVE_STATUS_OVERRIDE_REQUEST, &testValveStatusOverride }, + { MSG_ID_TD_ROTARY_PINCH_VALVE_POSITION_OVERRIDE_REQUEST, &testValveEncoderPositionOverride }, + { MSG_ID_TD_VALVES_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testValvesDataPublishIntervalOverride }, + { MSG_ID_TD_PINCH_VALVE_SET_POSITION_REQUEST, &testValveSetABCCmdPosition }, + { MSG_ID_TD_PINCH_VALVE_HOME_REQUEST, &testHomeValve }, + { MSG_ID_TD_ALARM_STATUS_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testAlarmStatusPublishIntervalOverride }, + { MSG_ID_TD_ALARM_INFO_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testAlarmInfoPublishIntervalOverride }, + { MSG_ID_TD_ALARM_START_TIME_OVERRIDE_REQUEST, &testSetAlarmStartTimeOverride }, + { MSG_ID_TD_ALARM_CLEAR_ALL_ALARMS_REQUEST, &testClearAllAlarms }, + { MSG_ID_TD_WATCHDOG_OVERRIDE_REQUEST, &testWatchdogTaskCheckInOverride }, + { MSG_ID_TD_ALARM_STATE_OVERRIDE_REQUEST, &testAlarmStateOverride }, + { MSG_ID_TD_SAFETY_SHUTDOWN_OVERRIDE_REQUEST, &testSafetyShutdownOverride }, + { MSG_ID_TD_BLOOD_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testBloodFlowDataPublishIntervalOverride }, + { MSG_ID_TD_BLOOD_PUMP_SET_FLOW_RATE_REQUEST, &testSetTargetBloodFlowRateOverride }, + { MSG_ID_TD_BLOOD_PUMP_SET_SPEED_REQUEST, &testSetBloodPumpSpeedOverride }, + { MSG_ID_TD_BLOOD_PUMP_MEASURED_FLOW_RATE_OVERRIDE_REQUEST, &testMeasuredBloodFlowRateOverride }, + { MSG_ID_TD_BLOOD_PUMP_MEASURED_MOTOR_SPEED_OVERRIDE_REQUEST, &testMeasuredBloodPumpSpeedOverride }, + { MSG_ID_TD_BLOOD_PUMP_MEASURED_ROTOR_SPEED_OVERRIDE_REQUEST, &testMeasuredBloodPumpRotorSpeedOverride }, + { MSG_ID_TD_BLOOD_PUMP_ROTOR_COUNT_OVERRIDE_REQUEST, &testBloodPumpRotorCountOverride }, + { MSG_ID_TD_TMP_PRESSURE_OVERRIDE_REQUEST, &testTMPOverride }, + { MSG_ID_TD_REQ_CURRENT_TREATMENT_PARAMETERS, &testTxParamsRequest }, + { MSG_ID_TD_SET_TREATMENT_PARAMETER, &testSetTreatmentParameter }, + { MSG_ID_TD_OP_MODE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testSetOpModePublishIntervalOverride }, + { MSG_ID_TD_OP_MODE_OVERRIDE_REQUEST, &testSetOperationMode }, + { MSG_ID_TD_EJECTOR_MOTOR_SET_SPEED_REQUEST, &testSetEjectorMotorSpeed }, + { MSG_ID_TD_EJECTOR_COMMAND, &testEjectorCommand } }; -/// Message handling function table -static const MsgFuncPtr MSG_FUNCTION_HANDLERS[] = { - &setDDOpMode, - &setDialysatePressure, - &validateAndSetTreatmentParameters, - &validateAndSetUFVolume, - &signalUserConfirmationOfTreatmentParameters, - &signalUserInitiateTreatment, - &signalPauseResumeUF, - &handleTesterLogInRequest, - &testTDSoftwareResetRequest, - &testBubbleDetectOverride, - &testBubblesDataPublishIntervalOverride, - &testVoltageDataPublishIntervalOverride, - &testVoltageOverride, - &testPressureSensorOverride, - &testSwitchesDataPublishIntervalOverride, - &testSetAirPump, - &testAirPumpDataPublishIntervalOverride, - &testSwitchesDataPublishIntervalOverride, - &testSwitchOverride, - &testOffButtonOverride, - &testStopButtonOverride, - &testAlarmLampPatternOverride, - &testAlarmAudioVolumeLevelOverride, - &testPrimaryAlarmAudioCurrentHGOverride, - &testPrimaryAlarmAudioCurrentLGOverride, - &testBackupAlarmAudioCurrentOverride, - &testLevelSensorOverride, - &testRawLevelSensorOverride, - &testAirTrapDataPublishIntervalOverride, - &testSet3WayValve, - &testSetValve, - &testValveStatusOverride, - &testValveEncoderPositionOverride, - &testValvesDataPublishIntervalOverride, - &testValveSetABCCmdPosition, - &testHomeValve, - &testAlarmStatusPublishIntervalOverride, - &testAlarmInfoPublishIntervalOverride, - &testSetAlarmStartTimeOverride, - &testClearAllAlarms, - &testWatchdogTaskCheckInOverride, - &testAlarmStateOverride, - &testSafetyShutdownOverride, - &testBloodFlowDataPublishIntervalOverride, - &testSetTargetBloodFlowRateOverride, - &testSetBloodPumpSpeedOverride, - &testMeasuredBloodFlowRateOverride, - &testMeasuredBloodPumpSpeedOverride, - &testMeasuredBloodPumpRotorSpeedOverride, - &testBloodPumpRotorCountOverride, - &testTMPOverride, - &testSetOpModePublishIntervalOverride, - &testSetOperationMode -}; +#define NUM_OF_FUNCTION_HANDLERS (sizeof(MSG_FUNCTION_HANDLER_LOOKUP) / sizeof(MSG_HANDLER_LOOKUP_T)) -#define NUM_OF_FUNCTION_HANDLERS (sizeof(MSG_FUNCTION_HANDLERS) / sizeof(MsgFuncPtr)) - // ********** private data ********** static BOOL testerLoggedIn = FALSE; ///< Flag indicates whether an external tester (connected PC) has sent a valid login message. @@ -209,6 +167,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 ); @@ -409,9 +370,9 @@ // Search for the index associated with the given override command message ID and then use index to get the handling function for ( i = 0; i < NUM_OF_FUNCTION_HANDLERS; i++ ) { - if ( MSG_FUNCTION_HANDLER_LOOKUP[i] == msgID ) + if ( MSG_FUNCTION_HANDLER_LOOKUP[i].msgID == msgID ) { - func = MSG_FUNCTION_HANDLERS[i]; + func = MSG_FUNCTION_HANDLER_LOOKUP[i].msgHandler; break; } } @@ -461,7 +422,44 @@ } } +/*********************************************************************//** + * @brief + * The handleVersionRequestMessage function handles a UI request for TD + * version information. + * @details \b Message \b Sent: MSG_ID_TD_VERSION_RESPONSE + * @details \b Inputs: none + * @details \b Outputs: uiVersionRecord + * @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 ) ) + { + TD_VERSIONS_T tdVersionRecord; + + // Record UI version information + memcpy( (U08*)(&uiVersionRecord), &message->payload, sizeof( UI_VERSIONS_T ) ); + + // Build TD version record + tdVersionRecord.major = TD_VERSION_MAJOR; + tdVersionRecord.minor = TD_VERSION_MINOR; + tdVersionRecord.micro = TD_VERSION_MICRO; + tdVersionRecord.build = TD_VERSION_BUILD; + getFPGAVersions( &tdVersionRecord.fpgaId, &tdVersionRecord.fpgaMajor, &tdVersionRecord.fpgaMinor, &tdVersionRecord.fpgaLab ); + tdVersionRecord.compatibilityRev = SW_COMPATIBILITY_REV; + + // Send TD version information + result = sendMessage( MSG_ID_TD_VERSION_RESPONSE, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&tdVersionRecord, sizeof( TD_VERSIONS_T ) ); + } + + return result; +} + + // *********************************************************************** // ***************** Message Sending Helper Functions ******************** // ***********************************************************************