gf_ai_box/include/modules/audiotk/audio_vol_ctrl.h
2026-04-12 17:47:54 +08:00

264 lines
9.4 KiB
C

/*
*******************************************************************************
* Copyright (c) 2010-2022 VATICS(KNERON) Inc. All rights reserved.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* | |
* | THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT |
* | ANY PRIOR NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY |
* | VATICS(KNERON) INC. |
* +-----------------------------------------------------------------+
*
*******************************************************************************
*/
#ifndef AUDIO_VOL_CTRL_H
#define AUDIO_VOL_CTRL_H
#ifdef __cplusplus
extern "C" {
#endif
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpedantic"
#include <alsa/asoundlib.h>
#pragma GCC diagnostic pop
// ================================ Simple Controls ================================
typedef struct
{
snd_pcm_stream_t eStream; /**< It can be SND_PCM_STREAM_PLAYBACK or SND_PCM_STREAM_CAPTURE. */
const char *szCard; /**< Select the card number to control. The format of it is "hw:N" where N is specified card number. If it is NULL, it will use "default" */
const char *szSelemName; /**< Name part of a mixer simple element identifier. If it is NULL, it will use "Master" (We can get it from amixer). */
unsigned int dwSelemIndex; /**< Index part of a mixer simple element identifier (We can get it from amixer).*/
} ATK_AUDIO_SCTRL_CONFIG_T;
/**
* @brief Function to set volume of all channels.
*
* @param[in] ptConfig The configuration for mixer.
* @param[in] lVol Volume (0~100).
* @return 0: Successful, Negative value: Failed, -2: No control.
*/
int ATK_Audio_SCtrl_SetVolume(const ATK_AUDIO_SCTRL_CONFIG_T *ptConfig, long lVol);
/**
* @brief Function to set volume of the specific channel.
*
* @param[in] ptConfig The configuration for mixer.
* @param[in] eChannelId ID of the channel.
* @param[in] lVol Volume (0~100).
* @return 0: Successful, Negative value: Failed, -2: No control.
*/
int ATK_Audio_SCtrl_SetChannelVolume(const ATK_AUDIO_SCTRL_CONFIG_T *ptConfig, snd_mixer_selem_channel_id_t eChannelId, long lVol);
/**
* @brief Function to get volume of the specific channel.
*
* @param[in] ptConfig The configuration for mixer.
* @param[in] eChannelId ID of the channel.
* @param[out] lVol Volume (0~100).
* @return 0: Successful, Negative value: Failed, -2: No control.
*/
int ATK_Audio_SCtrl_GetChannelVolume(const ATK_AUDIO_SCTRL_CONFIG_T *ptConfig, snd_mixer_selem_channel_id_t eChannelId, long *plVol);
/**
* @brief Function to set volume in dB of all channels.
*
* @param[in] ptConfig The configuration for mixer.
* @param[in] lVol The value in dB of volume control.
* @return 0: Successful, Negative value: Failed, -2: No control.
*/
int ATK_Audio_SCtrl_SetVolume_dB(const ATK_AUDIO_SCTRL_CONFIG_T *ptConfig, long lVol);
/**
* @brief Function to set volume in dB of the specific channel.
*
* @param[in] ptConfig The configuration for mixer.
* @param[in] eChannelId ID of the channel.
* @param[in] lVol The value in dB of volume control.
* @return 0: Successful, Negative value: Failed, -2: No control.
*/
int ATK_Audio_SCtrl_SetChannelVolume_dB(const ATK_AUDIO_SCTRL_CONFIG_T *ptConfig, snd_mixer_selem_channel_id_t eChannelId, long lVol);
/**
* @brief Function to get volume in dB of the specific channel.
*
* @param[in] ptConfig The configuration for mixer.
* @param[in] eChannelId ID of the channel.
* @param[out] plVol The value in dB of volume control.
* @return 0: Successful, Negative value: Failed, -2: No control.
*/
int ATK_Audio_SCtrl_GetChannelVolume_dB(const ATK_AUDIO_SCTRL_CONFIG_T *ptConfig, snd_mixer_selem_channel_id_t eChannelId, long *plVol);
/**
* @brief Function to get the range of volume in dB.
*
* @param[in] ptConfig The configuration for mixer.
* @param[out] plMin The min value in dB of volume control.
* @param[out] plMax The max alue in dB of volume control.
* @return 0: Successful, Negative value: Failed, -2: No control.
*/
int ATK_Audio_SCtrl_GetVolume_Range_dB(const ATK_AUDIO_SCTRL_CONFIG_T *ptConfig, long *plMin, long *plMax);
/**
* @brief Function to turn on or off all channels.
*
* @param[in] ptConfig The configuration for mixer.
* @param[in] bIsOn non-zero: on, zero: off.
* @return 0: Successful, Negative value: Failed, -2: No control.
*/
int ATK_Audio_SCtrl_SetSwitch(const ATK_AUDIO_SCTRL_CONFIG_T *ptConfig, int bIsOn);
/**
* @brief Function to turn on or off the specific channel.
*
* @param[in] ptConfig The configuration for mixer.
* @param[in] eChannelId ID of the channel.
* @param[in] bIsOn non-zero: on, zero: off.
* @return 0: Successful, Negative value: Failed, -2: No control.
*/
int ATK_Audio_SCtrl_SetChannelSwitch(const ATK_AUDIO_SCTRL_CONFIG_T *ptConfig, snd_mixer_selem_channel_id_t eChannelId, int bIsOn);
/**
* @brief Function to get the switch status of the specific channel.
*
* @param[in] ptConfig The configuration for mixer.
* @param[in] eChannelId ID of the channel.
* @param[out] pbIsOn non-zero: on, zero: off.
* @return 0: Successful, Negative value: Failed, -2: No control.
*/
int ATK_Audio_SCtrl_GetChannelSwitch(const ATK_AUDIO_SCTRL_CONFIG_T *ptConfig, snd_mixer_selem_channel_id_t eChannelId, int *pbIsOn);
/**
* @brief Function to set one enumerated element.
*
* @param[in] ptConfig The configuration for mixer.
* @param[in] eChannelId ID of the channel.
* @param[in] szEnumStr The name of the enumerated item.
* @return 0: Successful, Negative value: Failed.
*/
int ATK_Audio_SCtrl_Set_Enumerated(const ATK_AUDIO_SCTRL_CONFIG_T *ptConfig, snd_mixer_selem_channel_id_t eChannelId, const char *szEnumStr);
// ================================ Controls ================================
typedef struct
{
const char *szCard; /**< Select the card number to control. The format of it is "hw:N" where N is specified card number. If it is NULL, it will use "default" */
const char *szElemName; /**< Name part of a mixer simple element identifier. If it is NULL, it will use "Master" (We can get it from amixer). */
} ATK_AUDIO_CTRL_CONFIG_T;
/**
* @brief Function to set one interger or boolean element.
*
* @param[in] ptConfig The configuration for mixer.
* @param[in] dwIdx Entry index of the element (You can think it is channel index, when you set volume).
* @param[in] lVal The value for the entry.
* @return 0: Successful, Negative value: Failed.
*/
int ATK_Audio_Ctrl_Set_Int_Or_Bool(const ATK_AUDIO_CTRL_CONFIG_T *ptConfig, unsigned int dwIdx, long lVal);
// ================================ High level control ================================
typedef enum { kTKAudioMicIn = 0, kTKAudioLineIn, kTKAudioByPass } TK_AUDIO_INPUT_TYPE;
/**
* @brief Function to set the volume of capture.
*
* @param[in] lVol The volume of capture (0~100).
* @return 0: Successful, Negative value: Failed.
*/
int ATK_Audio_SetCaptureVolume(long lVol);
/**
* @brief Function to set the volume in dB of capture.
*
* @param[in] lVol The dB value of capture.
* @return 0: Successful, Negative value: Failed.
*/
int ATK_Audio_SetCaptureVolume_dB(long lVol);
/**
* @brief Function to set the pga control value.
*
* @param[in] lPga value for capture (0~100).
* @return 0: Successful, Negative value: Failed.
*/
int ATK_Audio_SetCapturePga(long lPga);
/**
* @brief Function to set the pga control value in dB.
*
* @param[in] lPga value in dB for capture.
* @return 0: Successful, Negative value: Failed.
*/
int ATK_Audio_SetCapturePga_dB(long lPga);
/**
* @brief Function to mute or unmute the input.
*
* @param[in] bIsMute non-zero: mute, zero: unmute.
* @param[in] eType The input which you want to control.
* @return 0: Successful, Negative value: Failed.
*/
int ATK_Audio_SetCaptureMute(int bIsMute, TK_AUDIO_INPUT_TYPE eType);
/**
* @brief Function to select one input.
*
* @param[in] eType The input which you want to control.
* @return 0: Successful, Negative value: Failed.
*/
int ATK_Audio_InputSelection(TK_AUDIO_INPUT_TYPE eType);
/**
* @brief Function to set the volume of playback.
*
* @param[in] lVol The volume of playback (0~100).
* @return 0: Successful, Negative value: Failed.
*/
int ATK_Audio_SetPlaybackVolume(long lVol);
/**
* @brief Function to set the volume in dB of playback.
*
* @param[in] lVol The dB value of playback.
* @return 0: Successful, Negative value: Failed.
*/
int ATK_Audio_SetPlaybackVolume_dB(long lVol);
/**
* @brief Function to mute or unmute the playback.
*
* @param[in] bIsMute non-zero: mute, zero: unmute.
* @return 0: Successful, Negative value: Failed.
*/
int ATK_Audio_SetPlaybackMute(int bIsMute);
/**
* @brief Function to print control information of the playback.
*
* @return 0: Successful, Negative value: Failed.
*/
int ATK_Audio_PrintControl();
/**
* @brief Function to set control value by given name.
*
* @param[in] pcName Control name.
* @param[in] sdwValue Control value.
* @return 0: Successful, Negative value: Failed.
*/
int ATK_Audio_SetControl(char* pcName, int sdwValue);
#ifdef __cplusplus
}
#endif
#endif