114 lines
3.2 KiB
C++
114 lines
3.2 KiB
C++
#include "LoraNetworkCommIF.h"
|
|
#include "GlobalDefine.h"
|
|
|
|
CLoraNetworkCommIF::CLoraNetworkCommIF()
|
|
{
|
|
connect(&mLoraDeviceSerialPort,SIGNAL(readyRead()),this,SLOT(LoraDeviceNewDataReady()));
|
|
|
|
mLoraMagicResponse.clear();
|
|
mLoraMagicResponse.append(0xDE);
|
|
mLoraMagicResponse.append(0xAD);
|
|
mLoraMagicResponse.append(0xBE);
|
|
mLoraMagicResponse.append(0xEF);
|
|
}
|
|
|
|
QByteArray CLoraNetworkCommIF::GetLoraFrame(unsigned short DestAddress, unsigned char DestChannel, QByteArray Payload)
|
|
{
|
|
QByteArray OutputFrame;
|
|
OutputFrame.clear();
|
|
|
|
//E32 modules frame is [Address_MSB][Address_LSB][Channel][Payload]
|
|
|
|
|
|
|
|
char AddressByte = (char)((DestAddress >> 8) & 0x00FF);
|
|
OutputFrame.append(AddressByte);
|
|
AddressByte = (char)(DestAddress & 0x00FF);
|
|
OutputFrame.append(AddressByte);
|
|
OutputFrame.append(DestChannel);
|
|
OutputFrame.append(Payload);
|
|
|
|
return OutputFrame;
|
|
}
|
|
|
|
int CLoraNetworkCommIF::SetLoraSerialPortSettings(QString PortName, qint32 BaudRate)
|
|
{
|
|
mLoraSerialPortName = PortName;
|
|
mLoraSerialPortBaudRate = BaudRate;
|
|
|
|
if(mLoraDeviceSerialPort.isOpen())
|
|
{
|
|
mLoraDeviceSerialPort.close();
|
|
}
|
|
|
|
mLoraDeviceSerialPort.setPortName(mLoraSerialPortName);
|
|
if(mLoraDeviceSerialPort.setBaudRate(BaudRate) == false)
|
|
{
|
|
qDebug("Invalid Lora Device serial port baud rate...");
|
|
}
|
|
|
|
//The other serial port parameters (parity, stop bits, data bits) are all set to mentally sane default values so no need to set them.
|
|
if(mLoraDeviceSerialPort.open(QIODevice::ReadWrite) == false)
|
|
{
|
|
qDebug("Could not open Lora device port");
|
|
return RET_ERROR;
|
|
}
|
|
|
|
qDebug("Lora serial port opened");
|
|
return RET_OK;
|
|
|
|
}
|
|
|
|
int CLoraNetworkCommIF::SendLoraFrame(unsigned short DestAddress, unsigned char DestChannel, QByteArray Payload)
|
|
{
|
|
mLoraDeviceSerialPort.write(GetLoraFrame(DestAddress,DestChannel,Payload));
|
|
mLoraDeviceSerialPort.waitForBytesWritten(500);
|
|
return RET_OK;
|
|
|
|
}
|
|
|
|
|
|
void CLoraNetworkCommIF::LoraDeviceNewDataReady()
|
|
{
|
|
QByteArray NewData = mLoraDeviceSerialPort.readAll();
|
|
|
|
// QString Printf = "New Lora Data: ";
|
|
|
|
AnalyzeRxBuffer(NewData);
|
|
|
|
// for(int i = 0; i < NewData.size(); i++)
|
|
// {
|
|
|
|
|
|
// int snatch = NewData.at(i) & 0xFF;
|
|
|
|
//// mRxLoraTestMsgBuf <<= 8;
|
|
//// mRxLoraTestMsgBuf |= snatch;
|
|
//// if(mRxLoraTestMsgBuf == (qint32)LORA_MAGIC_WORD)
|
|
//// {
|
|
//// SendLoraFrame(6,4,mLoraMagicResponse);
|
|
//// qDebug("Magic word received, sending magic response!");
|
|
//// }
|
|
|
|
// QString bleh;
|
|
// bleh = QString().asprintf("0x%X - ",snatch);
|
|
// Printf.append(bleh);
|
|
// }
|
|
// qDebug("%s",qPrintable(Printf));
|
|
|
|
}
|
|
|
|
int CLoraNetworkCommIF::NewFrameReceived(int DeviceID, int DeviceAddress, int MessageID, int DataSize, QByteArray Data)
|
|
{
|
|
mDevicePtr->NewDeviceFrameReceived(DeviceID,DeviceAddress,MessageID,DataSize,Data);
|
|
return RET_OK;
|
|
}
|
|
|
|
int CLoraNetworkCommIF::SendNetworkMessage(int DeviceID, int DeviceAddress, int MessageID, int DataSize, QByteArray *Data)
|
|
{
|
|
QByteArray Packet = GetTxPacket(MessageID,0,Data->data(),DataSize,DeviceAddress,DeviceID);
|
|
SendLoraFrame(6,4,Packet);
|
|
// SendLoraFrame(4,4,Packet);
|
|
return RET_OK;
|
|
}
|