📄 hf_demo_app_lib.c
字号:
/******************************************************************************************************
(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 + -