亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? headset_volume.c

?? BLUETOOTH Stereo Headset Source Code,含CVC(噪音消除,回聲抵消),可用于開發藍牙立體聲耳機,藍牙車載,經過測試.
?? C
字號:
/****************************************************************************
Copyright (C) Cambridge Silicon Radio Ltd. 2004-2006
Part of BlueLab 3.6.2-release

FILE NAME
    headset_volume.c        

DESCRIPTION
    Controls the volume of the headset.

*/


/****************************************************************************
    Header files
*/
#include "headset_private.h"
#include "av_stream_control.h"
#include "headset_tones.h"
#include "headset_volume.h"

#include <codec.h>
#include <panic.h>
#include <pcm.h>
#include <pio.h>
#include <ps.h>
#include <stdlib.h>
#include <audio.h>
#include <string.h>

#define VOLUME_MIC_UNMUTE_DELAY_MS 100
#define APP_MUTE_REMINDER_TIME_INT 5000
#ifdef DEBUG_VOLUME
#define VOLUME_DEBUG(x) DEBUG(x)
#else
#define VOLUME_DEBUG(x) 
#endif


static const uint8 vgsToCodecGain[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};

static void playVolLimitTone(headsetTaskData* app)
{
    headsetPlayTone(app, tone_type_vol_limit);
}


/**************************************************************************/
void initialiseVolume(headsetTaskData* app)
{
    /* Read the volume from PS. The volume is stored as:
    
      HF Volume     |    AV volume  
      ---------------------------------
      |15| | | | | | |8|7| | | | | | |0|
      ---------------------------------
    */
    if (!PsRetrieve(VOLUME_LEVEL, &app->speaker_volume, sizeof(app->speaker_volume)))
    {
        /* set the headset gain to a reasonable value */
        app->speaker_volume.hfp_volume = 0x0A;
        app->speaker_volume.av_volume = 0x0A;
    }
	
    AudioSetVolume(	app->speaker_volume.hfp_volume , app->codec_task ) ;
#ifdef DEV_1645
	/* Set the microphone bias voltage level: */
	PioSetMicBiasHwVoltage(11);	/* 11 = 2.71v */
#endif


}


/**************************************************************************/
void headsetHandleAvVolUp(headsetTaskData* app)
{
    if (app->speaker_volume.av_volume < 15)
    {
        app->speaker_volume.av_volume++;
		headsetUpdateVolume(app->codec_task, app->speaker_volume.av_volume);
    }
    else
    {
        playVolLimitTone(app);
    }
}


/**************************************************************************/
void headsetHandleAvVolDown(headsetTaskData* app)
{
    if (app->speaker_volume.av_volume > 0)
    {
        app->speaker_volume.av_volume--;
            headsetUpdateVolume(app->codec_task, app->speaker_volume.av_volume);
    }
    else
    {
        playVolLimitTone(app);
    }
}


/**************************************************************************/
void headsetHandleHfVolUp(headsetTaskData* app)
{
    if (app->speaker_volume.hfp_volume < 15)
    {
        app->speaker_volume.hfp_volume++;

		AudioSetVolume (app->speaker_volume.hfp_volume , app->codec_task ) ;	
    }
    else
    {
        playVolLimitTone(app);
    }
}


/**************************************************************************/
void headsetHandleHfVolDown(headsetTaskData* app)
{
    if (app->speaker_volume.hfp_volume > 0)
    {
        app->speaker_volume.hfp_volume--;
	
		AudioSetVolume(	app->speaker_volume.hfp_volume , app->codec_task ) ;
	}
    else
    {
        playVolLimitTone(app);
    }
}


/**************************************************************************/
void headsetCheckHfVolLimits(headsetTaskData* app)
{
    if ((app->speaker_volume.hfp_volume == 15) || (app->speaker_volume.hfp_volume == 0))
        playVolLimitTone(app);
}


/**************************************************************************/
void headsetUpdateVolume(Task codec_task, uint8 gain)
{
    if (gain <= 15)
        CodecSetOutputGainNow(codec_task, vgsToCodecGain[gain], left_and_right_ch);
    VOLUME_DEBUG(("VOLUME: New volume: %d\n",gain));
}
/***************************************************************************/
void headsetMicrophoneMuteToggle(headsetTaskData *app)
{
	if(app->mic_mute_on)
	{
		headsetMicrophoneMuteOff(app);
	}
	else
	{
		headsetMicrophoneMuteOn(app);
	}
}
/***************************************************************************/
void headsetMicrophoneMuteOn(headsetTaskData *app)
{
	AudioSetMode (AUDIO_MODE_MUTE_SPEAKER , NULL) ;
       /* Start mute reminder operation */
	MessageSendLater( &app->task , APP_MUTE_REMINDER , 0 , 1000) ;
	
	app->mic_mute_on = TRUE;

}

