📄 handle_at_command.c
字号:
/****************************************************************************
Copyright (C) Cambridge Silicon Radio Limited 2006-2009
Part of BlueLab 4.1-Release
DESCRIPTION
AT Command handlers
FILE
handle_at_command.c
*/
/****************************************************************************
Header files
*/
#include <print.h>
#include <panic.h>
#include <ctype.h>
#include <bdaddr.h>
#include <stdlib.h>
#include "main.h"
#include "state.h"
#include "pbap_client_parse.h"
#include "handle_pbap.h"
static uint16 handSeqExtractHex(const uint8 *pBuffer, uint16 pLen);
static uint32 handSeqExtractHex32(const uint8 *pBuffer, uint16 pLen);
void pbap_handleUnrecognised(const uint8 *data, uint16 length, Task task)
{
PRINT(("pbap_handleUnrecognised\n"));
#ifdef DEBUG_PRINT_ENABLED
{
uint16 c;
PRINT((" <"));
for (c=0; c<length; c++)
{
if (data[c]>=' ')
{
PRINT(("%c",data[c]));
}
else
{
PRINT(("."));
}
}
PRINT((">\n"));
}
#endif /* DEBUG_PRINT_ENABLED */
}
static uint16 handSeqExtractHex(const uint8 *pBuffer, uint16 pLen)
{
uint16 lRes = 0;
uint16 lC;
uint16 lVal = 0;
uint8 lCh;
for (lC=0; lC<pLen; lC++)
{
lCh = toupper(pBuffer[lC]);
if ((lCh>= '0') && (lCh <= '9'))
lVal = lCh - '0';
else if ((lCh >= 'A') && (lCh <= 'F'))
lVal = 10 + (lCh - 'A');
else /* Invalid character */
return 0;
lRes = (lRes * 16) + lVal;
}
return lRes;
}
static uint32 handSeqExtractHex32(const uint8 *pBuffer, uint16 pLen)
{
uint32 lRes = 0;
uint16 lC;
uint16 lVal = 0;
uint8 lCh;
for (lC=0; lC<pLen; lC++)
{
lCh = toupper(pBuffer[lC]);
if ((lCh>= '0') && (lCh <= '9'))
lVal = lCh - '0';
else if ((lCh >= 'A') && (lCh <= 'F'))
lVal = 10 + (lCh - 'A');
else /* Invalid character */
return 0;
lRes = (lRes * 16) + lVal;
}
return lRes;
}
void handleATConnectReq(Task pTask, const struct ATConnectReq *pConReq)
{
bdaddr lAddr;
applicationTaskData *lTask = (applicationTaskData *)pTask;
PRINT(("handleATConnectReq\n"));
lAddr.nap = handSeqExtractHex(pConReq->NAP.data, pConReq->NAP.length);
lAddr.uap = handSeqExtractHex(pConReq->UAP.data, pConReq->UAP.length);
lAddr.lap = handSeqExtractHex32(pConReq->LAP.data, pConReq->LAP.length);
pbapConnect(lTask, lAddr);
}
void handleATDisconnectReq(Task pTask)
{
applicationTaskData *lTask = (applicationTaskData *)pTask;
PRINT(("handleATDisconnectReq\n"));
pbapDisconnect(lTask);
}
void handleSetPhonebookReq(Task pTask, const struct SetPhonebookReq *pSetPB)
{
applicationTaskData *lTask = (applicationTaskData *)pTask;
PRINT(("handleSetPhonebookReq\n"));
pbapSetPhonebook(lTask, pSetPB->Repository, pSetPB->Phonebook);
}
void handleGetVCardList(Task pTask, const struct GetVCardList *pVCList)
{
applicationTaskData *lTask = (applicationTaskData *)pTask;
PRINT(("handleGetVCardList\n"));
pbapGetVCardList(lTask, NULL, 0, pbap_a_unknown, pVCList->maxList, pVCList->Start);
}
void handleGetVCardListSearch(Task pTask, const struct GetVCardListSearch *pVCList)
{
applicationTaskData *lTask = (applicationTaskData *)pTask;
PRINT(("handleGetVCardListSearch\n"));
pbapGetVCardList(lTask, pVCList->srchVal.data, pVCList->srchVal.length, pVCList->srchAttr, pVCList->maxList, pVCList->Start);
}
void handleGetVCardEntry(Task pTask, const struct GetVCardEntry *pEntry)
{
applicationTaskData *lTask = (applicationTaskData *)pTask;
uint32 lFilter;
PRINT(("handleGetVCardEntry\n"));
lFilter = handSeqExtractHex32(pEntry->filter.data, pEntry->filter.length);
pbapGetVCardEntry(lTask, pEntry->entry, pEntry->format, lFilter);
}
void handleDownloadPhonebook(Task pTask, const struct DownloadPhonebook *pDownload)
{
applicationTaskData *lTask = (applicationTaskData *)pTask;
uint32 lFilter;
PRINT(("handleDownloadPhonebook\n"));
lFilter = handSeqExtractHex32(pDownload->filter.data, pDownload->filter.length);
pbapDownloadPhonebook(lTask, pDownload->Repository, pDownload->Phonebook, pDownload->Start,
pDownload->maxList, lFilter, pDownload->format);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -