⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 headset_charger.c

📁 bc5_stereo:bluetooth stereo Headset CODE 支持A2DP HSP 和 HSP 。可作为车载免提。BlueLab 2007环境下编译
💻 C
字号:
/****************************************************************************
Copyright (C) Cambridge Silicon Radio Ltd. 2005-2007

FILE NAME
    headset_charger.c

DESCRIPTION
    This file contains the battery charging functionality for NiMH batteries.
	
NOTES
	
*/


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

#include "headset_charger.h"
#include "headset_debug.h"
#include "headset_private.h"

#include <charger.h>
#include <pio.h>
#include <vm.h>


#ifdef DEBUG_CHARGER
#define CH_DEBUG(x) DEBUG(x)
#else
#define CH_DEBUG(x) 
#endif   

#define SET_CHARGER_STATE(s)	(power->charger.state = s);


/* Private messages for controlling battery charging process */
#define CHARGER_MESSAGE_BASE	(0)
enum
{
	CHARGER_MONITOR = CHARGER_MESSAGE_BASE	
};


/* Local function prototypes */
static void charger_handler(Task task, MessageId id, Message message);

/*static void chargerError(power_type* power);*/


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

/****************************************************************************
NAME    
    charger_handler
    
DESCRIPTION
  	Messages for the charger control task arrive here
    
RETURNS
    void
*/
static void charger_handler(Task task, MessageId id, Message message)
{
	/* Get Power configuration data */
	power_type* power = ((hsTaskData *)getAppTask())->power;
	
	charger_status lcharger_status = NOT_CHARGING ;
	
    lcharger_status = ChargerStatus() ;   
	
	/* Process message */
	switch(id)
	{	
		/* Monitor onchip LiON battery charger */
		case CHARGER_MONITOR:
			CH_DEBUG(("CH: monitor status = %d\n",lcharger_status));
			
			switch (lcharger_status)
            {
                
            case CHARGING : 	
            case TRICKLE_CHARGE :
            case FAST_CHARGE :	
				MessageSend(getAppTask(), EventFastCharge, 0);
            break ;
            
            case DISABLED_ERROR : 	
            case STANDBY :	
            case NO_POWER :	
            case NOT_CHARGING :
            default:    
				MessageSend(getAppTask(), EventTrickleCharge, 0);
            break ;    
            }
			
			/* Monitoring period of 1s whilst charger is plugged in */				
			MessageSendLater(&power->charger.task, CHARGER_MONITOR, 0, D_SEC(1));				
			break;

		default:
			break;
	}
}


/****************************************************************************
NAME    
    chargerError
    
DESCRIPTION
  	This function is called if a charger error is detected
    
RETURNS
    void
*/
/*
static void chargerError(power_type* power)
{
	CH_DEBUG(("CH: Error\n"));

	SET_CHARGER_STATE(charge_error);

	MessageSend(getAppTask(), EventCancelLedIndication, 0);	

	MessageSend(getAppTask(), EventChargeError, 0);
}
*/


/*****************************************************************************/
void chargerInit(power_type* power)
{
	CH_DEBUG(("CH: Init\n"));
	
	/* Setup charger message task handler */
	power->charger.task.handler = charger_handler;
	
	/* Assume charger disconnected at boot time */
	power->charger.state = disconnected;
}


/*****************************************************************************/
void chargerConnected(power_type* power)
{
	CH_DEBUG(("CH: Connected\n"));
	
	switch(power->charger.state)
	{
	case disconnected:
		/* LiON Handled automatically */
			
		/* Fast charge state */
		SET_CHARGER_STATE(fast_charge);
			
		/* Enable fast charge PIO line */
		/*setChargeEnable(TRUE);*/

		/* Start monitoring onchip LiON battery charger status */
		MessageSend(&power->charger.task, CHARGER_MONITOR, 0);
		
		/* Disable deep sleep during charging */
		VmDeepSleepEnable(FALSE);
        
        break;
		
	case trickle_charge:
	case fast_charge:
	case charge_error:
		break;
	}	
}


/*****************************************************************************/
void chargerDisconnected(power_type* power)
{
	CH_DEBUG(("CH: Disconnected\n"));
	
	switch(power->charger.state)
	{
	case trickle_charge:
	case fast_charge:
	case charge_error:
		/* The charger has just been removed, move to disconnected state */
		SET_CHARGER_STATE(disconnected);

		/* Cancel any pending LiON battery charger status monitoring messages */
		MessageCancelAll(&power->charger.task, CHARGER_MONITOR);

		/* Cancel current LED indication */
		MessageSend(getAppTask(), EventCancelLedIndication, 0);
				
		/* Disable fast charge enable PIO line */
		/*setChargeEnable(FALSE);*/

		/* Enable deep sleep */
		VmDeepSleepEnable(TRUE);

		break;
		
	case disconnected:
		break;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -