mirror of
https://github.com/LX3JL/xlxd.git
synced 2025-12-05 23:32:00 +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;
|
||||
CDvHeaderPacket *Header;
|
||||
CDvFramePacket *Frames[5];
|
||||
uint32 Version;
|
||||
|
||||
// handle incoming packets
|
||||
if ( m_Socket.Receive(&Buffer, &Ip, 20) != -1 )
|
||||
|
|
@ -130,7 +131,7 @@ void CImrsProtocol::Task(void)
|
|||
EncodePingPacket(&Buffer);
|
||||
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;
|
||||
|
||||
|
|
@ -143,8 +144,12 @@ void CImrsProtocol::Task(void)
|
|||
// client already connected ?
|
||||
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
|
||||
CImrsClient *newclient = new CImrsClient(Callsign, Ip);
|
||||
// connect to default module
|
||||
|
|
@ -164,7 +169,7 @@ void CImrsProtocol::Task(void)
|
|||
else
|
||||
{
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
|
|
@ -382,9 +387,9 @@ bool CImrsProtocol::IsValidPingPacket(const CBuffer &Buffer)
|
|||
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;
|
||||
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->SetModule(IMRS_MODULE_ID);
|
||||
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;
|
||||
}
|
||||
return valid;
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ protected:
|
|||
|
||||
// DV packet decoding helpers
|
||||
bool IsValidPingPacket(const CBuffer &);
|
||||
bool IsValidConnectPacket(const CBuffer &, CCallsign *);
|
||||
bool IsValidConnectPacket(const CBuffer &, CCallsign *, uint32 *);
|
||||
bool IsValidDvHeaderPacket(const CIp &, const CBuffer &, CDvHeaderPacket **);
|
||||
bool IsValidDvLastFramePacket(const CIp &, const CBuffer &, CDvFramePacket **);
|
||||
bool IsValidDvFramePacket(const CIp &, const CBuffer &, CDvFramePacket **);
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@
|
|||
|
||||
#define VERSION_MAJOR 2
|
||||
#define VERSION_MINOR 5
|
||||
#define VERSION_REVISION 2
|
||||
#define VERSION_REVISION 3
|
||||
|
||||
// global ------------------------------------------------------
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue