Index: firmware/App/Controllers/AlarmAudio.c =================================================================== diff -u --- firmware/App/Controllers/AlarmAudio.c (revision 0) +++ firmware/App/Controllers/AlarmAudio.c (revision 9d755b0734315e11c8fef5768815697d3bd50287) @@ -0,0 +1,566 @@ +/************************************************************************** +* +* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* +* THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +* WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +* +* @file AlarmAudio.c +* +* @author (last) Sean +* @date (last) 30-Jul-2024 +* +* @author (original) Sean +* @date (original) 30-Jul-2024 +* +***************************************************************************/ + +#include "AlarmAudio.h" +#include "AlarmMgmtTD.h" +#include "CpldInterface.h" +#include "FpgaTD.h" +#include "GPIO.h" +#include "InternalADC.h" +#include "Messaging.h" +#include "OperationModes.h" +#include "TaskGeneral.h" +#include "Timers.h" + +/** + * @addtogroup AlarmLamp + * @{ + */ + +// ********** private definitions ********** + +#define ALARM_AUDIO_TEST_TONE 4 ///< Alarm audio state for continuous test tone. +#define ALARM_AUDIO_CURRENT_LG_MIN_MA 50.0F ///< Minimum audio current (low gain) during test tone self-test (in mA). +#define ALARM_AUDIO_CURRENT_LG_MAX_MA 20.0F ///< Maximum audio current (low gain) during no tone self-test (in mA). +#define ALARM_AUDIO_MAX_TEST_TIME_MS 1000 ///< Maximum time for audio current to reach threshold in test. +#define MAX_ALARM_AUDIO_VOLUME_INDEX 0 ///< Index for maximum alarm audio volume. +#define MIN_ALARM_AUDIO_VOLUME_INDEX (MAX_ALARM_VOLUME_LEVEL - 1 ) ///< Index for minimum alarm audio volume. + +/// Enumeration of alarm audio self-test states. +typedef enum Alarm_Audio_Self_Test_States +{ + ALARM_AUDIO_SELF_TEST_STATE_START = 0, ///< Start state of alarm audio self-test. + ALARM_AUDIO_SELF_TEST_STATE_PRIMARY, ///< Test tone state of alarm audio self-test. + ALARM_AUDIO_SELF_TEST_STATE_NO_TONE, ///< No tone state of alarm audio self-test. + ALARM_AUDIO_SELF_TEST_STATE_COMPLETE, ///< Completed state of alarm audio self-test. + NUM_OF_ALARM_AUDIO_SELF_TEST_STATES ///< Number of states in alarm audio 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, ///< Gain setting for alarm audio volume. + ALARM_AUDIO_VOLUME_DIVIDER, ///< Divider setting for alarm audio volume. + NUM_OF_ALARM_AUDIO_VOLUME_FACTORS ///< Number 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] = { + { 1, 0 }, + { 1, 1 }, + { 3, 1 }, + { 3, 2 }, + { 4, 2 } +}; + +// ********** private data ********** + +/// Alarm audio attenuation level (0..4 where 0 = max volume and 4 = min volume). +static OVERRIDE_U32_T alarmAudioVolumeLevel = { MAX_ALARM_VOLUME_ATTENUATION, MAX_ALARM_VOLUME_ATTENUATION, MAX_ALARM_VOLUME_ATTENUATION, 0 }; + +static OVERRIDE_F32_T alarmPrimaryAudioCurrentHG = { 0.0, 0.0, 0.0, 0 }; ///< Alarm audio current (high gain) measured at ADC. +static OVERRIDE_F32_T alarmPrimaryAudioCurrentLG = { 0.0, 0.0, 0.0, 0 }; ///< Alarm audio current (low gain) measured at ADC. +static OVERRIDE_F32_T alarmBackupAudioCurrent = { 0.0, 0.0, 0.0, 0 }; ///< Alarm backup audio current measured at ADC. + +static ALARM_AUDIO_SELF_TEST_STATE_T alarmAudioSelfTestState; ///< Current state of the alarm audio self tests. +static U32 audioTestStartTime; ///< Start time of audio alarm current self-test. +static BOOL alarmAudioTestToneRequested; ///< Flag indicates whether alarm audio test tone should be output. + +// ********** private function prototypes ********** + + +/*********************************************************************//** + * @brief + * The initAlarmAudio function initializes the Alarm Audio unit. + * @details \b Inputs: none + * @details \b Outputs: Alarm Audio unit initialized. + * @return none + *************************************************************************/ +void initAlarmAudio( void ) +{ + // Disable backup audio + clrAlarmBuzzerSignal(); + + alarmAudioTestToneRequested = FALSE; + alarmAudioSelfTestState = ALARM_AUDIO_SELF_TEST_STATE_START; + audioTestStartTime = 0; +} + +/*********************************************************************//** + * @brief + * The execAlarmAudio function executes the alarm audio service to update + * audio current measurements. + * @details \b Inputs: none + * @details \b Outputs: alarmPrimaryAudioCurrentHG, alarmPrimaryAudioCurrentLG, + * alarmBackupAudioCurrent + * @return none + *************************************************************************/ +void execAlarmAudio( void ) +{ + alarmPrimaryAudioCurrentHG.data = getIntADCVoltageConverted( INT_ADC_PRIMARY_ALARM_CURRENT_HG ); + alarmPrimaryAudioCurrentLG.data = getIntADCVoltageConverted( INT_ADC_PRIMARY_ALARM_CURRENT_LG ); + alarmBackupAudioCurrent.data = getFPGABackupAlarmAudioCurrent(); +} + +/*********************************************************************//** + * @brief + * The setAlarmAudio function sets the alarm audio pattern according to + * the current state of the alarm system. + * @details \b Alarm: ALARM_ID_TD_SOFTWARE_FAULT if alarm state is invalid. + * @details \b Inputs: alarmAudioTestToneRequested + * @details \b Outputs: appropriate alarm pattern set for reported alarm state. + * @return none + *************************************************************************/ +void setAlarmAudio( void ) +{ + U32 volume = getAlarmAudioVolume(); + ALARM_PRIORITY_T almState = getCurrentAlarmStatePriority(); + + // If audio test in progress, play test tone. + if ( TRUE == alarmAudioTestToneRequested ) + { // Play test tone at min volume + setAlarmAudioState( ALARM_AUDIO_TEST_TONE, + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[MAX_ALARM_AUDIO_VOLUME_INDEX][ALARM_AUDIO_VOLUME_GAIN], + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[MAX_ALARM_AUDIO_VOLUME_INDEX][ALARM_AUDIO_VOLUME_DIVIDER] ); + // If we're in Fault mode, ensure audio test tone request is cancelled. + if ( MODE_FAUL == getCurrentOperationMode() ) + { + alarmAudioTestToneRequested = FALSE; + } + + } + // If alarm silenced, play no alarm audio. + else if ( ( ALARM_PRIORITY_NONE == almState ) || ( TRUE == areAlarmsSilenced() ) ) + { + 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 ( almState < NUM_OF_ALARM_PRIORITIES ) + { +#ifndef _RELEASE_ +// if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_ALARM_AUDIO ) != SW_CONFIG_ENABLE_VALUE ) +#endif + { + setAlarmAudioState( almState, + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[volume][ALARM_AUDIO_VOLUME_GAIN], + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[volume][ALARM_AUDIO_VOLUME_DIVIDER] ); + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_ALARM_MGMT_AUDIO_INVALID_ALARM_STATE, almState ) + setAlarmAudioState( ALARM_PRIORITY_HIGH, + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[volume][ALARM_AUDIO_VOLUME_GAIN], + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[volume][ALARM_AUDIO_VOLUME_DIVIDER] ); + } + } +} + +/*********************************************************************//** + * @brief +* The setAlarmAudioVolume function sets the current alarm audio volume level. +* @note This function is called by the set alarm volume message handler. +* @details \b Message \b Sent: Response to alarm volume set message. +* @details \b Inputs: none +* @details \b Outputs: alarmAudioVolumeLevel +* @param volumeLevel level of volume requested (1..5) +* @return none +*************************************************************************/ +void setAlarmAudioVolume( U32 volumeLevel ) +{ + BOOL accepted = FALSE; + U32 rejReason = REQUEST_REJECT_REASON_NONE; + + if ( ( volumeLevel > 0 ) && ( volumeLevel <= MAX_ALARM_VOLUME_LEVEL ) ) + { + // Convert volume level to attenuation level + alarmAudioVolumeLevel.data = MAX_ALARM_VOLUME_LEVEL - volumeLevel; + accepted = TRUE; + } + else + { + rejReason = REQUEST_REJECT_REASON_PARAM_OUT_OF_RANGE; + } + + // Send response to UI +// sendAlarmAudioVolumeSetResponse( accepted, rejReason ); +} + +/*********************************************************************//** + * @brief + * The getAlarmAudioVolume function gets the current alarm audio volume level. + * @details \b Inputs: alarmAudioVolumeLevel + * @details \b Outputs: none + * @return The current alarm audio volume level. + *************************************************************************/ +U32 getAlarmAudioVolume( void ) +{ + U32 result = alarmAudioVolumeLevel.data; + +#ifndef _RELEASE_ + // Check the software configurations +// if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_ENABLE_ALARM_VOLUME_DEFAULT_LOW ) ) +// { +// result = MIN_ALARM_VOLUME_ATTENUATION; +// } +#endif + + if ( OVERRIDE_KEY == alarmAudioVolumeLevel.override ) + { + result = alarmAudioVolumeLevel.ovData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The getAlarmAudioPrimaryHighGainCurrent function gets the measured alarm + * audio high gain current. + * @details \b Inputs: alarmPrimaryAudioCurrentHG + * @details \b Outputs: none + * @return The measured alarm audio high gain current (in mA). + *************************************************************************/ +F32 getAlarmAudioPrimaryHighGainCurrent( void ) +{ + F32 result = alarmPrimaryAudioCurrentHG.data; + + if ( OVERRIDE_KEY == alarmPrimaryAudioCurrentHG.override ) + { + result = alarmPrimaryAudioCurrentHG.ovData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The getAlarmAudioPrimaryLowGainCurrent function gets the measured alarm + * audio low gain current. + * @details \b Inputs: alarmPrimaryAudioCurrentLG + * @details \b Outputs: none + * @return The measured alarm audio low gain current (in mA). + *************************************************************************/ +F32 getAlarmAudioPrimaryLowGainCurrent( void ) +{ + F32 result = alarmPrimaryAudioCurrentLG.data; + + if ( OVERRIDE_KEY == alarmPrimaryAudioCurrentLG.override ) + { + result = alarmPrimaryAudioCurrentLG.ovData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The getAlarmAudioBackupCurrent function gets the measured backup alarm + * audio current. + * @details \b Inputs: alarmBackupAudioCurrent + * @details \b Outputs: none + * @return The measured backup alarm audio current (in mA). + *************************************************************************/ +F32 getAlarmAudioBackupCurrent( void ) +{ + F32 result = alarmBackupAudioCurrent.data; + + if ( OVERRIDE_KEY == alarmBackupAudioCurrent.override ) + { + result = alarmBackupAudioCurrent.ovData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The execAlarmAudioSelfTest function outputs a test audio tone and + * verifies the audio current levels. + * @note This function should be called periodically until a pass or fail + * is returned. + * @details \b Alarm: ALARM_ID_TD_ALARM_AUDIO_SELF_TEST_FAILURE if audio + * currents are out of range. + * @details \b Alarm: ALARM_ID_TD_SOFTWARE_FAULT if self-test state is invalid. + * @details \b Inputs: alarmAudioSelfTestState, audioTestStartTime + * @details \b Outputs: audioTestStartTime, alarmAudioTestToneRequested + * @return pass, fail, or in progress + *************************************************************************/ +SELF_TEST_STATUS_T execAlarmAudioSelfTest( void ) +{ + SELF_TEST_STATUS_T result = SELF_TEST_STATUS_IN_PROGRESS; + F32 almLGCurrent = getIntADCVoltageConverted( INT_ADC_PRIMARY_ALARM_CURRENT_LG ); + + switch ( alarmAudioSelfTestState ) + { + case ALARM_AUDIO_SELF_TEST_STATE_START: + if ( almLGCurrent < ALARM_AUDIO_CURRENT_LG_MAX_MA ) + { + audioTestStartTime = getMSTimerCount(); + // Start test tone + alarmAudioTestToneRequested = TRUE; + setAlarmAudio(); + alarmAudioSelfTestState = ALARM_AUDIO_SELF_TEST_STATE_PRIMARY; + } + else + { + result = SELF_TEST_STATUS_FAILED; + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_TD_ALARM_AUDIO_SELF_TEST_FAILURE, almLGCurrent, ALARM_AUDIO_CURRENT_LG_MAX_MA ); + alarmAudioSelfTestState = ALARM_AUDIO_SELF_TEST_STATE_COMPLETE; + } + break; + + case ALARM_AUDIO_SELF_TEST_STATE_PRIMARY: + // Check if alarm audio current is sufficiently high indicating alarm tone is being output + if ( almLGCurrent > ALARM_AUDIO_CURRENT_LG_MIN_MA ) + { + alarmAudioTestToneRequested = FALSE; + audioTestStartTime = getMSTimerCount(); + alarmAudioSelfTestState = ALARM_AUDIO_SELF_TEST_STATE_NO_TONE; + } + else if ( TRUE == didTimeout( audioTestStartTime, ALARM_AUDIO_MAX_TEST_TIME_MS ) ) + { + alarmAudioTestToneRequested = FALSE; + result = SELF_TEST_STATUS_FAILED; + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_TD_ALARM_AUDIO_SELF_TEST_FAILURE, almLGCurrent, ALARM_AUDIO_CURRENT_LG_MIN_MA ); + alarmAudioSelfTestState = ALARM_AUDIO_SELF_TEST_STATE_COMPLETE; + } + break; + + case ALARM_AUDIO_SELF_TEST_STATE_NO_TONE: + if ( almLGCurrent < ALARM_AUDIO_CURRENT_LG_MAX_MA ) + { + result = SELF_TEST_STATUS_PASSED; + alarmAudioSelfTestState = ALARM_AUDIO_SELF_TEST_STATE_COMPLETE; + } + else if ( TRUE == didTimeout( audioTestStartTime, ALARM_AUDIO_MAX_TEST_TIME_MS ) ) + { + result = SELF_TEST_STATUS_FAILED; + SET_ALARM_WITH_2_F32_DATA( ALARM_ID_TD_ALARM_AUDIO_SELF_TEST_FAILURE, almLGCurrent, ALARM_AUDIO_CURRENT_LG_MAX_MA ); + alarmAudioSelfTestState = ALARM_AUDIO_SELF_TEST_STATE_COMPLETE; + } + break; + + case ALARM_AUDIO_SELF_TEST_STATE_COMPLETE: + alarmAudioSelfTestState = ALARM_AUDIO_SELF_TEST_STATE_START; // Should only get here if re-starting self-tests. + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_HD_INVALID_ALARM_AUDIO_STATE, (U32)alarmAudioSelfTestState ) + break; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The resetAlarmAudioPOSTState function resets the alarm audio POST state. + * @details \b Inputs: none + * @details \b Outputs: alarmAudioSelfTestState + * @return none + *************************************************************************/ +void resetAlarmAudioPOSTState( void ) +{ + alarmAudioSelfTestState = ALARM_AUDIO_SELF_TEST_STATE_START; +} + +/*********************************************************************//** + * @brief + * The testSetAlarmAudioVolumeLevelOverride function sets the override for the + * alarm audio volume. + * @details \b Inputs: none + * @details \b Outputs: alarmAudioVolumeLevel + * @param volume Volume level (1..5) to set override to for alarm audio + * @return TRUE if override is successful, FALSE if not + *************************************************************************/ +BOOL testSetAlarmAudioVolumeLevelOverride( U32 volume ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + alarmAudioVolumeLevel.ovData = MAX_ALARM_VOLUME_LEVEL - volume; + alarmAudioVolumeLevel.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetAlarmAudioVolumeLevelOverride function resets the override for + * the alarm audio volume. + * @details \b Inputs: none + * @details \b Outputs: alarmAudioVolumeLevel + * @return TRUE if override reset is successful, FALSE if not + *************************************************************************/ +BOOL testResetAlarmAudioVolumeLevelOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + alarmAudioVolumeLevel.override = OVERRIDE_RESET; + alarmAudioVolumeLevel.ovData = alarmAudioVolumeLevel.ovInitData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSetPrimaryAlarmAudioCurrentHGOverride function sets the override + * for the alarm audio current (high gain) in mA. + * @details \b Inputs: none + * @details \b Outputs: alarmPrimaryAudioCurrentHG + * @param mA The milliamps measured from high gain channel of primary alarm audio + * @return TRUE if override is successful, FALSE if not + *************************************************************************/ +BOOL testSetPrimaryAlarmAudioCurrentHGOverride( F32 mA ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + alarmPrimaryAudioCurrentHG.ovData = mA; + alarmPrimaryAudioCurrentHG.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetPrimaryAlarmAudioCurrentHGOverride function resets the override + * for the alarm audio current (high gain). + * @details \b Inputs: none + * @details \b Outputs: alarmPrimaryAudioCurrentHG + * @return TRUE if override reset is successful, FALSE if not + *************************************************************************/ +BOOL testResetPrimaryAlarmAudioCurrentHGOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + alarmPrimaryAudioCurrentHG.override = OVERRIDE_RESET; + alarmPrimaryAudioCurrentHG.ovData = alarmPrimaryAudioCurrentHG.ovInitData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSetPrimaryAlarmAudioCurrentLGOverride function sets the override + * for the alarm audio current (low gain) in mA. + * @details \b Inputs: none + * @details \b Outputs: alarmPrimaryAudioCurrentLG + * @param mA The milliamps measured from low gain channel of primary alarm audio + * @return TRUE if override is successful, FALSE if not + *************************************************************************/ +BOOL testSetPrimaryAlarmAudioCurrentLGOverride( F32 mA ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + alarmPrimaryAudioCurrentLG.ovData = mA; + alarmPrimaryAudioCurrentLG.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetPrimaryAlarmAudioCurrentLGOverride function resets the override + * for the alarm audio current (low gain). + * @details \b Inputs: none + * @details \b Outputs: alarmPrimaryAudioCurrentLG + * @return TRUE if override reset is successful, FALSE if not + *************************************************************************/ +BOOL testResetPrimaryAlarmAudioCurrentLGOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + alarmPrimaryAudioCurrentLG.override = OVERRIDE_RESET; + alarmPrimaryAudioCurrentLG.ovData = alarmPrimaryAudioCurrentLG.ovInitData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSetBackupAlarmAudioCurrentOverride function sets the override for + * the alarm audio current (backup) in mA. + * @details \b Inputs: none + * @details \b Outputs: alarmBackupAudioCurrent + * @param mA The milliamps measured from backup channel of primary alarm audio + * @return TRUE if override is successful, FALSE if not + *************************************************************************/ +BOOL testSetBackupAlarmAudioCurrentOverride( F32 mA ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + alarmBackupAudioCurrent.ovData = mA; + alarmBackupAudioCurrent.override = OVERRIDE_KEY; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetBackupAlarmAudioCurrentOverride function resets the override + * for the alarm audio current (backup). + * @details \b Inputs: none + * @details \b Outputs: alarmBackupAudioCurrent + * @return TRUE if override reset is successful, FALSE if not + *************************************************************************/ +BOOL testResetBackupAlarmAudioCurrentOverride( void ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + alarmBackupAudioCurrent.override = OVERRIDE_RESET; + alarmBackupAudioCurrent.ovData = alarmBackupAudioCurrent.ovInitData; + } + + return result; +} + +/**@}*/ Index: firmware/App/Controllers/AlarmAudio.h =================================================================== diff -u --- firmware/App/Controllers/AlarmAudio.h (revision 0) +++ firmware/App/Controllers/AlarmAudio.h (revision 9d755b0734315e11c8fef5768815697d3bd50287) @@ -0,0 +1,66 @@ +/************************************************************************** +* +* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* +* THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +* WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +* +* @file AlarmAudio.h +* +* @author (last) Sean +* @date (last) 30-Jul-2024 +* +* @author (original) Sean +* @date (original) 30-Jul-2024 +* +***************************************************************************/ + +#ifndef __ALARM_AUDIO_H__ +#define __ALARM_AUDIO_H__ + +#include "TDCommon.h" + +/** + * @defgroup AlarmAudio AlarmLamp + * @brief The Alarm Audio unit controls the audio for the alarm system. + * Provides functions for requesting alarm audio patterns and testing the + * alarm audio. + * + * @addtogroup AlarmAudio + * @{ + */ + +// ********** public definitions ********** + +#define MAX_ALARM_VOLUME_LEVEL 5 ///< Maximum alarm audio level. +#define MAX_ALARM_VOLUME_ATTENUATION 4 ///< Maximum alarm audio attenuation. +#define MIN_ALARM_VOLUME_ATTENUATION 0 ///< Minimum alarm audio attenuation. + +// ********** public function prototypes ********** + +void initAlarmAudio( void ); +void execAlarmAudio( void ); + +void setAlarmAudio( void ); +void setAlarmAudioVolume( U32 volumeLevel ); + +U32 getAlarmAudioVolume( void ); +F32 getAlarmAudioPrimaryHighGainCurrent( void ); +F32 getAlarmAudioPrimaryLowGainCurrent( void ); +F32 getAlarmAudioBackupCurrent( void ); + +SELF_TEST_STATUS_T execAlarmAudioSelfTest( void ); +void resetAlarmAudioPOSTState( void ); + +BOOL testSetAlarmAudioVolumeLevelOverride( U32 volume ); +BOOL testResetAlarmAudioVolumeLevelOverride( void ); +BOOL testSetPrimaryAlarmAudioCurrentHGOverride( F32 mA ); +BOOL testResetPrimaryAlarmAudioCurrentHGOverride( void ); +BOOL testSetPrimaryAlarmAudioCurrentLGOverride( F32 mA ); +BOOL testResetPrimaryAlarmAudioCurrentLGOverride( void ); +BOOL testSetBackupAlarmAudioCurrentOverride( F32 mA ); +BOOL testResetBackupAlarmAudioCurrentOverride( void ); + +/**@}*/ + +#endif