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

📄 headset_led.c

📁 bluelab 3.52 里面的立体声程序源代码
💻 C
字号:
/****************************************************************************
Copyright (C) Cambridge Silicon Radio Ltd. 2004-2006
Part of BlueLab 3.5.2-release

FILE NAME
    headset_led.c

DESCRIPTION
    Controls the flashing of the LED depending on the current state.

*/


/****************************************************************************
    Header files
*/
#include "headset_private.h"
#include "headset_led.h"

#include <pio.h>
#include <message.h>
#include <stdlib.h>
#include <stdio.h>

#define LED_PAIRING_TIME_ON             200
#define LED_CONNECTED_TIME_ON           1000
#define LED_IDLE_ON                     200
#define LED_CHARGING_TIME_ON            500
#define LED_BATTERY_LOW_TIME_ON         500
#define LED_POWER_DOWN_TIME_ON         	2000
#define LED_INIT_TIME_ON				200
#define LED_DEL_PAIRED_LIST_ON          200

#define LED_PAIRING_TIME_OFF            200
#define LED_CONNECTED_TIME_OFF          2000
#define LED_IDLE_OFF                    2000
#define LED_CHARGING_TIME_OFF           1000
#define LED_BATTERY_LOW_TIME_OFF        3000
#define LED_POWER_DOWN_TIME_OFF         200
#define LED_INIT_TIME_OFF				200
#define LED_DEL_PAIRED_LIST_OFF         200
#define LED_IDLE_TIME 					500

/************************************************************/
/*LED callback function for LED flashing sequences to show
Button presses e.g. on power on/power off/reset paired device list*/
static uint32 ledOnEventCallback(ledState state)
{
    bool blue_on = (PioGet() & LED_BLUE?TRUE:FALSE);
    blue_on = blue_on;
    if (blue_on)
    {
        PioSet(LED_BLUE, 0);
		if (state & LED_INIT)
			return LED_INIT_TIME_OFF;
		if (state & LED_POWER_DOWN)
			return LED_POWER_DOWN_TIME_OFF;
		if (state & LED_DEL_PAIRED_LIST)
			return LED_DEL_PAIRED_LIST_OFF ;
		return LED_IDLE_OFF;
    }
    else
    {
        PioSet(LED_BLUE, LED_BLUE);
		if (state & LED_INIT)
			return LED_INIT_TIME_ON;
		if (state & LED_POWER_DOWN)
			return LED_POWER_DOWN_TIME_ON;
		if (state & LED_DEL_PAIRED_LIST)
			return LED_DEL_PAIRED_LIST_ON ;
        return LED_IDLE_ON;
    }
	
	
}

/***************************************************************/
/* LED callback function for Blue LED*/
static uint32 ledCallback(ledState state)
{
   bool blue_on;
   if ((PioGet() & LED_BLUE) == LED_BLUE)
	   blue_on=1;
   else
	   blue_on=0;
    if (state == LED_NONE)
    {
        if (blue_on)
		{
            PioSet(LED_BLUE, 0);
        	return LED_IDLE_OFF;
		}
	}
        
    blue_on = blue_on;
    if (blue_on)
    {
        PioSet(LED_BLUE, 0);
        if (state & LED_PAIRING)
		{			
			PioSet(LED_RED, LED_RED);
            return LED_PAIRING_TIME_OFF;
		}
        if (state & LED_CONNECTED)
            return LED_CONNECTED_TIME_OFF;
        return LED_IDLE_OFF;
    }
    else
    {
        PioSet(LED_BLUE, LED_BLUE);
        if (state & LED_PAIRING)
		{
			PioSet(LED_RED, 0);
            return LED_PAIRING_TIME_ON;
		}
    	if (state & LED_CONNECTED)
            return LED_CONNECTED_TIME_ON;
        return LED_IDLE_ON;
    }
	
}

/**************************************************************************/
/*LED callback function for RED LED*/
/*RED LED is used to indicate if the headset is in pairing mode
  (together with the BLUE LED) or if the headset is charging or 
  the battery is low*/
