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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? headset_battery.c

?? bc5_stereo:bluetooth stereo Headset CODE 支持A2DP HSP 和 HSP 。可作為車(chē)載免提。BlueLab 2007環(huán)境下編譯
?? C
字號(hào):
/****************************************************************************
Copyright (C) Cambridge Silicon Radio Ltd. 2005

FILE NAME
    headset_battery.c

DESCRIPTION
    This file contains the battery specific functionality.  This includes
	battery voltage and temperature monitoring

NOTES
	Certain assumptions have been made on the assignment of the analog input
	signals:
	
	AIO_0 is connected to VBAT via a potential divider
	
	VBAT = AIO_0 *   Ra
				   -------
				   Ra + Rb
				   
	Where the divisor ratio of Ra and Rb is configured from persistent store
				   
	AIO_1 is connected to a thermister used to measure the battery temperature
	fed from an PIO output through a 10k resistor
*/


/****************************************************************************
    Header files
*/

#include "headset_battery.h"
#include "headset_debug.h"
#include "headset_private.h"
#include "headset_statemanager.h"

/*#include <pio.h>*/
#include <battery.h>




#ifdef DEBUG_BAT
#define BT_DEBUG(x) DEBUG(x)
#else
#define BT_DEBUG(x) 
#endif   


/* Local static functions */
static void batteryNormal(Task pTask , power_type * power  );
static void batteryLow(Task pTask, power_type* power);
static void batteryShutdown(Task pTask);
static void aio_handler(Task task, MessageId id, Message message);
static void handleBatteryVoltageReading(power_type* power, uint32 reading , Task pTask);


/****************************************************************************
  FUNCTIONS
*/

/****************************************************************************
NAME    
    batteryNormal
    
DESCRIPTION
  	Called when the battery voltage is detected to be in a Normal state
    
RETURNS
    void
*/
static void batteryNormal(Task pTask, power_type * power )
{
    BT_DEBUG(("PM Normal\n"));

    if (power->charger.state != disconnected) 
    	MessageSend(getAppTask(), EventOkBattery, 0);


}


/****************************************************************************
NAME    
    batteryLow
    
DESCRIPTION
  	Called when the battery voltage is detected to be in a Low state
    
RETURNS
    void
*/
static void batteryLow(Task pTask , power_type* power)
{
   
        /*we only want low battery reminders if the headset is ON and not charging*/
    if ( (power->charger.state == disconnected) && (stateManagerGetHfpState() != headsetPoweringOn) )
	{    
    	MessageSend(getAppTask(), EventLowBattery, 0); 

    }
}


/****************************************************************************
NAME    
    batteryShutdown
    
DESCRIPTION
  	Called when the battery voltage is detected to be in a Shutdown state
    
RETURNS
    void
*/
static void batteryShutdown(Task pTask)
{

	BT_DEBUG(("PM Shutdown\n"));
        /*we only want low battery reminders if the headset is ON and not charging*/
    if ( stateManagerGetHfpState() != headsetPoweringOn )
	{    
    
    	MessageSend(getAppTask(), EventLowBattery, 0); 
		MessageSend(getAppTask(), EventPowerOff, 0);
    	
	}	
}


/****************************************************************************
NAME    
    handleBatteryVoltageReading
    
DESCRIPTION
  	Calculate current battery voltage and check to determine if the level
	has fallen below either the low or critical thresholds.  If the voltage
	has fallen below the low threshold generate a low battery system event.
	If the level has fallen below the critical threshold level then initiate
	a headset power down sequence.
    
RETURNS
    void
*/
static void handleBatteryVoltageReading(power_type* power, uint32 reading , Task pTask)
{	
	/* Calculate the current battery voltage in mV */
	uint32 vb = ((reading * 1000) / power->config.battery.divisor_ratio);
	
	BT_DEBUG(("VBAT: %lumV\n", vb));
	
	/* Store current battery reading */
	power->vbat_task.current_reading = (int16)vb;
	
	BT_DEBUG(("BAT [%d][%d][%d]\n", 	
	    (uint16)(power->config.battery.high_threshold  * 20) ,
        (uint16)(power->config.battery.low_threshold      * 20) ,
    	(uint16)(power->config.battery.shutdown_threshold * 20) 
	)) ;
	
	
	/* Check current voltage level against configured thresholds */
	
	if (vb > (uint16)(power->config.battery.high_threshold  * 20) )
		batteryNormal( pTask, power );	
	else if(vb < (uint16)(power->config.battery.shutdown_threshold * 20) )
		batteryShutdown( pTask );
	else if(vb < (uint16)(power->config.battery.low_threshold      * 20) )
		batteryLow(pTask, power);
}


/****************************************************************************
NAME    
    aio_handler
    
DESCRIPTION
  	AIO readings arrive here for processing
    
RETURNS
    void
*/
static void aio_handler(Task task, MessageId id, Message message)
{
	uint32	reading;
	
	/* Get Power configuration data */
	power_type* power = ((hsTaskData *)getAppTask())->power;
	
	/* This function receives messages from the battery library */
	aioTask* this_task = (aioTask*)task;
	battery_reading_source source = this_task->source;
	
	switch(id)
	{
		case BATTERY_READING_MESSAGE :		
			/* New reading, extract reading in mV and handle accordingly */
			reading = (*((uint32*)message));
			
			/* Readings can either be AIO0 (Battery Voltage) or AIO1 (Battery Temperature) */
			switch(source)
			{
                case BATTERY_INTERNAL:
					/* Battery Voltage */
					handleBatteryVoltageReading(power, reading , task);
					break;
			
                case AIO0:
				case AIO1:			
				case VDD:
				case AIO2:
				case AIO3:
				default:
					break;
			}	
            /* If initial reading, revert back to default battery reading period */
            if (power->initial_reading)
            {
				DEBUG(("BATT : Initial reading\n")) ;
                power->initial_reading = FALSE;
            	BatteryInit(&power->vbat_task.state, &power->vbat_task.task, power->vbat_task.source, D_SEC(power->config.battery.monitoring_period));	           
            }
			break;

        
		default:
			break;
	}
}


/*****************************************************************************/
void batteryInit(power_type* power)
{
	/* Initialise the default battery readings */
	/*power->vbat_task.current_reading = power->config.charger.min_voltage;*/
	/*power->vth_task.current_reading = power->config.charger.min_temp;*/
    power->initial_reading = TRUE;
	   
	/* --- Battery Voltage --- */
	/* The battery voltage is monitored at all times.  Initialise the battery
	   library to read the battery voltage via BATTERY_INTERNAL */
	power->vbat_task.task.handler = aio_handler;
	power->vbat_task.source = BATTERY_INTERNAL;
		
    /* Read battery now */
    batteryRead(power);
}


/*****************************************************************************/
void batteryRead(power_type* power)
{
	power->initial_reading = TRUE;
	BatteryInit(&power->vbat_task.state, &power->vbat_task.task, power->vbat_task.source, 0);	
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩高清一级片| www.av精品| 日韩理论片在线| 555www色欧美视频| 91啪亚洲精品| 国产一区二区在线观看视频| 亚洲伊人伊色伊影伊综合网| 久久久久久影视| 欧美精品九九99久久| 成人黄色777网| 国产一二精品视频| 日本亚洲天堂网| 午夜精品一区二区三区三上悠亚| 国产精品视频看| 久久久精品欧美丰满| 日韩精品一区二区三区swag| 欧美日韩精品综合在线| 99久久伊人精品| 国产91精品一区二区麻豆亚洲| 蜜臀av一级做a爰片久久| 亚洲一区二区在线视频| 亚洲天堂精品在线观看| 国产精品少妇自拍| 国产欧美日韩综合| 久久久美女毛片| 久久久久一区二区三区四区| 日韩欧美的一区二区| 91精品国产一区二区三区香蕉| 91久久精品午夜一区二区| 色综合天天综合网天天看片| 成人一区二区三区| 国产成人av一区二区三区在线| 九九精品视频在线看| 久久国产麻豆精品| 九九**精品视频免费播放| 激情综合网av| 国产精品一卡二卡| 国产福利一区二区三区视频在线 | 美日韩一区二区三区| 亚洲成av人片在www色猫咪| 亚洲精品伦理在线| 亚洲一区二区三区四区在线| 午夜伊人狠狠久久| 蜜臀av一区二区在线免费观看| 免费观看在线色综合| 久久激情五月婷婷| 国产一区二区女| 成人福利电影精品一区二区在线观看| 粉嫩一区二区三区性色av| 成人动漫精品一区二区| 日本高清不卡一区| 欧美日韩一区 二区 三区 久久精品| 欧美日韩一区小说| 日韩午夜三级在线| 久久久精品国产免大香伊| 国产精品久久网站| 亚洲精品成人a在线观看| 午夜视频一区二区三区| 麻豆精品在线观看| 国产成人精品亚洲777人妖 | 欧美一级欧美三级| 26uuu久久综合| 国产精品久久久久影视| 亚洲综合一二三区| 青草国产精品久久久久久| 国产一区二区视频在线| gogogo免费视频观看亚洲一| 欧美在线看片a免费观看| 日韩一区国产二区欧美三区| 久久久亚洲综合| 一区二区三区波多野结衣在线观看| 亚洲福利一二三区| 国产精品一区不卡| 欧美在线不卡一区| 久久综合色一综合色88| 中文字幕一区三区| 蜜臀精品一区二区三区在线观看| 国产精品一卡二| 欧美日韩在线一区二区| 国产亚洲欧洲一区高清在线观看| 亚洲日本乱码在线观看| 免费精品视频最新在线| jvid福利写真一区二区三区| 欧美日韩你懂得| 中文字幕乱码亚洲精品一区| 午夜免费久久看| 国产成人av福利| 欧美日韩国产综合一区二区| 国产午夜一区二区三区| 三级欧美在线一区| 99久久99久久综合| 欧美成人性福生活免费看| 亚洲色图丝袜美腿| 国产一区二区女| 欧美一区二视频| 亚洲摸摸操操av| 极品少妇xxxx精品少妇| 欧美日韩国产美| 亚洲女子a中天字幕| 国内精品国产成人| 欧美一区永久视频免费观看| 最新欧美精品一区二区三区| 国产在线看一区| 欧美一区二区视频在线观看2022| 自拍视频在线观看一区二区| 国产成人免费视频一区| 91精品国产乱| 午夜国产不卡在线观看视频| 色综合久久天天| 亚洲国产高清不卡| 韩国成人福利片在线播放| 欧美精品电影在线播放| 一片黄亚洲嫩模| av成人动漫在线观看| 日本一区二区视频在线| 九九久久精品视频| 欧美一级久久久| 日本少妇一区二区| 4438x亚洲最大成人网| 玉米视频成人免费看| 99久久综合国产精品| 国产精品高潮呻吟久久| 成人精品亚洲人成在线| 久久久久久久久久电影| 国产一区二区三区四区五区美女| 欧美一区二区视频在线观看| 天天综合天天综合色| 欧洲一区二区三区在线| 一区二区三区成人在线视频| 97精品久久久久中文字幕| 最近中文字幕一区二区三区| 成人国产精品视频| 国产精品成人免费| 成人国产精品免费观看视频| 中文字幕一区在线观看视频| fc2成人免费人成在线观看播放| 中文字幕亚洲不卡| 99re视频这里只有精品| 一区二区三区不卡在线观看| 欧美视频中文字幕| 婷婷六月综合亚洲| 日韩亚洲欧美综合| 狠狠色伊人亚洲综合成人| 久久免费国产精品| 国产98色在线|日韩| 国产精品久久久久aaaa樱花 | 久久午夜色播影院免费高清| 狠狠久久亚洲欧美| 亚洲国产精品成人综合| 成人a免费在线看| 中文字幕一区二区三区不卡| 91亚洲精品久久久蜜桃网站| 亚洲男同性恋视频| 欧美久久久久免费| 久草这里只有精品视频| 国产午夜精品一区二区三区视频| 丁香婷婷综合网| 亚洲少妇中出一区| 欧美日韩国产综合视频在线观看 | 欧美国产日韩精品免费观看| 99精品视频中文字幕| 亚洲午夜免费福利视频| 欧美zozozo| 暴力调教一区二区三区| 亚洲一级二级在线| 精品奇米国产一区二区三区| 丁香激情综合国产| 亚洲综合男人的天堂| 欧美一级黄色片| 岛国av在线一区| 亚洲高清视频的网址| 亚洲精品一区二区三区福利| 成人黄色777网| 男女视频一区二区| 国产精品丝袜一区| 91精品久久久久久久久99蜜臂| 国产盗摄一区二区三区| 亚洲最色的网站| 精品国产1区2区3区| 色嗨嗨av一区二区三区| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲人成精品久久久久久| 日韩视频一区二区| 色哟哟在线观看一区二区三区| 精品一区二区三区久久| 一区二区欧美在线观看| 久久综合色婷婷| 欧美精品三级在线观看| 成人免费va视频| 麻豆精品一区二区综合av| 亚洲卡通动漫在线| 久久色在线观看| 欧美日本在线一区| 成人av在线看| 精品午夜久久福利影院| 亚洲国产一区二区三区 | 亚洲一区二区精品3399| 日本一区二区免费在线| 欧美一区二区三区公司| 在线视频你懂得一区二区三区|