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

📄 headset_led.c

📁 CSR蓝牙芯片 无线蓝牙耳机的语音网关程序 蓝牙耳机程序已经上传
💻 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 + -