LTE fonctionnel

This commit is contained in:
jfmartel 2025-01-02 08:54:15 -05:00
parent 460a19c557
commit 7099b9db06
19 changed files with 12797 additions and 12031 deletions

View File

@ -373,7 +373,7 @@ int SendInternalUartData(char *p_pcDataBuf, int p_iDataSize, int p_iUartPort, ch
// KickWatchdog();
U5TXREG = *p_stUartDataPtr->pcTxDataPtr++;
while(U5STAbits.TRMT == 0);
LTE_MODULE_TX_LED_PIN = ~ LTE_MODULE_TX_LED_PIN;
// LTE_MODULE_TX_LED_PIN = ~ LTE_MODULE_TX_LED_PIN;
}
p_stUartDataPtr->iIsBusy = 0;
DataSentNotification(p_stUartDataPtr->iUartHandle,iBufSize);
@ -429,11 +429,11 @@ int SendInternalUartDataBlocking(char *p_pcDataBuf, int p_iDataSize, int p_iUart
IEC2bits.U5TXIE = 0;
for(i = 0; i < p_iDataSize; i++)
{
LTE_MODULE_TX_LED_PIN = ~ LTE_MODULE_TX_LED_PIN;
// LTE_MODULE_TX_LED_PIN = ~ LTE_MODULE_TX_LED_PIN;
U2TXREG = *p_pcDataBuf++;
while(U5STAbits.TRMT == 0);
}
LTE_MODULE_TX_LED_PIN = LED_OFF;
// LTE_MODULE_TX_LED_PIN = LED_OFF;
IFS2bits.U5TXIF = 0;
IEC2 = temp;
break;
@ -636,14 +636,17 @@ void __ISR(_UART_5_VECTOR, ipl7) InternalUart5Interrupt(void)
}
else
{
// LTE_MODULE_TX_LED_PIN = LED_ON;
do
{
U5TXREG = *p_acUartDataPtr->pcTxDataPtr++; //send data
p_acUartDataPtr->iNbFIFOPendingBytes--;
LTE_MODULE_TX_LED_PIN = ~ LTE_MODULE_TX_LED_PIN;
}
while((U5STAbits.UTXBF == 0) && //while there is space in buffer
(p_acUartDataPtr->iNbFIFOPendingBytes != 0)); //and data to send
// LTE_MODULE_TX_LED_PIN = LED_OFF;
}
}

View File

