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

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

?? headset_power.c

?? bluelab 3.52 里面的立體聲程序源代碼
?? C
字號:
/****************************************************************************
Copyright (C) Cambridge Silicon Radio Ltd. 2004-2006
Part of BlueLab 3.5.2-release

FILE NAME
    headset_power.c        

DESCRIPTION
    Deals with powering the headset.

*/


/****************************************************************************
    Header files
*/
#include "headset_private.h"
#include "av_stream_control.h"
#include "headset_common.h"
#include "headset_led.h"
#include "headset_power.h"
#include "hfp_slc.h"

#include <stdlib.h>
#include <string.h>
#include <panic.h>
#include <pio.h>
#include <codec.h>
#include <pcm.h>
#include <ps.h>


#ifdef DEBUG_POWER
#define POWER_DEBUG(x) DEBUG(x)
#else
#define POWER_DEBUG(x) 
#endif


/**************************************************************************/
void headsetSetPowerState(headsetTaskData *app, power_state state)
{
    POWER_DEBUG(("POWER: Set power state old = %d new = %d\n",app->headset_power_state, state));
    app->headset_power_state = state;
}

/**************************************************************************/
void headsetPowerOn(headsetTaskData *app)
{
#ifdef SOFT_POWER
    /* Hold power on */
    PioSetDir(POWER_HOLD, POWER_HOLD);
    PioSet(POWER_HOLD, POWER_HOLD);
#endif
	PioSetDir(AUDIO_AMP_LINE, AUDIO_AMP_LINE);
    headsetPowerAmp(app, TRUE);
	app->led_state |= LED_INIT;
	app->led_state &= ~LED_POWER_DOWN;
	app->headset_logically_on = 1;
	
    /* Start the LED flashing sequence */
    startBlueLed(app->led_state);
	if (app->headset_power_state != power_state_off_charging)
		startRedLed();
    

}


/**************************************************************************/
void headsetPowerOnInit(headsetTaskData *app)
{
    /*Power on and send a message to check that a power-on event has been seen*/
	POWER_DEBUG(("POWER: Charger Plugged in\n"));
#ifdef SOFT_POWER
	PioSetDir(POWER_HOLD, POWER_HOLD);
    PioSet(POWER_HOLD, POWER_HOLD);
#endif
		/*Send a message to check if we have seen a power on event, if this isn't seen
		  the headset will power down*/
	MessageSendLater(getAppTask(), APP_POWER_ON_EVENT_SEEN, 0, (uint32) 15000);

#ifdef WOLFSON_CODEC_WM8731
    /* Init the Wolfson codec with default params. */
    CodecInitWolfson(&app->task, 0);
#else
    /* Initialise the Codec Library */
    CodecInitCsrInternal(&app->task);
#endif
}


/**************************************************************************/
void headsetStartPowerDown(headsetTaskData* app)
{
	if (app->headset_power_state == power_state_powering_down)
		return;
	
    headsetSetPowerState(app, power_state_powering_down);
    
    /* Close down any active AV link */
    if ((app->a2dp_state == avHeadsetA2dpConnected) || (app->a2dp_state == avHeadsetA2dpStreaming))
    {
        A2dpCloseAll(app->a2dp);
    }
    /* Close down any active AVRCP link */
    if (app->avrcp_state == avHeadsetAvrcpConnected)
        AvrcpDisconnect(app->avrcp);
  
    /* Close down any active AG link */
    if ((app->hfp_state != headsetInitialising) && (app->hfp_state != headsetReady))
        hfpHeadsetDisconnectSlc(app);
    
    MessageCancelAll(getAppTask(), APP_AUTO_SWITCH_OFF_IND);        
    MessageSendLater(getAppTask(), APP_POWER_OFF_IND, 0, (uint32) 5000);
    
    headsetCheckPowerDownStatus(app);
        
}


