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

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

?? headset_common.c

?? 藍牙立體聲耳機 firmware
?? 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一区二区三区免费野_久草精品视频
欧美亚洲国产bt| 亚洲高清视频在线| 婷婷六月综合网| 成人伦理片在线| 欧美大肚乱孕交hd孕妇| 亚洲六月丁香色婷婷综合久久| 国内精品伊人久久久久av影院 | 久久99久久久欧美国产| 日本道在线观看一区二区| 久久婷婷久久一区二区三区| 午夜精品一区在线观看| 一本色道久久综合亚洲精品按摩| 日韩精品一区二区三区四区视频| 午夜欧美2019年伦理| 93久久精品日日躁夜夜躁欧美| 久久精品一区二区三区不卡 | 一区二区三区色| 成人av集中营| 国产欧美1区2区3区| 国产一区欧美日韩| 久久久亚洲精品石原莉奈| 极品少妇xxxx精品少妇偷拍| 日韩欧美一级二级三级久久久| 亚洲午夜久久久久中文字幕久| 色综合久久九月婷婷色综合| 一区免费观看视频| 91蜜桃婷婷狠狠久久综合9色| 国产精品乱码人人做人人爱| www.欧美日韩| 亚洲人成网站在线| 在线观看欧美日本| 日韩中文字幕区一区有砖一区| 69精品人人人人| 蜜桃一区二区三区四区| 日韩免费观看高清完整版| 美女国产一区二区三区| 亚洲精品一区二区三区蜜桃下载| 精品亚洲porn| 国产女人18毛片水真多成人如厕 | 久久精品国产在热久久| 日韩欧美一级二级三级久久久 | 午夜精品影院在线观看| 91精品国产综合久久久久| 精品中文av资源站在线观看| 久久精品男人天堂av| 不卡一区二区三区四区| 亚洲色图19p| 欧美精选一区二区| 美女精品一区二区| 国产精品久久国产精麻豆99网站| bt7086福利一区国产| 亚洲成人三级小说| 久久婷婷国产综合精品青草| www.av亚洲| 日韩精品久久理论片| 精品粉嫩超白一线天av| 92国产精品观看| 蜜桃久久精品一区二区| 国产精品久久久久一区二区三区共 | 日韩av在线播放中文字幕| 久久久夜色精品亚洲| 日本高清免费不卡视频| 久久成人久久鬼色| 亚洲日本青草视频在线怡红院 | 欧美在线三级电影| 精品一区二区日韩| 亚洲精品一二三| 久久影院视频免费| 欧美婷婷六月丁香综合色| 激情综合色播激情啊| 亚洲日本在线a| 久久亚洲影视婷婷| 欧美午夜精品久久久久久超碰 | 在线观看国产一区二区| 久久99热这里只有精品| 亚洲一线二线三线视频| 国产精品天美传媒| 日韩欧美一二区| 色网综合在线观看| 国产福利一区二区三区视频| 亚洲国产美国国产综合一区二区| 国产视频亚洲色图| 欧美一区二区三区婷婷月色| 色综合 综合色| 成人永久看片免费视频天堂| 玖玖九九国产精品| 亚洲电影在线免费观看| 亚洲欧洲国产日韩| 国产清纯美女被跳蛋高潮一区二区久久w | 色综合久久久久| 国产露脸91国语对白| 免费成人结看片| 亚洲18色成人| 亚洲第一激情av| 一区二区三区鲁丝不卡| 亚洲欧洲日韩在线| 国产精品久久久久久一区二区三区| 亚洲精品在线三区| 日韩精品一区国产麻豆| 日韩免费观看2025年上映的电影| 欧美中文字幕一区二区三区亚洲| 成人性视频免费网站| 国产成人精品免费在线| 成人一区二区三区中文字幕| 久久福利视频一区二区| 久久国产剧场电影| 精油按摩中文字幕久久| 激情综合五月天| 国产黄人亚洲片| 国产91精品在线观看| 成人美女视频在线观看18| 99精品视频中文字幕| 成人av电影观看| 色偷偷久久一区二区三区| 欧美视频在线一区| 91麻豆精品国产91久久久久| 91精品一区二区三区久久久久久 | 中文字幕乱码一区二区免费| 久久精品夜色噜噜亚洲aⅴ| 在线观看欧美黄色| 99re这里都是精品| 91精品办公室少妇高潮对白| 色94色欧美sute亚洲线路一久| 99久久免费国产| 欧美最新大片在线看| 欧美男同性恋视频网站| 91精品国产综合久久香蕉的特点| 欧美一区二区大片| 精品国产电影一区二区| 国产亚洲成aⅴ人片在线观看| 国产女主播在线一区二区| 综合婷婷亚洲小说| 亚洲成人动漫在线免费观看| 久久国产成人午夜av影院| 国产99精品视频| 91污在线观看| 欧美高清视频在线高清观看mv色露露十八| 欧美精品三级在线观看| 2017欧美狠狠色| 亚洲另类中文字| 蜜臀99久久精品久久久久久软件| 国产精品中文字幕欧美| 91丨九色丨黑人外教| 7777精品久久久大香线蕉| 日本一区二区三区四区在线视频| 玉米视频成人免费看| 青青草国产精品97视觉盛宴| 成人一级黄色片| 91精品欧美久久久久久动漫| 国产人久久人人人人爽| 亚洲va韩国va欧美va精品 | 国产成人av一区二区| 91久久线看在观草草青青| 日韩一二三区不卡| 国产精品久久久久aaaa| 奇米精品一区二区三区在线观看| 成人综合在线观看| 欧美一级二级三级蜜桃| 亚洲精品中文在线| 国产美女在线观看一区| 欧美夫妻性生活| 国产精品麻豆99久久久久久| 日本系列欧美系列| 91浏览器在线视频| 国产女主播在线一区二区| 视频一区免费在线观看| 97久久超碰国产精品| 久久这里只有精品6| 五月激情综合色| 91网站最新地址| 中文字幕成人av| 久久黄色级2电影| 在线播放91灌醉迷j高跟美女 | 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 欧美国产日韩a欧美在线观看| 日韩精品视频网站| 91麻豆自制传媒国产之光| 久久精品夜色噜噜亚洲a∨ | 亚洲国产日产av| 99亚偷拍自图区亚洲| 久久久久久久久久久久久夜| 日韩高清不卡一区二区| 欧美亚洲免费在线一区| 亚洲天堂免费看| 97精品久久久久中文字幕| 国产蜜臀97一区二区三区| 国产精品一区二区黑丝| 久久蜜桃av一区精品变态类天堂 | 亚洲主播在线播放| 色偷偷久久人人79超碰人人澡| 中文字幕av一区二区三区| 国产成人在线电影| 久久久久久久久岛国免费| 国产一区二区三区观看| 久久中文娱乐网| 国产乱码一区二区三区| 久久久精品天堂| 成人免费毛片片v| 中文字幕一区二区三区蜜月| 97久久精品人人做人人爽50路|