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

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

?? avrcp_handler.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
    avrcp_handler.c        

DESCRIPTION
    Deals with AVRCP connection.

NOTES

*/

/****************************************************************************
    Header files
*/
#include "headset_private.h"
#include "avrcp_handler.h"
#include "headset_common.h"
#include "headset_power.h"

#include <stdlib.h>


#ifdef DEBUG_AVRCP
#define AVRCP_DEBUG(x) DEBUG(x)
#else
#define AVRCP_DEBUG(x) 
#endif


enum
{
    PAUSE_PRESS,
    PAUSE_RELEASE,
    PLAY_PRESS,
    PLAY_RELEASE,
    FORWARD_PRESS,
    FORWARD_RELEASE,
    BACKWARD_PRESS,
    BACKWARD_RELEASE,
    STOP_PRESS,
    STOP_RELEASE,
    FF_PRESS,
    FF_RELEASE,
    REW_PRESS,
    REW_RELEASE
};


/* 
    Send remote control command to remote device 
*/
static void sendAVRCP(headsetTaskData* app, avc_operation_id op_id, uint8 state)
{
    app->avrcp_pending = TRUE;
    
    /* Send a key press */
    AvrcpPassthrough(app->avrcp, subunit_panel, 0, state, op_id, 0, 0);   
}

/**************************************************************************/
void controls_handler(Task task, MessageId id, Message message)
{
	task = task;
	message = message;

    switch (id)
    {
        case PAUSE_PRESS:
        AVRCP_DEBUG(("AVRCP: Sending Pause Pressed\n"));
            sendAVRCP(getApp(), opid_pause, 0);
            break;

        case PAUSE_RELEASE:
            AVRCP_DEBUG(("AVRCP: Sending Pause Released\n"));
            sendAVRCP(getApp(), opid_pause, 1);
            break;

        case PLAY_PRESS:
            AVRCP_DEBUG(("AVRCP: Sending Play Pressed\n"));
            sendAVRCP(getApp(), opid_play, 0);
            break;

        case PLAY_RELEASE:
            AVRCP_DEBUG(("AVRCP: Sending Play Released\n"));
            sendAVRCP(getApp(), opid_play, 1);
            break;

        case FORWARD_PRESS:
            AVRCP_DEBUG(("AVRCP: Sending Forward Pressed\n"));
            sendAVRCP(getApp(), opid_forward, 0);
            break;

        case FORWARD_RELEASE:
            AVRCP_DEBUG(("AVRCP: Sending Forward Released\n"));
            sendAVRCP(getApp(), opid_forward, 1);
            break;

        case BACKWARD_PRESS:
            AVRCP_DEBUG(("AVRCP: Sending Backward Pressed\n"));
            sendAVRCP(getApp(), opid_backward, 0);
            break;

        case BACKWARD_RELEASE:
            AVRCP_DEBUG(("AVRCP: Sending Backward Released\n"));
            sendAVRCP(getApp(), opid_backward, 1);
            break;

        case STOP_PRESS:
            AVRCP_DEBUG(("AVRCP: Sending Stop Pressed\n"));
            sendAVRCP(getApp(), opid_stop, 0);
            break;

        case STOP_RELEASE:
            AVRCP_DEBUG(("AVRCP: Sending Stop Released\n"));
            sendAVRCP(getApp(), opid_stop, 1);
            break;
            
        case FF_PRESS:
            AVRCP_DEBUG(("AVRCP: Sending FF Pressed\n"));
            sendAVRCP(getApp(), opid_fast_forward, 0);
            break;
            
        case FF_RELEASE:
            AVRCP_DEBUG(("AVRCP: Sending FF Released\n"));
            sendAVRCP(getApp(), opid_fast_forward, 1);
            break;
            
        case REW_PRESS:
            AVRCP_DEBUG(("AVRCP: Sending REW Pressed\n"));
            sendAVRCP(getApp(), opid_rewind, 0);
            break;
            
        case REW_RELEASE:
            AVRCP_DEBUG(("AVRCP: Sending REW Released\n"));
            sendAVRCP(getApp(), opid_rewind, 1);
            break;

		default:
			break;
    }
}


/* Send response to the AVRCP lib */
static void sendRcpConnectResponse(AVRCP *avrcp, const AVRCP_CONNECT_IND_T *ind, bool accept)
{
    /* Send the connect response */
    AvrcpConnectResponse(avrcp, ind->connection_id, accept);
}


/**************************************************************************/
void avHeadsetHandleAvrcpConnectReq(headsetTaskData *app, bdaddr addr)
{
    if (app->avrcp_state == avHeadsetAvrcpReady)
    {
        MessageCancelAll(getAppTask(), APP_AVRCP_CONNECT_REQ);
        /* Change to connecting state */
	    setAvrcpState(app, avHeadsetAvrcpConnecting);
        /* Establish AVRCP connection */
	    AvrcpConnect(app->avrcp, &addr);
    }
}


/**************************************************************************/
void avHeadsetHandleAvrcpConnectCfm(headsetTaskData *app, const AVRCP_CONNECT_CFM_T *cfm)
{
    if(cfm->status == avrcp_success)
    {
        /* Change to Connected state */
        setAvrcpState(app, avHeadsetAvrcpConnected);
        
        /* If now AVRCP is connected then we now only send AVRCP commands to play/pause music.
           Before we might have been Suspending/Starting audio stream as AVRCP wasn't in use.
           So incase the audio was suspended as a pause, we must resume the audio here. It might
           mean the music suddenly starting but better than being stuck in the Suspended state.
        */
     
		if (app->a2dp_state == avHeadsetA2dpStreaming)
		{
			avHeadsetUpdateAvrcpPlayState(app, 1);       
		}
		else
		{
			avHeadsetUpdateAvrcpPlayState(app, 0);
		}
        if ((app->active_profile == av_active) &&
            (!app->headset_connecting_hfp)
        )
        {
            headsetRestartAV(app);
        }
    }
    else
    {
        /* Change to Ready state */
        setAvrcpState(app, avHeadsetAvrcpReady);
    }
}


/**************************************************************************/
void avHeadsetHandleAvrcpConnectInd(const headsetTaskData *app, const AVRCP_CONNECT_IND_T *ind)
{
    MessageCancelAll(getAppTask(), APP_AVRCP_CONNECT_REQ);
	sendRcpConnectResponse(app->avrcp, ind, 1); 
}


/**************************************************************************/
void avHeadsetHandleAvrcpConnectIndReject(AVRCP *avrcp, const AVRCP_CONNECT_IND_T *ind)
{
    sendRcpConnectResponse(avrcp, ind, 0);
}


/**************************************************************************/
void avHeadsetHandleAvrcpDisconnectInd(headsetTaskData *app)
{
    /* Change to Ready state */
    setAvrcpState(app, avHeadsetAvrcpReady);
    
    /* Reset pending state as we won't get a CFM back from any sent AVRCP commands,
       now that that connection is closed.
    */
    app->avrcp_pending = FALSE;

}


/**************************************************************************/
void avHeadsetHandleAvrcpPassthroughInd(const AVRCP_PASSTHROUGH_IND_T *ind)
{
    /* Acknowledge the request */
    AvrcpPassthroughResponse(ind->avrcp, avctp_response_not_implemented);
}


/**************************************************************************/
void avHeadetHandleAvrcpUnitInfo(const AVRCP_UNITINFO_IND_T *ind)
{
    /*
        We are not a target so reject UnitInfo requests
    */
    AvrcpUnitInfoResponse(ind->avrcp, FALSE, subunit_monitor, 0, (uint32) 0);
}


/**************************************************************************/
void avHeadetHandleAvrcpSubUnitInfo(const AVRCP_SUBUNITINFO_IND_T *ind)
{
    /*
        We are not a target so reject SubUnitInfo requests
    */
    AvrcpSubUnitInfoResponse(ind->avrcp, FALSE, 0);
}


/**************************************************************************/
void avHeadetHandleAvrcpVendorDependent(const AVRCP_VENDORDEPENDENT_IND_T *ind)
{
    /*
        We are not a target so reject vendor requests
    */
	AvrcpVendorDependentResponse(ind->avrcp, avctp_response_not_implemented);
}


/**************************************************************************/
void avHeadsetSendPause(headsetTaskData* app)
{
    if (app->avrcp_state == avHeadsetAvrcpConnected)
    {
        avHeadsetPausePress(app);
        avHeadsetPauseRelease(app);
		avHeadsetUpdateAvrcpPlayState(app, 0);
    }
}


/**************************************************************************/
void avHeadsetPausePress(headsetTaskData* app)
{
    /* see controls_handler description */
    MessageSendConditionally(&app->controls_task, PAUSE_PRESS, NULL, &app->avrcp_pending);
}


/**************************************************************************/
void avHeadsetPauseRelease(headsetTaskData* app)
{
    /* see button_handler message queue description */
    MessageSendConditionally(&app->controls_task, PAUSE_RELEASE, NULL, &app->avrcp_pending);
}


/**************************************************************************/
void avHeadsetSendPlay(headsetTaskData* app)
{
    if (app->avrcp_state == avHeadsetAvrcpConnected)
    {
        avHeadsetPlayPress(app);
        avHeadsetPlayRelease(app);
		avHeadsetUpdateAvrcpPlayState(app, 1);
    }
}


/**************************************************************************/
void avHeadsetPlayPress(headsetTaskData* app)
{
    /* see controls_handler description */
    MessageSendConditionally(&app->controls_task, PLAY_PRESS, NULL, &app->avrcp_pending);
}


/**************************************************************************/
void avHeadsetPlayRelease(headsetTaskData* app)
{
    /* see button_handler message queue description */
    MessageSendConditionally(&app->controls_task, PLAY_RELEASE, NULL, &app->avrcp_pending);
}


/**************************************************************************/
void avHeadsetForwardPress(headsetTaskData* app)
{
    /* see controls_handler description */
    MessageSendConditionally(&app->controls_task, FORWARD_PRESS, NULL, &app->avrcp_pending);
}


/**************************************************************************/
void avHeadsetForwardRelease(headsetTaskData* app)
{
    /* see button_handler message queue description */
    MessageSendConditionally(&app->controls_task, FORWARD_RELEASE, NULL, &app->avrcp_pending);
}


/**************************************************************************/
void avHeadsetBackwardPress(headsetTaskData* app)
{
    /* see controls_handler description */
    MessageSendConditionally(&app->controls_task, BACKWARD_PRESS, NULL, &app->avrcp_pending);
}


/**************************************************************************/
void avHeadsetBackwardRelease(headsetTaskData* app)
{
    /* see button_handler message queue description */
    MessageSendConditionally(&app->controls_task, BACKWARD_RELEASE, NULL, &app->avrcp_pending);
}


/**************************************************************************/
void avHeadsetSendStop(headsetTaskData* app)
{
    if (app->avrcp_state == avHeadsetAvrcpConnected)
    {
        avHeadsetStopPress(app);
        avHeadsetStopRelease(app);
		avHeadsetUpdateAvrcpPlayState(app, 0);
    }
}


/**************************************************************************/
void avHeadsetStopPress(headsetTaskData* app)
{
    /* see controls_handler description */
    MessageSendConditionally(&app->controls_task, STOP_PRESS, NULL, &app->avrcp_pending);
}


/**************************************************************************/
void avHeadsetStopRelease(headsetTaskData* app)
{
    /* see button_handler message queue description */
    MessageSendConditionally(&app->controls_task, STOP_RELEASE, NULL, &app->avrcp_pending);
}


/*************************************************************************/
void avHeadsetFastForwardPress(headsetTaskData* app)
{
    MessageSendConditionally(&app->controls_task, FF_PRESS, NULL, &app->avrcp_pending);
}


/*************************************************************************/
void avHeadsetFastForwardRelease(headsetTaskData* app)
{
    MessageSendConditionally(&app->controls_task, FF_RELEASE, NULL, &app->avrcp_pending);
}


/*************************************************************************/
void avHeadsetFastRewindPress(headsetTaskData* app)
{
    MessageSendConditionally(&app->controls_task, REW_PRESS, NULL, &app->avrcp_pending);
}


/*************************************************************************/
void avHeadsetFastRewindRelease(headsetTaskData* app)
{
    MessageSendConditionally(&app->controls_task, REW_RELEASE, NULL, &app->avrcp_pending);
}

/**************************************************************************/
void avHeadsetUpdateAvrcpPlayState(headsetTaskData *app, const bool state)
{
	AVRCP_DEBUG(("AVRCP_DEBUG: AVRCP play state - C=%d N=%d\n", app->play_state, state));
	app->play_state = state;
}
/**************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性高清videossexo| 欧美激情一区二区在线| 国产午夜精品理论片a级大结局| 国产精品国产三级国产aⅴ入口| 亚洲自拍偷拍综合| 成人精品小蝌蚪| 日韩欧美国产一区二区三区| 亚洲免费三区一区二区| 国产精品中文欧美| 欧美一区二区视频在线观看 | 亚洲国产精品久久不卡毛片 | 成人黄色免费短视频| 欧美性大战xxxxx久久久| xnxx国产精品| 日韩国产欧美在线视频| 色一情一伦一子一伦一区| 久久久久久毛片| 蜜桃视频在线观看一区| 色狠狠av一区二区三区| 国产精品乱人伦一区二区| 国产精品白丝av| 精品国产乱码久久久久久闺蜜| 亚洲va国产天堂va久久en| 成人性视频免费网站| 久久久久国产一区二区三区四区 | 国产精品福利av| 麻豆视频一区二区| 欧美男男青年gay1069videost| 国产精品国模大尺度视频| 国产在线国偷精品产拍免费yy| 欧美另类变人与禽xxxxx| 亚洲妇女屁股眼交7| 日本韩国欧美一区二区三区| 中文字幕一区二区不卡| a在线播放不卡| 国产精品传媒入口麻豆| av电影在线观看不卡| 国产精品不卡一区二区三区| 成人一区二区三区视频| 26uuu精品一区二区| 国产成人日日夜夜| 国产精品久久久久久户外露出| 国产成人免费视频| 中文无字幕一区二区三区| 粉嫩av一区二区三区| 天天综合天天综合色| 成人18视频日本| 国产精品久久久久影院| 97精品超碰一区二区三区| 中文字幕一区二区三区av| 色哦色哦哦色天天综合| 亚洲图片欧美色图| 日韩欧美一区二区三区在线| 国产一区中文字幕| 亚洲三级在线看| 欧美日韩午夜在线| 狠狠色丁香婷综合久久| 中文字幕免费在线观看视频一区| 一本色道久久加勒比精品| 日韩中文字幕区一区有砖一区| 精品少妇一区二区三区在线播放 | 蜜臀久久99精品久久久画质超高清 | 精品区一区二区| 不卡的av电影在线观看| 亚洲国产日韩av| 精品88久久久久88久久久 | 国产精品自在欧美一区| 亚洲女同ⅹxx女同tv| 日韩一区和二区| 91无套直看片红桃| 视频一区二区三区入口| 国产欧美一区二区精品秋霞影院 | 国产一区二区三区av电影| 国产精品免费久久| 91极品视觉盛宴| 久久99国产精品久久99果冻传媒| 日韩一级大片在线观看| 国产成人综合亚洲网站| 日本一区二区三区免费乱视频| 91色在线porny| 久久99国产精品免费| 亚洲欧美色图小说| 精品国产三级电影在线观看| 99久久99久久精品免费看蜜桃| 日本vs亚洲vs韩国一区三区二区 | 欧美日韩午夜精品| 久久爱另类一区二区小说| 一区二区三区蜜桃网| 欧美xfplay| 欧美日韩一二三区| 国产一区二区精品久久99| 亚洲午夜成aⅴ人片| 久久久亚洲精品石原莉奈| 欧美另类videos死尸| 高清beeg欧美| 狠狠色狠狠色综合| 亚洲主播在线播放| 亚洲欧洲无码一区二区三区| 日韩午夜电影av| 欧美日韩国产高清一区二区 | 国产精品一色哟哟哟| 亚洲综合色自拍一区| 国产精品国产三级国产aⅴ入口| 欧美激情资源网| 精品福利二区三区| 欧美美女黄视频| 欧美少妇性性性| 成人免费av网站| 懂色av一区二区三区蜜臀| 日韩精品一级二级| 亚洲高清中文字幕| 最近中文字幕一区二区三区| 国产天堂亚洲国产碰碰| 欧美变态凌虐bdsm| 日韩一区二区在线观看视频播放| 欧美日韩一区在线观看| 91黄色激情网站| 国产一区二区三区| 国产成人在线观看免费网站| 国产ts人妖一区二区| 国产尤物一区二区| 懂色av一区二区夜夜嗨| 国产尤物一区二区在线| 岛国精品在线播放| 国产成人免费视| 麻豆免费精品视频| 蜜臀国产一区二区三区在线播放| 三级影片在线观看欧美日韩一区二区| 久久影音资源网| 国产亚洲精品超碰| 国产视频视频一区| 国产精品女主播av| 亚洲三级理论片| 一区二区在线免费观看| 亚洲高清不卡在线观看| 亚洲成人高清在线| 老司机精品视频导航| 亚洲成av人片| 激情文学综合插| 日韩精品免费视频人成| 一区二区激情小说| 亚洲成a人片在线不卡一二三区| 天天av天天翘天天综合网| 性感美女久久精品| 国内精品国产成人| 国产高清精品网站| 欧美怡红院视频| 欧美影院精品一区| 精品福利在线导航| 亚洲精品伦理在线| 婷婷六月综合亚洲| 懂色av一区二区三区免费看| 99视频在线精品| 欧美一区二区啪啪| 久久精品欧美一区二区三区不卡 | 成人va在线观看| 99久久国产综合色|国产精品| 欧美日韩一区中文字幕| 欧美成人福利视频| 亚洲最大的成人av| 免费观看在线色综合| 91亚洲精品久久久蜜桃| 欧美精品久久一区二区三区| 国产精品三级在线观看| 一区二区三区.www| 国产suv精品一区二区6| 蜜桃精品视频在线| 色爱区综合激月婷婷| 国产日韩欧美一区二区三区乱码 | 洋洋成人永久网站入口| 中文字幕日本不卡| 亚洲国产一区二区三区| 亚洲影视在线观看| 麻豆精品在线视频| 蜜臀av一级做a爰片久久| 国产欧美精品一区二区色综合 | 91视频一区二区| 精品卡一卡二卡三卡四在线| 国产一区二区影院| 日韩一区二区在线观看视频播放| 婷婷丁香久久五月婷婷| 日韩视频免费观看高清完整版在线观看| 亚洲综合男人的天堂| 欧美日韩久久一区二区| 午夜精品福利久久久| 91精品久久久久久久久99蜜臂| 午夜视频一区二区三区| 欧美视频精品在线观看| 性做久久久久久免费观看欧美| 欧美日韩国产小视频| 极品少妇一区二区| 久久久久97国产精华液好用吗| 成人免费电影视频| 国产精品理伦片| 95精品视频在线| 日本网站在线观看一区二区三区| 4438成人网| 国产91精品在线观看| 国产精品国产三级国产专播品爱网| 欧美撒尿777hd撒尿|