📄 generate_at_resp.c
字号:
/****************************************************************************
DESCRIPTION
Implementation of AT Response generation functionality
FILE
generate_at_resp.c
*/
#include <stream.h>
#include <sink.h>
#include <source.h>
#include <string.h>
#include <panic.h>
#include <stdio.h>
#include "generate_at_resp.h"
static const uint8 gConResStr[] = {'+','C','O','N','='};
static const uint8 gDiscoResStr[] = {'+','D','I','S','C','O'};
static const uint8 gSetPbResStr[] = {'+','S','P','B','='};
static const uint8 gGetVCLDataStr[] = {'+','G','V','C','L','D','='};
static const uint8 gGetVCLCompleteStr[] = {'+','G','V','C','L','C','='};
static const uint8 gGetVCEDataStr[] = {'+','G','V','C','E','D','='};
static const uint8 gGetVCECompleteStr[] = {'+','G','V','C','E','C','='};
static const uint8 gGetDLPBDataStr[] = {'+','D','L','P','B','D','='};
static const uint8 gGetDLPBCompleteStr[] = {'+','D','L','P','B','C','='};
static const uint8 gCrLfStr[] = {'\r','\n'};
typedef struct
{
const uint8 *str;
uint16 len;
} ATStrType;
#define AT_LIST_ENTRY(i) {(i), sizeof((i))}
static const ATStrType gAtStrList[] =
{
AT_LIST_ENTRY(gConResStr),
AT_LIST_ENTRY(gDiscoResStr),
AT_LIST_ENTRY(gSetPbResStr),
AT_LIST_ENTRY(gGetVCLDataStr),
AT_LIST_ENTRY(gGetVCLCompleteStr),
AT_LIST_ENTRY(gGetVCEDataStr),
AT_LIST_ENTRY(gGetVCECompleteStr),
AT_LIST_ENTRY(gGetDLPBDataStr),
AT_LIST_ENTRY(gGetDLPBCompleteStr),
{0, 0}
};
uint16 addATStr(Sink pSink, pbapATRespId pId)
{
uint16 lLen = gAtStrList[pId].len;
uint8* lS=SinkMap(pSink);
uint16 lO;
lO = SinkClaim(pSink, lLen);
if (lO == 0xffff)
Panic(); /* Error */
lS += lO;
memcpy(lS, gAtStrList[pId].str, lLen);
return lLen;
}
void addATCrLfandSend(Sink pSink, uint16 pUsed)
{
uint16 lLen = sizeof(gCrLfStr);
uint8* lS=SinkMap(pSink);
uint16 lO;
lO = SinkClaim(pSink, lLen);
if (lO == 0xffff)
Panic(); /* Error */
lS += lO;
memcpy(lS, gCrLfStr, lLen);
SinkFlush(pSink, lLen+pUsed);
}
uint16 addATBuffer8(Sink pSink, const uint8 *pBuffer, uint16 pBufLen)
{
uint8* lS=SinkMap(pSink);
uint16 lO;
lO = SinkClaim(pSink, pBufLen);
if (lO == 0xffff)
Panic(); /* Error */
lS += lO;
memcpy(lS, pBuffer, pBufLen);
return pBufLen;
}
uint16 addATByte(Sink pSink, uint8 pByte)
{
uint8* lS=SinkMap(pSink);
uint16 lO;
lO = SinkClaim(pSink, 1);
if (lO == 0xffff)
Panic(); /* Error */
lS += lO;
lS[0] = pByte;
return 1;
}
uint16 addATUint8(Sink pSink, uint8 pValue)
{
char lTxt[10];
uint16 lLen;
uint8* lS=SinkMap(pSink);
uint16 lO;
sprintf(lTxt, "%d", pValue & 0xff);
lLen = strlen(lTxt);
lO = SinkClaim(pSink, lLen);
if (lO == 0xffff)
Panic(); /* Error */
lS += lO;
memcpy(lS, lTxt, lLen);
return lLen;
}
void atRespSendConCfm(uint8 pRes)
{
Sink lUart = StreamUartSink();
uint16 lUsed = 0;
/* Send result to host */
lUsed = addATStr(lUart, pbapATRespId_Connect);
lUsed += addATUint8(lUart, pRes);
addATCrLfandSend(lUart, lUsed);
}
void atRespSendDiscoCfm(void)
{
Sink lUart = StreamUartSink();
uint16 lUsed = 0;
/* Send result to host */
lUsed = addATStr(lUart, pbapATRespId_Disconnect);
addATCrLfandSend(lUart, lUsed);
}
void atRespSendSetPbCfm(uint8 pRes)
{
Sink lUart = StreamUartSink();
uint16 lUsed = 0;
/* Send result to host */
lUsed = addATStr(lUart, pbapATRespId_SetPhonebook);
lUsed += addATUint8(lUart, pRes);
addATCrLfandSend(lUart, lUsed);
}
void atRespSendGetVCListData(Source pSrc, uint16 pOffset, uint16 pLength)
{
Sink lUart = StreamUartSink();
uint16 lUsed = 0;
const uint8 *lSource = SourceMap(pSrc);
lSource += pOffset;
/* Send result to host */
lUsed = addATStr(lUart, pbapATRespId_GetVCardListData);
lUsed += addATBuffer8(lUart, lSource, pLength);
addATCrLfandSend(lUart, lUsed);
}
void atRespSendGetVCListComplete(uint8 pRes)
{
Sink lUart = StreamUartSink();
uint16 lUsed = 0;
/* Send result to host */
lUsed = addATStr(lUart, pbapATRespId_GetVCardListComplete);
lUsed += addATUint8(lUart, pRes);
addATCrLfandSend(lUart, lUsed);
}
void atRespSendGetVCEntryData(Source pSrc, uint16 pOffset, uint16 pLength)
{
Sink lUart = StreamUartSink();
uint16 lUsed = 0;
const uint8 *lSource = SourceMap(pSrc);
lSource += pOffset;
/* Send result to host */
lUsed = addATStr(lUart, pbapATRespId_GetVCardEntryData);
lUsed += addATBuffer8(lUart, lSource, pLength);
addATCrLfandSend(lUart, lUsed);
}
void atRespSendGetVCEntryComplete(uint8 pRes)
{
Sink lUart = StreamUartSink();
uint16 lUsed = 0;
/* Send result to host */
lUsed = addATStr(lUart, pbapATRespId_GetVCardEntryComplete);
lUsed += addATUint8(lUart, pRes);
addATCrLfandSend(lUart, lUsed);
}
void atRespSendPullPhonebookData(Source pSrc, uint16 pOffset, uint16 pLength)
{
Sink lUart = StreamUartSink();
uint16 lUsed = 0;
const uint8 *lSource = SourceMap(pSrc);
lSource += pOffset;
/* Send result to host */
lUsed = addATStr(lUart, pbapATRespId_PullPhonebookData);
lUsed += addATBuffer8(lUart, lSource, pLength);
addATCrLfandSend(lUart, lUsed);
}
void atRespSendPullPhonebookComplete(uint8 pRes)
{
Sink lUart = StreamUartSink();
uint16 lUsed = 0;
/* Send result to host */
lUsed = addATStr(lUart, pbapATRespId_PullPhonebookComplete);
lUsed += addATUint8(lUart, pRes);
addATCrLfandSend(lUart, lUsed);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -