Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r172b320a1007769c7452fe3f1cc7ac85b016f89a -rfc12876da6930c955864352182aee2076513a1cc --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 172b320a1007769c7452fe3f1cc7ac85b016f89a) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision fc12876da6930c955864352182aee2076513a1cc) @@ -80,6 +80,23 @@ NUM_OF_ALARM_AUDIO_SELF_TEST_STATES ///< Number of states in alarm lamp self-test. } ALARM_AUDIO_SELF_TEST_STATE_T; +/// Enumeration of alarm audio volume factors. +typedef enum Alarm_Audio_Volume_Factors +{ + ALARM_AUDIO_VOLUME_GAIN = 0, + ALARM_AUDIO_VOLUME_DIVIDER, + NUM_OF_ALARM_AUDIO_VOLUME_FACTORS +} ALARM_AUDIO_VOLUME_FACTOR_T; + +/// Lookup table to determine appropriate divider for a given alarm audio volume level. +const U08 ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[MAX_ALARM_VOLUME_LEVEL][NUM_OF_ALARM_AUDIO_VOLUME_FACTORS] = { + { 2, 1 }, + { 1, 1 }, + { 0, 1 }, + { 0, 3 }, + { 0, 5 } +}; + // ********** private data ********** static U32 alarmStatusPublicationTimerCounter = 0; ///< Used to schedule alarm status publication to CAN bus. @@ -825,26 +842,34 @@ // If audio test in progress, play test tone. if ( TRUE == alarmAudioTestToneRequested ) { // Play test tone at min volume - setAlarmAudioState( ALARM_AUDIO_TEST_TONE, 4 ); + setAlarmAudioState( ALARM_AUDIO_TEST_TONE, + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[MAX_ALARM_VOLUME_LEVEL-1][ALARM_AUDIO_VOLUME_GAIN], + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[MAX_ALARM_VOLUME_LEVEL-1][ALARM_AUDIO_VOLUME_DIVIDER] ); } // If alarm silenced, play no alarm audio. else if ( TRUE == alarmStatus.alarmsSilenced ) { - setAlarmAudioState( ALARM_PRIORITY_NONE, volume ); + setAlarmAudioState( ALARM_PRIORITY_NONE, + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[volume][ALARM_AUDIO_VOLUME_GAIN], + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[volume][ALARM_AUDIO_VOLUME_DIVIDER] ); } // Otherwise, play alarm audio as appropriate based on current alarm status else { if ( alarmStatus.alarmsState < NUM_OF_ALARM_PRIORITIES ) { #ifndef DISABLE_ALARM_AUDIO - setAlarmAudioState( alarmStatus.alarmsState, volume ); + setAlarmAudioState( alarmStatus.alarmsState, + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[volume][ALARM_AUDIO_VOLUME_GAIN], + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[volume][ALARM_AUDIO_VOLUME_DIVIDER] ); #endif } else { SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_ALARM_MGMT_AUDIO_INVALID_ALARM_STATE, alarmStatus.alarmsState ) - setAlarmAudioState( ALARM_PRIORITY_HIGH, volume ); + setAlarmAudioState( ALARM_PRIORITY_HIGH, + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[volume][ALARM_AUDIO_VOLUME_GAIN], + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[volume][ALARM_AUDIO_VOLUME_DIVIDER] ); } } }