221 lines
7.9 KiB
C
221 lines
7.9 KiB
C
#include "ATCmdInterpreter.h"
|
|
#include "SIM7080GInterface.h"
|
|
#include "define.h"
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include "SIM7080GInterface.h"
|
|
|
|
bool mCAStateReceived;
|
|
char mMasterData[100];
|
|
int mMasterDataSize;
|
|
char mInputString[100];
|
|
|
|
void InitATCmdInterpreter()
|
|
{
|
|
mCAStateReceived = false;
|
|
}
|
|
|
|
int AnalyzeNewATString(char* Str, int StrLen, int CurCmd)
|
|
{
|
|
memset(mInputString,0,100);
|
|
memcpy(mInputString,Str,StrLen);
|
|
switch(CurCmd)
|
|
{
|
|
case LTE_MODULE_CONNECT_APN_CMD: //AT+CNACT=0,1
|
|
{
|
|
if(strncmp(mInputString,"OK",2) == 0) //The command was executed
|
|
{
|
|
LTECmdResponseReceived(CurCmd,LTE_MODULE_RESULT_OK);
|
|
}
|
|
else if(strncmp(mInputString,"ERROR",5) == 0) //The command was not executed
|
|
{
|
|
LTECmdResponseReceived(CurCmd,LTE_MODULE_RESULT_ERROR);
|
|
}
|
|
break;
|
|
}
|
|
case LTE_MODULE_DISCONNECT_APN_CMD:
|
|
{
|
|
if(strncmp(mInputString,"OK",2) == 0) //The command was executed
|
|
{
|
|
LTECmdResponseReceived(CurCmd,LTE_MODULE_RESULT_OK);
|
|
}
|
|
else if(strncmp(mInputString,"ERROR",5) == 0) //The command was not executed
|
|
{
|
|
LTECmdResponseReceived(CurCmd,LTE_MODULE_RESULT_ERROR);
|
|
}
|
|
break;
|
|
}
|
|
case LTE_MODULE_CHECK_APN_CONNECTION_CMD:
|
|
{
|
|
if(strncmp("+CNACT:",mInputString,strlen("+CNACT:")) == 0) //+CNACT: 0,1,"10.177.232.192","2605:8D80:5C0:3EED:D90E:5B72:BC1B:281"
|
|
{
|
|
if(mInputString[8] == '0') //Only consider port 0
|
|
{
|
|
if(mInputString[10] == '1' || mInputString[10] == '2')
|
|
{
|
|
LTEModuleAPNConnectionStatus(LTE_MODULE_APN_CONNECTED);
|
|
}
|
|
else
|
|
{
|
|
LTEModuleAPNConnectionStatus(LTE_MODULE_APN_DISCONNECTED);
|
|
}
|
|
}
|
|
}
|
|
else if(strncmp(mInputString,"OK",2) == 0) //The command was executed
|
|
{
|
|
LTECmdResponseReceived(CurCmd,LTE_MODULE_RESULT_OK);
|
|
}
|
|
else if(strncmp(mInputString,"ERROR",5) == 0) //The command was not executed
|
|
{
|
|
LTECmdResponseReceived(CurCmd,LTE_MODULE_RESULT_ERROR);
|
|
}
|
|
break;
|
|
}
|
|
case LTE_MODULE_CONNECT_TO_MASTER_CMD:
|
|
{
|
|
if(strncmp("+CAOPEN:",mInputString,strlen("+CAOPEN:")) == 0)
|
|
{
|
|
int result = atoi(&mInputString[11]);
|
|
if(StrLen == 12 && mInputString[11] == '0') //The connection on port 0 is established
|
|
{
|
|
LTEModuleMasterConnectionStatus(LTE_MODULE_MASTER_CONNECTED);
|
|
}
|
|
else if(result == 1) //socket error, probably caused by APN not connected..
|
|
{
|
|
LTEModuleMasterConnectionStatus(LTE_MODULE_MASTER_SOCKET_ERROR);
|
|
}
|
|
else
|
|
{
|
|
LTEModuleMasterConnectionStatus(LTE_MODULE_MASTER_DISCONNECTED);
|
|
}
|
|
}
|
|
else if(strncmp(mInputString,"OK",2) == 0) //The command was executed
|
|
{
|
|
LTECmdResponseReceived(CurCmd,LTE_MODULE_RESULT_OK);
|
|
}
|
|
else if(strncmp(mInputString,"ERROR",5) == 0) //The command was not executed
|
|
{
|
|
|
|
LTECmdResponseReceived(CurCmd,LTE_MODULE_RESULT_ERROR);
|
|
}
|
|
break;
|
|
}
|
|
case LTE_MODULE_DISCONNECT_FROM_MASTER_CMD:
|
|
{
|
|
if(strncmp(mInputString,"OK",2) == 0) //The command was executed
|
|
{
|
|
LTECmdResponseReceived(CurCmd,LTE_MODULE_RESULT_OK);
|
|
}
|
|
else if(strncmp(mInputString,"ERROR",5) == 0) //The command was not executed
|
|
{
|
|
LTECmdResponseReceived(CurCmd,LTE_MODULE_RESULT_ERROR);
|
|
}
|
|
break;
|
|
}
|
|
case LTE_MODULE_CHECK_MASTER_CONNECTION_CMD:
|
|
{
|
|
if(strncmp("+CASTATE:",mInputString,strlen("+CASTATE:")) == 0) //+CASTATE: 0,0
|
|
{
|
|
mCAStateReceived = true;
|
|
if(mInputString[12] == '1') //The connection is established
|
|
{
|
|
LTEModuleMasterConnectionStatus(LTE_MODULE_MASTER_CONNECTED);
|
|
}
|
|
else
|
|
{
|
|
LTEModuleMasterConnectionStatus(LTE_MODULE_MASTER_DISCONNECTED);
|
|
}
|
|
}
|
|
else if(strncmp(mInputString,"OK",2) == 0) //The command was executed
|
|
{
|
|
if(mCAStateReceived == false)
|
|
{
|
|
LTEModuleMasterConnectionStatus(LTE_MODULE_MASTER_DISCONNECTED);
|
|
}
|
|
mCAStateReceived = false;
|
|
LTECmdResponseReceived(CurCmd,LTE_MODULE_RESULT_OK);
|
|
}
|
|
else if(strncmp(mInputString,"ERROR",5) == 0) //The command was not executed
|
|
{
|
|
mCAStateReceived = false;
|
|
LTECmdResponseReceived(CurCmd,LTE_MODULE_RESULT_ERROR);
|
|
}
|
|
break;
|
|
}
|
|
case LTE_MODULE_RX_DATA_CMD:
|
|
{
|
|
if(strncmp("+CARECV:",mInputString,strlen("+CARECV:")) == 0) //+CARECV: 4,test
|
|
{
|
|
memset(mMasterData,0,100);
|
|
mMasterDataSize = 0;
|
|
char *token;
|
|
// sscanf("%d,%s",&mInputString[9],&DataSize,Data);
|
|
token = strtok(&mInputString[9],",");
|
|
if(token != NULL)
|
|
{
|
|
mMasterDataSize = atoi(token);
|
|
if(mMasterDataSize < 100)
|
|
{
|
|
token = strtok(NULL, ",");
|
|
if(token != NULL)
|
|
{
|
|
memcpy(mMasterData,token,mMasterDataSize);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
if(strncmp(mInputString,"OK",2) == 0) //The command was executed
|
|
{
|
|
|
|
LTEModuleDataReceived(mMasterData,mMasterDataSize);
|
|
// LTECmdResponseReceived(CurCmd,LTE_MODULE_RESULT_OK);
|
|
}
|
|
else if(strncmp(mInputString,"ERROR",5) == 0) //The command was not executed
|
|
{
|
|
LTECmdResponseReceived(CurCmd,LTE_MODULE_RESULT_ERROR);
|
|
}
|
|
break;
|
|
}
|
|
case LTE_MODULE_TX_DATA_CMD:
|
|
{
|
|
if(strncmp(mInputString,"OK",2) == 0) //The command was executed
|
|
{
|
|
LTECmdResponseReceived(CurCmd,LTE_MODULE_RESULT_OK);
|
|
}
|
|
else if(strncmp(mInputString,"ERROR",5) == 0) //The command was not executed
|
|
{
|
|
LTECmdResponseReceived(CurCmd,LTE_MODULE_RESULT_ERROR);
|
|
}
|
|
break;
|
|
}
|
|
|
|
|
|
case LTE_MODULE_NO_CMD: //+CADATAIND:
|
|
default:
|
|
{
|
|
if(strncmp("+CADATAIND:",mInputString,strlen("+CADATAIND:")) == 0)
|
|
{
|
|
LTEModuleNewDataReady();
|
|
}
|
|
if(strncmp("+APP PDP:",mInputString,strlen("+APP PDP:")) == 0)
|
|
{
|
|
// LTEModuleNewDataReady();
|
|
}
|
|
if(strncmp("+CASTATE:",mInputString,strlen("+CASTATE:")) == 0) //+CASTATE: 0,0
|
|
{
|
|
if(mInputString[12] == '1') //The connection is established
|
|
{
|
|
LTEModuleMasterConnectionStatus(LTE_MODULE_MASTER_CONNECTED);
|
|
}
|
|
else
|
|
{
|
|
LTEModuleMasterConnectionStatus(LTE_MODULE_MASTER_DISCONNECTED);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
}
|
|
} |