version 2.5.3

Add compatibility with DR-2X firmware up to 1.4.4
This commit is contained in:
LX3JL 2023-01-15 17:14:55 +01:00
parent 6752c7b254
commit 9ca67d1e23
3 changed files with 14 additions and 8 deletions

View file

@ -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;

View file

@ -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 **);

View file

@ -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 ------------------------------------------------------