/**************************************************************************/
void headsetCheckPowerDownStatus(const headsetTaskData *app)
{
    if (app->headset_power_state != power_state_powering_down)
        return;
    
    if ((app->a2dp_state == avHeadsetA2dpReady) && (app->avrcp_state == avHeadsetAvrcpReady) && (app->hfp_state == headsetReady)
		&& MessageCancelAll(getAppTask(), APP_POWER_OFF_IND))
    {
            POWER_DEBUG(("POWER: Power down early\n"));
		
        (void) MessageCancelAll(getAppTask(), APP_POWER_OFF_IND);
		(void) MessageCancelAll(getAppTask(), APP_POWER_DOWN_LED_UPDATE_IND);
        MessageSend(getAppTask(), APP_POWER_OFF_IND, 0);
    }
}


/**************************************************************************/
void headsetPowerDown(const headsetTaskData *app)
{
	
    APP_ON_EVENT_LED_UPDATE_IND_T* message;
	message = malloc(sizeof(APP_ON_EVENT_LED_UPDATE_IND_T));
	message->count=0;
	message->id = APP_POWER_DOWN_LED_UPDATE_IND;
	POWER_DEBUG(("POWER: PowerDown and Panic\n"));
 	(void) MessageCancelAll(getAppTask(), APP_LED_UPDATE_IND);
    /* Power down the codec */
    CodecPowerDown(app->codec_task);

    /* Store the current volume */
    (void) PsStore(VOLUME_LEVEL, &app->speaker_volume, sizeof(app->speaker_volume));
	
    /* call timer function ASAP */
	if (app->headset_logically_on)
	    MessageSendLater(getAppTask(), APP_POWER_DOWN_LED_UPDATE_IND, message, 0);
	else
	{
		headsetPowerDownLEDs((headsetTaskData *) app);	
	}

    /* Cancel messages we may have queued */
	POWER_DEBUG(("POWER: Cancel messages\n"));
    (void) MessageCancelAll(getAppTask(), APP_MUSIC_RESTART_IND);
    (void) MessageCancelAll(getAppTask(), APP_HFP_SLC_REQ);
    (void) MessageCancelAll(getAppTask(), APP_HFP_SLC_TIMEOUT_IND);

}
/**************************************************************************/
void headsetPowerDownLEDs(headsetTaskData *app)
{  
	if ((app->led_state & LED_CHARGING) || (app->led_state & LED_BATTERY_FULL))
	{
    	PioSet(LED_BLUE, 0);
		PioSetDir(LED_BLUE, 0);
		app->headset_logically_on = 0;
		MessageSend(getAppTask(), APP_POWER_CHARGING_OFF, 0);
        POWER_DEBUG(("POWER: Power off charging\n"));
	}
	else
	{
	    /* Disable power hold and LED */
		MessageSend(getAppTask(), APP_POWER_OFF, 0);
        POWER_DEBUG(("POWER: Power off\n"));
		PioSet(LED_BLUE |LED_RED, 0);
#ifdef SOFT_POWER
        PioSet(POWER_HOLD,0);
#endif
	}

    /* Call the function that will disable page scanning*/
	updateHeadsetScanning(app);

    /* Finally turn off audio supply if it's still active */    
    headsetPowerAmp(app, FALSE);
}		


/**************************************************************************/
void headsetPowerCheckAutoOff(const headsetTaskData *app)
{
    if (app->features.auto_switch_off_enabled && 
        (app->features.auto_switch_off_timeout != 0) &&
        ((app->headset_power_state == power_state_on) || (app->headset_power_state == power_state_on_charging)))
    {
        POWER_DEBUG(("POWER: Cancel auto power off\n"));
        MessageCancelAll(getAppTask(), APP_AUTO_SWITCH_OFF_IND);        
        if ((app->hfp_state == headsetReady) && (app->a2dp_state == avHeadsetA2dpReady))
        {
            POWER_DEBUG(("POWER: Auto power off in %d secs\n",app->features.auto_switch_off_timeout));
            MessageSendLater(getAppTask(), APP_AUTO_SWITCH_OFF_IND, 0, D_SEC(app->features.auto_switch_off_timeout));            
        }
    }
}


/**************************************************************************/
bool headsetIsAmpPowered(const headsetTaskData *app) 
{
    return app->amp.amp_enabled;
}
    