@ -1,2 +1,344 @@
#include "LTENetworkInterface.h"
#include "NetworkProtocol.h"
#include "SIM7080GInterface.h"
#include "timer.h"
#include "ChaletPowerRelay.h"
#include "HarakiriRelay.h"
#include "BatteryMonitor.h"
#include "LedLightCtrl.h"
#include "TemperatureSensor.h"
#include "SPI_Flash.h"
#include "FlashMapping.h"
#include "LoraWatchdog.h"
#include "versionbuild.h"
#include "WiFiCtrl.h"
#include "BoardCfg.h"
int mLTENWISMState;
static const char mFirmwareVersion[15] = VERSIONNUMBER;
#define LORA_CHALET_STATUS_CUR_SENSOR_MASK 0x02
#define LORA_CHALET_STATUS_POWER_RELAY_MASK 0x01
unsigned int mLTETotalMasterNbRequests = 0;
void LTENetworkInterfaceInit()
{
ProtocolInit(NETWORK_PROTOCOL_USER_LTE);
mLTENWISMState = LTE_NWI_INIT_STATE;
}
void ExecuteLTEMasterCommand(int SenderID, int Command, unsigned char *Data, int DataSize)
{
KickLoraWatchdog();
ChaletPowerRelayKickTimer();
mLTETotalMasterNbRequests++;
LTE_MODULE_RX_LED_PIN = LED_OFF;
switch(SenderID)
{
case ID_MASTER:
{
switch(Command)
{
case CHALET_INTERFACE_ACK:
{
break;
}
case CHALET_GENERAL_STATUS_REQUEST:
{
float FloatVoltage = GetBatteryVoltage(1);
float FloatTemperature = TempSensorGetTemp();
unsigned int BattVoltage = *((int*)&FloatVoltage);
unsigned int Temperature = *((int*)&FloatTemperature);
int SolarPanelCurrent = GetSolarPanelCurrent();
int SOC = GetBatterySOC();
char GeneralStatus = 0;
char ChaletStatus[18];
if(GetChaletPowerRelayState() == CHALET_POWER_RELAY_ON_STATE)
{
GeneralStatus |= LORA_CHALET_STATUS_POWER_RELAY_MASK;
}
if(GetCurrentModuleOK() == true)
{
GeneralStatus |= LORA_CHALET_STATUS_CUR_SENSOR_MASK;
}
ChaletStatus[0] = GeneralStatus; //General Status
ChaletStatus[1] = GetWiFiSate(); //Wifi Module state
ChaletStatus[2] = (char)(BattVoltage & 0x000000FF); //Battery Voltage 1
BattVoltage >>= 8;
ChaletStatus[3] = (char)(BattVoltage & 0x000000FF); //Battery Voltage 2
BattVoltage >>= 8;
ChaletStatus[4] = (char)(BattVoltage & 0x000000FF); //Battery Voltage 3
BattVoltage >>= 8;
ChaletStatus[5] = (char)(BattVoltage & 0x000000FF); //Battery Voltage 4
ChaletStatus[6] = (char)(SolarPanelCurrent & 0x000000FF); //Solar panel Current 1
SolarPanelCurrent >>= 8;
ChaletStatus[7] = (char)(SolarPanelCurrent & 0x000000FF); //Solar panel Current 2
ChaletStatus[8] = (char)(SOC & 0x000000FF); //Battery SOC 1
SolarPanelCurrent >>= 8;
ChaletStatus[9] = (char)(SolarPanelCurrent & 0x000000FF); //Battery SOC 2
ChaletStatus[10] = (char)(Temperature & 0x000000FF); //Temperature 1
Temperature >>= 8;
ChaletStatus[11] = (char)(Temperature & 0x000000FF); //Temperature 2
Temperature >>= 8;
ChaletStatus[12] = (char)(Temperature & 0x000000FF); //BTemperature 3
Temperature >>= 8;
ChaletStatus[13] = (char)(Temperature & 0x000000FF); //Temperature 4
int tmp = mLTETotalMasterNbRequests;
ChaletStatus[14] = (char)(mLTETotalMasterNbRequests & 0x000000FF); //Total Nb Requests 1
mLTETotalMasterNbRequests >>= 8;
ChaletStatus[15] = (char)(mLTETotalMasterNbRequests & 0x000000FF); //Total Nb Requests 2
mLTETotalMasterNbRequests >>= 8;
ChaletStatus[16] = (char)(mLTETotalMasterNbRequests & 0x000000FF); //Total Nb Requests 3
mLTETotalMasterNbRequests >>= 8;
ChaletStatus[17] = (char)(mLTETotalMasterNbRequests & 0x000000FF); //Total Nb Requests 4
mLTETotalMasterNbRequests = tmp;
SendLTENetworkCommand(CHALET_GENERAL_STATUS_RESPONSE,ChaletStatus,18);
HEARTBEAT_LED_1_PIN = ~HEARTBEAT_LED_1_PIN;
break;
}
case CHALET_AC_POWER_STATE_STATUS_REQUEST:
{
char PowerStatus = GetChaletPowerRelayState();
SendLTENetworkCommand(CHALET_AC_POWER_STATE_STATUS_RESPONSE,&PowerStatus,1);
break;
}
case CHALET_AC_POWER_SET_STATE_REQUEST:
{
char response = CHALET_POWER_RELAY_UNKNOWN_STATE;
if(Data[0] == CHALET_POWER_RELAY_OFF_STATE)
{
ChaletPowerRelayTurnOff();
response = CHALET_POWER_RELAY_OFF_STATE;
}
else if(Data[0] == CHALET_POWER_RELAY_ON_STATE)
{
ChaletPowerRelayTurnOn();
response = CHALET_POWER_RELAY_ON_STATE;
}
else
{
//invalid state requested.... don't do anything
response = CHALET_POWER_RELAY_UNKNOWN_STATE;
}
SendLTENetworkCommand(CHALET_AC_POWER_SET_STATE_RESPONSE,&response,1);
break;
}
case CHALET_BATTERY_VOLTAGE_REQUEST:
{
break;
}
case CHALET_WIFI_STATUS_REQUEST:
{
char response[5];
uint32 IPAddress = GetCurIPAddress();
response[0] = GetWiFiSate(); //Wifi Module state
response[1] = IPV4_BYTE(IPAddress,0);
response[2] = IPV4_BYTE(IPAddress,1);
response[3] = IPV4_BYTE(IPAddress,2);
response[4] = IPV4_BYTE(IPAddress,3);
SendLTENetworkCommand(CHALET_WIFI_STATUS_RESPONSE,(unsigned char*)&response,5);
break;
}
case CHALET_WIFI_SET_STATE_REQUEST:
{
char response = WIFI_UNKNOWN_STATE;
if(Data[0] == 0)
{
TurnOFFWiFi();
response = 0;
}
else if(Data[0] == 1)
{
if(GetWiFiSate() != WIFI_CONNECTED_STATE)
{
InitWiFi();
response = GetWiFiSate();
}
else
{
response = 1;
}
}
else
{
//invalid state requested.... don't do anything
response = WIFI_UNKNOWN_STATE;
}
SendLTENetworkCommand(CHALET_WIFI_SET_STATE_RESPONSE,&response,1);
break;
}
case CHALET_DO_HARAKIRI_REQUEST:
{
char response;
if(Data[0] == 0xBA &&
Data[1] == 0xAD &&
Data[2] == 0xBE &&
Data[3] == 0xEF)
{
//Magic word is OK... let's suicide...
response = 0x01;
//First, send an ACK to master (this is blocking so it's OK)
SendLTENetworkCommand(CHALET_DO_HARAKIRI_CONFIRMATION,&response,1);
HarakiriRelayTurnOff();
}
else
{
response = 0x00;
SendLTENetworkCommand(CHALET_DO_HARAKIRI_CONFIRMATION,&response,1);
}
break;
}
case CHALET_REBOOT_CPU_REQUEST:
{
char response;
if(Data[0] == 0xBA &&
Data[1] == 0xAD &&
Data[2] == 0xCA &&
Data[3] == 0xFE)
{
//Magic word is OK... let's reboot...
response = 0x01;
//First, send an ACK to master (this is blocking so it's OK)
SendLTENetworkCommand(CHALET_REBOOT_CPU_RESPONSE,&response,1);
Sleep(100);
TurnOFFWiFi();
Sleep(100);
SoftReset();
}
else
{
response = 0x00;
SendLTENetworkCommand(CHALET_DO_HARAKIRI_CONFIRMATION,&response,1);
}
break;
}
case CHALET_GET_STORED_WIFI_SETTINGS_REQUEST:
{
char response[140];
char WifiDataSize;
SPIFlashReadBuffer(response,11,FLASH_WIFI_IP_ADDRESS);
WifiDataSize = 11 + response[9] + response[10];
if(WifiDataSize > 140)
break;
SPIFlashReadBuffer(response,WifiDataSize,FLASH_WIFI_IP_ADDRESS);
SendLTENetworkCommand(CHALET_GET_STORED_WIFI_SETTINGS_RESPONSE,response,WifiDataSize);
break;
}
case CHALET_SET_STORED_WIFI_SETTINGS_REQUEST:
{
char response = 0;
if(SPIFlashWriteBuffer(Data,DataSize,FLASH_WIFI_IP_ADDRESS) == 1)
{
response = 1;
}
SendLTENetworkCommand(CHALET_SET_STORED_WIFI_SETTINGS_RESPONSE,&response,1);
break;
}
case CHALET_GET_FIRMWARE_VERSION_REQUEST:
{
SendLTENetworkCommand(CHALET_GET_FIRMWARE_VERSION_RESPONSE,(unsigned char*)mFirmwareVersion,15);
break;
}
case CHALET_CLEAR_COMMS_STATISTICS_REQUEST:
{
char response = 1;
mLTETotalMasterNbRequests = 0;
SendLTENetworkCommand(CHALET_CLEAR_COMMS_STATISTICS_RESPONSE,&response,1);
break;
}
case ETH_NETWK_DEVICE_INFO_REQUEST:
{
char data[2];
data[0] = ID_CHALET_DEVICE;
data[1] = MY_DEVICE_ADDRESS;
int PayloadSize;
unsigned char *response = ProtocolGetFrame(ID_MASTER,MASTER_ADDRESS,ID_ETHERNET_VIRTUAL,ETH_NETWK_DEVICE_INFO_RESPONSE, data,2,0, &PayloadSize);
LTESendDataToMaster((char*)response,PayloadSize);
break;
}
case ETH_NETWK_SET_DEVICE_INFO_ACK:
{
LTENetworInterfaceExecSM(LTE_NWI_MASTER_CONNECTED_EVENT);
break;
}
case ETH_NETWK_CONNECTION_REFUSED:
{
//TODO: reset the TCP module to retry connection???
break;
}
}
break;
}
default:
{
break;
}
}
}
void TickLTENetworkInterface()
{
LTENetworInterfaceExecSM(LTE_NWI_TICK_EVENT);
}
void LTENetworInterfaceExecSM(int Event)
{
switch(mLTENWISMState)
{
case LTE_NWI_INIT_STATE:
{
mLTENWISMState = LTE_NWI_CONNECT_TO_MASTER_STATE;
TimerStart(LTE_NWI_TIMER,LTE_NWI_MASTER_CONNECT_POLL_INTERVAL);
break;
}
case LTE_NWI_WAIT_FOR_LTE_STATE:
{
//Not necessary... master will init handshake on TCP connection....
break;
}
case LTE_NWI_CONNECT_TO_MASTER_STATE: //Here we wait for the master to initiate the handshake after a TCP connection
{
if(Event == LTE_NWI_MASTER_CONNECTED_EVENT)
{
mLTENWISMState = LTE_NWI_OPERATE_STATE;
}
break;
}
case LTE_NWI_OPERATE_STATE:
{
if(Event == LTE_NWI_TICK_EVENT)
{
}
break;
}
}
}
void SendLTENetworkCommand(int Command, unsigned char *Data, unsigned int DataSize)
{
unsigned char *Payload;
unsigned int PayloadSize;
Payload = ProtocolGetFrame(ID_MASTER,MASTER_ADDRESS,ID_CHALET_DEVICE,Command,Data,DataSize,0,&PayloadSize);
LTESendDataToMaster(Payload,PayloadSize);
}

View File

@ -8,7 +8,33 @@
#ifndef LTENETWORKINTERFACE_H
#define LTENETWORKINTERFACE_H
#define LTE_NWI_MASTER_CONNECT_POLL_INTERVAL 5000
enum eLTENWISMStates
{
LTE_NWI_INIT_STATE,
LTE_NWI_WAIT_FOR_LTE_STATE,
LTE_NWI_CONNECT_TO_MASTER_STATE,
LTE_NWI_OPERATE_STATE,
LTE_NWI_MAX_STATE
};
enum eLTENWISMEvents
{
LTE_NWI_TICK_EVENT,
LTE_NWI_MASTER_CONNECTED_EVENT,
LTE_NWI_MAX_EVENT
};
void LTENetworkInterfaceInit();
void ExecuteLTEMasterCommand(int SenderID, int Command, unsigned char *Data, int DataSize);
void TickLTENetworkInterface();
void LTENetworInterfaceExecSM(int Event);
void SendLTENetworkCommand(int Command, unsigned char *Data, unsigned int DataSize);
#endif /* LTENETWORKINTERFACE_H */

View File

@ -15,6 +15,7 @@
#include "LoraWatchdog.h"
#include "versionbuild.h"
#include "WiFiCtrl.h"
//#include "WiFiCtrl.h"
//
@ -31,7 +32,13 @@ unsigned char mLoraPreamble[3]={0x00,LORA_MASTER_ADDRESS,LORA_CHANNEL};
static const char mFirmwareVersion[15] = VERSIONNUMBER;
unsigned int mTotalMasterNbRequests = 0;
void ExecuteMasterCommand(int Command, unsigned char *Data, int DataSize)
void LoraNetworkInterfaceInit()
{
ProtocolInit(NETWORK_PROTOCOL_USER_LORA);
}
void ExecuteLoraMasterCommand(int Command, unsigned char *Data, int DataSize)
{
//Whatever was the command, we are online...
LORA_MODULE_RX_LED_PIN = LED_OFF;

View File

@ -10,7 +10,8 @@
#define LORA_CHALET_STATUS_POWER_RELAY_MASK 0x01
#define LORA_CHALET_STATUS_CUR_SENSOR_MASK 0x02
void ExecuteMasterCommand(int Command, unsigned char *Data, int DataSize);
void LoraNetworkInterfaceInit();
void ExecuteLoraMasterCommand(int Command, unsigned char *Data, int DataSize);
void SendLoraNetworkCommand(int Command, unsigned char *Data, unsigned int DataSize);
void SendLoraNetworkCommandBlocking(int Command, unsigned char *Data, unsigned int DataSize); //USE WITH CARE

View File

@ -4,6 +4,7 @@
#include "BoardCfg.h"
#include "timer.h"
#include "LoraWatchdog.h"
#include "SIM7080GInterface.h"
int mLoraSMState;
@ -61,6 +62,7 @@ void LoraWatchdogStateMachine(int Event)
LORA_MODULE_RELAY_PIN = 0; //Turn ON the LoRa module
TimerStart(LORA_WATCHDOG_TIMER,LORA_WATCHDOG_REBOOT_TIMEOUT); //If we don't get Comm. back after this delay... reboot the PIC
mLoraSMState = LORA_WATCHDOG_WAIT_FOR_RECONNECT_STATE;
LTEModuleReset();
}
break;
}

View File

@ -15,79 +15,89 @@ jean-francois.martel@polymtl.ca
#include "NetworkProtocol.h"
#include "Uart.h"
#include <string.h>
#include "ProtocolDefs.h"
#include "MasterCtrlInterface.h"
#include "LoraNetworkInterface.h"
#include "LTENetworkInterface.h"
unsigned char mRxData[MAX_MESSAGE_SIZE+10], mTxData[MAX_MESSAGE_SIZE+10];
unsigned int DataSize = 0;
unsigned int DataCtr = 0;
unsigned int BufPtr = 0;
unsigned char RxPtr = 0;
unsigned char Command = 0;
unsigned char State = RxHeader;
unsigned char CRC = 0;
unsigned char SenderID = 0;
unsigned char SenderAddress = 0;
unsigned char Flags = 0;
unsigned char IsUpdating = 0;
unsigned char *BmpDataPtr = 0;
static char MyDeviceID = ID_SPRINKLER_DEVICE;
void ProtocolInit(void)
char mFrameData[MAX_MESSAGE_SIZE+10];
ProtocolData_t mLoraProtocolData;
ProtocolData_t mLTEProtocolData;
void ProtocolInit(int User)
{
ResetStateMachine();
ProtocolData_t *DataStruct;
switch(User)
{
case NETWORK_PROTOCOL_USER_LORA:
{
DataStruct = &mLoraProtocolData;
break;
}
case NETWORK_PROTOCOL_USER_LTE:
{
DataStruct = &mLTEProtocolData;
break;
}
default:
return;
break;
}
ResetStateMachine(DataStruct);
}
void StateMachine(unsigned char Data)
void StateMachine(unsigned char Data,ProtocolData_t *ProtocolData )
{
switch(State)
switch(ProtocolData->State)
{
case Initialization: //Reset all pointers and data...
{
DataSize = 0;
BufPtr = 0;
RxPtr = 0;
Command = 0;
CRC = 0;
State = RxHeader;
ProtocolData->DataSize = 0;
ProtocolData->BufPtr = 0;
ProtocolData->RxPtr = 0;
ProtocolData->Command = 0;
ProtocolData->CRC = 0;
ProtocolData->State = RxHeader;
break;
}
case RxHeader: //Wait for data header...
{
if(Data == FRAME_HEADER)
{
mRxData[BufPtr++] = Data;
State = RxAdd;
CRC ^= Data;
ProtocolData->mRxData[ProtocolData->BufPtr++] = Data;
ProtocolData->State = RxAdd;
ProtocolData->CRC ^= Data;
}
else
{
DataSize = 0;
ResetStateMachine();
ProtocolData->DataSize = 0;
ResetStateMachine(ProtocolData);
}
break;
}
case RxAdd: //Sender Address.
{
SenderAddress = Data;
mRxData[BufPtr++] = Data;
State = RxID;
CRC ^= Data;
ProtocolData->SenderAddress = Data;
ProtocolData->mRxData[ProtocolData->BufPtr++] = Data;
ProtocolData->State = RxID;
ProtocolData->CRC ^= Data;
break;
}
case RxID: //Sender ID
{
mRxData[BufPtr++] = Data;
State = RxMyID;
SenderID = Data;
CRC ^= Data;
ProtocolData->mRxData[ProtocolData->BufPtr++] = Data;
ProtocolData->State = RxMyID;
ProtocolData->SenderID = Data;
ProtocolData->CRC ^= Data;
break;
}
case RxMyID:
@ -97,158 +107,182 @@ void StateMachine(unsigned char Data)
// ResetStateMachine();
// break;
// }
mRxData[BufPtr++] = Data;
State = RxMyAddress;
CRC ^= Data;
ProtocolData->mRxData[ProtocolData->BufPtr++] = Data;
ProtocolData->State = RxMyAddress;
ProtocolData->CRC ^= Data;
break;
}
case RxMyAddress:
{
if(Data != MY_DEVICE_ADDRESS && Data != BROADCAST_VALUE) //Message is not for this device address and it's not a broadcast
{
ResetStateMachine();
ResetStateMachine(ProtocolData);
break;
}
mRxData[BufPtr++] = Data;
State = RxFlags;
CRC ^= Data;
ProtocolData->mRxData[ProtocolData->BufPtr++] = Data;
ProtocolData->State = RxFlags;
ProtocolData->CRC ^= Data;
break;
}
case RxFlags:
{
Flags = Data;
mRxData[BufPtr++] = Data;
State = RxCMD;
CRC ^= Data;
ProtocolData->Flags = Data;
ProtocolData->mRxData[ProtocolData->BufPtr++] = Data;
ProtocolData->State = RxCMD;
ProtocolData->CRC ^= Data;
break;
}
case RxCMD:
{
Command = Data;
mRxData[BufPtr++] = Data;
State = RxSize1;
CRC ^= Data;
ProtocolData->Command = Data;
ProtocolData->mRxData[ProtocolData->BufPtr++] = Data;
ProtocolData->State = RxSize1;
ProtocolData->CRC ^= Data;
break;
}
case RxSize1: //Data size MSB
{
DataSize = 0;
DataSize = (unsigned int)Data;
DataSize <<= 8;
mRxData[BufPtr++] = Data;
ProtocolData->DataSize = 0;
ProtocolData->DataSize = (unsigned int)Data;
ProtocolData->DataSize <<= 8;
ProtocolData->mRxData[ProtocolData->BufPtr++] = Data;
State = RxSize2;
CRC ^= Data;
ProtocolData->State = RxSize2;
ProtocolData->CRC ^= Data;
break;
}
case RxSize2: //Data size
{
DataSize |= (unsigned int)Data;
DataSize <<= 8;
mRxData[BufPtr++] = Data;
ProtocolData->DataSize |= (unsigned int)Data;
ProtocolData->DataSize <<= 8;
ProtocolData->mRxData[ProtocolData->BufPtr++] = Data;
State = RxSize3;
CRC ^= Data;
ProtocolData->State = RxSize3;
ProtocolData->CRC ^= Data;
break;
}
case RxSize3: //Data size
{
DataSize |= (unsigned int)Data;
DataSize <<= 8;
mRxData[BufPtr++] = Data;
ProtocolData->DataSize |= (unsigned int)Data;
ProtocolData->DataSize <<= 8;
ProtocolData->mRxData[ProtocolData->BufPtr++] = Data;
State = RxSize4;
CRC ^= Data;
ProtocolData->State = RxSize4;
ProtocolData->CRC ^= Data;
break;
}
case RxSize4: //Data size LSB
{
DataSize |= (unsigned int)Data;
mRxData[BufPtr++] = Data;
ProtocolData->DataSize |= (unsigned int)Data;
ProtocolData->mRxData[ProtocolData->BufPtr++] = Data;
if(DataSize > MAX_MESSAGE_SIZE)
ResetStateMachine();
if(ProtocolData->DataSize > MAX_MESSAGE_SIZE)
ResetStateMachine(ProtocolData);
if(DataSize == 0)
State = RxCRC;
if(ProtocolData->DataSize == 0)
ProtocolData->State = RxCRC;
else
State = RxData;
ProtocolData->State = RxData;
CRC ^= Data;
ProtocolData->CRC ^= Data;
break;
}
case RxData:
{
CRC ^= Data;
ProtocolData->CRC ^= Data;
mRxData[BufPtr++] = Data;
DataCtr++;
ProtocolData->mRxData[ProtocolData->BufPtr++] = Data;
ProtocolData->DataCtr++;
if(DataCtr == DataSize)
if(ProtocolData->DataCtr == ProtocolData->DataSize)
{
State = RxCRC;
ProtocolData->State = RxCRC;
}
break;
}
case RxCRC:
{
if(Data != CRC)
if(Data != ProtocolData->CRC)
{
ResetStateMachine();
ResetStateMachine(ProtocolData);
// ProtocolAcknowledge(0,Command,0);
break;
}
// NewMasterMessageReceived(mRxData);
ExecuteMasterCommand(Command,ProtocolMsgDataPtr(),DataSize);
ResetStateMachine();
if(ProtocolData == &mLoraProtocolData)
{
ExecuteLoraMasterCommand(ProtocolData->Command,ProtocolMsgDataPtr(ProtocolData),ProtocolData->DataSize);
}
else if(ProtocolData == &mLTEProtocolData)
{
ExecuteLTEMasterCommand(ProtocolData->SenderID, ProtocolData->Command,ProtocolMsgDataPtr(ProtocolData),ProtocolData->DataSize);
}
ResetStateMachine(ProtocolData);
break;
}
default:
{
ResetStateMachine();
ResetStateMachine(ProtocolData);
break;
}
}
}
void ProtocolAnalyzeNewData(unsigned char Data)
void ProtocolAnalyzeNewData(unsigned char Data, int User)
{
ProtocolData_t *DataStruct;
switch(User)
{
case NETWORK_PROTOCOL_USER_LORA:
{
DataStruct = &mLoraProtocolData;
break;
}
case NETWORK_PROTOCOL_USER_LTE:
{
DataStruct = &mLTEProtocolData;
break;
}
default:
return;
break;
}
// mRxData[RxPtr] = Data;
// printf("%X",Data);
StateMachine(Data);
StateMachine(Data, DataStruct);
}
void ResetStateMachine(void)
void ResetStateMachine(ProtocolData_t *ProtocolData)
{
DataSize = 0;
BufPtr = 0;
RxPtr = 0;
Command = 0;
CRC = 0;
State = RxHeader;
DataCtr = 0;
Flags = 0;
SenderAddress = 0;
ProtocolData->DataSize = 0;
ProtocolData->BufPtr = 0;
ProtocolData->RxPtr = 0;
ProtocolData->Command = 0;
ProtocolData->CRC = 0;
ProtocolData->State = RxHeader;
ProtocolData->DataCtr = 0;
ProtocolData->Flags = 0;
ProtocolData->SenderAddress = 0;
}
void ProtocolExecCmd(void)
{
switch(Command)
{
case RX_GET_STATUS:
{
unsigned char StatusByte =0;
// memcpy(&StatusByte, &IRRemoteStatus, sizeof(IRRemoteStatus));
// ProtocolSendCmd(TX_DEADBOLT_STATUS,&StatusByte,sizeof(StatusByte),1,0);
break;
}
}
// switch(Command)
// {
// case RX_GET_STATUS:
// {
// unsigned char StatusByte =0;
//// memcpy(&StatusByte, &IRRemoteStatus, sizeof(IRRemoteStatus));
//// ProtocolSendCmd(TX_DEADBOLT_STATUS,&StatusByte,sizeof(StatusByte),1,0);
//
// break;
// }
// }
}
void ProtocolAcknowledge(unsigned char Answer,unsigned char Cmd, unsigned char Data)
@ -281,10 +315,10 @@ unsigned char ProtocolCalcCrc(unsigned char* Buffer,unsigned char size)
unsigned char ProtocolIsReceiving(void)
{
if(State == RxHeader)
return 0; // Idle...
else
return 1; //receiving from serial port
// if(State == RxHeader)
// return 0; // Idle...
// else
// return 1; //receiving from serial port
}
@ -295,30 +329,32 @@ unsigned char* ProtocolGetFrame(unsigned char DestDevice,unsigned char DestAddre
if(Size > MAX_MESSAGE_SIZE)
{
*FrameSize = 0;
return &mTxData[FRAME_HEADER_INDEX];
return &mFrameData[FRAME_HEADER_INDEX];
}
mTxData[FRAME_HEADER_INDEX] = FRAME_HEADER; //header
mTxData[FRAME_SENDER_ADDRESS_INDEX] = MY_DEVICE_ADDRESS; //My Address
mTxData[FRAME_SENDER_DEVICE_ID_INDEX] = SenderDevice; //My ID
mTxData[FRAME_DEST_DEVICE_ID_INDEX] = DestDevice; //Destination ID
mTxData[FRAME_DEST_ADDRESS_INDEX] = DestAddress ;//Address; //Destination Address
mTxData[FRAME_FLAGS_INDEX] = Flags; //Flags
mTxData[FRAME_COMMAND_INDEX] = Cmd; //Command to send
mTxData[FRAME_SIZE1_INDEX] = (unsigned char)((Size >> 24) & 0xFF);
mTxData[FRAME_SIZE2_INDEX] = (unsigned char)((Size >> 16) & 0xFF);
mTxData[FRAME_SIZE3_INDEX] = (unsigned char)((Size >> 8) & 0xFF);
mTxData[FRAME_SIZE4_INDEX] = (unsigned char)(Size & 0xFF);
memcpy((void*)&mTxData[FRAME_DATA_INDEX],(void*)Data,Size); //Cmd data
mTxData[Size+FRAME_DATA_INDEX] = ProtocolCalcCrc(mTxData,Size + FRAME_DATA_INDEX); // CRC
mFrameData[FRAME_HEADER_INDEX] = FRAME_HEADER; //header
mFrameData[FRAME_SENDER_ADDRESS_INDEX] = MY_DEVICE_ADDRESS; //My Address
mFrameData[FRAME_SENDER_DEVICE_ID_INDEX] = SenderDevice; //My ID
mFrameData[FRAME_DEST_DEVICE_ID_INDEX] = DestDevice; //Destination ID
mFrameData[FRAME_DEST_ADDRESS_INDEX] = DestAddress ;//Address; //Destination Address
mFrameData[FRAME_FLAGS_INDEX] = Flags; //Flags
mFrameData[FRAME_COMMAND_INDEX] = Cmd; //Command to send
mFrameData[FRAME_SIZE1_INDEX] = (unsigned char)((Size >> 24) & 0xFF);
mFrameData[FRAME_SIZE2_INDEX] = (unsigned char)((Size >> 16) & 0xFF);
mFrameData[FRAME_SIZE3_INDEX] = (unsigned char)((Size >> 8) & 0xFF);
mFrameData[FRAME_SIZE4_INDEX] = (unsigned char)(Size & 0xFF);
memcpy((void*)&mFrameData[FRAME_DATA_INDEX],(void*)Data,Size); //Cmd data
mFrameData[Size+FRAME_DATA_INDEX] = ProtocolCalcCrc(mFrameData,Size + FRAME_DATA_INDEX); // CRC
*FrameSize = Size + FRAME_INDEX_NBR;
return &mTxData[FRAME_HEADER_INDEX];
return &mFrameData[FRAME_HEADER_INDEX];
}
unsigned char *ProtocolMsgDataPtr()
unsigned char *ProtocolMsgDataPtr(ProtocolData_t *ProtocolData)
{
return &mRxData[FRAME_DATA_INDEX];
return &ProtocolData->mRxData[FRAME_DATA_INDEX];
}

