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

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

?? headset_common.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_common.c

DESCRIPTION
    Deals with general headset functionality.

NOTES

*/


/****************************************************************************
    Header files
*/
#include "headset_private.h"
#include "a2dp_handler.h"
#include "headset_common.h"
#include "headset_power.h"
#include "headset_volume.h"
#include "hfp_slc.h"
#include "leds.h"

#include <bdaddr.h>
#include <connection.h>
#include <hfp.h>
#include <kalimba.h>
#include <ps.h>


#ifdef DEBUG_COMMON
#define COMMON_DEBUG(x) DEBUG(x)
#else
#define COMMON_DEBUG(x) 
#endif


#define SCAN_INTERVAL_NORMAL    (0x800)
#define SCAN_WINDOW_NORMAL      (0x12)
#define SCAN_INTERVAL_PAIRING   (0x400)
#define SCAN_WINDOW_PAIRING     (0x200)


/*define local functions*/

static void indicateConnected(headsetTaskData *app);
static void indicateIdle(headsetTaskData *app);
static void indicateOff(headsetTaskData *app);

/*****************************************************************************/
void updateHeadsetScanning(headsetTaskData *app)
{
    hci_scan_enable scan = hci_scan_enable_off;

   if ((app->a2dp_state >= avHeadsetA2dpSignallingActive) &&
            (app->hfp_state >= headsetConnected))
    {
		COMMON_DEBUG(("COMMON: both active\n"));
        /* If AV and HFP connected disable all scanning */
        scan = hci_scan_enable_off;
    }
    else if ((app->a2dp_state >= avHeadsetA2dpSignallingActive))
    {
        /* If only one profile connected disable inquiry scan */
		COMMON_DEBUG(("COMMON: av active\n"));
		scan = hci_scan_enable_page;
    }
	else if ((app->hfp_state >= headsetConnected)) 
	{
		scan = hci_scan_enable_inq_and_page;
	}
    else
    {
		COMMON_DEBUG(("COMMON: hf idle, initialising or connecting\n"));
        /* Enable both page and inquiry scan */
        scan = hci_scan_enable_inq_and_page;
    }
	
	/*Disable all scanning if the headset is off*/
	if ((app->headset_power_state != power_state_on) && (app->headset_power_state != power_state_on_charging))
	{
		scan = hci_scan_enable_off;
	}
    
    COMMON_DEBUG(("COMMON: scan = %d\n",scan));
	
	/*As the state has changed, we need to indicate this*/
	headsetIndicateState(app);
	
    if ((app->a2dp_state != avHeadsetA2dpInitialising) &&
        (app->avrcp_state != avHeadsetAvrcpInitialising) && 
        (app->hfp_state != headsetInitialising))
    {
        /* If headset is initialising don't attempt to enter any scan mode */			
        ConnectionWriteScanEnable(scan);
        COMMON_DEBUG(("COMMON: Write scan enable\n"));
    }
}


/**************************************************************************/
void setA2dpState(headsetTaskData *app, const headsetA2dpState state)
{
    COMMON_DEBUG(("COMMON: AV Headset A2DP State - C=%d N=%d\n", app->a2dp_state, state));

    app->a2dp_state = state;
      
	/* Check if we should be setting the idle timer running */
    headsetPowerCheckAutoOff(app);
    /* Check to see if we need to update out page/ inquiry scan settings */
    updateHeadsetScanning(app);
}


/**************************************************************************/
void setAvrcpState(headsetTaskData *app, const headsetAvrcpState state)
{
    COMMON_DEBUG(("COMMON: AV Headset AVRCP State - C=%d N=%d\n", app->avrcp_state, state));
 
    app->avrcp_state = state;

    /* Check to see if we need to update out page/ inquiry scan settings */
    updateHeadsetScanning(app);
}


/**************************************************************************/
void setHfpState(headsetTaskData *app, const headsetHfpState state)
{
    COMMON_DEBUG(("COMMON: AV Headset HFP State - C=%d N=%d\n", app->hfp_state, state));

    app->hfp_state = state;
    
	   
	/* Check if we should be setting the idle timer running */
    headsetPowerCheckAutoOff(app);
    /* Check to see if we need to update out page/ inquiry scan settings */
    updateHeadsetScanning(app);
}

/*****************************************************************************/
void headsetHandleRemoteSuppFeatures(headsetTaskData *app, const CL_DM_REMOTE_FEATURES_CFM_T *cfm)
{
    /* 
        If the read request succeeded then store the first work of the supported features 
        We should in theory store all four words but currently we only need the info in 
        the first word so for the sake of efficiency for the moment only store that.
    */
    if (cfm->status == hci_success)
        app->supp_features_0 = cfm->features[0];
}


/*****************************************************************************/
bool isHeadsetIdle(const headsetTaskData *app)
{
    if ((app->a2dp_state == avHeadsetA2dpReady) &&
        (app->avrcp_state == avHeadsetAvrcpReady) &&
        (app->hfp_state == headsetReady))
        return TRUE;
    else
        return FALSE;
}


/*****************************************************************************/
bool isHeadsetPairing(const headsetTaskData *app)
{
    return app->pairing_enabled;
}


/*****************************************************************************/
void headsetConnectToLastDevices(headsetTaskData *app)
{
    if (app->features.auto_reconnect == 1)
    {
		app->connect_av = 1;
        COMMON_DEBUG(("COMMON: Connect to last devices\n"));
        hfpHeadsetHandleSlcConnectRequest(app, hfp_handsfree_profile);
    }
}


/*****************************************************************************/
void headsetRestartAV(headsetTaskData *app)
{
    (void) MessageCancelAll(&app->task, APP_MUSIC_RESTART_IND);
    MessageSendLater(&app->task, APP_MUSIC_RESTART_IND, 0, (uint32) MUSIC_RESTART_DELAY);
}

/*****************************************************************************/
bool headsetIsA2dpSourceAnAg(headsetTaskData *app)
{
    bdaddr bdaddr_sig, bdaddr_slc;
    
    if (!SinkGetBdAddr(app->sig_sink, &bdaddr_sig))
		return FALSE;
    if (!SinkGetBdAddr(app->slc_sink, &bdaddr_slc))
		return FALSE;
    if (BdaddrIsSame(&bdaddr_sig, &bdaddr_slc))
        return TRUE;
    
    return FALSE;
}
/******************************************************************************/
void headsetIndicateState(headsetTaskData *app)
{
	if ((app->headset_power_state != power_state_on) 
		&& (app->headset_power_state != power_state_on_charging))
	{
		indicateOff(app);
	}
	else if ((app->hfp_state >= headsetConnected) || (app->a2dp_state >= avHeadsetA2dpSignallingActive))
	{
		if (!app->pairing_enabled)
			indicateConnected(app);		
	}
	else /*headset must be idle*/
	{
		if (!app->pairing_enabled)
			indicateIdle(app);
	}
}
/*****************************************************************************/
static void indicateIdle(headsetTaskData *app)
{
	if ((app->charger_connected) && (app->battery_full))
	{
       	ledsPlay(RED_CONT_BLUE_SHORT_ON_RPT) ;
	}
	else if (app->charger_connected)
	{
		ledsPlay(RED_BLUE_SHORT_ON_RPT) ;
	}
	else
	{
		ledsPlay(BLUE_SHORT_ON_RPT) ;
	}
}