/**************************************************************************/
void headsetPowerAmp(headsetTaskData *app, bool power)
{
    if (power && !app->amp.amp_enabled)
    {
        POWER_DEBUG(("POWER: Enable Audio Amp\n"));
        PioSet(AUDIO_AMP_LINE, AUDIO_AMP_LINE);
        app->amp.amp_enabled = 1;
    }
    else
    if (!power && app->amp.amp_enabled)
    {
        POWER_DEBUG(("POWER: Disable Audio Amp\n"));
        PioSet(AUDIO_AMP_LINE, 0);
        StreamDisconnect(StreamPcmSource(0), StreamPcmSink(0)); 
        StreamDisconnect(StreamPcmSource(1), StreamPcmSink(1));
        app->amp.amp_enabled = 0;
    }
}

/**************************************************************************/
void headsetPowerAmpOnOnly(headsetTaskData *app)
{
    POWER_DEBUG(("POWER: Enable Amp Only\n"));
    PioSet(AUDIO_AMP_LINE, AUDIO_AMP_LINE);
    MessageCancelAll(getAppTask(), APP_AMP_IDLE_IND);
    if ((app->headset_power_state == power_state_off) || (app->headset_power_state == power_state_off_charging))
    {
        MessageSendLater(getAppTask(), APP_AMP_IDLE_IND, 0, AMP_IDLE_TIMER);
    }
}