View File

@ -17,12 +17,19 @@ jean-francois.martel@polymtl.ca
#define BOOTLOADERINTERFACE_H
//Protocol buffer specific definitions
#include "ProtocolDefs.h"
#define MASTER_ADDRESS 0x01
#define MY_DEVICE_ADDRESS 0x01
#define ADDRESS 0x01
enum eProtocolUser
{
NETWORK_PROTOCOL_USER_LORA,
NETWORK_PROTOCOL_USER_LTE
};
//State Machine states
enum States
{
@ -63,15 +70,33 @@ enum States
//State machine states definition
void ProtocolInit(void);
void StateMachine(unsigned char STATE);
void ProtocolAnalyzeNewData(unsigned char RxByte);
void ResetStateMachine(void);
typedef struct stProtocolData
{
unsigned char mRxData[MAX_MESSAGE_SIZE+10];
unsigned char mTxData[MAX_MESSAGE_SIZE+10];
unsigned int DataSize;
unsigned int DataCtr;
unsigned int BufPtr;
unsigned char RxPtr;
unsigned char Command;
unsigned char State;
unsigned char CRC;
unsigned char SenderID;
unsigned char SenderAddress;
unsigned char Flags;
unsigned char IsUpdating;
unsigned char *BmpDataPtr;
}ProtocolData_t;
void ProtocolInit(int User);
void StateMachine(unsigned char STATE, ProtocolData_t *ProtocolData);
void ProtocolAnalyzeNewData(unsigned char RxByte, int User);
void ResetStateMachine(ProtocolData_t *ProtocolData);
void ProtocolExecCmd(void);
void ProtocolAcknowledge(unsigned char Answer,unsigned char Cmd, unsigned char Data);
unsigned char* ProtocolGetFrame(unsigned char DestDevice,unsigned char DestAddress, unsigned char SenderDevice, unsigned char Cmd, unsigned char *Data,unsigned int Size,unsigned char Flags, int *FrameSize);
unsigned char ProtocolCalcCrc(unsigned char* Buffer,unsigned char size);
unsigned char ProtocolIsReceiving(void);
unsigned char *ProtocolMsgDataPtr();
unsigned char *ProtocolMsgDataPtr(ProtocolData_t *ProtocolData);
#endif

View File

@ -6,11 +6,12 @@
#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\",6463\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";
@ -85,6 +86,7 @@ void LTEModuleSM(int SMEvent)
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;
}
@ -96,11 +98,10 @@ void LTEModuleSM(int SMEvent)
}
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;
// }
if(IsTimerExpired(LTE_COMM_TIMER) == true)
{
LTEModuleReset();
}
}
break;
}
@ -278,6 +279,7 @@ int LTEEnableSerialDebug(bool EnModule, bool EnPic)
void SendDataToLteModule(char *Data, int Size)
{
if(mPICSerialDebugEnabled)
{
char *ptr = Data;
@ -410,12 +412,12 @@ void LTEModuleAPNConnectionStatus(int Status)
if(Status == LTE_MODULE_APN_CONNECTED)
{
mAPNConnected = true;
// SyslogNewString("APN connected\n");
// SyslogNewString("APN connected\n");
}
else
{
mAPNConnected = false;
// SyslogNewString("APN disconnected\n");
// SyslogNewString("APN disconnected\n");
}
}
void LTEModuleMasterConnectionStatus(int Status)
@ -423,18 +425,18 @@ void LTEModuleMasterConnectionStatus(int Status)
if(Status == LTE_MODULE_MASTER_CONNECTED)
{
mMasterConnected = true;
// SyslogNewString("Master connected\n");
// SyslogNewString("Master connected\n");
}
else if(Status == LTE_MODULE_MASTER_SOCKET_ERROR)
{
mMasterConnected = false;
mMasterSocketError = true;
// SyslogNewString("Master socket error\n");
// SyslogNewString("Master socket error\n");
}
else
{
mMasterConnected = false;
// SyslogNewString("Master disconnected\n");
// SyslogNewString("Master disconnected\n");
}
}
@ -461,14 +463,17 @@ void LTEModuleOperationSM(int OperationEvent)
LTESendCommandToModule(LTE_MODULE_CHECK_APN_CONNECTION_CMD);
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_CHECK_APN_STATE;
}
if(OperationEvent == LTE_MODULE_OP_APN_CONN_FAILED_EVENT)
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)
{
//TODO: manage timeouts
if(IsTimerExpired(LTE_COMM_TIMER) == true)
{
LTEModuleReset();
}
}
break;
@ -490,18 +495,18 @@ void LTEModuleOperationSM(int OperationEvent)
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_STANDBY_STATE;
}
}
if(OperationEvent == LTE_MODULE_OP_APN_DISCONNECTED_EVENT)
else if(OperationEvent == LTE_MODULE_OP_APN_DISCONNECTED_EVENT)
{
//TODO: What do we do??
//Send the request to connect to Mastercontroller
// mCurrentCmd = LTE_MODULE_CONNECT_TO_MASTER_CMD;
// SendDataToLteModule(mConnectToMasterCmd,strlen(mConnectToMasterCmd));
// mLTEModuleOperationSMState = LTE_MODULE_OPERATION_WAIT_CONNECT_SERVER_STATE;
//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)
{
//TODO: manage timeouts
if(IsTimerExpired(LTE_COMM_TIMER) == true)
{
LTEModuleReset();
}
}
break;
}
@ -513,22 +518,26 @@ void LTEModuleOperationSM(int OperationEvent)
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_STANDBY_STATE;
TimerStart(LTE_MODULE_TIMER,LTE_MODULE_CONNECTION_CHECK_TIMEOUT);
}
if(OperationEvent == LTE_MODULE_OP_SERVER_DISCONNECTED_EVENT)
else if(OperationEvent == LTE_MODULE_OP_SERVER_DISCONNECTED_EVENT)
{
//TODO: What do we do?
mCurrentCmd = LTE_MODULE_NO_CMD;
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_STANDBY_STATE;
TimerStart(LTE_MODULE_TIMER,LTE_MODULE_CONNECTION_CHECK_TIMEOUT);
}
if(OperationEvent == LTE_MODULE_OP_SERVER_CONN_FAILED_EVENT)
else if(OperationEvent == LTE_MODULE_OP_SERVER_CONN_FAILED_EVENT)
{
mCurrentCmd = LTE_MODULE_NO_CMD;
//TODO: What do we do?
}
else if(OperationEvent == LTE_MODULE_OP_TICK_EVENT)
{
//TODO: manage timeouts
if(IsTimerExpired(LTE_COMM_TIMER) == true)
{
LTEModuleReset();
}
}
break;
}
@ -540,12 +549,23 @@ void LTEModuleOperationSM(int OperationEvent)
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:
@ -557,7 +577,6 @@ void LTEModuleOperationSM(int OperationEvent)
char tmp[] = "Ca marche\n\r";
mNbMasterReconnectCount = 0;
TimerStart(LTE_MODULE_TIMER,LTE_MODULE_CONNECTION_CHECK_TIMEOUT);
LTESendDataToMaster(tmp,strlen(tmp));
}
else
{
@ -568,7 +587,7 @@ void LTEModuleOperationSM(int OperationEvent)
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");
// SyslogNewString("Master reconnection attempt\n");
}
else //We tried 10 times, check the APN
{
@ -576,7 +595,7 @@ void LTEModuleOperationSM(int OperationEvent)
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");
// SyslogNewString("Master reconnection attempt count reached.. checking APN\n");
}
}
}
@ -586,14 +605,14 @@ void LTEModuleOperationSM(int OperationEvent)
{
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;
// }
// 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:
@ -638,15 +657,18 @@ void LTEModuleOperationSM(int OperationEvent)
}
case LTE_MODULE_OPERATION_WAIT_FOR_DATA_STATE:
{
if(OperationEvent == LTE_MODULE_OP_TICK_EVENT)
{
//TODO: manage timeouts
}
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;
}
@ -654,9 +676,12 @@ void LTEModuleOperationSM(int OperationEvent)
{
if(OperationEvent == LTE_MODULE_OP_TICK_EVENT)
{
//TODO: manage timeouts
if(IsTimerExpired(LTE_COMM_TIMER) == true)
{
LTEModuleReset();
}
}
if(OperationEvent == LTE_MODULE_OP_MASTER_DATA_SENT_EVENT)
else if(OperationEvent == LTE_MODULE_OP_MASTER_DATA_SENT_EVENT)
{
mCurrentCmd = LTE_MODULE_NO_CMD;
mLTEModuleOperationSMState = LTE_MODULE_OPERATION_STANDBY_STATE;
@ -674,7 +699,11 @@ void LTEModuleNewDataReady()
void LTEModuleDataReceived(char *Data, int Size)
{
LTEModuleOperationSM(LTE_MODULE_OP_MASTER_DATA_RECEIVED_EVENT);
//Execute command..
int i;
for(i = 0; i < Size; i++)
{
ProtocolAnalyzeNewData(Data[i], NETWORK_PROTOCOL_USER_LTE);
}
}
int LTESendCommandToModule(int Cmd)
@ -682,6 +711,7 @@ 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;
@ -733,6 +763,7 @@ int LTESendCommandToModule(int Cmd)
case LTE_MODULE_NO_CMD:
default:
{
TimerStop(LTE_COMM_TIMER);
mCurrentCmd = LTE_MODULE_NO_CMD;
return RET_ERROR;
break;
@ -748,13 +779,14 @@ void LTEModuleMasterCtrlCommStatus(bool Offline)
{
mMasterConnected = false;
}
// else
// mMasterConnected = true;
// 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;
@ -774,5 +806,11 @@ int LTESendDataToMaster(char *Buffer, int Size)
int LTESendMasterBufferToModule()
{
SendDataToLteModule(mMasterTxBuffer,mMasterTxSize);
LTE_MODULE_TX_LED_PIN = LED_OFF;
return RET_OK;
}
bool LTEModuleIsMasterConnected()
{
return mMasterConnected;
}

View File

@ -15,6 +15,7 @@
#define LTE_MODULE_CONNECTION_CHECK_TIMEOUT 5000
#define LTE_MODULE_MAX_CMD_LENGTH 128
#define LTE_MODULE_MAX_MASTER_CONNECT_RETRY 5
#define LTE_MODULE_MAX_COMM_TIMEOUT 10000
enum eLTEModuleCommands
{
@ -146,5 +147,7 @@ void LTEModuleNewDataReady();
void LTEModuleDataReceived(char *Data, int Size);
void LTEModuleMasterCtrlCommStatus(bool Offline);
bool LTEModuleIsMasterConnected();
#endif /* SIM7080GINTERFACE_H */

View File

@ -43,6 +43,7 @@
#include "LoraWatchdog.h"
#include "LCDCtrl.h"
#include "SIM7080GInterface.h"
#include "LTENetworkInterface.h"
#include "BootloaderInterface.h"
@ -60,6 +61,7 @@
void _mon_putc(char c); //override from stdio to redirect stdout on uart 3B
#elif defined USE_SYSLOG
#include "Syslog.h"
#include "LoraNetworkInterface.h"
void _mon_putc(char c); //override from stdio to redirect stdout on uart 3B
#endif
@ -102,13 +104,16 @@ int main(void)
InitUart();
ProtocolInit();
LoraNetworkInterfaceInit();
InitLoraWatchdog();
InitSPIFlash();
InitLCDCtrl();
InitLTEModule();
LTENetworkInterfaceInit();
#ifdef USE_SYSLOG
@ -207,9 +212,10 @@ int main(void)
SyslogTick();
TickTempSensor();
BootloaderInterfaceTick();
// TickLoraWatchdog();
TickLoraWatchdog();
TickLCDCtrl();
TickLTEModule();
TickLTENetworkInterface();
if(IsTimerExpired(HEARTBEAT_LED_TMR))
{

View File

@ -52,6 +52,8 @@ typedef enum
LORA_WATCHDOG_TIMER,
LCD_CTRL_TIMER,
LTE_MODULE_TIMER,
LTE_COMM_TIMER,
LTE_NWI_TIMER,
TIMER_MAX_ID
}eTimerID;

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
#
#Mon Dec 30 11:51:17 EST 2024
#Mon Dec 30 20:57:03 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=2r0w-c3lh-oj
host.id=1ig4-46sv-sm
conf.ids=default,ChaletDuino_775F512H_,ChaletDuinoV2_795F512H_
default.languagetoolchain.version=1.33
ChaletDuinoV2_795F512H_.languagetoolchain.version=1.33

View File

@ -1,6 +1,37 @@
<?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="9">
<editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="11">
<file>
<url>Source/hd44780.c</url>
<bookmark id="7">
<name/>
<line>340</line>
<key/>
</bookmark>
</file>
<file>
<url>Source/SIM7080GInterface.c</url>
<bookmark id="11">
<name/>
<line>119</line>
<key/>
</bookmark>
<bookmark id="10">
<name/>
<line>201</line>
<key/>
</bookmark>
<bookmark id="8">
<name/>
<line>443</line>
<key/>
</bookmark>
<bookmark id="9">
<name/>
<line>560</line>
<key/>
</bookmark>
</file>
<file>
<url>Source/BootloaderInterface.c</url>
<bookmark id="5">
@ -14,32 +45,8 @@
<key/>
</bookmark>
</file>
<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>426</line>
<key/>
</bookmark>
<bookmark id="9">
<name/>
<line>527</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/SIM7080GInterface.h</file>
</group>
<group/>
</open-files>
</project-private>