static uint32 redLedCallback(ledState state)
{
	
  
   bool red_on;
   if ((PioGet() & LED_RED) == LED_RED)
	   red_on=1;
   else
	   red_on=0;

    red_on = red_on;
	PioSetDir(LED_RED, ~0);
    if (red_on)
    {
		if (state & LED_INIT)
			{
				PioSet(LED_RED, 0);
            	return LED_IDLE_TIME ;
			}
			if (state & LED_PAIRING)
            return LED_IDLE_TIME ;
        if (state & LED_CHARGING)
			{
				PioSet(LED_RED, 0);
            	return LED_CHARGING_TIME_OFF;
			}
        if (state & LED_BATTERY_LOW)
			{
            	PioSet(LED_RED, 0);
				return LED_BATTERY_LOW_TIME_OFF;
			}
		 if (state & LED_BATTERY_FULL)
			{
				return LED_IDLE_TIME ;
			}
		 PioSet(LED_RED, 0);
         return LED_IDLE_TIME ;
    }
    else
    {
		if (state & LED_INIT)
            return LED_IDLE_TIME ;
  		if (state & LED_PAIRING)
		{
            return LED_IDLE_TIME ;
		}
        if (state & LED_CHARGING)
			{
			PioSet(LED_RED, LED_RED);
            return LED_CHARGING_TIME_ON;
		}
        if (state & LED_BATTERY_LOW)
			{
			PioSet(LED_RED, LED_RED);
            return LED_BATTERY_LOW_TIME_ON;
		}
		if (state & LED_BATTERY_FULL)
			{
			PioSet(LED_RED, LED_RED);
            return LED_IDLE_TIME ;
		}
        return LED_IDLE_TIME ;
    }
}
	
/**************************************************************************/
/*Initialise blue LED*/
void startBlueLed(ledState state)
{
	APP_ON_EVENT_LED_UPDATE_IND_T* message;
	message = malloc(sizeof(APP_ON_EVENT_LED_UPDATE_IND_T));
	PioSetDir(LED_BLUE, ~0);
	PioSet(LED_BLUE, 0);
	message->count=0;
	message->id = APP_INIT_LED_UPDATE_IND;
    /* call timer function ASAP */
    MessageSendLater(getAppTask(), APP_INIT_LED_UPDATE_IND, message, 1000);
}

/**************************************************************************/
/*Initialise red LED*/
void startRedLed()
{
		PioSetDir(LED_RED, ~0);
		PioSet(LED_RED, 0);
		MessageSendLater(getAppTask(), APP_RED_LED_UPDATE_IND, 0, 0);
}

/**************************************************************************/
/*Update blue LED*/
ledState updateLed(const headsetTaskData *app, ledState state)
{
	uint32 newState;
    if ((app->a2dp_state == avHeadsetA2dpConnected) || 
        (app->a2dp_state == avHeadsetA2dpStreaming) ||
        (app->hfp_state >= headsetConnected))
        state |= LED_CONNECTED;
    else
        state &= ~LED_CONNECTED;
	newState = ledCallback(state);
	MessageSendLater(getAppTask(), APP_LED_UPDATE_IND, 0, newState);  
    return state;
}

/*****************************************************************************/
/*Update red LED*/
ledState updateRedLed(const headsetTaskData *app, ledState state)
{
    uint32 newRedState;

    newRedState = redLedCallback(state);
	MessageSendLater(getAppTask(), APP_RED_LED_UPDATE_IND, 0, newRedState);   
    return state;
}
/**************************************************************************/
/*Update blue LED to indicate a special event, e.g. power on/power off/ 
paired device list reset*/
ledState updateBlueLedOnEvent(const headsetTaskData *app, ledState state,const APP_ON_EVENT_LED_UPDATE_IND_T* m)
{
	uint32 newState;
	APP_ON_EVENT_LED_UPDATE_IND_T* message = malloc(sizeof(APP_ON_EVENT_LED_UPDATE_IND_T));
	message->count= m->count;
	message->count = message->count+1;
	message->id = m->id;
	newState = ledOnEventCallback(state);
	MessageSendLater(getAppTask(), message->id, message, newState);  
    return state;
}

⌨️ 快捷键说明

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