#include "ATCmdInterpreter.h" #include "SIM7080GInterface.h" #include "define.h" #include #include #include #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; } } }