/***************************************************************************/
void headsetMicrophoneMuteOff(headsetTaskData *app)
{
    if ((app->hfp_state == headsetActiveCall) && app->sco_sink)
    {
       VOLUME_DEBUG(("VOLUME: Mic mute off\n"));
	   app->mic_mute_on = FALSE;
	   MessageCancelAll( &app->task , APP_MUTE_REMINDER) ;
       /* Reconnect the microphone */
		AudioSetMode(AUDIO_MODE_CONNECTED , NULL);

       /* Send a message to complete the unmute a short time later */
	   MessageSendLater ( &app->task , APP_UNMUTE_MIC , 0 , VOLUME_MIC_UNMUTE_DELAY_MS ) ;
   }
}

/***************************************************************************/
void headsetVolumeSetMicLevel (headsetTaskData *app , uint16 micGain) 
{
    
#ifndef INCLUDE_CVC
    uint16 codecVal = 0;
   
    /*scale the codec gain accordingly*/
    codecVal = vgsToCodecGain[micGain] ;

    if (app->profile_connected == hfp_handsfree_profile)
    {
        HfpSendMicrophoneVolume(app->hfp , micGain);
    }
    else
    {   
        HfpSendMicrophoneVolume(app->hsp , micGain);
    }

    /*set the mic gain as requested*/
    CodecSetInputGainNow(app->codec_task, codecVal, left_and_right_ch);
#endif    
    
}

/****************************************************************************
NAME 
    headsetVolumeCompleteUnmuteMicrophone

DESCRIPTION
    method to complete the unmute action - ramps the vol up to the desired level
    This should occur after the delay between setting the mic bias and beginning the
    mic gain increase

RETURNS

*/
void headsetVolumeCompleteUnmuteMicrophone (headsetTaskData *app)
{
    
#ifndef INCLUDE_CVC
    uint16 micLevel = app->mic_volume;
    uint16 rampLevel = 0 ;    
    
/*4. Ramp up the microphone gain from 1 to the desired value*/
    for ( rampLevel = 1; rampLevel < (micLevel+1) ; rampLevel++)
    {
        headsetVolumeSetMicLevel ( app ,rampLevel ) ;
    }
#endif
    
}
	

