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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? headset_volume.c

?? 藍(lán)牙立體聲耳機(jī) firmware
?? C
字號(hào):
/****************************************************************************
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) ;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产区一| 91黄色免费版| 亚洲综合成人网| 精品国产免费人成在线观看| 91女神在线视频| 国产最新精品精品你懂的| 亚洲午夜国产一区99re久久| 国产精品水嫩水嫩| 欧美tickle裸体挠脚心vk| 欧美性三三影院| www.亚洲色图.com| 国产一区二区精品在线观看| 日韩成人dvd| 亚洲国产三级在线| 国产精品乱人伦中文| 久久综合九色综合久久久精品综合| 欧美色图天堂网| 91蜜桃在线免费视频| 国产91在线看| 国产一区二区三区久久悠悠色av | 久久综合色8888| 欧洲精品一区二区| 91亚洲精华国产精华精华液| 岛国精品一区二区| 国产成人精品一区二区三区四区| 日本不卡1234视频| 日韩黄色小视频| 婷婷开心激情综合| 午夜精品久久久| 亚洲国产精品影院| 亚洲国产欧美一区二区三区丁香婷| 国产精品毛片久久久久久久| 国产亚洲欧洲997久久综合| 2020国产精品自拍| 精品盗摄一区二区三区| 精品国产伦一区二区三区观看体验| 欧美日本乱大交xxxxx| 欧美专区日韩专区| 欧美在线不卡视频| 欧美在线播放高清精品| 欧美色图在线观看| 678五月天丁香亚洲综合网| 欧美日韩国产色站一区二区三区| 久久国产精品99精品国产| av资源站一区| 不卡高清视频专区| 97se亚洲国产综合自在线观| 99国产精品国产精品久久| 91丨九色丨国产丨porny| 在线日韩一区二区| 久久综合九色综合欧美就去吻| 2020日本不卡一区二区视频| 日本一区二区三区在线观看| 中文一区在线播放| 一区二区三区资源| 亚洲18影院在线观看| 麻豆91在线看| 国产成人8x视频一区二区| 91免费国产在线观看| 欧美日韩免费高清一区色橹橹| 综合欧美亚洲日本| 亚洲国产成人精品视频| 日日夜夜精品视频免费| 国产美女视频91| 99re6这里只有精品视频在线观看| 欧美这里有精品| 日韩欧美电影在线| 国产日韩欧美电影| 亚洲一卡二卡三卡四卡无卡久久 | 激情综合色综合久久综合| 久久99精品国产| 不卡电影免费在线播放一区| 在线免费观看一区| 日韩情涩欧美日韩视频| 国产精品久久毛片a| 亚洲国产一区在线观看| 精品一区二区成人精品| www.66久久| 91麻豆精品国产91久久久更新时间| 久久久久成人黄色影片| 亚洲午夜精品一区二区三区他趣| 精品一区二区三区免费| 91捆绑美女网站| 精品免费视频一区二区| 亚洲天天做日日做天天谢日日欢 | 972aa.com艺术欧美| 91精品一区二区三区久久久久久| 亚洲国产精品t66y| 亚洲美女屁股眼交3| 国产精品久久三区| 亚洲大片在线观看| 国产乱码精品一区二区三区av | 99综合电影在线视频| 欧美精品在欧美一区二区少妇| 久久免费看少妇高潮| 亚洲国产精品一区二区www在线| 韩日av一区二区| 欧美日韩一区不卡| 国产精品久久久久婷婷二区次| 天天爽夜夜爽夜夜爽精品视频| 成人晚上爱看视频| 日韩欧美一级片| 一区二区三区电影在线播| 国产一区二区91| 91精品黄色片免费大全| 亚洲六月丁香色婷婷综合久久| 国产精品99久| 欧美一区二区视频网站| 国产精品无遮挡| 久久99久久精品欧美| 欧美色国产精品| 专区另类欧美日韩| 国产成人综合在线观看| 日韩一区二区影院| 亚洲国产一区视频| 色av综合在线| **性色生活片久久毛片| 丁香五精品蜜臀久久久久99网站 | 色狠狠色狠狠综合| 国产精品你懂的在线欣赏| 国产一区二区三区免费看| 欧美一级在线观看| 亚洲va在线va天堂| 91久久精品一区二区三区| 中文字幕在线观看不卡| 国产精品中文欧美| 久久嫩草精品久久久精品一| 久久99精品国产| 日韩欧美国产一区二区在线播放| 天天综合天天综合色| 欧美日韩亚洲综合在线| 亚洲二区在线视频| 欧美色图免费看| 亚洲国产成人porn| 欧美视频在线一区| 日本一区二区在线不卡| 奇米精品一区二区三区在线观看| 欧美丝袜丝交足nylons| 亚洲国产另类av| 欧美日韩一区二区在线观看 | 成人永久免费视频| 国产日韩欧美综合在线| 成人深夜在线观看| 国产精品看片你懂得| 成人h动漫精品一区二| 中文字幕日韩av资源站| 91丨九色porny丨蝌蚪| 亚洲精品第1页| 欧美军同video69gay| 蜜臀久久99精品久久久画质超高清 | 综合分类小说区另类春色亚洲小说欧美 | 国产精品成人一区二区三区夜夜夜| 丰满少妇在线播放bd日韩电影| 国产精品美女久久久久久久久| 91在线一区二区| 亚洲综合色丁香婷婷六月图片| 国产成人一区二区精品非洲| 国产精品美女一区二区三区| 91黄视频在线观看| 免费在线观看不卡| 国产日韩欧美制服另类| 色诱视频网站一区| 日韩精品乱码免费| 国产视频一区在线观看| 色综合中文字幕国产| 天天色天天操综合| 国产日本亚洲高清| 日本高清不卡在线观看| 午夜精品久久久| 久久久久97国产精华液好用吗| 色综合中文字幕国产| 亚洲国产精品久久人人爱蜜臀| 91精品麻豆日日躁夜夜躁| 国产一区二区不卡| 亚洲一区二区在线免费观看视频 | 欧美一区二区在线免费观看| 国产精品一区一区三区| 亚洲黄色在线视频| 337p粉嫩大胆噜噜噜噜噜91av| 91丝袜高跟美女视频| 欧美aⅴ一区二区三区视频| 国产精品国产三级国产普通话99 | 91精品国产综合久久小美女| 丁香天五香天堂综合| 日韩精品1区2区3区| 国产精品免费视频观看| 欧美在线制服丝袜| 国产成a人无v码亚洲福利| 亚洲成年人网站在线观看| 国产精品青草综合久久久久99| 91麻豆精品91久久久久久清纯| 白白色亚洲国产精品| 久久99蜜桃精品| 亚洲3atv精品一区二区三区| 国产精品久久久久四虎| 欧美岛国在线观看| 欧美日韩中文另类| 成a人片亚洲日本久久| 狠狠色丁香婷婷综合| 午夜久久福利影院|