AudioConsole/AudioConsole.X/Source/ATCmdInterpreter.c
2025-02-15 11:05:28 -05:00

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;
}
}
}