mirror of
https://github.com/LX3JL/xlxd.git
synced 2025-12-06 07:42:01 +01:00
version 2.5.3
Add compatibility with DR-2X firmware up to 1.4.4
This commit is contained in:
parent
6752c7b254
commit
9ca67d1e23
|
|
@ -76,6 +76,7 @@ void CImrsProtocol::Task(void)
|
||||||
//CYSFFICH Fich;
|
//CYSFFICH Fich;
|
||||||
CDvHeaderPacket *Header;
|
CDvHeaderPacket *Header;
|
||||||
CDvFramePacket *Frames[5];
|
CDvFramePacket *Frames[5];
|
||||||
|
uint32 Version;
|
||||||
|
|
||||||
// handle incoming packets
|
// handle incoming packets
|
||||||
if ( m_Socket.Receive(&Buffer, &Ip, 20) != -1 )
|
if ( m_Socket.Receive(&Buffer, &Ip, 20) != -1 )
|
||||||
|
|
@ -130,7 +131,7 @@ void CImrsProtocol::Task(void)
|
||||||
EncodePingPacket(&Buffer);
|
EncodePingPacket(&Buffer);
|
||||||
m_Socket.Send(Buffer, Ip, IMRS_PORT);
|
m_Socket.Send(Buffer, Ip, IMRS_PORT);
|
||||||
}
|
}
|
||||||
else if ( IsValidConnectPacket(Buffer, &Callsign) )
|
else if ( IsValidConnectPacket(Buffer, &Callsign, &Version) )
|
||||||
{
|
{
|
||||||
//std::cout << "IMRS keepalive/connect packet from " << Callsign << " at " << Ip << std::endl;
|
//std::cout << "IMRS keepalive/connect packet from " << Callsign << " at " << Ip << std::endl;
|
||||||
|
|
||||||
|
|
@ -143,7 +144,11 @@ void CImrsProtocol::Task(void)
|
||||||
// client already connected ?
|
// client already connected ?
|
||||||
if ( client == NULL )
|
if ( client == NULL )
|
||||||
{
|
{
|
||||||
std::cout << "IMRS connect packet from " << Callsign << " at " << Ip << std::endl;
|
std::cout << "IMRS connect packet from " << Callsign << " at " << Ip << " fw version "
|
||||||
|
<< (int)HIBYTE(HIWORD(Version)) << "."
|
||||||
|
<< (int)LOBYTE(HIWORD(Version)) << "."
|
||||||
|
<< (int)HIBYTE(LOWORD(Version)) << "."
|
||||||
|
<< (int)LOBYTE(LOWORD(Version)) << std::endl;
|
||||||
|
|
||||||
// create the client
|
// create the client
|
||||||
CImrsClient *newclient = new CImrsClient(Callsign, Ip);
|
CImrsClient *newclient = new CImrsClient(Callsign, Ip);
|
||||||
|
|
@ -164,7 +169,7 @@ void CImrsProtocol::Task(void)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// invalid packet
|
// invalid packet
|
||||||
//std::cout << "IMRS packet (" << Buffer.size() << ") from " << Callsign << " at " << Ip << std::endl;
|
std::cout << "IMRS packet (" << Buffer.size() << ") from " << Callsign << " at " << Ip << std::endl;
|
||||||
//Buffer.DebugDump(g_Reflector.m_DebugFile);
|
//Buffer.DebugDump(g_Reflector.m_DebugFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -382,9 +387,9 @@ bool CImrsProtocol::IsValidPingPacket(const CBuffer &Buffer)
|
||||||
return ( (Buffer.size() == 16) && (Buffer.Compare(tag, sizeof(tag)) == 0) );
|
return ( (Buffer.size() == 16) && (Buffer.Compare(tag, sizeof(tag)) == 0) );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CImrsProtocol::IsValidConnectPacket(const CBuffer &Buffer, CCallsign *Callsign)
|
bool CImrsProtocol::IsValidConnectPacket(const CBuffer &Buffer, CCallsign *Callsign, uint32 *FirmwareVersion)
|
||||||
{
|
{
|
||||||
uint8 tag[] = { 0x00,0x2C,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x00,0x00 };
|
uint8 tag[] = { 0x00,0x2C,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
|
||||||
|
|
||||||
bool valid = false;
|
bool valid = false;
|
||||||
if ( (Buffer.size() == 60) && (Buffer.Compare(tag, sizeof(tag)) == 0) )
|
if ( (Buffer.size() == 60) && (Buffer.Compare(tag, sizeof(tag)) == 0) )
|
||||||
|
|
@ -392,6 +397,7 @@ bool CImrsProtocol::IsValidConnectPacket(const CBuffer &Buffer, CCallsign *Calls
|
||||||
Callsign->SetCallsign(Buffer.data()+26, 8);
|
Callsign->SetCallsign(Buffer.data()+26, 8);
|
||||||
Callsign->SetModule(IMRS_MODULE_ID);
|
Callsign->SetModule(IMRS_MODULE_ID);
|
||||||
valid = (Callsign->IsValid());
|
valid = (Callsign->IsValid());
|
||||||
|
*FirmwareVersion = MAKEDWORD(MAKEWORD(Buffer.at(16), Buffer.at(17)), MAKEWORD(Buffer.at(18), Buffer.at(19)));
|
||||||
//std::cout << "DG-IDs " << (int)Buffer.at(58) << "," << (int)Buffer.at(59) << std::endl;
|
//std::cout << "DG-IDs " << (int)Buffer.at(58) << "," << (int)Buffer.at(59) << std::endl;
|
||||||
}
|
}
|
||||||
return valid;
|
return valid;
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@ protected:
|
||||||
|
|
||||||
// DV packet decoding helpers
|
// DV packet decoding helpers
|
||||||
bool IsValidPingPacket(const CBuffer &);
|
bool IsValidPingPacket(const CBuffer &);
|
||||||
bool IsValidConnectPacket(const CBuffer &, CCallsign *);
|
bool IsValidConnectPacket(const CBuffer &, CCallsign *, uint32 *);
|
||||||
bool IsValidDvHeaderPacket(const CIp &, const CBuffer &, CDvHeaderPacket **);
|
bool IsValidDvHeaderPacket(const CIp &, const CBuffer &, CDvHeaderPacket **);
|
||||||
bool IsValidDvLastFramePacket(const CIp &, const CBuffer &, CDvFramePacket **);
|
bool IsValidDvLastFramePacket(const CIp &, const CBuffer &, CDvFramePacket **);
|
||||||
bool IsValidDvFramePacket(const CIp &, const CBuffer &, CDvFramePacket **);
|
bool IsValidDvFramePacket(const CIp &, const CBuffer &, CDvFramePacket **);
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@
|
||||||
|
|
||||||
#define VERSION_MAJOR 2
|
#define VERSION_MAJOR 2
|
||||||
#define VERSION_MINOR 5
|
#define VERSION_MINOR 5
|
||||||
#define VERSION_REVISION 2
|
#define VERSION_REVISION 3
|
||||||
|
|
||||||
// global ------------------------------------------------------
|
// global ------------------------------------------------------
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue