Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r137466352b7c5d298088ffba19690f57d3926541 -rd35dede07c2a00141c43ec99a3ad68f29bea78db --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 137466352b7c5d298088ffba19690f57d3926541) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision d35dede07c2a00141c43ec99a3ad68f29bea78db) @@ -25,12 +25,19 @@ #include "Buttons.h" #include "Compatible.h" #include "CpldInterface.h" +#include "DDInterface.h" +#include "Ejector.h" +#include "FpgaTD.h" #include "LevelSensors.h" #include "Messaging.h" +#include "ModeTxParams.h" +#include "ModeStandby.h" #include "OperationModes.h" #include "PAL.h" -#include "PressureSensor.h" +#include "Pressures.h" #include "RotaryValve.h" +#include "StateTxDialysis.h" +#include "StateTxPaused.h" #include "Switches.h" #include "SystemCommTD.h" #include "Utilities.h" @@ -81,102 +88,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_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 +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[] = { - &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 -}; +#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. @@ -185,6 +168,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,6 +208,9 @@ #ifdef TEST_AIR_TRAP_ALPHA_TESTING return 0; #endif +#ifdef TEST_PINCH_VALVES + return 0; +#endif // Check to see if tester has requested this message not be transmited if ( TRUE == isTestingActivated() ) @@ -382,9 +371,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; } } @@ -434,42 +423,40 @@ } } -// Send message helper functions - /*********************************************************************//** * @brief - * The broadcastAlarmStatus function constructs an alarm status msg to - * be broadcast and queues the msg for transmit on the appropriate CAN channel. + * 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: alarm status msg constructed and queued. - * @param almStatus alarm status record - * @return TRUE if msg successfully queued for transmit, FALSE if not + * @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 broadcastAlarmStatus( COMP_ALARM_STATUS_T almStatus ) +BOOL handleVersionRequestMessage( MESSAGE_T *message ) { - BOOL result; - ALARM_COMP_STATUS_PAYLOAD_T payload; + BOOL result = FALSE; - payload.alarmState = (U32)almStatus.alarmsState; - payload.alarmTop = (U32)almStatus.alarmTop; - payload.silenceExpiresIn = almStatus.alarmsSilenceExpiresIn; + if ( message->hdr.payloadLen == sizeof( UI_VERSIONS_T ) ) + { + TD_VERSIONS_T tdVersionRecord; - payload.alarmsFlags = ( almStatus.systemFault ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_SYSTEM_FAULT) : 0 ); - payload.alarmsFlags |= ( almStatus.stop ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_STOP) : 0 ); - payload.alarmsFlags |= ( almStatus.noClear ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_NO_CLEAR) : 0 ); - payload.alarmsFlags |= ( almStatus.noResume ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_NO_RESUME) : 0 ); - payload.alarmsFlags |= ( almStatus.noRinseback ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_NO_RINSEBACK) : 0 ); - payload.alarmsFlags |= ( almStatus.noEndTreatment ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_NO_END_TREATMENT) : 0 ); - payload.alarmsFlags |= ( almStatus.ok ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_OK_BUTTON_ONLY) : 0 ); - payload.alarmsFlags |= ( almStatus.alarmsSilenced ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_ALARMS_SILENCED) : 0 ); - payload.alarmsFlags |= ( almStatus.lampOn ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_LAMP_ON) : 0 ); - payload.alarmsFlags |= ( almStatus.noBloodRecirc ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_BLOOD_RECIRC) : 0 ); - payload.alarmsFlags |= ( almStatus.noDialRecirc ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_DIALYSATE_RECIRC) : 0 ); - payload.alarmsFlags |= ( almStatus.noMinimize ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_NO_MINIMIZE) : 0 ); - payload.alarmsFlags |= ( almStatus.topAlarmConditionDetected ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_TOP_CONDITION) : 0 ); + // Record UI version information + memcpy( (U08*)(&uiVersionRecord), &message->payload, sizeof( UI_VERSIONS_T ) ); - result = broadcastData( MSG_ID_ALARM_STATUS_DATA, COMM_BUFFER_OUT_CAN_TD_ALARM, (U08*)&payload, sizeof( ALARM_COMP_STATUS_PAYLOAD_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; }