/*****************************************************************************/
static void indicateConnected(headsetTaskData *app)
{
	if ((app->charger_connected) && (app->battery_full))
	{
       	ledsPlay(RED_CONT_BLUE_ONE_SEC_ON_RPT) ;
	}
	else if (app->charger_connected)
	{
		ledsPlay(RED_BLUE_ONE_SEC_ON_RPT) ;
	}
	else
	{
		ledsPlay(BLUE_ONE_SEC_ON_RPT) ;
	}
}
/*****************************************************************************/
static void indicateOff(headsetTaskData *app)
{
	if ((app->charger_connected) && (app->battery_full))
	{
		ledsPlay(RED_ON);
	}
	else if (app->charger_connected)
	{
       	ledsPlay(RED_ONE_SEC_ON_RPT) ;
	}
	else
	{
		ledsPlay(LEDS_OFF) ;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内久久精品视频| 香蕉久久夜色精品国产使用方法 | 国产午夜精品久久| 在线这里只有精品| 成a人片亚洲日本久久| 久久精品国产精品亚洲红杏| 亚洲久草在线视频| 中文字幕欧美区| 亚洲国产成人一区二区三区| 精品卡一卡二卡三卡四在线| 欧美剧情电影在线观看完整版免费励志电影| 福利电影一区二区| 国产麻豆欧美日韩一区| 蜜桃av一区二区| 日韩精品免费视频人成| 一区二区在线电影| 亚洲色图欧美在线| 亚洲综合视频网| 亚洲国产精品久久久久婷婷884 | 久久久久久麻豆| 91精品国产综合久久久蜜臀图片 | 亚洲va欧美va天堂v国产综合| 亚洲美女屁股眼交3| 精品裸体舞一区二区三区| 欧美一区二区三区四区五区 | 午夜精品久久久久久久久| 亚洲黄色尤物视频| 一区二区三区精密机械公司| 一区二区三区四区蜜桃| 亚洲一区二区不卡免费| 日日噜噜夜夜狠狠视频欧美人 | 久久综合丝袜日本网| 久久色在线观看| 国产午夜精品理论片a级大结局| 国产精品人成在线观看免费| 国产精品丝袜91| 亚洲精品欧美综合四区| 午夜电影一区二区三区| 精品一区二区日韩| 成人免费av网站| 九色综合国产一区二区三区| 成人av免费观看| 欧美绝品在线观看成人午夜影视| 精品国产一区二区三区久久久蜜月 | 欧美亚州韩日在线看免费版国语版 | 夜夜嗨av一区二区三区网页| 亚洲成人免费看| 日本亚洲欧美天堂免费| 国产精品一区二区久久精品爱涩| www.欧美.com| 欧美一区欧美二区| 欧美激情在线免费观看| 亚洲小少妇裸体bbw| 韩国欧美国产1区| 91视视频在线观看入口直接观看www | 26uuu另类欧美| 久久久久久97三级| 亚洲自拍欧美精品| 国产剧情一区二区| 欧美精品精品一区| 自拍偷自拍亚洲精品播放| 日韩黄色在线观看| 99久久伊人网影院| 亚洲精品一线二线三线| 亚洲影视在线播放| 成人av在线电影| 日韩视频免费直播| 亚洲乱码国产乱码精品精的特点| 狠狠狠色丁香婷婷综合激情| 欧美怡红院视频| 国产喷白浆一区二区三区| 日日夜夜免费精品| 欧美性猛交xxxx乱大交退制版| 欧美一区二区久久| 一区二区三区在线影院| 成人精品小蝌蚪| 久久久www成人免费无遮挡大片| 亚洲一区影音先锋| 色一区在线观看| 国产精品激情偷乱一区二区∴| 日韩精品一区第一页| 一本色道久久综合狠狠躁的推荐 | 国产成人在线色| 精品国一区二区三区| 日韩精品一级二级 | 91麻豆6部合集magnet| 国产目拍亚洲精品99久久精品| 精品一区二区在线观看| 欧美精品一卡二卡| 日韩不卡一区二区三区| 4hu四虎永久在线影院成人| 亚洲一区二区三区视频在线播放 | 色婷婷亚洲精品| 国产精品国产三级国产aⅴ入口 | 久久99国产精品麻豆| 日韩一区二区三区在线观看| 午夜欧美在线一二页| 欧美精品18+| 麻豆成人免费电影| 日韩欧美www| 国产麻豆精品一区二区| 国产嫩草影院久久久久| 成人av影院在线| 中文字幕视频一区| 日本乱人伦aⅴ精品| 国产精品日产欧美久久久久| 成人国产一区二区三区精品| 亚洲三级视频在线观看| 色妹子一区二区| 午夜视频一区二区| 日韩视频免费直播| 精一区二区三区| 欧美va日韩va| 成人免费视频免费观看| 一区二区三区四区中文字幕| 日韩一区二区影院| 国v精品久久久网| 一区二区三区四区乱视频| 99视频精品在线| 日韩激情av在线| 欧美激情中文字幕一区二区| 91精品福利视频| 久久国产综合精品| 国产精品污网站| 91久久精品一区二区三| 国产伦精品一区二区三区视频青涩| 亚洲精品第1页| 国产精品亲子伦对白| 精品国产91乱码一区二区三区| 欧美三级韩国三级日本一级| aaa欧美大片| 成人高清免费在线播放| 激情六月婷婷综合| 免费欧美日韩国产三级电影| 国产91丝袜在线播放九色| 午夜精品在线看| 亚洲精品免费在线| 亚洲欧美在线视频观看| 亚洲国产电影在线观看| 久久综合视频网| 91精品国产丝袜白色高跟鞋| 欧美中文字幕亚洲一区二区va在线| 不卡av在线网| a级精品国产片在线观看| 国产一区二区不卡在线| 久久精品国产精品亚洲综合| 美女任你摸久久| 久久99精品久久久久久久久久久久 | 亚洲激情五月婷婷| 亚洲精品免费电影| 亚洲精品亚洲人成人网在线播放| 亚洲国产精品av| 日韩码欧中文字| 一区二区三区毛片| 五月婷婷激情综合| 日产欧产美韩系列久久99| 男女男精品视频网| 老司机免费视频一区二区三区| 久久激情综合网| 国产精品一区二区在线播放| 国产91丝袜在线播放0| eeuss鲁片一区二区三区 | 欧美精品1区2区3区| 欧美精品三级日韩久久| 88在线观看91蜜桃国自产| 日韩亚洲国产中文字幕欧美| 精品国产精品网麻豆系列| 久久影音资源网| 中文字幕国产一区二区| 亚洲黄一区二区三区| 99天天综合性| 欧美三级三级三级| 日韩精品专区在线影院重磅| 国产亚洲制服色| 亚洲欧美日韩在线播放| 视频精品一区二区| 国产麻豆成人传媒免费观看| 色综合一个色综合亚洲| 欧美一区二区成人6969| 国产欧美日本一区二区三区| 一区二区三区中文字幕电影| 日韩av电影免费观看高清完整版 | 亚洲同性gay激情无套| 天天操天天综合网| 国产一区二区三区精品视频| 91婷婷韩国欧美一区二区| 日韩欧美在线网站| 国产精品成人免费| 免费高清在线视频一区·| a美女胸又www黄视频久久| 欧美一区二区三区免费观看视频| 国产欧美日韩在线| 免费观看在线综合| 色婷婷av久久久久久久| 2021中文字幕一区亚洲| 一区二区三区在线观看国产| 九九久久精品视频| 欧美色区777第一页| 国产精品嫩草99a| 毛片不卡一区二区|