/********************************************************************************
NAME 
    VolumeMuteRemind

DESCRIPTION
    Plays a beep every 5 seconds to indicate that the Mute button has been pressed

RETURNS  
*/
void VolumeMuteRemind (headsetTaskData *app)
{
	MessageSendLater( &app->task , APP_MUTE_REMINDER , 0 , APP_MUTE_REMINDER_TIME_INT) ;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产毛片aaaaa无费看| gogo大胆日本视频一区| 成人午夜在线视频| 欧美欧美午夜aⅴ在线观看| 中文一区在线播放| 国产一区免费电影| 制服丝袜中文字幕一区| 国产精品久久久久一区| 久久aⅴ国产欧美74aaa| 欧美特级限制片免费在线观看| 国产丝袜在线精品| 老司机精品视频一区二区三区| 欧美在线观看18| 亚洲免费色视频| 成人三级伦理片| 国产亚洲一二三区| 美女mm1313爽爽久久久蜜臀| 欧美午夜精品免费| 亚洲国产一区二区在线播放| 色综合一个色综合| 亚洲色图制服丝袜| 99精品欧美一区| 日本一区二区视频在线观看| 国产中文字幕一区| 精品国产乱码久久久久久闺蜜| 亚洲成人在线观看视频| 欧洲一区在线观看| 一区二区三区欧美| 91成人网在线| 天天影视色香欲综合网老头| 在线亚洲高清视频| 亚洲第一电影网| 这里是久久伊人| 天天综合日日夜夜精品| 欧美一区二区在线免费播放| 青青草一区二区三区| 日韩无一区二区| 九九九久久久精品| 久久久一区二区| 成人午夜视频免费看| 国产精品久久久久毛片软件| 91色九色蝌蚪| 午夜久久久影院| 日韩精品资源二区在线| 国产精品香蕉一区二区三区| 久久精品亚洲精品国产欧美kt∨| 国产成人免费在线视频| 国产精品久久夜| 欧美午夜片在线看| 久久国产精品99久久人人澡| 久久亚洲一区二区三区四区| 成人短视频下载| 亚洲v日本v欧美v久久精品| 欧美一区二区在线视频| 国产成人日日夜夜| 一区二区三区日韩精品| 亚洲精品一二三四区| 色一区在线观看| 蜜臀av一区二区| 国产人成一区二区三区影院| 91久久国产最好的精华液| 日本午夜一区二区| 国产精品第13页| 欧美福利视频一区| 成人性视频网站| 日韩一区精品视频| 国产嫩草影院久久久久| 欧美在线短视频| 国产成人亚洲综合a∨婷婷图片| 亚洲精品免费在线播放| 欧美成人免费网站| 色综合久久综合网| 韩国一区二区三区| 亚洲一区二区三区四区的| 精品国产成人系列| 欧美视频日韩视频| 成人午夜又粗又硬又大| 蜜桃精品视频在线| 夜夜夜精品看看| 久久久久久久久伊人| 欧美女孩性生活视频| 波多野结衣91| 国产麻豆精品一区二区| 亚洲电影一区二区三区| 中文字幕av资源一区| 日韩一区二区视频在线观看| 91天堂素人约啪| 国产乱码字幕精品高清av| 丝瓜av网站精品一区二区| 亚洲欧美一区二区在线观看| 日韩精品最新网址| 91精品国产综合久久香蕉麻豆| 99久久精品免费看| 岛国一区二区在线观看| 韩国欧美一区二区| 久久精品国产澳门| 青青草国产精品亚洲专区无| 一区二区三区国产精华| 中文字幕中文字幕一区| 久久久久免费观看| 精品久久一区二区三区| 欧美丰满一区二区免费视频| 色综合激情五月| 色中色一区二区| 色成人在线视频| 色呦呦日韩精品| 日本道免费精品一区二区三区| 成人国产精品免费观看| 成人免费看的视频| 国产伦精品一区二区三区免费迷 | 国产九色sp调教91| 美女视频黄久久| 青青草国产精品97视觉盛宴| 日韩国产一区二| 日本成人在线视频网站| 热久久国产精品| 毛片av中文字幕一区二区| 六月丁香婷婷色狠狠久久| 激情欧美一区二区三区在线观看| 精品亚洲国内自在自线福利| 国产在线一区二区综合免费视频| 韩国一区二区三区| 成人在线综合网| 色天使久久综合网天天| 欧美亚洲国产bt| 制服丝袜中文字幕一区| 日韩亚洲欧美高清| 日本亚洲欧美天堂免费| 午夜成人免费视频| 麻豆国产欧美日韩综合精品二区| 日韩经典中文字幕一区| 麻豆国产91在线播放| 国产91综合一区在线观看| av不卡免费电影| 欧美色图一区二区三区| 欧美一区二区日韩一区二区| 久久女同精品一区二区| 亚洲欧洲三级电影| 日韩专区欧美专区| 国产美女精品人人做人人爽| 99精品视频在线观看| 在线观看91精品国产麻豆| 欧美精品一区二区精品网| 中文字幕佐山爱一区二区免费| 一级女性全黄久久生活片免费| 爽爽淫人综合网网站| 国产精品自在在线| 欧美性猛交xxxx黑人交| 久久久久久久网| 亚洲国产精品影院| 国产成人午夜电影网| 欧美裸体一区二区三区| 欧美激情资源网| 日精品一区二区三区| 成人午夜大片免费观看| 555夜色666亚洲国产免| 亚洲国产精品t66y| 日本不卡一区二区| 91啪在线观看| 久久精品人人做人人综合 | 日韩一区二区三区四区| 中文字幕不卡在线观看| 天天综合天天综合色| 不卡视频在线观看| 26uuu色噜噜精品一区| 一区二区激情视频| 成人18精品视频| 久久综合九色综合欧美亚洲| 亚洲午夜视频在线| 99re视频精品| 国产三级精品视频| 麻豆国产精品777777在线| 欧美综合一区二区| 国产精品传媒入口麻豆| 国产一区二区在线电影| 欧美精品v国产精品v日韩精品| 亚洲视频你懂的| 丰满少妇久久久久久久| 精品国精品国产| 麻豆精品视频在线观看免费| 欧美日韩视频在线第一区 | 激情欧美日韩一区二区| 欧美电影一区二区三区| 亚洲综合色区另类av| 一本高清dvd不卡在线观看| 欧美激情一区二区三区| 国产精品一级片| 国产午夜久久久久| 国产一区二区网址| 欧美精品一区二区蜜臀亚洲| 免费成人av在线播放| 欧美一区二区三区小说| 亚洲一区二区高清| 欧美群妇大交群中文字幕| 亚洲一区在线观看网站| 欧美专区日韩专区| 调教+趴+乳夹+国产+精品| 欧美久久婷婷综合色| 三级成人在线视频| 日韩色视频在线观看|