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

📄 hf_demo_app_lib.c

📁 BlueTooth Host Software HandFree相关的lib/app/demo源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************************************

                 (c) Cambridge Silicon Radio Ltd, 2006

                 All rights reserved

FILE:            hf_demo_app_lib.c

DESCRIPTION:     This is the functions necessary to do AT-command
                 interpretation for a simple HF demo application

REVISION:        $Revision: #1 $

*******************************************************************************************************/

/* standard include files */
#include <stdio.h>
#include <string.h>
#include <stdarg.h>

/* profile manager include files */
#include "sched/types.h"
#include "sched/pmalloc.h"
#include "bluetooth.h"
#include "hf_prim.h"
#include "hf_lib.h"
#include "hf.h"
#include "hf_demo_app_lib.h"

#ifdef _BCHS_EXTERNAL_
#undef bchs_msg_transport
#define bchs_msg_transport peer_put_message
#else
#endif

#define TO_UPPER(x)                    ((((x) >= 'a') && ((x) <= 'z')) ? ((x) & 0xDF) : (x))
#define IS_DIGIT_CHAR(x)            ((((x) >= '0') && ((x) <= '9')) ? TRUE : FALSE)


/*************************************************************************************
whiteSpace : Remove writespaces from the receive message
************************************************************************************/
static bool_t whiteSpace(uint8_t theChar)
{
    switch (theChar)
    {
        case ' ':
        case '\t':
        case '\r':
        case '\n':
            return TRUE;
    }
    return FALSE;
}

/*************************************************************************************
compareCharNotZero : Check reveive character and parse it to upper case
************************************************************************************/
static bool_t compareCharNotZero(uint8_t theChar, uint8_t ** line, uint16_t *charsConsumed)
{
    if ((**line != '\0') && (TO_UPPER(theChar) == TO_UPPER(**line)))
    {
        (*line)++;
        (*charsConsumed)++;
        return TRUE;
    }
    else
    {
        return FALSE;
    }
}

/*************************************************************************************
getByteValue : Return the received value
************************************************************************************/
static bool_t getByteValue(uint8_t ** line, uint8_t * tmpValue, uint16_t *charsConsumed)
{
    *tmpValue = 0;

    if ((**line != '\0') && (IS_DIGIT_CHAR(**line)))
    {
        *tmpValue = (uint8_t)(**line - '0');
        (*line)++;
        (*charsConsumed)++;

        if ((**line != '\0') && (IS_DIGIT_CHAR(**line)))
        {
            *tmpValue = (uint8_t)(*tmpValue * 10 + **line - '0');
            (*line)++;
            (*charsConsumed)++;

            if ((**line != '\0') && (IS_DIGIT_CHAR(**line)))
            {
                *tmpValue = (uint8_t)(*tmpValue * 10 + **line - '0');
                (*line)++;
                (*charsConsumed)++;
            }
        }

        return TRUE;
    }

    return FALSE;
}

/*************************************************************************************
getAtToken : InterPret the received message and return define Token and value
************************************************************************************/
int HfGetAtToken(uint8_t *line, char **nextChar2Interpret, uint16_t *value1, uint16_t *value2, uint16_t *charsConsumed)
{
    int            returnToken;

    *value1 = 0x0000;
    *value2 = 0x0000;
    returnToken = OTHER_TOKEN;
    *charsConsumed = 0;
    while (whiteSpace(*line))
    {
        line++;
        (*charsConsumed)++;
    }
    if (compareCharNotZero('E', &line, charsConsumed))
    {
        if (compareCharNotZero('R', &line, charsConsumed))
        {
            while (whiteSpace(*line))
            {
                (*charsConsumed)++;
                line++;
            }
            if (compareCharNotZero('R', &line, charsConsumed))
            {
                while (whiteSpace(*line))
                {
                    (*charsConsumed)++;
                    line++;
                }
                if (compareCharNotZero('O', &line, charsConsumed))
                {
                    while (whiteSpace(*line))
                    {
                        (*charsConsumed)++;
                        line++;
                    }
                    if (compareCharNotZero('R', &line, charsConsumed))
                    {
                        returnToken = ERROR_TOKEN;
                    }
                }
            }
        }
    }
    else if (compareCharNotZero('O', &line, charsConsumed))
    {
        if (compareCharNotZero('K', &line, charsConsumed))
        {
            returnToken = OK_TOKEN;
        }
    }
    else if (compareCharNotZero('R', &line, charsConsumed))
    {
        if (compareCharNotZero('I', &line, charsConsumed))
        {
            if (compareCharNotZero('N', &line, charsConsumed))
            {
                if (compareCharNotZero('G', &line, charsConsumed))
                {
                    returnToken = RING_TOKEN;
                }
            }
        }
    }
    else if (compareCharNotZero('+', &line, charsConsumed))
    {
        if (compareCharNotZero('C', &line, charsConsumed))
        {
            while (whiteSpace(*line))
            {
                (*charsConsumed)++;
                line++;
            }
            if (compareCharNotZero('C', &line, charsConsumed))
            {
                while (whiteSpace(*line))
                {
                    (*charsConsumed)++;
                    line++;
                }
                if (compareCharNotZero('W', &line, charsConsumed))
                {
                    while (whiteSpace(*line))
                    {
                        (*charsConsumed)++;
                        line++;
                    }
                    if (compareCharNotZero('A', &line, charsConsumed))
                    {
                        returnToken = CCWA_TOKEN;
                    }
                }
            }
            else if (compareCharNotZero('L', &line, charsConsumed))
            {
                while (whiteSpace(*line))
                {
                    (*charsConsumed)++;
                    line++;
                }
                if (compareCharNotZero('I', &line, charsConsumed))
                {
                    while (whiteSpace(*line))
                    {
                        (*charsConsumed)++;
                        line++;
                    }
                    if (compareCharNotZero('P', &line, charsConsumed))
                    {
                        while (whiteSpace(*line))
                        {
                            (*charsConsumed)++;
                            line++;
                        }

                        if (compareCharNotZero(':', &line, charsConsumed))
                        {
                            while (whiteSpace(*line))
                            {
                                (*charsConsumed)++;
                                line++;
                            }
                            returnToken = CLIP_TOKEN;
                        }
                    }
                }
            }
            else if (compareCharNotZero('I', &line, charsConsumed))
            {
                while (whiteSpace(*line))
                {
                    (*charsConsumed)++;
                    line++;
                }
                if (compareCharNotZero('N', &line, charsConsumed))
                {
                    while (whiteSpace(*line))
                    {
                        (*charsConsumed)++;
                        line++;
                    }
                    if (compareCharNotZero('D', &line, charsConsumed))
                    {
                        while (whiteSpace(*line))
                        {
                            (*charsConsumed)++;
                            line++;
                        }
                        if (compareCharNotZero(':', &line, charsConsumed))
                        {
                            while (whiteSpace(*line))
                            {
                                (*charsConsumed)++;
                                line++;
                            }
                            if (compareCharNotZero('(', &line, charsConsumed))
                            {
                                returnToken = CIND_SUPPORT_TOKEN;
                            }
                            else
                            {
                                uint8_t tmpValue;

                                while (whiteSpace(*line))
                                {
                                    line++;
                                    (*charsConsumed)++;

                                }
                                if (getByteValue(&line, &tmpValue, charsConsumed))
                                {
                                    *value1 = (uint16_t) tmpValue;
                                }
                                if     (compareCharNotZero(',', &line, charsConsumed))
                                {
                                    while (whiteSpace(*line))
                                    {
                                        line++;
                                        (*charsConsumed)++;

                                    }
                                    if (getByteValue(&line, &tmpValue, charsConsumed))
                                    {
                                        *value2 = (uint16_t) tmpValue;

                                        returnToken = CIND_STATUS_TOKEN;
                                    }
                                }
                            }
                        }
                    }
                }
                else if (compareCharNotZero('E', &line, charsConsumed))
                {
                    while (whiteSpace(*line))
                    {
                        (*charsConsumed)++;
                        line++;
                    }
                    if (compareCharNotZero('V', &line, charsConsumed))
                    {
                        while (whiteSpace(*line))
                        {
                            (*charsConsumed)++;
                            line++;
                        }
                        if (compareCharNotZero(':', &line, charsConsumed))
                        {
                            uint8_t tmpValue;

                            while (whiteSpace(*line))
                            {
                                (*charsConsumed)++;
                                line++;
                            }
                            if (getByteValue(&line, &tmpValue, charsConsumed))
                            {
                                *value1 = (uint16_t) tmpValue;
                            }
                            if     (compareCharNotZero(',', &line, charsConsumed))
                            {
                                while (whiteSpace(*line))
                                {
                                    line++;
                                    (*charsConsumed)++;

                                }
                                if (getByteValue(&line, &tmpValue, charsConsumed))
                                {
                                    *value2 = (uint16_t) tmpValue;

                                    returnToken = CIEV_TOKEN;
                                }
                            }
                        }
                    }
                }
            }
            else if (compareCharNotZero('H', &line, charsConsumed))
            {
                while (whiteSpace(*line))
                {
                    (*charsConsumed)++;
                    line++;
                }
                if (compareCharNotZero('L', &line, charsConsumed))
                {
                    while (whiteSpace(*line))
                    {
                        (*charsConsumed)++;
                        line++;
                    }
                    if (compareCharNotZero('D', &line, charsConsumed))
                    {
                        returnToken = CHLD_TOKEN;
                    }
                }
            }
            else if (compareCharNotZero('S', &line, charsConsumed))
            {
                while (whiteSpace(*line))
                {
                    (*charsConsumed)++;
                    line++;
                }
                if (compareCharNotZero('R', &line, charsConsumed))
                {
                    while (whiteSpace(*line))
                    {
                        (*charsConsumed)++;
                        line++;
                    }
                    if (compareCharNotZero(':', &line, charsConsumed))
                    {
                        returnToken = CSR_TOKEN;
                    }
                    else if (compareCharNotZero('B', &line, charsConsumed))
                    {
                        while (whiteSpace(*line))
                        {
                            (*charsConsumed)++;
                            line++;
                        }
                        if (compareCharNotZero('A', &line, charsConsumed))
                        {
                            while (whiteSpace(*line))
                            {
                                (*charsConsumed)++;
                                line++;
                            }
                            if (compareCharNotZero('T', &line, charsConsumed))
                            {
                                while (whiteSpace(*line))
                                {
                                    (*charsConsumed)++;
                                    line++;
                                }
                                if (compareCharNotZero('T', &line, charsConsumed))

⌨️ 快捷键说明

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