Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r46b163d19c65e8c21db7b0247bbb1af0dba1ece5 -r73b00067c3a4fbb1ecbc7d525d23a75bb94d3fb1 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 46b163d19c65e8c21db7b0247bbb1af0dba1ece5) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 73b00067c3a4fbb1ecbc7d525d23a75bb94d3fb1) @@ -128,6 +128,8 @@ static BOOL alarmUserRecoveryActionEnabled[ NUMBER_OF_ALARM_USER_ACTIONS ]; ///< Alarm user recovery actions enabled flags. +static BOOL alarmButtonBlockers[ NUM_OF_ALARM_BUTTON_BLOCKERS ]; ///< Flags indicating whether alarm table or state properties are blocking alarm buttons for UI. + /// Current state of the alarm audio self tests. static ALARM_AUDIO_SELF_TEST_STATE_T alarmAudioSelfTestState; /// Flag indicates whether alarm audio test tone should be output. @@ -161,8 +163,9 @@ *************************************************************************/ void initAlarmMgmt( void ) { - ALARM_PRIORITY_T p; - ALARM_ID_T a; + ALARM_PRIORITY_T p; + ALARM_ID_T a; + ALARM_BUTTON_BLOCKER_T b; // Disable backup audio CLR_BACKUP_AUDIO_ENABLE(); @@ -183,6 +186,11 @@ alarmPriorityFIFO[ p ].alarmID = ALARM_ID_NO_ALARM; alarmPriorityFIFO[ p ].subRank = LOWEST_ALARM_SUB_RANK; alarmPriorityFIFO[ p ].timeSinceTriggeredMS = 0; + } + // Initialize alarm button blocker flags + for ( b = (ALARM_BUTTON_BLOCKER_T)0; b < NUM_OF_ALARM_BUTTON_BLOCKERS; b++ ) + { + alarmButtonBlockers[ b ] = FALSE; } // Initialize composite alarm state alarmStatus.alarmsState = ALARM_PRIORITY_NONE; @@ -212,8 +220,8 @@ * The execAlarmMgmt function executes the alarm management functions to be * done periodically. The composite alarm state is updated, alarm lamp and * audio patterns are updated, and status is sent out to the rest of the system. - * @details Inputs: alarmStatusTable[], ALARM_TABLE[] - * @details Outputs: alarmStatus + * @details Inputs: none + * @details Outputs: none * @return none *************************************************************************/ void execAlarmMgmt( void ) @@ -223,15 +231,8 @@ updateAlarmsState(); updateAlarmsFlags(); updateAlarmsSilenceStatus(); - // Publish alarm status at interval - if ( ++alarmStatusPublicationTimerCounter >= getU32OverrideValue( &alarmStatusPublishInterval ) ) - { - // Lamp and audio timing sync'd with broadcast so UI can stay in sync with lamp rhythm - setAlarmLamp(); - setAlarmAudio(); - broadcastAlarmStatus( alarmStatus ); - alarmStatusPublicationTimerCounter = 0; - } + // Publish alarm status and information at interval + publishAlarmInfo(); } /*********************************************************************//** @@ -773,8 +774,8 @@ /*********************************************************************//** * @brief * The monitorAlarms function monitors alarm audio current. - * @details Inputs: alarmStatusTable[] - * @details Outputs: alarmPriorityFIFO[], alarmStatus + * @details Inputs: none + * @details Outputs: alarmPrimaryAudioCurrentHG * @return none *************************************************************************/ static void monitorAlarms( void ) @@ -786,9 +787,6 @@ alarmBackupAudioCurrent.data = getFPGABackupAlarmAudioCurrent(); // TODO - Check current vs. expected audio output - - // Publish alarm information at interval - publishAlarmInfo(); } /*********************************************************************//** @@ -1081,8 +1079,8 @@ * @brief * The updateAlarmsFlags function updates the alarms flags of the alarms * status record. - * @details Inputs: none - * @details Outputs: alarmStatus + * @details Inputs: alarmStatus, alarmIsActive, ALARM_TABLE, alarmButtonBlockers + * @details Outputs: alarmStatus, alarmUserRecoveryActionEnabled, * @return none *************************************************************************/ static void updateAlarmsFlags( void ) @@ -1107,6 +1105,12 @@ stop = ( TRUE == ALARM_TABLE[ a ].alarmStops ? TRUE : stop ); noClear = ( TRUE == ALARM_TABLE[ a ].alarmNoClear ? TRUE : noClear ); // Set user alarm recovery actions allowed flags + alarmButtonBlockers[ ALARM_BUTTON_TABLE_BLOCK_RESUME ] = ALARM_TABLE[ a ].alarmNoResume; + alarmButtonBlockers[ ALARM_BUTTON_TABLE_BLOCK_RINSEBACK ] = ALARM_TABLE[ a ].alarmNoRinseback; + alarmButtonBlockers[ ALARM_BUTTON_TABLE_BLOCK_END_TREATMENT ] = ALARM_TABLE[ a ].alarmNoEndTreatment; + alarmButtonBlockers[ ALARM_BUTTON_STATE_BLOCK_RESUME ] = ( TRUE == alarmUserRecoveryActionEnabled[ ALARM_USER_ACTION_RESUME ] ? FALSE : TRUE ); + alarmButtonBlockers[ ALARM_BUTTON_STATE_BLOCK_RINSEBACK ] = ( TRUE == alarmUserRecoveryActionEnabled[ ALARM_USER_ACTION_RINSEBACK ] ? FALSE : TRUE ); + alarmButtonBlockers[ ALARM_BUTTON_STATE_BLOCK_END_TREATMENT ] = ( TRUE == alarmUserRecoveryActionEnabled[ ALARM_USER_ACTION_END_TREATMENT ] ? FALSE : TRUE ); if ( TRUE == alarmUserRecoveryActionEnabled[ ALARM_USER_ACTION_RESUME ] ) { noResume = ( TRUE == ALARM_TABLE[ a ].alarmNoResume ? TRUE : noResume ); @@ -1218,14 +1222,24 @@ /*********************************************************************//** * @brief - * The publishAlarmInfo function publishes alarm information at the set - * interval. - * @details Inputs: - * @details Outputs: alarm information are published to CAN bus. + * The publishAlarmInfo function publishes alarm information and status + * at the set intervals. + * @details Inputs: alarmInfoPublicationTimerCounter, alarmButtonBlockers + * @details Outputs: alarmStatusPublicationTimerCounter * @return none *************************************************************************/ static void publishAlarmInfo( void ) { + // Publish alarm status at interval + if ( ++alarmStatusPublicationTimerCounter >= getU32OverrideValue( &alarmStatusPublishInterval ) ) + { + // Lamp and audio timing sync'd with broadcast so UI can stay in sync with lamp rhythm + setAlarmLamp(); + setAlarmAudio(); + broadcastAlarmStatus( alarmStatus ); + alarmStatusPublicationTimerCounter = 0; + } + // Publish voltages monitor data on interval if ( ++alarmInfoPublicationTimerCounter >= getU32OverrideValue( &alarmInfoPublishInterval ) ) { @@ -1236,6 +1250,12 @@ data.audioCurrLG = getAlarmAudioPrimaryLowGainCurrent(); data.backupAudioCurr = getAlarmAudioBackupCurrent(); data.safetyShutdown = isSafetyShutdownActivated(); + data.uiAlarmButtonBlocks[ ALARM_BUTTON_TABLE_BLOCK_RESUME ] = (U08)alarmButtonBlockers[ ALARM_BUTTON_TABLE_BLOCK_RESUME ]; + data.uiAlarmButtonBlocks[ ALARM_BUTTON_TABLE_BLOCK_RINSEBACK ] = (U08)alarmButtonBlockers[ ALARM_BUTTON_TABLE_BLOCK_RINSEBACK ]; + data.uiAlarmButtonBlocks[ ALARM_BUTTON_TABLE_BLOCK_END_TREATMENT ] = (U08)alarmButtonBlockers[ ALARM_BUTTON_TABLE_BLOCK_END_TREATMENT ]; + data.uiAlarmButtonBlocks[ ALARM_BUTTON_STATE_BLOCK_RESUME ] = (U08)alarmButtonBlockers[ ALARM_BUTTON_STATE_BLOCK_RESUME ]; + data.uiAlarmButtonBlocks[ ALARM_BUTTON_STATE_BLOCK_RINSEBACK ] = (U08)alarmButtonBlockers[ ALARM_BUTTON_STATE_BLOCK_RINSEBACK ]; + data.uiAlarmButtonBlocks[ ALARM_BUTTON_STATE_BLOCK_END_TREATMENT ] = (U08)alarmButtonBlockers[ ALARM_BUTTON_STATE_BLOCK_END_TREATMENT ]; broadcastData( MSG_ID_HD_ALARM_INFORMATION, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&data, sizeof( ALARM_INFO_PAYLOAD_T ) ); alarmInfoPublicationTimerCounter = 0;