This commit is contained in:
jfmartel 2024-12-30 11:30:27 -05:00
parent 9fd1986330
commit cfed167881
10 changed files with 8820 additions and 8446 deletions

View File

@ -76,11 +76,15 @@ int AnalyzeNewATString(char* Str, int StrLen, int CurCmd)
{
if(strncmp("+CAOPEN:",mInputString,strlen("+CAOPEN:")) == 0)
{
// int result = atoi(&mInputString[11]);
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);
@ -107,6 +111,7 @@ int AnalyzeNewATString(char* Str, int StrLen, int CurCmd)
{
LTECmdResponseReceived(CurCmd,LTE_MODULE_RESULT_ERROR);
}
break;
}
case LTE_MODULE_CHECK_MASTER_CONNECTION_CMD:
{
@ -186,6 +191,21 @@ int AnalyzeNewATString(char* Str, int StrLen, int CurCmd)
{
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;
}

View File

@ -7,6 +7,7 @@
#include "ATCmdInterpreter.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\",6463\r";
static BYTE mDisconnectFromMasterCmd[] = "AT+CACLOSE=0\r";
@ -15,29 +16,42 @@ static BYTE mReceiveDataCmd[] = "AT+CARECV=0,100\r";
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)
{
@ -92,7 +106,7 @@ void LTEModuleSM(int SMEvent)
char Cmd[5] = {'A','T','E','0','\r'};
//UartTransmitData(LTE_IF_UART_PORT,Cmd,5);
SendDataToLteModule(Cmd,5);
TimerStart(LTE_MODULE_TIMER,4000);
TimerStart(LTE_MODULE_TIMER,LTE_MODULE_POWERUP_TIMEOUT);
mLTEModuleSMState = LTE_MODULE_SM_DELAY_STATE;
break;
}
@ -101,7 +115,7 @@ void LTEModuleSM(int SMEvent)
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,4000);
TimerStart(LTE_MODULE_TIMER,LTE_MODULE_POWERUP_TIMEOUT);
mLTEModuleSMState = LTE_MODULE_SM_DELAY_STATE;
break;
}
@ -336,11 +350,11 @@ void LTECmdResponseReceived(int Cmd, int Result)
{
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;
}
@ -379,11 +393,12 @@ void LTEModuleAPNConnectionStatus(int Status)
if(Status == LTE_MODULE_APN_CONNECTED)
{
mAPNConnected = true;
SyslogNewString("APN connected\n");
}
else
{
mAPNConnected = false;
//TODO: Reconnect..
SyslogNewString("APN disconnected\n");
}
}
void LTEModuleMasterConnectionStatus(int Status)
@ -391,10 +406,18 @@ 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");
}
}
@ -405,9 +428,9 @@ void LTEModuleOperationSM(int OperationEvent)
{
case LTE_MODULE_OPERATION_INIT_STATE:
{
mIsInitializing = true;
//Send the request to connect module APN
mCurrentCmd = LTE_MODULE_CONNECT_APN_CMD;
SendDataToLteModule(mActivateNetworkCmd,strlen(mActivateNetworkCmd));
LTESendCommandToModule(LTE_MODULE_CONNECT_APN_CMD);
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_WAIT_CONNECT_APN_STATE;
break;
@ -417,17 +440,14 @@ void LTEModuleOperationSM(int OperationEvent)
if(OperationEvent == LTE_MODULE_OP_APN_CONN_OK_EVENT)
{
//Send the request to confirm the state of the connection
mCurrentCmd = LTE_MODULE_CHECK_APN_CONNECTION_CMD;
SendDataToLteModule(mCheckAPNConnectionCmd,strlen(mCheckAPNConnectionCmd));
LTESendCommandToModule(LTE_MODULE_CHECK_APN_CONNECTION_CMD);
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_CHECK_APN_STATE;
}
if(OperationEvent == LTE_MODULE_OP_APN_CONN_FAILED_EVENT)
{
//TODO: What do we do??
// mCurrentCmd = LTE_MODULE_CHECK_APN_CONNECTION_CMD;
// SendDataToLteModule(mCheckAPNConnectionCmd,strlen(mCheckAPNConnectionCmd));
// mLTEModuleOperationSMState = LTE_MODULE_OPERATION_CHECK_APN_STATE;
LTEModuleReset(); //Something's wrong... reset the module.
}
else if(OperationEvent == LTE_MODULE_OP_TICK_EVENT)
{
@ -440,11 +460,19 @@ void LTEModuleOperationSM(int OperationEvent)
{
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
mCurrentCmd = LTE_MODULE_CONNECT_TO_MASTER_CMD;
SendDataToLteModule(mConnectToMasterCmd,strlen(mConnectToMasterCmd));
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;
}
}
if(OperationEvent == LTE_MODULE_OP_APN_DISCONNECTED_EVENT)
{
//TODO: What do we do??
@ -472,7 +500,7 @@ void LTEModuleOperationSM(int OperationEvent)
//TODO: What do we do?
mCurrentCmd = LTE_MODULE_NO_CMD;
// mLTEModuleOperationSMState = LTE_MODULE_OPERATION_STANDBY_STATE;
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_STANDBY_STATE;
}
if(OperationEvent == LTE_MODULE_OP_SERVER_CONN_FAILED_EVENT)
{
@ -485,16 +513,96 @@ void LTEModuleOperationSM(int OperationEvent)
}
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);
}
break;
}
case LTE_MODULE_OPERATION_STANDBY_STATE:
{
if(OperationEvent == LTE_MODULE_OP_TICK_EVENT)
{
//TODO: manage timeouts
switch(mLTEModuleOperationSMSubState)
{
case LTE_MODULE_OPERATION_NOMINAL_SUBSTATE:
{
if(IsTimerExpired(LTE_MODULE_TIMER) == true)
{
if(mMasterConnected == true) //All is good for now...
{
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;
}
}
}
if(OperationEvent == LTE_MODULE_OP_MASTER_DATA_READY_EVENT)
{
mCurrentCmd = LTE_MODULE_RX_DATA_CMD;
SendDataToLteModule(mReceiveDataCmd,strlen(mReceiveDataCmd));
LTESendCommandToModule(LTE_MODULE_RX_DATA_CMD);
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_WAIT_FOR_DATA_STATE;
}
break;
@ -526,3 +634,74 @@ void LTEModuleDataReceived(char *Data, int Size)
LTEModuleOperationSM(LTE_MODULE_OP_MASTER_DATA_RECEIVED_EVENT);
//Execute command..
}
int LTESendCommandToModule(int Cmd)
{
switch(Cmd)
{
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:
{
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:
{
mCurrentCmd = LTE_MODULE_NO_CMD;
return RET_ERROR;
break;
}
}
return RET_OK;
}
void LTEModuleMasterCtrlCommStatus(bool Offline)
{
if(Offline == true)
{
mMasterConnected = false;
}
// else
// mMasterConnected = true;
}

View File

@ -12,7 +12,9 @@
#define LTE_MODULE_POWERUP_TIMEOUT 2000
#define LTE_MODULE_WAIT_INIT_TIMEOUT 5000
#define LTE_MODULE_CONNECTION_CHECK_TIMEOUT 5000
#define LTE_MODULE_MAX_CMD_LENGTH 128
#define LTE_MODULE_MAX_MASTER_CONNECT_RETRY 5
enum eLTEModuleCommands
{
@ -44,7 +46,8 @@ enum eLTEModuleAPNConnectionStatus
enum eLTEModuleMasterConnectionStatus
{
LTE_MODULE_MASTER_DISCONNECTED,
LTE_MODULE_MASTER_CONNECTED
LTE_MODULE_MASTER_CONNECTED,
LTE_MODULE_MASTER_SOCKET_ERROR
};
@ -82,12 +85,23 @@ enum eLTEModuleOperationStates
LTE_MODULE_OPERATION_WAIT_CONNECT_APN_STATE,
LTE_MODULE_OPERATION_CHECK_APN_STATE,
LTE_MODULE_OPERATION_WAIT_CONNECT_SERVER_STATE,
LTE_MODULE_OPERATION_WAIT_DISCONNECT_SERVER_STATE,
LTE_MODULE_OPERATION_STANDBY_STATE,
LTE_MODULE_OPERATION_WAIT_FOR_DATA_STATE,
LTE_MODULE_OPERATION_MAX_STATE
};
enum eLTEModuleOperationSubStates
{
LTE_MODULE_OPERATION_NOMINAL_SUBSTATE,
LTE_MODULE_OPERATION_RECONNECT_MASTER_SUBSTATE,
LTE_MODULE_OPERATION_CHECK_APN_SUBSTATE,
LTE_MODULE_OPERATION_RECONNECT_APN_SUBSTATE,
LTE_MODULE_OPERATION_MAX_SUBSTATE
};
enum eLTEModuleOperationSMEvents
{
LTE_MODULE_OP_TICK_EVENT,
@ -105,6 +119,8 @@ enum eLTEModuleOperationSMEvents
LTE_MODULE_OP_MAX_EVENT
};
void InitLTEModule();
void LTEModuleSM(int SMEvent);
void TickLTEModule();
@ -114,13 +130,16 @@ void LTEEnterSerialPassthrough();
void LTEExitSerialPassthrough();
void LTEFwdPassthroughData(char Data);
int LTEEnableSerialDebug(bool EnModule, bool EnPic);
int LTESendCommandToModule(int Command);
void SendDataToLteModule(char *Data, int Size);
int LTEModuleReset();
void LTECmdResponseReceived(int Cmd, int Result);
void LTEModuleAPNConnectionStatus(int Status);
void LTEModuleMasterConnectionStatus(int Status);
void LTEModuleNewDataReady();
void LTEModuleDataReceived(char *Data, int Size);
void LTEModuleMasterCtrlCommStatus(bool Offline);
#endif /* SIM7080GINTERFACE_H */

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
#
#Sat Dec 28 08:08:31 EST 2024
#Mon Dec 30 11:27:34 EST 2024
ChaletDuinoV2_795F512H_.languagetoolchain.dir=C\:\\Program Files\\Microchip\\xc32\\v1.33\\bin
default.languagetoolchain.dir=C\:\\Program Files\\Microchip\\xc32\\v1.33\\bin
proj.dir=D\:\\Main\\PicDev\\Projets\\ChaletLora\\ChaletLora.X
@ -13,7 +13,7 @@ host.platform=windows
ChaletDuinoV2_795F512H_.com-microchip-mplab-nbide-toolchain-xc32-XC32LanguageToolchain.md5=de2d3bc95a22a3f432c2e39f49efafbc
ChaletDuinoV2_795F512H_.Pack.dfplocation=C\:\\Users\\JF\\.mchp_packs\\Microchip\\PIC32MX_DFP\\1.3.231
ChaletDuino_775F512H_.languagetoolchain.dir=C\:\\Program Files\\Microchip\\xc32\\v1.33\\bin
host.id=1ah3-org7-2o
host.id=2r0w-c3lh-oj
conf.ids=default,ChaletDuino_775F512H_,ChaletDuinoV2_795F512H_
default.languagetoolchain.version=1.33
ChaletDuinoV2_795F512H_.languagetoolchain.version=1.33

View File

@ -1,6 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<project-private xmlns="http://www.netbeans.org/ns/project-private/1">
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="7">
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="9">
<file>
<url>Source/hd44780.c</url>
<bookmark id="7">
<name/>
<line>340</line>
<key/>
</bookmark>
</file>
<file>
<url>Source/SIM7080GInterface.c</url>
<bookmark id="8">
<name/>
<line>424</line>
<key/>
</bookmark>
<bookmark id="9">
<name/>
<line>525</line>
<key/>
</bookmark>
</file>
<file>
<url>Source/BootloaderInterface.c</url>
<bookmark id="5">
@ -14,25 +35,15 @@
<key/>
</bookmark>
</file>
<file>
<url>Source/hd44780.c</url>
<bookmark id="7">
<name/>
<line>340</line>
<key/>
</bookmark>
</file>
</editor-bookmarks>
<open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
<group>
<file>file:/D:/Main/PicDev/Projets/ChaletLora/ChaletLora.X/Source/SIM7080GInterface.c</file>
<file>file:/D:/Main/PicDev/Projets/ChaletLora/ChaletLora.X/Source/WiFiCtrl.c</file>
<file>file:/D:/Main/PicDev/Projets/ChaletLora/ChaletLora.X/Source/InternalUart.c</file>
<file>file:/D:/Main/PicDev/Projets/ChaletLora/ChaletLora.X/Source/TemperatureSensor.c</file>
<file>file:/D:/Main/PicDev/Projets/ChaletLora/ChaletLora.X/Source/Terminal.h</file>
<file>file:/D:/Main/PicDev/Projets/ChaletLora/ChaletLora.X/Source/LCDCtrl.c</file>
<file>file:/D:/Main/PicDev/Projets/ChaletLora/ChaletLora.X/Source/ATCmdInterpreter.c</file>
<file>file:/D:/Main/PicDev/Projets/ChaletLora/ChaletLora.X/Source/SIM7080GInterface.h</file>
<file>file:/D:/Main/PicDev/Projets/ChaletLora/ChaletLora.X/Source/Syslog.c</file>
<file>file:/D:/Main/PicDev/Projets/ChaletLora/ChaletLora.X/Source/winc3400_142/driver/source/nmspi.c</file>
<file>file:/D:/Main/PicDev/Projets/ChaletLora/ChaletLora.X/Source/LoraNetworkInterface.c</file>
<file>file:/D:/Main/PicDev/Projets/ChaletLora/ChaletLora.X/Source/ATCmdInterpreter.h</file>
</group>
</open-files>
</project-private>