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

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

?? headset_volume.c

?? bluelab 3.52 里面的立體聲程序源代碼
?? C
字號:
/****************************************************************************
Copyright (C) Cambridge Silicon Radio Ltd. 2004-2006
Part of BlueLab 3.5.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 "cvc_headset.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 <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, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 17, 19};

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;
    }
#ifndef INCLUDE_CVC
    
    headsetUpdateVolume(app->codec_task, app->speaker_volume.hfp_volume); 
#endif
}


/**************************************************************************/
void headsetHandleAvVolUp(headsetTaskData* app)
{
    if (app->speaker_volume.av_volume < 15)
    {
        app->speaker_volume.av_volume++;
        if (app->pcm_audio_state == pcm_av)
            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--;
        if (app->pcm_audio_state == pcm_av)
            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++;
#ifdef INCLUDE_CVC
		CvcHeadsetVolume(app);
#else
        if (app->pcm_audio_state == pcm_sco)
            headsetUpdateVolume(app->codec_task, app->speaker_volume.hfp_volume);
#endif
    }
    else
    {
        playVolLimitTone(app);
    }
}


/**************************************************************************/
void headsetHandleHfVolDown(headsetTaskData* app)
{
    if (app->speaker_volume.hfp_volume > 0)
    {
        app->speaker_volume.hfp_volume--;
#ifdef INCLUDE_CVC
		CvcHeadsetVolume(app);
#else
        if (app->pcm_audio_state == pcm_sco)
            headsetUpdateVolume(app->codec_task, app->speaker_volume.hfp_volume);
#endif
    }
    else
    {
        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)
{
    if ((app->hfp_state == headsetActiveCall) && app->sco_sink)
    {
       VOLUME_DEBUG(("VOLUME: Mic mute on\n"));
	   app->mic_mute_on = 1;
#ifndef INCLUDE_CVC
       /* Disconnect the microphone */
	   StreamDisconnect(StreamPcmSource(0), 0);
	   StreamDisconnect(StreamPcmSource(1), 0); 
       /* Set volume at minimum */
	   headsetVolumeSetMicLevel (app , 0 ) ;
#else
       CvcSetMode(app);
#endif
       /* Start mute reminder operation */
	   MessageSendLater( &app->task , APP_MUTE_REMINDER , 0 , 1000) ;
    }
}

/***************************************************************************/
void headsetMicrophoneMuteOff(headsetTaskData *app)
{
    if ((app->hfp_state == headsetActiveCall) && app->sco_sink)
    {
       VOLUME_DEBUG(("VOLUME: Mic mute off\n"));
	   app->mic_mute_on = 0;
	   MessageCancelAll( &app->task , APP_MUTE_REMINDER) ;
       /* Reconnect the microphone */
#ifndef INCLUDE_CVC
       headsetVolumeSetMicLevel (app , 0 ) ;
	   (void)StreamConnect(StreamPcmSource(0), app->sco_sink);
#else
       CvcSetMode(app);
#endif
       /* 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一区二区三区免费野_久草精品视频
中文一区二区完整视频在线观看| 亚洲一区二区三区在线看| 亚洲精品欧美综合四区| 福利一区二区在线| 精品久久五月天| 亚洲精品综合在线| 99re热视频精品| 国产精品电影一区二区三区| 日本亚洲免费观看| 欧美日韩一区二区三区免费看 | 欧美日韩亚洲综合| 亚洲午夜精品17c| 在线日韩一区二区| 亚洲精品菠萝久久久久久久| 99视频热这里只有精品免费| 国产精品国产馆在线真实露脸| 日韩激情视频网站| 91精品国产一区二区三区| 日本亚洲三级在线| 欧美三级午夜理伦三级中视频| 亚洲一区二区三区自拍| 欧美日韩在线播放三区| 天堂成人国产精品一区| 日韩女优av电影| 男人的天堂久久精品| 日韩欧美自拍偷拍| 国产·精品毛片| 久久九九久精品国产免费直播| 国产一区二区三区免费看| 国产精品沙发午睡系列990531| 成人福利视频网站| 亚洲激情欧美激情| 日韩欧美美女一区二区三区| 精品综合久久久久久8888| 国产精品色在线观看| 欧美色网站导航| 九色综合国产一区二区三区| 欧美激情资源网| 欧美日韩精品福利| 国产麻豆欧美日韩一区| 国产精品电影一区二区| 欧美日韩国产经典色站一区二区三区| 日韩成人免费看| 中文字幕不卡在线播放| 在线这里只有精品| 免费人成在线不卡| 国产精品乱人伦中文| 精品视频一区二区不卡| 免费人成在线不卡| 中文字幕不卡一区| 制服丝袜在线91| 欧美中文字幕一区二区三区| www.性欧美| 国产精品一级片在线观看| 天天av天天翘天天综合网| 日韩一区欧美一区| 国产精品欧美一级免费| 欧美mv日韩mv| 欧美一区二区三区喷汁尤物| 在线影视一区二区三区| jlzzjlzz亚洲日本少妇| 国产伦精品一区二区三区免费| 日韩专区欧美专区| 亚洲成人资源网| 亚洲天堂a在线| 中文字幕欧美激情一区| 欧美电影免费提供在线观看| 欧美精品在线观看播放| 欧美午夜精品久久久| 在线看日韩精品电影| 色偷偷一区二区三区| 成人小视频免费在线观看| 国产一区二区在线影院| 韩国av一区二区| 韩国视频一区二区| 精品一区二区三区在线观看国产 | 午夜一区二区三区视频| 综合av第一页| 亚洲日本免费电影| 亚洲视频香蕉人妖| 亚洲视频在线观看三级| 亚洲精品亚洲人成人网| 亚洲精品成人a在线观看| 夜色激情一区二区| 亚洲不卡在线观看| 日韩激情中文字幕| 久久爱www久久做| 国产一区二区免费视频| 国产高清不卡一区二区| www.欧美精品一二区| 99久久婷婷国产综合精品电影| 成人午夜短视频| 91国产免费看| 欧美在线观看视频一区二区| 在线精品观看国产| 欧美人伦禁忌dvd放荡欲情| 91精品国产综合久久精品| 久久嫩草精品久久久精品| 日本一区二区三区四区在线视频| 亚洲国产精品精华液2区45| 亚洲婷婷在线视频| 亚洲一区二区三区四区在线| 日韩av在线播放中文字幕| 韩国v欧美v日本v亚洲v| av在线播放一区二区三区| 欧美午夜寂寞影院| 日韩欧美成人激情| 中日韩免费视频中文字幕| 亚洲一区视频在线| 国产精品一线二线三线| 色一区在线观看| 欧美一级黄色录像| 中文字幕一区二区三区四区不卡 | 国产精品一区二区免费不卡| 不卡的av网站| 欧美日韩一区二区在线视频| 精品剧情在线观看| 一区二区日韩av| 久久精品国产色蜜蜜麻豆| av亚洲精华国产精华精| 51精品久久久久久久蜜臀| 久久精品视频免费| 亚洲第一激情av| 国产成人精品免费视频网站| 91久久人澡人人添人人爽欧美| 日韩欧美一级特黄在线播放| 成人免费在线播放视频| 毛片基地黄久久久久久天堂| 成人app网站| 精品国产区一区| 一区二区三区中文字幕精品精品| 国内精品视频666| 欧美色倩网站大全免费| 国产亲近乱来精品视频| 全部av―极品视觉盛宴亚洲| 成人听书哪个软件好| 欧美成人综合网站| 亚洲一二三四在线观看| 国产91在线观看丝袜| 欧美一区二区三区四区高清| 亚洲图片欧美激情| 国产高清一区日本| 91精品国产一区二区人妖| 亚洲欧洲日韩在线| 国内欧美视频一区二区| 欧美日韩亚洲综合一区二区三区| 国产精品成人一区二区艾草| 国产一区二区精品在线观看| 日韩欧美国产麻豆| 五月天网站亚洲| 欧美中文字幕一区| 樱花草国产18久久久久| 懂色中文一区二区在线播放| 日韩欧美电影一区| 日本欧美一区二区| 欧美日韩国产欧美日美国产精品| 亚洲色图另类专区| 99精品视频在线观看免费| 国产欧美日韩卡一| 国产在线一区观看| 精品国产91亚洲一区二区三区婷婷 | 成人高清伦理免费影院在线观看| 精品国产一二三| 毛片基地黄久久久久久天堂| 欧美日韩精品一区二区| 一区二区在线免费观看| 91蜜桃视频在线| 亚洲欧美国产77777| 91在线无精精品入口| 亚洲欧洲日韩在线| 91丝袜美腿高跟国产极品老师| 国产欧美一区二区精品忘忧草 | 欧美xingq一区二区| 久久不见久久见免费视频7| 欧美成人三级在线| 久久 天天综合| 久久精品欧美一区二区三区不卡| 国精品**一区二区三区在线蜜桃| 精品国产一区二区国模嫣然| 国内成人免费视频| 国产三级一区二区三区| 99热99精品| 亚洲精品伦理在线| 在线观看日韩高清av| 午夜久久电影网| 91精品国产综合久久久蜜臀粉嫩| 日韩高清一级片| www成人在线观看| 风间由美一区二区三区在线观看 | 亚洲影院理伦片| 欧美日韩亚洲丝袜制服| 美女网站在线免费欧美精品| 久久综合色之久久综合| 成人a免费在线看| 亚洲自拍偷拍欧美| 欧美变态口味重另类| aaa亚洲精品| 香蕉加勒比综合久久| 久久久国产午夜精品| 一本色道久久综合亚洲aⅴ蜜桃|