📄 headset_led.c
字号:
/****************************************************************************
Copyright (C) Cambridge Silicon Radio Ltd. 2004
FILE NAME
headset_led.c
DESCRIPTION
Controls the flashing of the LED depending on the current state
NOTES
*/
/****************************************************************************
Header files
*/
#include "headset_private.h"
#include "headset_led.h"
#include <pio.h>
#include <message.h>
#define LED_PAIRING_TIME_ON 200
#define LED_CONNECTABLE_TIME_ON 200
#define LED_CONNECTED_TIME_ON 200
#define LED_CALL_ACTIVE_TIME_ON 500
#define LED_STREAMING_TIME_ON 500
#define LED_IDLE_ON 2000
#define LED_PAIRING_TIME_OFF 500
#define LED_CONNECTABLE_TIME_OFF 4000
#define LED_CONNECTED_TIME_OFF 2000
#define LED_CALL_ACTIVE_TIME_OFF 2000
#define LED_STREAMING_TIME_OFF 1000
#define LED_IDLE_OFF 2000
/*
Function call periodically to update the flashing
LED and set the next callback time
*/
static uint32 ledCallback(ledState state)
{
bool on = (PioGet() & LED?TRUE:FALSE);
if (state == LED_NONE)
{
if (on)
PioSet(LED,0);
return LED_IDLE_OFF;
}
on = on;
if (on)
{
PioSet(LED,0);
if (state & LED_PAIRING)
return LED_PAIRING_TIME_OFF;
if (state & LED_STREAMING)
return LED_STREAMING_TIME_OFF;
if (state & LED_CALL_ACTIVE)
return LED_CALL_ACTIVE_TIME_OFF;
if (state & LED_CONNECTED)
return LED_CONNECTED_TIME_OFF;
if (state & LED_CONNECTABLE)
return LED_CONNECTABLE_TIME_OFF;
return LED_IDLE_OFF;
}
else
{
PioSet(LED,LED);
if (state & LED_PAIRING)
return LED_PAIRING_TIME_ON;
if (state & LED_STREAMING)
return LED_STREAMING_TIME_ON;
if (state & LED_CALL_ACTIVE)
return LED_CALL_ACTIVE_TIME_ON;
if (state & LED_CONNECTED)
return LED_CONNECTED_TIME_ON;
if (state & LED_CONNECTABLE)
return LED_CONNECTABLE_TIME_ON;
return LED_IDLE_ON;
}
}
/*
Start the LED flashing
*/
void startLED(ledState state)
{
PioSetDir(LED,LED);
PioSet(LED,0);
/* call timer function ASAP */
MessageSendLater(getAppTask(), APP_LED_UPDATE_IND, 0, ledCallback(state));
}
/*
Force LED to pick up state change immediately.
*/
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;
if (app->hfp_state == headsetActiveCall)
state |= LED_CALL_ACTIVE;
else
state &= ~LED_CALL_ACTIVE;
newState = ledCallback(state);
MessageSendLater(getAppTask(), APP_LED_UPDATE_IND, 0, newState);
return state;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -