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

📄 handle_at_command.c

📁 藍芽電話簿範本
💻 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 + -