📄 at_cmd.c
字号:
/****************************************************************
** *
** FILE : AT_CMD.C *
** COPYRIGHT : (c) 2001 .Xiamen Yaxon NetWork CO.LTD *
** *
** *
** By : CCH 2002.1.15 *
****************************************************************/
#define ATCMD_GLOBALS
#include "includes.h"
#include "bsp.h"
#include "tools.h"
#include "stream.h"
#include "at_cmd.h"
static STREAM tmpstrm;
/*********************************************************************************
** *
** *
** AT Commands handler function *
** *
** *
*********************************************************************************/
/*
********************************************************************************
* Handler: Common AT Commands
********************************************************************************
*/
static INT16S Handler_Common(INT8U *recvbuf, INT16U len, ATCMDACK_STRUCT *ATCmdAck)
{
ATCmdAck = ATCmdAck;
if (SearchKeyWord(recvbuf, len, "OK"))
return AT_SUCCESS;
else
return AT_FAILURE;
}
/*
********************************************************************************
* Handler: ATD ------ Dial non_voice call
********************************************************************************
*/
static INT16S Handler_ATD_DATA(INT8U *recvbuf, INT16U len, ATCMDACK_STRUCT *ATCmdAck)
{
ATCmdAck = ATCmdAck;
if (SearchKeyWord(recvbuf, len, "CONNECT"))
return AT_SUCCESS;
else
return AT_FAILURE;
}
/*
********************************************************************************
* Handler: AT+CSQ ------ Signal Quality
********************************************************************************
*/
static INT16S Handler_AT_CSQ(INT8U *recvbuf, INT16U len, ATCMDACK_STRUCT *ATCmdAck)
{
if (SearchKeyWord(recvbuf, len, "+CSQ")) {
ATCmdAck->ackbuf[0] = SearchDigitalString(recvbuf, len, ',', 1);
ATCmdAck->ackbuf[1] = SearchDigitalString(recvbuf, len, CR, 1);
return AT_SUCCESS;
} else {
return AT_FAILURE;
}
}
/*
********************************************************************************
* Handler: AT+CREG? ------ NetWork Registration
********************************************************************************
*/
static INT16S Handler_AT_R_CREG(INT8U *recvbuf, INT16U len, ATCMDACK_STRUCT *ATCmdAck)
{
INT8U temp;
if (SearchKeyWord(recvbuf, len, "+CREG")) {
ATCmdAck->ackbuf[0] = SearchDigitalString(recvbuf, len, ',', 1);
temp = SearchDigitalString(recvbuf, len, ',', 2);
if (temp == 0xff) {
ATCmdAck->ackbuf[1] = SearchDigitalString(recvbuf, len, CR, 1);
ATCmdAck->ackbuf[2] = 0xff;
ATCmdAck->ackbuf[3] = 0xff;
} else {
ATCmdAck->ackbuf[1] = temp;
ATCmdAck->ackbuf[2] = SearchDigitalString(recvbuf, len, ',', 3);
ATCmdAck->ackbuf[3] = SearchDigitalString(recvbuf, len, CR, 1);
}
return AT_SUCCESS;
} else {
return AT_FAILURE;
}
}
/*
********************************************************************************
* Handler: AT+CSMS ----- Select Message Service
********************************************************************************
*/
static INT16S Handler_AT_CSMS(INT8U *recvbuf, INT16U len, ATCMDACK_STRUCT *ATCmdAck)
{
if (ATCmdAck->numEC == 1) {
if (SearchKeyWord(recvbuf, len, "ERROR")) return AT_FAILURE;
} else if (ATCmdAck->numEC == 2) {
if (SearchKeyWord(recvbuf, len, "OK")) return AT_SUCCESS;
else return AT_FAILURE;
}
return -1;
}
/*
********************************************************************************
* Handler: AT+CNMI? ----- Query New SMS message indications
********************************************************************************
*/
static INT16S Handler_AT_R_CNMI(INT8U *recvbuf, INT16U len, ATCMDACK_STRUCT *ATCmdAck)
{
if (ATCmdAck->numEC == 1) {
if (SearchKeyWord(recvbuf, len, "ERROR")) {
return AT_FAILURE;
} else {
ATCmdAck->ackbuf[0] = SearchDigitalString(recvbuf, len, ',', 1);
ATCmdAck->ackbuf[1] = SearchDigitalString(recvbuf, len, ',', 2);
ATCmdAck->ackbuf[2] = SearchDigitalString(recvbuf, len, ',', 3);
ATCmdAck->ackbuf[3] = SearchDigitalString(recvbuf, len, ',', 4);
ATCmdAck->ackbuf[4] = SearchDigitalString(recvbuf, len, CR, 1);
}
} else if (ATCmdAck->numEC == 2) {
return AT_SUCCESS;
}
return -1;
}
/*
********************************************************************************
* Handler: AT+CMGS_PDU
********************************************************************************
*/
static INT16S Handler_AT_CMGS_PDU(INT8U *recvbuf, INT16U len, ATCMDACK_STRUCT *ATCmdAck)
{
ATCmdAck = ATCmdAck;
if (SearchKeyWord(recvbuf, len, "ERROR")) {
return AT_FAILURE;
} else {
return AT_SUCCESS;
}
}
/*
********************************************************************************
* Handler: AT^SCKS? ----- Quuery SIM connection status
********************************************************************************
*/
static INT16S Handler_AT_R_SCKS(INT8U *recvbuf, INT16U len, ATCMDACK_STRUCT *ATCmdAck)
{
#if GSM_BENQ
if (SearchKeyWord(recvbuf, len, "+CPIN:")) {
if(SearchKeyWord(recvbuf, len, "READY")) ATCmdAck->ackbuf[1]=1;
else ATCmdAck->ackbuf[1]=0;
return AT_SUCCESS;
}else {
return AT_FAILURE;
}
#else
if (SearchKeyWord(recvbuf, len, "^SCKS")) {
ATCmdAck->ackbuf[0] = SearchDigitalString(recvbuf, len, ',', 1);
ATCmdAck->ackbuf[1] = SearchDigitalString(recvbuf, len, CR, 1);
return AT_SUCCESS;
} else {
return AT_FAILURE;
}
#endif
}
/*
********************************************************************************
* Handler: AT+CCFC ----- Query call forwarding number and condition status
********************************************************************************
*/
static INT16S Handler_AT_R_CCFC(INT8U *recvbuf, INT16U len, ATCMDACK_STRUCT *ATCmdAck)
{
INT8U temp;
if (SearchKeyWord(recvbuf, len, "ERROR")) {
return AT_FAILURE;
} else if (SearchKeyWord(recvbuf, len, "OK")) {
return AT_SUCCESS;
} else if (SearchKeyWord(recvbuf, len, "+CCFC")) {
temp = SearchDigitalString(recvbuf, len, ',', 2);
if (temp == 0xff) temp = SearchDigitalString(recvbuf, len, CR, 1);
if (temp == 1) ATCmdAck->ackbuf[0] = SearchDigitalString(recvbuf, len, ',', 1);
} else if (ATCmdAck->numEC > 4) {
return AT_FAILURE;
}
return -1;
}
#if GSM_BENQ
/*
********************************************************************************
* Handler: AT+DATE=? ----- Read Real Time Clock
********************************************************************************
*/
static INT16S Handler_AT_R_DATE(INT8U *recvbuf, INT16U len, ATCMDACK_STRUCT *ATCmdAck)
{
if (SearchKeyWord(recvbuf, len, "ERROR")) {
return AT_FAILURE;
} else {
ATCmdAck->ackbuf[0] = SearchDigitalString(recvbuf, len, '/', 1);
ATCmdAck->ackbuf[1] = SearchDigitalString(recvbuf, len, '/', 2);
ATCmdAck->ackbuf[2] = SearchDigitalString(recvbuf, len, CR, 1);
return AT_SUCCESS;
}
}
static INT16S Handler_AT_R_TIME(INT8U *recvbuf, INT16U len, ATCMDACK_STRUCT *ATCmdAck)
{
if (SearchKeyWord(recvbuf, len, "ERROR")) {
return AT_FAILURE;
} else {
ATCmdAck->ackbuf[0] = SearchDigitalString(recvbuf, len, '/', 1);
ATCmdAck->ackbuf[1] = SearchDigitalString(recvbuf, len, '/', 2);
ATCmdAck->ackbuf[2] = SearchDigitalString(recvbuf, len, CR, 1);
return AT_SUCCESS;
}
}
#if 0
static INT16S Handler_AT_ATH(INT8U *recvbuf, INT16U len, ATCMDACK_STRUCT *ATCmdAck)
{
ATCmdAck = ATCmdAck;
if (SearchKeyWord(recvbuf, len, "OK")) {
return AT_SUCCESS;
}
else return AT_FAILURE;
}
#endif
#else
/*
********************************************************************************
* Handler: AT+CCLK? ----- Read Real Time Clock
********************************************************************************
*/
static INT16S Handler_AT_R_CCLK(INT8U *recvbuf, INT16U len, ATCMDACK_STRUCT *ATCmdAck)
{
if (SearchKeyWord(recvbuf, len, "ERROR")) {
return AT_FAILURE;
} else {
ATCmdAck->ackbuf[0] = SearchDigitalString(recvbuf, len, '/', 1);
ATCmdAck->ackbuf[1] = SearchDigitalString(recvbuf, len, '/', 2);
ATCmdAck->ackbuf[2] = SearchDigitalString(recvbuf, len, ',', 1);
ATCmdAck->ackbuf[3] = SearchDigitalString(recvbuf, len, ':', 2);
ATCmdAck->ackbuf[4] = SearchDigitalString(recvbuf, len, ':', 3);
ATCmdAck->ackbuf[5] = SearchDigitalString(recvbuf, len, '"', 2);
return AT_SUCCESS;
}
}
#endif
/*
********************************************************************************
* Handler: AT+CLCC ----- List current calls of ME
********************************************************************************
*/
static INT16S Handler_AT_CLCC(INT8U *recvbuf, INT16U len, ATCMDACK_STRUCT *ATCmdAck)
{
INT8U temp1, temp2;
if (ATCmdAck->numEC == 1) ATCmdAck->ackbuf[0] = FALSE;
if (SearchKeyWord(recvbuf, len, "OK")) {
return AT_SUCCESS;
} else {
if (SearchKeyWord(recvbuf, len, "+CLCC:")) {
temp1 = SearchDigitalString(recvbuf, len, ',', 2);
temp2 = SearchDigitalString(recvbuf, len, ',', 3);
if (temp1 == 1 && temp2 == 4) ATCmdAck->ackbuf[0] = TRUE;
}
return -1;
}
}
static INT16S Handler_R_Autocampon(INT8U *recvbuf, INT16U len, ATCMDACK_STRUCT *ATCmdAck)
{
if (SearchKeyWord(recvbuf, len, "ERROR")) {
return AT_FAILURE;
} else {
ATCmdAck->ackbuf[0] = SearchDigitalString(recvbuf, len, CR, 1);
return AT_SUCCESS;
}
}
#if GSM_BENQ
#else
/*
*************************************************************************
Handler: ATI
*************************************************************************
*/
static INT16S Handler_AT_R_ATI(INT8U *recvbuf, INT16U len, ATCMDACK_STRUCT *ATCmdAck)
{
ATCmdAck = ATCmdAck;
if (SearchKeyWord(recvbuf, len, "ERROR")) {
return AT_FAILURE;
}
else if (SearchKeyWord(recvbuf, len, "OK"))
{
if((SearchKeyWord(recvbuf, len, "MC35i"))||(SearchKeyWord(recvbuf, len, "MC35I")))
{
SetIsMC35i(TRUE);
}
else SetIsMC35i(FALSE);
return AT_SUCCESS;
}
else return -1;
}
#endif
/*********************************************************************************
** *
** *
** AT Commands parameters *
** *
** *
*********************************************************************************/
/*
typedef struct {
INT8U status; // command status
INT8U overtime; // overflow time ( UNIT = SECOND )
INT8U nsEC; // number of END'S characters(send)
INT8U naEC; // number of END'S characters(ack)
INT8U (*handler)(INT8U *, INT16U, ATCMDACK_STRUCT *); // command handler
} ATCMDPARA_STRUCT;
*/
/*
********************************************************************************
* Standard V.25ter AT Commands
********************************************************************************
*/
ATCMDPARA_STRUCT AT_TEST_PARA = { 0, 2, 1, 1, Handler_Common };
ATCMDPARA_STRUCT AT_ECHO_PARA = { 0, 4, 1, 1, Handler_Common };
#if GSM_BENQ
ATCMDPARA_STRUCT AT_ATH_PARA = { 0, 4, 1, 1, Handler_Common };
#else
ATCMDPARA_STRUCT AT_ATH_PARA = { 0, 4, 1, 1, Handler_Common };
#endif
ATCMDPARA_STRUCT AT_ATA_PARA = { 0, 4, 1, 1, Handler_Common };
ATCMDPARA_STRUCT AT_ATD_PARA = { 0, 120, 1, 1, Handler_Common };
ATCMDPARA_STRUCT AT_ATD_DATA_PARA = { 0, 120, 1, 1, Handler_ATD_DATA };
ATCMDPARA_STRUCT AT_IPR_PARA = { 0, 4, 1, 1, Handler_Common };
/*
********************************************************************************
* AT Commands originating from GSM 07.07
********************************************************************************
*/
ATCMDPARA_STRUCT AT_VTS_PARA = { 0, 4, 1, 1, Handler_Common };
ATCMDPARA_STRUCT AT_CLIP_PARA = { 0, 4, 1, 1, Handler_Common };
ATCMDPARA_STRUCT AT_CSQ_PARA = { 0, 4, 1, 2, Handler_AT_CSQ };
ATCMDPARA_STRUCT AT_CREG_PARA = { 0, 4, 1, 1, Handler_Common };
ATCMDPARA_STRUCT AT_R_CREG_PARA = { ATCMD_SUSPENDRECV,4, 1, 1, Handler_AT_R_CREG };
ATCMDPARA_STRUCT AT_CCFC_PARA = { 0, 10, 1, 1, Handler_Common };
ATCMDPARA_STRUCT AT_R_CCFC_PARA = { ATCMD_INSANT, 10, 1, 0, Handler_AT_R_CCFC };
ATCMDPARA_STRUCT AT_CGDCONT_PARA = { 0, 4, 1, 1, Handler_Common };
#if GSM_BENQ
ATCMDPARA_STRUCT AT_CMUX_PARA = { 0, 4, 0, 1, Handler_Common };
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -