⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 headset_volume.c

📁 BlueLab 3.5.2 单声道耳机源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************Copyright (C) Cambridge Silicon Radio Ltd. 2004-2006Part of BlueLab 3.6.2-releaseFILE NAME    headset_volume.c    DESCRIPTION    module responsible for Vol control - part of the sound manager    */#include "headset_configmanager.h"#include "headset_soundmanager.h"#include "headset_LEDmanager.h"#include "headset_statemanager.h"#include "headset_volume.h"#include <codec.h>#include <csrtypes.h>#include <pcm.h>#include <ps.h>#include <stddef.h>/****************************************************************************VARIABLES      */    /*the ofset to scale the volume by if we are scaling directly 4-19*/#define VOLUME_SPEAKER_CODEC_OFFSET 4    /*the delay to wait before completing the mic gain unmute - messageSentLater...*/#define VOLUME_MIC_UNMUTE_DELAY_MS 100/****************************************************************************Local Functions*/static uint16 VolumeScaleVolume ( uint16 pVolume , uint16 pRange );static void   VolumeSetHeadsetVolume ( hsTaskData * pApp  ,uint16 pNewVolume , bool pPlayTone)  ;static void   VolumeSendAndSetHeadsetVolume (hsTaskData * pApp  , uint16 pNewVolume ,bool pPlayTone ) ;static void   VolumeScaleAndSetCodecs ( hsTaskData * pApp , uint16 pNewVolume ) ;static void   VolumeStartUnMuteMicrophone ( hsTaskData * pApp ) ;/****************************************************************************FUNCTIONS*//****************************************************************************NAME  VolumeConfigureVolumeSettingsDESCRIPTION Configures the volume settings - via config manager -    RETURNS void    */void VolumeConfigureVolumeSettings ( hsTaskData * pApp ,                                           uint16 pProfileVolume ,                                            uint16 pIncLevel ,                                            uint16 pDecLevel ,                                           uint16 pMicLevel ,                                            HeadsetTone_t pTone,                                           uint16 pVolGain ,                                           uint16 pMicGain  )  {    if( (pProfileVolume >= 0) && ( pProfileVolume <= SOM_NUM_VOL_SETTINGS ) )    {        pApp->theSoundTask.gVolMaps [ pProfileVolume ].IncVol  = pIncLevel ;        pApp->theSoundTask.gVolMaps [ pProfileVolume ].DecVol  = pDecLevel ;                pApp->theSoundTask.gVolMaps [ pProfileVolume ].Mic  = pMicLevel ;                pApp->theSoundTask.gVolMaps [ pProfileVolume ].VolGain  = pVolGain ;                pApp->theSoundTask.gVolMaps [ pProfileVolume ].MicGain  = pMicGain ;                pApp->theSoundTask.gVolMaps [ pProfileVolume ].Tone = TONE_NOT_DEFINED ;            /*if there is a tone defined*/        if (soundManagerIsToneDefined (pTone) )        {          pApp->theSoundTask.gVolMaps [ pProfileVolume ].Tone = pTone ;        }                  SOM_DEBUG(("SOM: CfgVol [%d] [%d][%d] [%d] [%d]]\n" , pProfileVolume                                                      , pApp->theSoundTask.gVolMaps [ pProfileVolume ].IncVol                                                     , pApp->theSoundTask.gVolMaps [ pProfileVolume ].DecVol                                                     , pApp->theSoundTask.gVolMaps [ pProfileVolume ].Mic                                                     , pApp->theSoundTask.gVolMaps [ pProfileVolume ].Tone                                                                                                           )) ;        SOM_DEBUG(("SOM: [%d][%d]\n",  pApp->theSoundTask.gVolMaps [ pProfileVolume ].VolGain,  pApp->theSoundTask.gVolMaps [ pProfileVolume ].MicGain))    }    else    {        SOM_DEBUG(("SOM: CfgVol ![%d]\n" , pProfileVolume)) ;    }     }/****************************************************************************NAME  VolumeDefaultDESCRIPTION sets a default volumeRETURNS void    */void VolumeDefault ( hsTaskData * pApp , uint16 level){    /*set initial volume*/    pApp->theSoundTask.gSMVolumeLevel= level;       /*set our internal volume level*/    VolumeSendAndSetHeadsetVolume ( pApp ,  pApp->theSoundTask.gSMVolumeLevel ,FALSE) ;   }/*************************************************************************NAME        VolumeHandleVolumeInd    DESCRIPTION    Handles a volume indication from an AG - does not send a response backRETURNS    void*/void VolumeHandleVolumeInd ( hsTaskData * pApp , uint16 pProfileVolume ){        SOM_DEBUG(("SOM: VolInd[%d][%d]\n",pApp->theSoundTask.gSMVolumeLevel, pProfileVolume))  ;        VolumeSetHeadsetVolume ( pApp , pProfileVolume ,TRUE) ;}/*************************************************************************NAME        VolumeHandleMicInd    DESCRIPTION    Handles a Mic gain indication from an AG     RETURNS    void*/void VolumeSetMicLevel ( hsTaskData * pApp , uint16 pMicGain ) {    uint16 lCodecVal = 0;            /*scale the codec gain accordingly*/    lCodecVal = VolumeScaleVolume ( pMicGain ,CodecInputGainRange() ) ;        if (pApp->features.UseUserDefinedCodecGains)    {        SOM_DEBUG(("SOM: User Codec\n")) ;                lCodecVal = pApp->theSoundTask.gVolMaps[pMicGain].MicGain;    }    SOM_DEBUG(("SOM: Mic Codec [%d]\n" , lCodecVal)) ;    if ( stateManagerIsConnected() )    {            /*use correct profile instance*/        if (pApp->profile_connected == hfp_handsfree_profile)        {            HfpSendMicrophoneVolume(pApp->hfp , pMicGain);        }        else        {               HfpSendMicrophoneVolume(pApp->hsp , pMicGain);        }    }        /*set the mic gain as requested*/    CodecSetInputGainA (lCodecVal)  ;    CodecSetInputGainB (lCodecVal) ;            /*set the mic bias*/    LEDManagerSetMicBias ( pApp , (TRUE && pMicGain) ) ;        SOM_DEBUG(("SOM :MicInd[%d][%d]\n" , pMicGain , lCodecVal)) ; }/****************************************************************************NAME  VolumeUpDESCRIPTION Increments voulmeRETURNS void    */void VolumeUp ( hsTaskData * pApp ){    uint16 lOldVol = pApp->theSoundTask.gSMVolumeLevel ;        uint16 lNewVol = pApp->theSoundTask.gVolMaps[lOldVol].IncVol ;        VolumeSendAndSetHeadsetVolume ( pApp , lNewVol ,TRUE) ;        SOM_DEBUG(("SOM: VolUp[%d][%d]\n",lOldVol, lNewVol))  ;}/****************************************************************************NAME  VolumeDownDESCRIPTION Decrements volume - sends a response to the AGRETURNS void    */void VolumeDown ( hsTaskData * pApp ){    uint16 lOldVol = pApp->theSoundTask.gSMVolumeLevel ;        uint16 lNewVol = pApp->theSoundTask.gVolMaps[lOldVol].DecVol ;            VolumeSendAndSetHeadsetVolume ( pApp , lNewVol , TRUE ) ;        SOM_DEBUG(("SOM: VolDwn[%d][%d]\n",lOldVol, lNewVol))  ;}/****************************************************************************NAME  VolumeToggleMuteDESCRIPTION Toggles the mute stateRETURNS void    */void VolumeToggleMute ( hsTaskData * pApp ){    SOM_DEBUG(("SOM: Mute T [%c]\n" , (pApp->theSoundTask.gMuted ? 'F':'T') )) ;            /*if then old state was muted*/    if (pApp->theSoundTask.gMuted == VOL_MUTED )    {        MessageSend( &pApp->task , EventMuteOff , 0 ) ;    }    else    {        MessageSend( &pApp->task , EventMuteOn , 0 ) ;    }}/****************************************************************************NAME  VolumeMuteOnDESCRIPTION Enables MuteRETURNS void    */void VolumeMuteOn ( hsTaskData * pApp ){    SOM_DEBUG(("SOM: Mute\n")) ;                  if (pApp->features.MuteSpeakerAndMic )    {        /*and set the codecs  to 0*/        VolumeScaleAndSetCodecs (pApp , 0 );    }             /*and disable the microphone       LEDManagerSetMicBias ( FALSE ) ;*/     VolumeSetMicLevel ( pApp , 0 ) ;      StreamDisconnect( StreamSourceFromSink(pApp->sco_sink) , 0);          /*update the mutestate*/        pApp->theSoundTask.gMuted = VOL_MUTED ;        VolumeMuteRemind ( pApp ) ;    }/****************************************************************************NAME  VolumeMuteOffDESCRIPTION Disables MuteRETURNS void    */void VolumeMuteOff ( hsTaskData * pApp ){            /*update the mutestate*/        SOM_DEBUG(("SOM: UnMute\n")) ;            pApp->theSoundTask.gMuted = VOL_NOT_MUTED   ;         /*cancel any mute reminders*/    MessageCancelAll( &pApp->task , EventMuteReminder ) ;        if ( pApp->features.MuteSpeakerAndMic )    {               /*restore the volume*/        VolumeScaleAndSetCodecs (pApp , pApp->theSoundTask.gSMVolumeLevel ) ;       }         StreamConnect(StreamSourceFromSink(pApp->sco_sink), StreamPcmSink(0));            StreamConnect(StreamPcmSource(0), pApp->sco_sink);                 /*enable the microphone*/    VolumeStartUnMuteMicrophone ( pApp ) ;}/****************************************************************************NAME  VolumeUnMuteMicrophoneDESCRIPTION    Current headset applications running on BC2-Audio and BC3-Audio ramp up the     microphone gain when unmuting the microphone. This is a historical method due     to an issue on BC2-Audio where it was possible to latch up the internal input     amplifier.    The following method was used on BC3-Audio and the consensus is too implement this    method on BC4-Audio to avoid any audible pops as the microphone is unmuted.    To Unmute:    1. Set mic gain to 0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -