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

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

?? headset_button_handler.c

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

FILE NAME
    headset_button_handler.c

DESCRIPTION
    handles all heasdet button presses
*/


/****************************************************************************
    Header files
*/
#include "headset_private.h"
#include "headset_button_handler.h"
#include "headset_volume.h"
#include "headset_tones.h"
#include "headset_power.h"
#include "headset_common.h"
#include "hfp_slc.h"
#include "hfp_audio.h"
#include "a2dp_handler.h"
#include "headset_security.h"
#include "hfp_handler.h"
#include "avrcp_handler.h"
#include "av_stream_control.h"
#include "leds.h"

#include <connection.h>
#include <hfp.h>
#include <panic.h>
#include <ps.h>
#include <stdlib.h>

   
/****************************************************************************
*/
void button_handle_vol_up(  headsetTaskData *app  ) 
{
	if (app->active_profile == av_active)
	{
    	if (app->a2dp_state != avHeadsetA2dpInitialising )
    	{
    		headsetHandleAvVolUp(app);
    	}
	}
	else if ((app->active_profile == hfp_active) && !app->headset_connecting_hfp)
	{
    	switch(app->hfp_state)
    	{           
 		    case headsetConnected:
		    case headsetIncomingCallEstablish:
		    case headsetActiveCall:
		    case headsetOutgoingCallEstablish:
	        {
	            HFP *instance = 0;
	
	            /* If HFP send volume cmd but if HSP make sure we have a SCO open. */
	            if (app->profile_connected == hfp_handsfree_profile)
	                instance = app->hfp;
	            else if ((app->profile_connected == hfp_headset_profile) && app->sco_sink)
	                instance = app->hsp;
	            else
	                break;
	
	            /* Send a volume up request */
	            headsetHandleHfVolUp(app);
	
	            /* Send the AT cmd to inform the AG of the vol change */
	            HfpSendSpeakerVolume(instance, (uint16)app->speaker_volume.hfp_volume);
			}
	        break;
	
	        default:
	    	break ;
    	}
	}
}
/****************************************************************************
*/
void button_handle_vol_down(  headsetTaskData *app  ) 
{
	if (app->active_profile == av_active)
	{
    	if ( app->a2dp_state != avHeadsetA2dpInitialising )
    	{
    		headsetHandleAvVolDown(app);
    	}
	}
    else if ((app->active_profile == hfp_active) && !app->headset_connecting_hfp)
    {
        switch( app->hfp_state )
        {           
    
	        case headsetConnected:
	        case headsetIncomingCallEstablish:
	        case headsetActiveCall:
	        case headsetOutgoingCallEstablish:
            {
                HFP *instance = 0;

                /* If HFP send volume cmd but if HSP make sure we have a SCO open. */
                if (app->profile_connected == hfp_handsfree_profile)
                    instance = app->hfp;
                else if ((app->profile_connected == hfp_headset_profile) && app->sco_sink)
                    instance = app->hsp;
                else 
                    break;

                /* Send a volume down request */
                headsetHandleHfVolDown(app);

                /* Send the AT cmd to inform the AG of the vol change */
                HfpSendSpeakerVolume(instance, (uint16)app->speaker_volume.hfp_volume);
            }
            break;
		
            default:
		    break ;
	    }
    }
}


/****************************************************************************
*/
void button_handle_forward_release (  headsetTaskData *app  ) 
{
    switch (app->headset_power_state)
	{
		case power_state_on:
		case power_state_on_charging:
		{	
			if (app->avrcp_state == avHeadsetAvrcpConnected)
			{
				avHeadsetForwardPress(app);
				avHeadsetForwardRelease(app);
		
			    headsetPlayTone(app, tone_type_button_press); 
		    }			     
		}
		break;

		default:
		break;
	}
}

/****************************************************************************
*/
void button_handle_forward_long(  headsetTaskData *app  ) 
{
	switch (app->headset_power_state)
	{
		case power_state_on:
		case power_state_on_charging:
		{
			if ( app->avrcp_state == avHeadsetAvrcpConnected)
			{
				avHeadsetFastForwardPress(app);
				headsetPlayTone(app, tone_type_button_press); 
			}
		}
		break;
		
		default:
		break;
	}

}

/****************************************************************************
*/
void button_handle_forward_long_release(  headsetTaskData *app  ) 
{

    switch (app->headset_power_state)
    {
	    case power_state_on:
    	case power_state_on_charging:
    	{    
	    	if (app->avrcp_state == avHeadsetAvrcpConnected)
        	{
                avHeadsetFastForwardRelease(app);
    		}
    	}   
    	break;
    	
    	default:
        break;
	}
}

/****************************************************************************
*/
void button_handle_backward_release(  headsetTaskData *app  )     
{
	if (app->active_profile == av_active)
	{
		if  ( app->avrcp_state == avHeadsetAvrcpConnected )
		{
			avHeadsetBackwardPress(app);
			avHeadsetBackwardRelease(app);
			headsetPlayTone(app, tone_type_button_press); 
		}  
	}
}

/****************************************************************************
*/
void button_handle_backward_long(  headsetTaskData *app  ) 
{
	switch (app->headset_power_state)
    {
    	case power_state_on:
        case power_state_on_charging:
        {
	        if (app->avrcp_state == avHeadsetAvrcpConnected)
            {
            	avHeadsetFastRewindPress(app);
                headsetPlayTone(app, tone_type_button_press); 
			}
    	}
        break;
        
        default:
        break ;
	}  
}

/****************************************************************************
*/
void button_handle_backward_long_release(  headsetTaskData *app  ) 
{   
	switch (app->headset_power_state)
	{
		case power_state_on:
		case power_state_on_charging:
		{
			if (app->avrcp_state == avHeadsetAvrcpConnected)
			{
				avHeadsetFastRewindRelease(app);
			}
		}
		break;
	
		default:
		break;      
	}      
}

/****************************************************************************
*/
void button_handle_mfb_press(  headsetTaskData *app  ) 
{
	headsetPowerAmp(app , TRUE);
}

/****************************************************************************
*/
void button_handle_mfb_short(  headsetTaskData *app  ) 
{

    bool playErrorTone = FALSE ;
    bool playButtonTone = FALSE;
    headsetHfpState current_hfp_state = app->hfp_state;   
    

	switch (app->headset_power_state)
	{
    	case power_state_off:
        case power_state_off_charging:
		break;

        case power_state_on:
        case power_state_on_charging:
        {
	    	if (!app->headset_connecting_hfp)
            {
            	if (isHeadsetPairing(app))
                {
                    playErrorTone = TRUE;
                }
                else
                {                    
                    /* Headset not idle, must have some connection active */
                    switch(current_hfp_state)
                    {
						case headsetReady:
						{
	                        playButtonTone = TRUE;
	
	                        /* If we're already streaming music pause it. */
	                        if (app->a2dp_state == avHeadsetA2dpStreaming)
	                        {
	                            avHeadsetAvStreamStop(app, TRUE);
	                            (void) MessageCancelAll(getAppTask(), APP_MUSIC_RESTART_IND);
								MessageSendLater(getAppTask(), APP_MUSIC_RESTART_IND, 0, (uint32) 10000);
	                        }
	
	                        /* Headset is idle initiate Last number redial */
	                        app->headset_connecting_hfp = 1;
	                
	                        /* Queue a voice request message so we can act on it on SLC connect */
	                        MessageSendConditionally(&app->task, APP_VOICE_DIAL, 0, &app->headset_connecting_hfp);
	                
	                        /* Initiate the HFP SLC */
	                        hfpHeadsetHandleSlcConnectRequest(app, hfp_handsfree_profile);
                		}
						break;

                        case headsetConnected:
                        {
                               /* Delay sending a voice dial request in case connection
                               has just been established (some AG's refuse voice dial
                               if you send request too early) */
							
							
                            MessageSendLater(getAppTask(), APP_VOICE_DIAL, 0, 800);
                            
                            /* Suspend the AV now to ease CPU load */
                            avHeadsetAvStreamStop(app,TRUE);
                            
                            playButtonTone = TRUE;
                  		}
                  		break;
                
						case headsetIncomingCallEstablish:
						{
							if (app->profile_connected == hfp_handsfree_profile)
							{
						    	hfpHeadsetAnswerCall(app);
					    	}
							else
						    {
							    /* Send an HSP button press */
						    	HfpSendHsButtonPress(app->hsp);
							}							
							playButtonTone = TRUE;
						}
						break;

                        case headsetOutgoingCallEstablish:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜在线视频| 亚洲欧美电影院| 久久久久久免费毛片精品| 欧美日韩午夜在线视频| 欧美性色黄大片手机版| 色婷婷国产精品综合在线观看| 国产一区二区三区在线观看免费视频 | 久久久精品国产免费观看同学| 欧美一级在线视频| 精品少妇一区二区三区视频免付费 | 亚洲精品高清在线观看| 亚洲少妇中出一区| 一区二区欧美精品| 亚洲成人av一区| 免费成人在线观看| 国产精品中文有码| av电影在线观看一区| 在线观看国产精品网站| 8x8x8国产精品| 精品久久久三级丝袜| 中文字幕高清不卡| 亚洲欧美日韩系列| 秋霞电影一区二区| 处破女av一区二区| 精品婷婷伊人一区三区三| 欧美一激情一区二区三区| 精品久久久久久久久久久久久久久久久| 精品成人佐山爱一区二区| 一区在线播放视频| 亚洲va欧美va国产va天堂影院| 日产国产高清一区二区三区| 国产精品亚洲一区二区三区妖精| 91麻豆.com| 欧美一区二区三区婷婷月色| 国产精品女同互慰在线看| 婷婷夜色潮精品综合在线| 国产毛片精品国产一区二区三区| 欧美日韩免费一区二区三区视频| 6080午夜不卡| 成人精品电影在线观看| 欧美视频一区在线| 国产亚洲午夜高清国产拍精品 | 欧美一区二区免费视频| 欧美aⅴ一区二区三区视频| 欧美一二三区在线观看| 精品一区二区成人精品| 久久久噜噜噜久久人人看| 岛国一区二区在线观看| 亚洲欧洲日韩av| 欧美无砖专区一中文字| 日韩成人av影视| 久久天堂av综合合色蜜桃网| 国产成人免费视频| 一区二区三区在线观看动漫| 精品视频色一区| 极品美女销魂一区二区三区免费| 中文字幕不卡的av| 欧洲中文字幕精品| 久久99蜜桃精品| 中文字幕一区二区三区视频| 欧美日韩在线精品一区二区三区激情 | 成人综合婷婷国产精品久久免费| 国产精品福利av| 欧美日韩国产综合久久| 国产盗摄女厕一区二区三区| 亚洲理论在线观看| 精品理论电影在线观看 | 1区2区3区欧美| 欧美日韩精品福利| 国产一区二区三区| 一区二区三区鲁丝不卡| 精品sm捆绑视频| 欧美午夜一区二区| 久久99精品国产| 亚洲三级在线免费观看| 精品国产精品一区二区夜夜嗨| 色综合天天综合色综合av| 九九在线精品视频| 一区二区在线电影| 国产午夜精品久久久久久久| 欧美日韩免费一区二区三区视频| 国产激情偷乱视频一区二区三区| 五月天亚洲婷婷| 亚洲欧美日韩精品久久久久| 久久夜色精品一区| 欧美日韩在线直播| 一本大道av伊人久久综合| 极品美女销魂一区二区三区| 一二三区精品福利视频| 亚洲国产成人午夜在线一区| 日韩精品资源二区在线| 欧洲国内综合视频| 91一区一区三区| 国产成人在线免费观看| 久久国产精品第一页| 午夜精品一区二区三区三上悠亚 | 欧美tk丨vk视频| 欧美午夜免费电影| 色八戒一区二区三区| 成人黄色网址在线观看| 国产美女一区二区三区| 精品综合免费视频观看| 视频一区二区三区在线| 一区二区三区在线观看视频| 国产精品电影一区二区| 欧美激情综合五月色丁香小说| 精品少妇一区二区三区日产乱码| 欧美一区国产二区| 91精品国产色综合久久| 欧美日韩国产乱码电影| 欧美日韩国产中文| 欧美日本在线观看| 8x8x8国产精品| 欧美一区二区视频在线观看 | 日韩va欧美va亚洲va久久| 亚洲综合另类小说| 亚洲国产日韩a在线播放性色| 亚洲日本在线视频观看| 亚洲免费观看高清完整版在线观看熊 | 午夜视频在线观看一区二区| 亚洲一区二区三区精品在线| 一区二区三区在线视频播放| 亚洲一区二区综合| 日韩激情中文字幕| 日韩黄色免费网站| 久久99精品久久只有精品| 国产综合色产在线精品| 国产成人午夜99999| 99久久99久久综合| 欧美日韩亚洲综合一区| 日韩三级伦理片妻子的秘密按摩| 日韩精品一区二区三区视频播放| 欧美精品一区二区在线观看| 国产精品久久夜| 一区二区三区四区蜜桃| 午夜伦欧美伦电影理论片| 久久99国产精品久久99果冻传媒| 国产一区二区三区四区五区入口| 国产成人午夜精品影院观看视频 | 一区二区三区丝袜| 偷拍亚洲欧洲综合| 国产一区免费电影| 91在线porny国产在线看| 欧美挠脚心视频网站| 久久综合久久综合亚洲| 亚洲欧美中日韩| 青草国产精品久久久久久| 国产成人综合亚洲网站| 欧美三级一区二区| 欧美精品一区二区在线播放 | 国产主播一区二区三区| 99精品视频中文字幕| 8v天堂国产在线一区二区| 欧美激情综合五月色丁香| 亚洲第一主播视频| 国产成人免费在线| 777色狠狠一区二区三区| 国产欧美综合色| 日韩高清不卡在线| av电影一区二区| 精品成人在线观看| 日韩综合小视频| aa级大片欧美| 2020日本不卡一区二区视频| 亚洲国产日韩精品| av亚洲产国偷v产偷v自拍| 欧美成人video| 亚洲一区二区三区美女| 丁香婷婷深情五月亚洲| 欧美一区二区三区在线| 亚洲精品国产一区二区精华液 | 国产精品乱码一区二三区小蝌蚪| 天天综合网 天天综合色| 99久久久精品免费观看国产蜜| 欧美一级国产精品| 亚洲精品国产品国语在线app| 国产精品亚洲人在线观看| 日韩欧美亚洲国产另类 | 欧美日韩一级视频| 亚洲欧洲成人精品av97| 国产伦精品一区二区三区免费迷| 欧美视频日韩视频在线观看| 亚洲天堂免费看| 波多野结衣亚洲一区| 国产亚洲综合性久久久影院| 精品一区精品二区高清| 日韩视频一区二区三区在线播放| av网站免费线看精品| 国产欧美日本一区视频| 国产综合久久久久影院| 91麻豆精品91久久久久同性| 亚洲成av人片在www色猫咪| 一本久久精品一区二区| 综合久久久久久| jlzzjlzz国产精品久久| 国产精品久久久久一区| 国产99精品视频| 国产精品不卡一区| 91麻豆swag| 亚洲综合色区另类av|