226 lines
5.6 KiB
C
226 lines
5.6 KiB
C
#include "SIM7080GInterface.h"
|
|
#include "BoardCfg.h"
|
|
#include "timer.h"
|
|
#include "Uart.h"
|
|
#include "Syslog.h"
|
|
#include "WiFiCtrl.h"
|
|
|
|
int mLTEModuleSMState;
|
|
int mNbCmdCharsReceived;
|
|
char mATCmd[LTE_MODULE_MAX_CMD_LENGTH];
|
|
bool mIsPassthroughEnabled;
|
|
bool mModuleSerialDebugEnabled;
|
|
bool mPICSerialDebugEnabled;
|
|
|
|
void InitLTEModule()
|
|
{
|
|
mLTEModuleSMState = LTE_MODULE_SM_INIT_STATE;
|
|
mNbCmdCharsReceived = 0;
|
|
mIsPassthroughEnabled = false;
|
|
mModuleSerialDebugEnabled = false;
|
|
mPICSerialDebugEnabled = false;
|
|
}
|
|
|
|
void LTEModuleSM(int SMEvent)
|
|
{
|
|
switch(mLTEModuleSMState)
|
|
{
|
|
case LTE_MODULE_SM_INIT_STATE:
|
|
{
|
|
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;
|
|
}
|
|
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)
|
|
{
|
|
//TODO: it module takes too much time... reset..
|
|
// if(IsTimerExpired(LTE_MODULE_TIMER) == true)
|
|
// {
|
|
// mLTEModuleSMState = LTE_MODULE_SM_SETAPN_STATE;
|
|
// }
|
|
}
|
|
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);
|
|
mLTEModuleSMState = LTE_MODULE_SM_RUN_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);
|
|
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...");
|
|
}
|
|
|
|
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(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)
|
|
{
|
|
//Fwd cmd to interpreter...
|
|
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)
|
|
{
|
|
int i;
|
|
for(i = 0; i < Size; i++)
|
|
{
|
|
SyslogNewByte(*Data++);
|
|
}
|
|
}
|
|
UartTransmitData(LTE_IF_UART_PORT,Data,Size);
|
|
} |