?? headset_led.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;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -