LoraInterface dev
This commit is contained in:
parent
c51e755208
commit
2bcca0fc0f
@ -3,6 +3,8 @@
|
||||
#include "E220Module.h"
|
||||
#include "BoardCfg.h"
|
||||
#include "timer.h"
|
||||
#include "Uart.h"
|
||||
#include "ProtocolDefs.h"
|
||||
|
||||
|
||||
int InitLoraModule()
|
||||
@ -23,4 +25,97 @@ int SetLoraModuleConfigMode()
|
||||
LORA_MODULE_M0_PIN = 0;
|
||||
LORA_MODULE_M1_PIN = 0;
|
||||
return RET_OK;
|
||||
}
|
||||
}
|
||||
|
||||
int ReadLoraModuleConfig()
|
||||
{
|
||||
char Cmd[3]={0xC1,0x00,E220_CONFIG_SIZE};
|
||||
SetLoraModuleConfigMode();
|
||||
Sleep(100);
|
||||
SendInternalUartDataBlocking(Cmd,3,LORA_MODULE_UART_PORT);
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
int ReadLoraModuleRSSI()
|
||||
{
|
||||
char Cmd[6]={0xC0,0xC1,0xC2,0xC3,0x00,0x02};
|
||||
Sleep(100);
|
||||
SendInternalUartDataBlocking(Cmd,6,LORA_MODULE_UART_PORT);
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
int AnalyzeLoraModuleConfigData(char *Data, int size)
|
||||
{
|
||||
char header = Data[0];
|
||||
if(header != (char)0xC1)
|
||||
{
|
||||
return RET_ERROR;
|
||||
}
|
||||
unsigned char StartAddress = Data[1];
|
||||
unsigned char DataLength = Data[2];
|
||||
|
||||
if(DataLength != E220_CONFIG_SIZE)
|
||||
{
|
||||
//This function must be use to analyze all registers.
|
||||
return RET_ERROR;
|
||||
}
|
||||
|
||||
mModuleInternalAddress = Data[3];
|
||||
mModuleInternalAddress <<= 8;
|
||||
mModuleInternalAddress |= Data[4];
|
||||
|
||||
unsigned char Byte2 = Data[5];
|
||||
mModuleAirRate = Byte2 & E220_AIR_RATE_MASK;
|
||||
Byte2 >>= 3;
|
||||
|
||||
mModuleUARTParity = Byte2 & E220_UART_PARITY_MASK;
|
||||
Byte2 >>= 2;
|
||||
|
||||
mModuleUARTRate = Byte2 & E220_UART_RATE_MASK;
|
||||
|
||||
|
||||
unsigned char Byte3 = Data[6];
|
||||
mModuleTxPower = Byte3 & E220_TX_POWER_MASK;
|
||||
Byte3 >>= 5; //Bit 4,3,2 are reserved
|
||||
|
||||
mModuleRSSIEnabled = Byte3 & 0x01;
|
||||
Byte3 >>= 1;
|
||||
|
||||
mModuleSubPacket = Byte3 & E220_PACKET_SIZE_MASK;
|
||||
|
||||
|
||||
mModuleInternalChannel = Data[7];
|
||||
|
||||
unsigned char Byte5 = Data[8];
|
||||
mModuleWORCycle = Byte5 & E220_WOR_CYCLE_MASK;
|
||||
Byte5 >>= 4; //Bit 3 is reserved
|
||||
|
||||
mModuleLBTEnabled = Byte5 & 0x01;
|
||||
Byte5 >>= 2; //Bit 5 is reserved
|
||||
|
||||
mModuleTxMethod = Byte5 & 0x01;
|
||||
Byte5 >>= 1;
|
||||
|
||||
mModuleRSSIByteEnabled = Byte5 & 0x01;
|
||||
|
||||
|
||||
return RET_OK;
|
||||
|
||||
}
|
||||
|
||||
int AnalyzeLoraModuleRSSI(char *Data, int size)
|
||||
{
|
||||
char header = Data[0];
|
||||
if(header != (char)0xC1)
|
||||
{
|
||||
return RET_ERROR;
|
||||
}
|
||||
char StartAddress = Data[1];
|
||||
char Size = Data[2];
|
||||
|
||||
mModuleAmbientRSSI = Data[3];
|
||||
if(Size == (char)2)
|
||||
{
|
||||
mModuleLastRxRSSI = Data[4];
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,11 +9,101 @@
|
||||
#define E220_MODULE_H
|
||||
#include "define.h"
|
||||
|
||||
#define E220_CONFIG_SIZE 6 //Nb of bytes composing the configuration of the module
|
||||
|
||||
#define E220_UART_RATE_MASK 0x07
|
||||
enum eE220UartRates
|
||||
{
|
||||
E220_UART_1200 = 0,
|
||||
E220_UART_2400,
|
||||
E220_UART_4800,
|
||||
E220_UART_9600,
|
||||
E220_UART_19200,
|
||||
E220_UART_38400,
|
||||
E220_UART_57600,
|
||||
E220_UART_115200
|
||||
|
||||
};
|
||||
|
||||
#define E220_UART_PARITY_MASK 0x03
|
||||
enum eE220ParityBit
|
||||
{
|
||||
E220_UART_8N1=0,
|
||||
E220_UART_8O1,
|
||||
E220_UART_8E1,
|
||||
E220_UART_8N1_bis
|
||||
};
|
||||
|
||||
#define E220_AIR_RATE_MASK 0x07
|
||||
enum e220AirDataRates
|
||||
{
|
||||
E220_AIR_RATE_24K = 0,
|
||||
E220_AIR_RATE_24K_1,
|
||||
E220_AIR_RATE_24K_2,
|
||||
E220_AIR_RATE_48K,
|
||||
E220_AIR_RATE_96K,
|
||||
E220_AIR_RATE_192K,
|
||||
E220_AIR_RATE_384K,
|
||||
E220_AIR_RATE_625K
|
||||
};
|
||||
|
||||
#define E220_PACKET_SIZE_MASK 0x03
|
||||
enum e220PacketSizes
|
||||
{
|
||||
E220_PACKET_200,
|
||||
E220_PACKET_128,
|
||||
E220_PACKET_64,
|
||||
E220_PACKET_32
|
||||
};
|
||||
|
||||
#define E220_TX_POWER_MASK 0x03
|
||||
enum e220TransmitPower
|
||||
{
|
||||
E220_TX_PWR_30,
|
||||
E220_TX_PWR_27,
|
||||
E220_TX_PWR_24,
|
||||
E220_TX_PWR_21
|
||||
};
|
||||
|
||||
#define E220_WOR_CYCLE_MASK 0x07
|
||||
enum e220WORCycles
|
||||
{
|
||||
E220_WOR_500MS,
|
||||
E220_WOR_1000MS,
|
||||
E220_WOR_1500MS,
|
||||
E220_WOR_2000MS,
|
||||
E220_WOR_2500MS,
|
||||
E220_WOR_3000MS,
|
||||
E220_WOR_3500MS,
|
||||
E220_WOR_4000MS
|
||||
};
|
||||
|
||||
int InitLoraModule();
|
||||
|
||||
int SetLoraModuleTxMode();
|
||||
int SetLoraModuleConfigMode();
|
||||
int ReadLoraModuleConfig();
|
||||
int AnalyzeLoraModuleConfigData(char *Data, int size);
|
||||
int ReadLoraModuleRSSI();
|
||||
int AnalyzeLoraModuleRSSI(char *Data, int size);
|
||||
|
||||
|
||||
|
||||
unsigned short mModuleInternalAddress;
|
||||
unsigned char mModuleUARTParity;
|
||||
unsigned char mModuleUARTRate;
|
||||
unsigned char mModuleAirRate;
|
||||
unsigned char mModuleSubPacket;
|
||||
unsigned char mModuleRSSIEnabled;
|
||||
unsigned char mModuleTxPower;
|
||||
unsigned char mModuleInternalChannel;
|
||||
unsigned char mModuleRSSIByteEnabled;
|
||||
unsigned char mModuleTxMethod;
|
||||
unsigned char mModuleLBTEnabled;
|
||||
unsigned char mModuleWORCycle;
|
||||
|
||||
unsigned char mModuleAmbientRSSI;
|
||||
unsigned char mModuleLastRxRSSI;
|
||||
|
||||
#endif /* E220_MODULE_H */
|
||||
|
||||
|
||||
@ -8,15 +8,20 @@
|
||||
#include "Uart.h"
|
||||
|
||||
|
||||
|
||||
short mModuleModel;
|
||||
|
||||
|
||||
int InitLoraInterface()
|
||||
{
|
||||
mModuleModel = LORA_MODULE_MODEL;
|
||||
mModuleModel = LORA_MODULE_MODEL;
|
||||
InitLoraModule();
|
||||
SetLoraModuleTxMode();
|
||||
|
||||
return RET_OK;
|
||||
LoraResetRxStateMachine();
|
||||
|
||||
LoraInterfaceRequestModuleConfig();
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
int LoraInterfaceRxData(char Data)
|
||||
@ -25,6 +30,7 @@ int LoraInterfaceRxData(char Data)
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
//Analyze data coming from lora module COM port
|
||||
int LoraRxStateMachine(char Data, int Event)
|
||||
{
|
||||
switch(mLoraRxSMState)
|
||||
@ -47,7 +53,7 @@ int LoraRxStateMachine(char Data, int Event)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case LORA_RX_SM_RECEIVING_STATE:
|
||||
case LORA_RX_SM_RECEIVING_STATE: //Receiving wireless data from remote device
|
||||
{
|
||||
switch(Event)
|
||||
{
|
||||
@ -68,6 +74,46 @@ int LoraRxStateMachine(char Data, int Event)
|
||||
{
|
||||
SendNetworkCommand(LORA_IF_NEW_FRAME_RESPONSE,mLoraModuleBuffer,mBufferIndex);
|
||||
LoraResetRxStateMachine();
|
||||
LoraInterfaceRequestModuleRSSI();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case LORA_RX_SM_CONFIG_STATE: //we are waiting for answer from module command
|
||||
{
|
||||
switch(Event)
|
||||
{
|
||||
case LORA_RX_SM_NEW_DATA_EVENT:
|
||||
{
|
||||
mLoraModuleBuffer[mBufferIndex++] = Data;
|
||||
TimerStart(LORA_MODULE_COMM_TIMER,LORA_RX_INTERBYTE_TIMEOUT);
|
||||
if(mBufferIndex >= MAX_LORA_BUFFER_SIZE)
|
||||
{
|
||||
//TODO: Manage the exception with the MasterCtrl.
|
||||
LoraResetRxStateMachine();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case LORA_RX_SM_TICK_EVENT:
|
||||
{
|
||||
if(IsTimerExpired(LORA_MODULE_COMM_TIMER))
|
||||
{
|
||||
switch(mLastConfigCommand)
|
||||
{
|
||||
case LORA_CONFIG_READ_CONFIG_CMD:
|
||||
{
|
||||
SetLoraModuleTxMode();
|
||||
AnalyzeLoraModuleConfigData(mLoraModuleBuffer,mBufferIndex);
|
||||
break;
|
||||
}
|
||||
case LORA_CONFIG_READ_RSSI_CMD:
|
||||
{
|
||||
AnalyzeLoraModuleRSSI(mLoraModuleBuffer,mBufferIndex);
|
||||
}
|
||||
}
|
||||
LoraResetRxStateMachine();
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -90,10 +136,11 @@ int LoraInterfaceTransmitLoRaData(char *Payload, unsigned int PayloadSize)
|
||||
{
|
||||
//TODO: Manage this...
|
||||
|
||||
// return LORA_IF_RET_BUSY_CHANNEL;
|
||||
return LORA_IF_RET_BUSY_CHANNEL;
|
||||
}
|
||||
|
||||
SendInternalUartDataBlocking(Payload,PayloadSize,LORA_MODULE_UART_PORT);
|
||||
TimerStart(LORA_MODULE_COMM_TIMER,LORA_RX_INTERBYTE_TIMEOUT);
|
||||
|
||||
return LORA_IF_RET_OK;
|
||||
}
|
||||
@ -101,4 +148,28 @@ int LoraInterfaceTransmitLoRaData(char *Payload, unsigned int PayloadSize)
|
||||
void LoraInterfaceTick()
|
||||
{
|
||||
LoraRxStateMachine(0,LORA_RX_SM_TICK_EVENT);
|
||||
}
|
||||
|
||||
void LoraInterfaceRequestModuleConfig()
|
||||
{
|
||||
mLoraRxSMState = LORA_RX_SM_CONFIG_STATE;
|
||||
ReadLoraModuleConfig();
|
||||
mLastConfigCommand = LORA_CONFIG_READ_CONFIG_CMD;
|
||||
TimerStart(LORA_MODULE_COMM_TIMER,LORA_RX_INTERBYTE_TIMEOUT);
|
||||
}
|
||||
void LoraInterfaceRequestModuleRSSI()
|
||||
{
|
||||
mLoraRxSMState = LORA_RX_SM_CONFIG_STATE;
|
||||
ReadLoraModuleRSSI();
|
||||
mLastConfigCommand = LORA_CONFIG_READ_RSSI_CMD;
|
||||
TimerStart(LORA_MODULE_COMM_TIMER,LORA_RX_INTERBYTE_TIMEOUT);
|
||||
}
|
||||
|
||||
int LoraInterfaceIsBusy()
|
||||
{
|
||||
if(mLoraRxSMState != LORA_RX_SM_STANBY_STATE)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -8,6 +8,7 @@
|
||||
#ifndef LORA_INTERFACE_H
|
||||
#define LORA_INTERFACE_H
|
||||
#include "define.h"
|
||||
#include "E220Module.h"
|
||||
|
||||
#define MAX_LORA_BUFFER_SIZE 2048
|
||||
#define LORA_RX_INTERBYTE_TIMEOUT 200 //ms
|
||||
@ -16,6 +17,7 @@
|
||||
int mLoraRxSMState;
|
||||
char mLoraModuleBuffer[MAX_LORA_BUFFER_SIZE];
|
||||
int mBufferIndex;
|
||||
int mLastConfigCommand;
|
||||
|
||||
enum eLoraModuleModel
|
||||
{
|
||||
@ -26,10 +28,11 @@ enum eLoraModuleModel
|
||||
|
||||
};
|
||||
|
||||
enum eLoraRxSMStates
|
||||
enum eLoraNetworkRxSMStates
|
||||
{
|
||||
LORA_RX_SM_STANBY_STATE,
|
||||
LORA_RX_SM_RECEIVING_STATE,
|
||||
LORA_RX_SM_CONFIG_STATE,
|
||||
|
||||
LORA_RX_SM_MAX_STATE
|
||||
};
|
||||
@ -52,6 +55,14 @@ enum eLoraInterfaceStatusCodes
|
||||
|
||||
};
|
||||
|
||||
enum eLoraConfigCmds
|
||||
{
|
||||
LORA_CONFIG_READ_CONFIG_CMD,
|
||||
LORA_CONFIG_READ_RSSI_CMD,
|
||||
|
||||
LORA_CONFIG_MAX_CMD
|
||||
};
|
||||
|
||||
#define LORA_MODULE_MODEL LORA_MODULE_E220_MODEL
|
||||
|
||||
int InitLoraInterface();
|
||||
@ -60,6 +71,9 @@ int LoraRxStateMachine(char Data, int Event);
|
||||
void LoraResetRxStateMachine();
|
||||
int LoraInterfaceTransmitLoRaData(char *Payload, unsigned int PayloadSize);
|
||||
void LoraInterfaceTick();
|
||||
void LoraInterfaceRequestModuleConfig();
|
||||
void LoraInterfaceRequestModuleRSSI();
|
||||
int LoraInterfaceIsBusy();
|
||||
|
||||
|
||||
#endif /* LORA_MODULE_H */
|
||||
|
||||
@ -27,16 +27,38 @@ unsigned int mTotalMasterNbRequests = 0;
|
||||
|
||||
void ExecuteMasterCommand(int Command, unsigned char *Data, int DataSize)
|
||||
{
|
||||
//Whatever was the command, we are online...
|
||||
if(LoraInterfaceIsBusy() == 1)
|
||||
return;
|
||||
|
||||
mTotalMasterNbRequests++;
|
||||
switch(Command)
|
||||
{
|
||||
case LORA_IF_GET_STATUS_REQUEST:
|
||||
{
|
||||
char ModuleModel = LORA_MODULE_MODEL;
|
||||
|
||||
SendNetworkCommand(LORA_IF_GET_STATUS_RESPONSE,&ModuleModel,1);
|
||||
char Payload[20];
|
||||
|
||||
char temp;
|
||||
|
||||
Payload[0] = LORA_MODULE_MODEL;
|
||||
temp = (char)(mModuleInternalAddress & 0xFF);
|
||||
Payload[2] = temp;
|
||||
temp = (char)((mModuleInternalAddress >> 8) & 0xFF);
|
||||
Payload[1] = temp;
|
||||
Payload[3] = mModuleUARTParity;
|
||||
Payload[4] = mModuleUARTRate;
|
||||
Payload[5] = mModuleAirRate;
|
||||
Payload[6] = mModuleSubPacket;
|
||||
Payload[7] = mModuleRSSIEnabled;
|
||||
Payload[8] = mModuleTxPower;
|
||||
Payload[9] = mModuleInternalChannel;
|
||||
Payload[10] = mModuleRSSIByteEnabled;
|
||||
Payload[11] = mModuleTxMethod;
|
||||
Payload[12] = mModuleLBTEnabled;
|
||||
Payload[13] = mModuleWORCycle;
|
||||
Payload[14] = mModuleAmbientRSSI;
|
||||
Payload[15] = mModuleLastRxRSSI;
|
||||
|
||||
SendNetworkCommand(LORA_IF_GET_STATUS_RESPONSE,Payload,16);
|
||||
break;
|
||||
}
|
||||
case LORA_IF_SEND_FRAME_REQUEST:
|
||||
@ -84,7 +106,7 @@ void SendNetworkCommand(int Command, unsigned char *Data, unsigned int DataSize)
|
||||
{
|
||||
unsigned char *Payload;
|
||||
unsigned int PayloadSize;
|
||||
Payload = ProtocolGetFrame(ID_MASTER,MASTER_ADDRESS,ID_LORA_INTERFACE,Command,Data,DataSize,0,&PayloadSize);
|
||||
Payload = ProtocolGetFrame(ID_MASTER,MASTER_ADDRESS,ID_LORA_INTERFACE_DEVICE,Command,Data,DataSize,0,&PayloadSize);
|
||||
|
||||
UartTransmitData(NETWORK_UART_PORT,Payload,PayloadSize);
|
||||
|
||||
@ -95,7 +117,7 @@ void SendNetworkCommandBlocking(int Command, unsigned char *Data, unsigned int D
|
||||
unsigned char *Payload;
|
||||
unsigned int PayloadSize;
|
||||
//unsigned char DestDevice,unsigned char DestAddress, unsigned char SenderDevice, unsigned char Cmd, unsigned char *Data,unsigned int Size,unsigned char Flags, int *FrameSize)
|
||||
Payload = ProtocolGetFrame(ID_MASTER,MASTER_ADDRESS,ID_LORA_INTERFACE,Command,Data,DataSize,0,&PayloadSize);
|
||||
Payload = ProtocolGetFrame(ID_MASTER,MASTER_ADDRESS,ID_LORA_INTERFACE_DEVICE,Command,Data,DataSize,0,&PayloadSize);
|
||||
|
||||
SendInternalUartDataBlocking(Payload,PayloadSize,NETWORK_UART_PORT);
|
||||
}
|
||||
|
||||
@ -36,7 +36,7 @@ unsigned char Flags = 0;
|
||||
unsigned char IsUpdating = 0;
|
||||
unsigned char *BmpDataPtr = 0;
|
||||
|
||||
static char MyDeviceID = ID_LORA_INTERFACE;
|
||||
static char MyDeviceID = ID_LORA_INTERFACE_DEVICE;
|
||||
|
||||
void ProtocolInit(void)
|
||||
{
|
||||
|
||||
@ -67,10 +67,11 @@ enum DEVICES_IDS
|
||||
ID_AVRECEIVER_INTERFACE,
|
||||
ID_CHALET_INTERFACE,
|
||||
ID_CHALET_DEVICE,
|
||||
ID_BOOTLOADER_VIRTUAL,
|
||||
ID_LORA_INTERFACE,
|
||||
ID_ISPINDEL_INTERFACE,
|
||||
ID_LORA_INTERFACE_DEVICE,
|
||||
ID_LORA_INTERFACE_INTERFACE,
|
||||
ID_NB_DEVICE_ID
|
||||
|
||||
|
||||
};
|
||||
|
||||
// Commands definitions
|
||||
@ -375,4 +376,14 @@ enum LORA_INTERFACE_CMDS
|
||||
MAX_LORA_IF_CMD
|
||||
};
|
||||
|
||||
enum LORA_MODULE_IF_INTERFACE_CMDS
|
||||
{
|
||||
LORA_MODULE_IF_INTERFACE_ACK = 1,
|
||||
LORA_MODULE_IF_INTERFACE_GENERAL_STATUS_REQUEST,
|
||||
LORA_MODULE_IF_INTERFACE_GENERAL_STATUS_RESPONSE,
|
||||
|
||||
|
||||
MAX_LORA_MODULE_IF_INTERFACE_CMD
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
#
|
||||
#Tue Mar 21 14:58:27 EDT 2023
|
||||
#Tue Mar 21 16:04:54 EDT 2023
|
||||
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\\LoraInterface\\LoraInterface.X
|
||||
|
||||
BIN
~$$Comm Patterns.~vsd
Normal file
BIN
~$$Comm Patterns.~vsd
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user