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

816 lines
26 KiB
C

#include "SIM7080GInterface.h"
#include "BoardCfg.h"
#include "timer.h"
#include "Uart.h"
#include "Syslog.h"
#include "WiFiCtrl.h"
#include "ATCmdInterpreter.h"
#include "ProtocolDefs.h"
#include "NetworkProtocol.h"
static BYTE mActivateNetworkCmd[] = "AT+CNACT=0,1\r";
static BYTE mDisconnectNetworkCmd[] = "AT+CNACT=0,0\r";
static BYTE mCheckAPNConnectionCmd[] = "AT+CNACT?\r";
static BYTE mConnectToMasterCmd[] = "AT+CAOPEN=0,0,\"TCP\",\"grosgin.myftp.org\",2182\r";
static BYTE mDisconnectFromMasterCmd[] = "AT+CACLOSE=0\r";
static BYTE mReceiveDataCmd[] = "AT+CARECV=0,100\r";
char mMasterTxBuffer[MAX_MESSAGE_SIZE];
int mMasterTxSize;
int mLTEModuleSMState;
int mLTEModuleOperationSMState;
int mLTEModuleOperationSMSubState;
int mNbCmdCharsReceived;
char mATCmd[LTE_MODULE_MAX_CMD_LENGTH];
bool mIsPassthroughEnabled;
bool mModuleSerialDebugEnabled;
bool mPICSerialDebugEnabled;
int mCurrentCmd;
bool mIsInitializing;
int mNbMasterReconnectCount;
bool mMasterConnected;
bool mMasterSocketError;
bool mAPNConnected;
void InitLTEModule()
{
mLTEModuleSMState = LTE_MODULE_SM_INIT_STATE;
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_INIT_STATE;
mLTEModuleOperationSMSubState = LTE_MODULE_OPERATION_NOMINAL_SUBSTATE;
mNbCmdCharsReceived = 0;
mIsPassthroughEnabled = false;
mModuleSerialDebugEnabled = false;
mPICSerialDebugEnabled = false;
mCurrentCmd = LTE_MODULE_NO_CMD;
mIsInitializing = true;
mNbMasterReconnectCount = 0;
mMasterSocketError = false;
mMasterConnected = false;
mAPNConnected = false;
}
int LTEModuleReset()
{
InitLTEModule();
return RET_OK;
}
void LTEModuleSM(int SMEvent)
{
switch(mLTEModuleSMState)
{
case LTE_MODULE_SM_INIT_STATE:
{
// LORA_MODULE_RELAY_PIN = 1;
TimerStart(LTE_MODULE_TIMER,LTE_MODULE_POWERUP_TIMEOUT);
mLTEModuleSMState = LTE_MODULE_SM_RESET_STATE;
break;
}
case LTE_MODULE_SM_RESET_STATE:
{
if(IsTimerExpired(LTE_MODULE_TIMER) == true)
{
// LORA_MODULE_RELAY_PIN = 0;
// LTE_MODULE_PWR_PIN = 0;
TimerStart(LTE_MODULE_TIMER,LTE_MODULE_POWERUP_TIMEOUT);
mLTEModuleSMState = LTE_MODULE_SM_POWERUP_STATE;
}
break;
}
case LTE_MODULE_SM_POWERUP_STATE:
{
if(IsTimerExpired(LTE_MODULE_TIMER) == true)
{
// LTE_MODULE_PWR_PIN = 1;
TimerStart(LTE_MODULE_TIMER,LTE_MODULE_WAIT_INIT_TIMEOUT);
mLTEModuleSMState = LTE_MODULE_SM_WAIT_RDY_STATE;
TimerStart(LTE_COMM_TIMER, LTE_MODULE_MAX_COMM_TIMEOUT);
}
break;
}
case LTE_MODULE_SM_WAIT_RDY_STATE:
{
if(SMEvent == LTE_MODULE_RX_RDY_EVENT)
{
mLTEModuleSMState = LTE_MODULE_SM_SETECHOOFF_STATE;
}
else if(SMEvent == LTE_MODULE_SM_TICK_EVENT)
{
if(IsTimerExpired(LTE_COMM_TIMER) == true)
{
LTEModuleReset();
}
}
break;
}
case LTE_MODULE_SM_SETECHOOFF_STATE:
{
char Cmd[5] = {'A','T','E','0','\r'};
//UartTransmitData(LTE_IF_UART_PORT,Cmd,5);
SendDataToLteModule(Cmd,5);
TimerStart(LTE_MODULE_TIMER,LTE_MODULE_POWERUP_TIMEOUT);
mLTEModuleSMState = LTE_MODULE_SM_DELAY_STATE;
break;
}
case LTE_MODULE_SM_SETAPN_STATE:
{
char Cmd[10] = {'A','T','+','C','G','N','A','P','N','\r'};
//UartTransmitData(LTE_IF_UART_PORT,Cmd,10);
SendDataToLteModule(Cmd,10);
TimerStart(LTE_MODULE_TIMER,LTE_MODULE_POWERUP_TIMEOUT);
mLTEModuleSMState = LTE_MODULE_SM_DELAY_STATE;
break;
}
case LTE_MODULE_SM_DELAY_STATE:
{
if(IsTimerExpired(LTE_MODULE_TIMER) == true)
{
mLTEModuleSMState = LTE_MODULE_SM_RUN_STATE;
}
break;
}
case LTE_MODULE_SM_RUN_STATE:
{
if(SMEvent == LTE_MODULE_ENTER_PASSTHROUGH_EVENT)
{
mLTEModuleSMState = LTE_MODULE_SM_PASSTHROUGH_STATE;
SyslogNewString("LTE Module entering passthrough mode...");
}
if(SMEvent == LTE_MODULE_SM_TICK_EVENT)
{
LTEModuleOperationSM(LTE_MODULE_OP_TICK_EVENT);
}
break;
}
case LTE_MODULE_SM_PASSTHROUGH_STATE:
{
if(SMEvent == LTE_MODULE_EXIT_PASSTHROUGH_EVENT)
{
SyslogNewString("LTE Module exiting passthrough mode...");
mLTEModuleSMState = LTE_MODULE_SM_RUN_STATE;
}
break;
}
}
}
void TickLTEModule()
{
LTEModuleSM(LTE_MODULE_SM_TICK_EVENT);
}
void LTEModuleNewData(unsigned char Data)
{
if(mIsPassthroughEnabled == true)
{
SyslogNewByte(Data);
// SendSyslogByte(Data);
return;
}
if(mModuleSerialDebugEnabled == true)
{
SyslogNewByte(Data);
}
if(Data == '\n') //ignore line feeds
return;
if(Data != '\r')
{
if(mLTEModuleOperationSMState == LTE_MODULE_OPERATION_SENDING_DATA_STATE && Data == '>')
{
LTESendMasterBufferToModule();
}
else if(mNbCmdCharsReceived < LTE_MODULE_MAX_CMD_LENGTH)
{
mATCmd[mNbCmdCharsReceived] = Data;
mNbCmdCharsReceived++;
}
else
{
//error...
mNbCmdCharsReceived = 0;
}
}
else
{
if(mNbCmdCharsReceived != 0) //New Command received
{
if(mLTEModuleSMState == LTE_MODULE_SM_WAIT_RDY_STATE)
{
if(mATCmd[0] == 'R' && mATCmd[1] == 'D' && mATCmd[2] == 'Y')
{
LTEModuleSM(LTE_MODULE_RX_RDY_EVENT);
}
}
else if(mLTEModuleSMState == LTE_MODULE_SM_RUN_STATE)
{
AnalyzeNewATString(mATCmd,mNbCmdCharsReceived,mCurrentCmd);
mNbCmdCharsReceived = mNbCmdCharsReceived;
}
mNbCmdCharsReceived = 0;
}
}
}
void LTEEnterSerialPassthrough()
{
LTEModuleSM(LTE_MODULE_ENTER_PASSTHROUGH_EVENT);
mIsPassthroughEnabled = true;
SyslogSetLTEPassthrough(true);
mPICSerialDebugEnabled = false;
mModuleSerialDebugEnabled = false;
}
void LTEExitSerialPassthrough()
{
LTEModuleSM(LTE_MODULE_EXIT_PASSTHROUGH_EVENT);
mIsPassthroughEnabled = false;
SyslogSetLTEPassthrough(false);
}
void LTEFwdPassthroughData(char Data)
{
if(mIsPassthroughEnabled == true)
{
UartTransmitData(LTE_IF_UART_PORT,&Data,1);
}
}
int LTEEnableSerialDebug(bool EnModule, bool EnPic)
{
if(EnModule == true)
{
if(mIsPassthroughEnabled == true)
{
return RET_ERROR;
}
mModuleSerialDebugEnabled = true;
}
else
{
mModuleSerialDebugEnabled = false;
}
if(EnPic == true)
{
if(mIsPassthroughEnabled == true)
{
return RET_ERROR;
}
mPICSerialDebugEnabled = true;
}
else
{
mPICSerialDebugEnabled = false;
}
return RET_OK;
}
void SendDataToLteModule(char *Data, int Size)
{
if(mPICSerialDebugEnabled)
{
char *ptr = Data;
int i;
for(i = 0; i < Size; i++)
{
SyslogNewByte(*ptr++);
}
}
UartTransmitData(LTE_IF_UART_PORT,Data,Size);
}
void LTECmdResponseReceived(int Cmd, int Result)
{
switch(Cmd)
{
case LTE_MODULE_NO_CMD:
{
break;
}
case LTE_MODULE_CONNECT_APN_CMD:
{
if(Result == LTE_MODULE_RESULT_OK)
{
LTEModuleOperationSM(LTE_MODULE_OP_APN_CONN_OK_EVENT);
}
else if(Result == LTE_MODULE_RESULT_ERROR)
{
LTEModuleOperationSM(LTE_MODULE_OP_APN_CONN_FAILED_EVENT);
}
break;
}
case LTE_MODULE_DISCONNECT_APN_CMD:
{
break;
}
case LTE_MODULE_CHECK_APN_CONNECTION_CMD:
{
if(Result == LTE_MODULE_RESULT_OK)
{
if(mAPNConnected == true)
{
LTEModuleOperationSM(LTE_MODULE_OP_APN_CONNECTED_EVENT);
}
else
{
LTEModuleOperationSM(LTE_MODULE_OP_APN_DISCONNECTED_EVENT);
}
}
else if(Result == LTE_MODULE_RESULT_ERROR)
{
LTEModuleOperationSM(LTE_MODULE_OP_APN_CONN_FAILED_EVENT);
}
break;
}
case LTE_MODULE_CONNECT_TO_MASTER_CMD:
{
if(Result == LTE_MODULE_RESULT_OK)
{
if(mMasterConnected == true)
{
LTEModuleOperationSM(LTE_MODULE_OP_SERVER_CONNECTED_EVENT);
}
else
{
LTEModuleOperationSM(LTE_MODULE_OP_SERVER_DISCONNECTED_EVENT);
}
}
else if(Result == LTE_MODULE_RESULT_ERROR)
{
LTEModuleOperationSM(LTE_MODULE_OP_SERVER_CONN_FAILED_EVENT);
}
break;
}
case LTE_MODULE_DISCONNECT_FROM_MASTER_CMD:
{
if(Result == LTE_MODULE_RESULT_OK)
{
LTEModuleOperationSM(LTE_MODULE_OP_SERVER_DISCONNECTED_EVENT);
}
else if(Result == LTE_MODULE_RESULT_ERROR)
{
LTEModuleOperationSM(LTE_MODULE_OP_SERVER_DISCONNECTED_EVENT);
}
break;
}
case LTE_MODULE_CHECK_MASTER_CONNECTION_CMD:
{
if(Result == LTE_MODULE_RESULT_OK)
{
}
else if(Result == LTE_MODULE_RESULT_ERROR)
{
}
break;
}
case LTE_MODULE_RX_DATA_CMD:
{
if(Result == LTE_MODULE_RESULT_OK)
{
//This case is managed by LTEModuleDataReceived()
}
else if(Result == LTE_MODULE_RESULT_ERROR)
{
LTEModuleOperationSM(LTE_MODULE_OP_MASTER_DATA_RECEIVED_EVENT);
}
break;
}
case LTE_MODULE_TX_DATA_CMD:
{
if(Result == LTE_MODULE_RESULT_OK)
{
LTEModuleOperationSM(LTE_MODULE_OP_MASTER_DATA_SENT_EVENT);
}
else if(Result == LTE_MODULE_RESULT_ERROR)
{
//TODO: Manage a TX error...
LTEModuleOperationSM(LTE_MODULE_OP_MASTER_DATA_SENT_EVENT);
}
break;
}
}
}
void LTEModuleAPNConnectionStatus(int Status)
{
if(Status == LTE_MODULE_APN_CONNECTED)
{
mAPNConnected = true;
// SyslogNewString("APN connected\n");
}
else
{
mAPNConnected = false;
// SyslogNewString("APN disconnected\n");
}
}
void LTEModuleMasterConnectionStatus(int Status)
{
if(Status == LTE_MODULE_MASTER_CONNECTED)
{
mMasterConnected = true;
// SyslogNewString("Master connected\n");
}
else if(Status == LTE_MODULE_MASTER_SOCKET_ERROR)
{
mMasterConnected = false;
mMasterSocketError = true;
// SyslogNewString("Master socket error\n");
}
else
{
mMasterConnected = false;
// SyslogNewString("Master disconnected\n");
}
}
void LTEModuleOperationSM(int OperationEvent)
{
switch(mLTEModuleOperationSMState)
{
case LTE_MODULE_OPERATION_INIT_STATE:
{
mIsInitializing = true;
//Send the request to connect module APN
LTESendCommandToModule(LTE_MODULE_CONNECT_APN_CMD);
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_WAIT_CONNECT_APN_STATE;
break;
}
case LTE_MODULE_OPERATION_WAIT_CONNECT_APN_STATE:
{
if(OperationEvent == LTE_MODULE_OP_APN_CONN_OK_EVENT)
{
//Send the request to confirm the state of the connection
LTESendCommandToModule(LTE_MODULE_CHECK_APN_CONNECTION_CMD);
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_CHECK_APN_STATE;
}
else if(OperationEvent == LTE_MODULE_OP_APN_CONN_FAILED_EVENT)
{
//TODO: What do we do??
LTEModuleReset(); //Something's wrong... reset the module.
}
else if(OperationEvent == LTE_MODULE_OP_TICK_EVENT)
{
if(IsTimerExpired(LTE_COMM_TIMER) == true)
{
LTEModuleReset();
}
}
break;
}
case LTE_MODULE_OPERATION_CHECK_APN_STATE:
{
if(OperationEvent == LTE_MODULE_OP_APN_CONNECTED_EVENT)
{
if(mIsInitializing == true) //The first time, try to connect the server immediately
{
mIsInitializing = false;
//Send the request to connect to Mastercontroller
LTESendCommandToModule(LTE_MODULE_CONNECT_TO_MASTER_CMD);
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_WAIT_CONNECT_SERVER_STATE;
}
else
{
mCurrentCmd = LTE_MODULE_NO_CMD;
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_STANDBY_STATE;
}
}
else if(OperationEvent == LTE_MODULE_OP_APN_DISCONNECTED_EVENT)
{
//Let the main loop retry later...
mCurrentCmd = LTE_MODULE_NO_CMD;
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_STANDBY_STATE;
}
else if(OperationEvent == LTE_MODULE_OP_TICK_EVENT)
{
if(IsTimerExpired(LTE_COMM_TIMER) == true)
{
LTEModuleReset();
}
}
break;
}
case LTE_MODULE_OPERATION_WAIT_CONNECT_SERVER_STATE:
{
if(OperationEvent == LTE_MODULE_OP_SERVER_CONNECTED_EVENT)
{
mCurrentCmd = LTE_MODULE_NO_CMD;
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_STANDBY_STATE;
TimerStart(LTE_MODULE_TIMER,LTE_MODULE_CONNECTION_CHECK_TIMEOUT);
}
else if(OperationEvent == LTE_MODULE_OP_SERVER_DISCONNECTED_EVENT)
{
mCurrentCmd = LTE_MODULE_NO_CMD;
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_STANDBY_STATE;
TimerStart(LTE_MODULE_TIMER,LTE_MODULE_CONNECTION_CHECK_TIMEOUT);
}
else if(OperationEvent == LTE_MODULE_OP_SERVER_CONN_FAILED_EVENT)
{
//TODO: Should we reset the module instead?
mCurrentCmd = LTE_MODULE_NO_CMD;
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_STANDBY_STATE;
TimerStart(LTE_MODULE_TIMER,LTE_MODULE_CONNECTION_CHECK_TIMEOUT);
}
else if(OperationEvent == LTE_MODULE_OP_TICK_EVENT)
{
if(IsTimerExpired(LTE_COMM_TIMER) == true)
{
LTEModuleReset();
}
}
break;
}
case LTE_MODULE_OPERATION_WAIT_DISCONNECT_SERVER_STATE:
{
if(OperationEvent == LTE_MODULE_OP_SERVER_DISCONNECTED_EVENT)
{
//Always reconnect after a forced disconnection..
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_WAIT_CONNECT_SERVER_STATE;
LTESendCommandToModule(LTE_MODULE_CONNECT_TO_MASTER_CMD);
}
else if(OperationEvent == LTE_MODULE_OP_TICK_EVENT)
{
if(IsTimerExpired(LTE_COMM_TIMER) == true)
{
LTEModuleReset();
}
}
break;
}
case LTE_MODULE_OPERATION_STANDBY_STATE:
{
if(OperationEvent == LTE_MODULE_OP_TICK_EVENT)
{
if(IsTimerRunning(LTE_COMM_TIMER) == true)
{
TimerStop(LTE_COMM_TIMER);
}
switch(mLTEModuleOperationSMSubState)
{
case LTE_MODULE_OPERATION_NOMINAL_SUBSTATE:
{
if(IsTimerExpired(LTE_MODULE_TIMER) == true)
{
if(mMasterConnected == true) //All is good for now...
{
char tmp[] = "Ca marche\n\r";
mNbMasterReconnectCount = 0;
TimerStart(LTE_MODULE_TIMER,LTE_MODULE_CONNECTION_CHECK_TIMEOUT);
}
else
{
//Master connection is lost... try to reconnect.
if(mNbMasterReconnectCount < LTE_MODULE_MAX_MASTER_CONNECT_RETRY)
{
mNbMasterReconnectCount++;
mLTEModuleOperationSMSubState = LTE_MODULE_OPERATION_RECONNECT_MASTER_SUBSTATE;
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_WAIT_DISCONNECT_SERVER_STATE;
LTESendCommandToModule(LTE_MODULE_DISCONNECT_FROM_MASTER_CMD); //Always disconnect before reconnecting...
// SyslogNewString("Master reconnection attempt\n");
}
else //We tried 10 times, check the APN
{
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_CHECK_APN_STATE;
mLTEModuleOperationSMSubState = LTE_MODULE_OPERATION_CHECK_APN_SUBSTATE;
LTESendCommandToModule(LTE_MODULE_CHECK_APN_CONNECTION_CMD);
mNbMasterReconnectCount = 0;
// SyslogNewString("Master reconnection attempt count reached.. checking APN\n");
}
}
}
break;
}
case LTE_MODULE_OPERATION_RECONNECT_MASTER_SUBSTATE:
{
mLTEModuleOperationSMSubState = LTE_MODULE_OPERATION_NOMINAL_SUBSTATE;
//TODO: check for SOCKET ERROR result code and reset APN directly here?
// if(mMasterSocketError == true)
// {
// mMasterSocketError = false;
// mLTEModuleOperationSMState = LTE_MODULE_OPERATION_CHECK_APN_STATE;
// mLTEModuleOperationSMSubState = LTE_MODULE_OPERATION_CHECK_APN_SUBSTATE;
// LTESendCommandToModule(LTE_MODULE_CHECK_APN_CONNECTION_CMD);
// mNbMasterReconnectCount = 0;
// }
break;
}
case LTE_MODULE_OPERATION_CHECK_APN_SUBSTATE:
{
if(mAPNConnected == true)
{
mLTEModuleOperationSMSubState = LTE_MODULE_OPERATION_NOMINAL_SUBSTATE;
}
else //APN is disconnected.. try reconnecting.
{
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_WAIT_CONNECT_APN_STATE;
mLTEModuleOperationSMSubState = LTE_MODULE_OPERATION_RECONNECT_APN_SUBSTATE;
LTESendCommandToModule(LTE_MODULE_CONNECT_APN_CMD);
}
break;
}
case LTE_MODULE_OPERATION_RECONNECT_APN_SUBSTATE:
{
mLTEModuleOperationSMSubState = LTE_MODULE_OPERATION_NOMINAL_SUBSTATE;
break;
}
default:
{
break;
}
}
}
else if(OperationEvent == LTE_MODULE_OP_MASTER_DATA_READY_EVENT)
{
LTESendCommandToModule(LTE_MODULE_RX_DATA_CMD);
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_WAIT_FOR_DATA_STATE;
}
else if(OperationEvent == LTE_MODULE_OP_MASTER_SEND_DATA_REQUEST_EVENT)
{
if(mMasterConnected == true)
{
LTESendCommandToModule(LTE_MODULE_TX_DATA_CMD);
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_SENDING_DATA_STATE;
}
}
break;
}
case LTE_MODULE_OPERATION_WAIT_FOR_DATA_STATE:
{
if(OperationEvent == LTE_MODULE_OP_MASTER_DATA_RECEIVED_EVENT)
{
mCurrentCmd = LTE_MODULE_NO_CMD;
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_STANDBY_STATE;
}
else if(OperationEvent == LTE_MODULE_OP_TICK_EVENT)
{
if(IsTimerExpired(LTE_COMM_TIMER) == true)
{
LTEModuleReset();
}
}
break;
}
case LTE_MODULE_OPERATION_SENDING_DATA_STATE:
{
if(OperationEvent == LTE_MODULE_OP_TICK_EVENT)
{
if(IsTimerExpired(LTE_COMM_TIMER) == true)
{
LTEModuleReset();
}
}
else if(OperationEvent == LTE_MODULE_OP_MASTER_DATA_SENT_EVENT)
{
mCurrentCmd = LTE_MODULE_NO_CMD;
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_STANDBY_STATE;
}
break;
}
}
}
void LTEModuleNewDataReady()
{
LTEModuleOperationSM(LTE_MODULE_OP_MASTER_DATA_READY_EVENT);
}
void LTEModuleDataReceived(char *Data, int Size)
{
LTEModuleOperationSM(LTE_MODULE_OP_MASTER_DATA_RECEIVED_EVENT);
int i;
for(i = 0; i < Size; i++)
{
ProtocolAnalyzeNewData(Data[i], NETWORK_PROTOCOL_USER_LTE);
}
}
int LTESendCommandToModule(int Cmd)
{
switch(Cmd)
{
TimerStart(LTE_COMM_TIMER,LTE_MODULE_MAX_COMM_TIMEOUT);
case LTE_MODULE_CONNECT_APN_CMD:
{
mCurrentCmd = LTE_MODULE_CONNECT_APN_CMD;
SendDataToLteModule(mActivateNetworkCmd,strlen(mActivateNetworkCmd));
break;
}
case LTE_MODULE_DISCONNECT_APN_CMD:
{
mCurrentCmd = LTE_MODULE_DISCONNECT_APN_CMD;
SendDataToLteModule(mDisconnectNetworkCmd,strlen(mDisconnectNetworkCmd));
break;
}
case LTE_MODULE_CONNECT_TO_MASTER_CMD:
{
mCurrentCmd = LTE_MODULE_CONNECT_TO_MASTER_CMD;
SendDataToLteModule(mConnectToMasterCmd,strlen(mConnectToMasterCmd));
break;
}
case LTE_MODULE_DISCONNECT_FROM_MASTER_CMD:
{
mCurrentCmd = LTE_MODULE_DISCONNECT_FROM_MASTER_CMD;
SendDataToLteModule(mDisconnectFromMasterCmd,strlen(mDisconnectFromMasterCmd));
break;
}
case LTE_MODULE_RX_DATA_CMD:
{
mCurrentCmd = LTE_MODULE_RX_DATA_CMD;
SendDataToLteModule(mReceiveDataCmd,strlen(mReceiveDataCmd));
break;
}
case LTE_MODULE_TX_DATA_CMD:
{
char Cmd[25];
sprintf(Cmd,"AT+CASEND=0,%d\r",mMasterTxSize);
mCurrentCmd = LTE_MODULE_TX_DATA_CMD;
SendDataToLteModule(Cmd,strlen(Cmd));
break;
}
case LTE_MODULE_CHECK_APN_CONNECTION_CMD:
{
mCurrentCmd = LTE_MODULE_CHECK_APN_CONNECTION_CMD;
SendDataToLteModule(mCheckAPNConnectionCmd,strlen(mCheckAPNConnectionCmd));
break;
}
case LTE_MODULE_CHECK_MASTER_CONNECTION_CMD:
{
break;
}
case LTE_MODULE_NO_CMD:
default:
{
TimerStop(LTE_COMM_TIMER);
mCurrentCmd = LTE_MODULE_NO_CMD;
return RET_ERROR;
break;
}
}
return RET_OK;
}
void LTEModuleMasterCtrlCommStatus(bool Offline)
{
if(Offline == true)
{
mMasterConnected = false;
}
// else
// mMasterConnected = true;
}
//This is the function to call from outside to send data to the server
int LTESendDataToMaster(char *Buffer, int Size)
{
// LTE_MODULE_TX_LED_PIN = LED_ON;
if(Size > MAX_MESSAGE_SIZE)
{
return RET_ERROR;
}
if(mMasterConnected == false)
{
return RET_ERROR;
}
memcpy(mMasterTxBuffer,Buffer,Size);
mMasterTxSize = Size;
LTEModuleOperationSM(LTE_MODULE_OP_MASTER_SEND_DATA_REQUEST_EVENT);
return RET_OK;
}
//The module is ready... send the payload so it can transmit it to the master
int LTESendMasterBufferToModule()
{
SendDataToLteModule(mMasterTxBuffer,mMasterTxSize);
// LTE_MODULE_TX_LED_PIN = LED_OFF;
return RET_OK;
}
bool LTEModuleIsMasterConnected()
{
return mMasterConnected;
}