/**************************************************************************/
void headsetPowerUpdateAmpOnFlag(headsetTaskData *app)
{
    app->amp.amp_enabled = 1;    
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品视频www在线观看| 91一区在线观看| 中文字幕一区二区三区蜜月| 欧美午夜精品一区二区蜜桃| 国产精品亚洲综合一区在线观看| 亚洲免费观看高清完整版在线 | 自拍偷拍亚洲综合| 欧美日韩在线综合| 亚洲国产精品综合小说图片区| 久久久久亚洲蜜桃| 91久久久免费一区二区| 美女视频黄 久久| 亚洲愉拍自拍另类高清精品| 2021久久国产精品不只是精品 | 欧美专区日韩专区| 国产一区二区三区电影在线观看| 一级精品视频在线观看宜春院| 久久久综合网站| 精品视频一区三区九区| 97久久精品人人做人人爽| 久久99精品网久久| 亚洲h动漫在线| 亚洲在线免费播放| 中文字幕日韩av资源站| 精品处破学生在线二十三| 91麻豆精品国产综合久久久久久| 成人av在线资源| 污片在线观看一区二区| 亚洲日本一区二区三区| 2023国产精华国产精品| 欧美色老头old∨ideo| 日本精品一级二级| 成人av综合在线| 成人av影院在线| 韩国成人在线视频| 麻豆视频观看网址久久| 久久精品国产亚洲高清剧情介绍| 国产一区二区在线看| 欧美国产成人精品| 国产女人18水真多18精品一级做| 日韩精品一区二区三区四区 | 日韩高清中文字幕一区| 一级中文字幕一区二区| 天天综合色天天综合色h| 亚洲欧美国产高清| 国产亚洲婷婷免费| 国产亚洲va综合人人澡精品| 久久综合久久综合久久| 国产亚洲综合性久久久影院| 日韩精品一区二区三区中文不卡| 91麻豆精品国产91久久久使用方法| 56国语精品自产拍在线观看| 欧美日韩视频专区在线播放| 99r国产精品| 精品视频在线免费观看| 欧美精品tushy高清| 欧美视频中文字幕| 欧美日韩亚州综合| 欧美久久高跟鞋激| 久久久久亚洲蜜桃| 国产农村妇女精品| 亚洲乱码日产精品bd| 亚洲福利一区二区三区| 日本欧美一区二区| 国产精品一区二区x88av| 成人动漫中文字幕| 99精品欧美一区二区蜜桃免费| 欧美色中文字幕| 欧美一级日韩免费不卡| 欧美精品一区二区精品网| 国产精品美女久久久久久久久| 国产精品亲子乱子伦xxxx裸| 国产精品私人影院| 亚洲一区自拍偷拍| 美国毛片一区二区| 99久久免费国产| 99久久精品情趣| 欧美日韩久久久久久| 69久久99精品久久久久婷婷| 欧美一级夜夜爽| 国产精品天天摸av网| 天天av天天翘天天综合网| av电影天堂一区二区在线| 7777女厕盗摄久久久| 日韩欧美www| 国产精品久久久久久亚洲伦| 日韩av网站免费在线| 国产不卡视频在线观看| 在线观看视频欧美| 国产欧美中文在线| 一区二区三区不卡视频在线观看| 国产一区视频在线看| 99re这里只有精品首页| 6080日韩午夜伦伦午夜伦| 国产精品久久久久国产精品日日| 亚洲香肠在线观看| 国产精品一区二区免费不卡| 欧美日韩国产影片| 国产欧美精品一区二区色综合 | a级高清视频欧美日韩| av不卡一区二区三区| 欧美乱妇15p| 日韩精品中文字幕一区二区三区| 国产日韩欧美一区二区三区乱码| 亚洲手机成人高清视频| 青草国产精品久久久久久| 九九久久精品视频| 91成人在线免费观看| 久久久91精品国产一区二区精品 | 欧美怡红院视频| 日韩午夜在线播放| 亚洲最新视频在线播放| 粉嫩一区二区三区在线看| 欧美日韩五月天| 一区二区高清在线| 国产成人在线视频网址| 精品婷婷伊人一区三区三| 国产精品国产三级国产普通话三级| 国产成人在线视频免费播放| 日韩美女主播在线视频一区二区三区| 日韩一区在线看| 国产精品羞羞答答xxdd| 欧美精品粉嫩高潮一区二区| 成人免费在线播放视频| 另类调教123区| 欧美午夜免费电影| 亚洲视频香蕉人妖| 国产黄人亚洲片| 欧美videossexotv100| 亚洲一区二区偷拍精品| 91亚洲精品一区二区乱码| 久久精品人人做人人爽人人| 蜜桃传媒麻豆第一区在线观看| 欧美四级电影在线观看| 亚洲视频1区2区| 懂色av一区二区在线播放| 久久亚区不卡日本| 国产一区二区0| 精品国产区一区| 国产高清不卡一区二区| 精品久久久久久久久久久久久久久久久 | 丝袜脚交一区二区| 欧美性猛片xxxx免费看久爱| 一区二区三区四区高清精品免费观看 | 首页国产欧美久久| 欧美日韩高清一区二区不卡| 亚洲日本电影在线| eeuss鲁片一区二区三区| 国产精品乱码一区二三区小蝌蚪| 成人免费看黄yyy456| 久久九九久久九九| 极品少妇一区二区| 久久免费视频一区| 国产激情偷乱视频一区二区三区| 国产精品女主播av| av在线播放不卡| 亚洲风情在线资源站| 欧美日韩成人一区| 日日骚欧美日韩| 精品久久国产97色综合| 国产在线日韩欧美| 中文字幕在线免费不卡| 99精品视频中文字幕| 亚洲国产精品一区二区尤物区| 91精品国产综合久久精品图片 | 91蜜桃免费观看视频| 亚洲mv大片欧洲mv大片精品| 欧美精品一级二级| 国产经典欧美精品| 国产精品传媒入口麻豆| 国产xxx精品视频大全| 亚洲男人的天堂在线aⅴ视频| 在线免费精品视频| 久久成人免费网| 国产日韩高清在线| 午夜在线成人av| 精品国产一区二区三区久久久蜜月| 国产一区二区精品久久99| 自拍偷拍亚洲欧美日韩| 欧美日本高清视频在线观看| 午夜成人在线视频| 欧美激情一区二区三区在线| 99精品黄色片免费大全| 久久黄色级2电影| 国产欧美精品一区二区色综合| 成人激情小说乱人伦| 日韩精品一级中文字幕精品视频免费观看 | 有码一区二区三区| 制服丝袜日韩国产| 91在线视频在线| 视频一区欧美日韩| 久久综合成人精品亚洲另类欧美 | 26uuu亚洲综合色欧美| 99视频在线观看一区三区| 亚洲电影视频在线| 国产性做久久久久久| 99久久精品情趣| 开心九九激情九九欧美日韩精美视频电影 | 国产麻豆成人精品| 国产精品国产自产拍高清av |