1
0
mirror of https://github.com/ShaYmez/xlxd.git synced 2026-07-27 20:34:31 -04:00

xlxd 2.0.0

Added compatibility with protocols DMR Homebrew (MMDVM)  and DMR Plus
(dongle)
This commit is contained in:
LX3JL
2017-08-22 20:23:57 +02:00
parent 41465e236d
commit 83278d1363
65 changed files with 6366 additions and 175 deletions
+72 -9
View File
@@ -25,6 +25,7 @@
#include "main.h"
#include <string.h>
#include <cctype>
#include "cdmriddir.h"
#include "ccallsign.h"
////////////////////////////////////////////////////////////////////////////////////////
@@ -36,19 +37,39 @@ CCallsign::CCallsign()
::memset(m_Callsign, ' ', sizeof(m_Callsign));
::memset(m_Suffix, ' ', sizeof(m_Suffix));
m_Module = ' ';
m_uiDmrid = 0;
}
CCallsign::CCallsign(const char *sz)
CCallsign::CCallsign(const char *sz, uint32 dmrid)
{
// blank all
::memset(m_Callsign, ' ', sizeof(m_Callsign));
::memset(m_Suffix, ' ', sizeof(m_Suffix));
m_Module = ' ';
// and copy
::memcpy(m_Callsign, sz, MIN(strlen(sz), sizeof(m_Callsign)-1));
if ( strlen(sz) >= sizeof(m_Callsign) )
m_uiDmrid = dmrid;
// and populate
if ( ::strlen(sz) > 0 )
{
m_Module = sz[sizeof(m_Callsign)-1];
// callsign valid
::memcpy(m_Callsign, sz, MIN(strlen(sz), sizeof(m_Callsign)-1));
if ( strlen(sz) >= sizeof(m_Callsign) )
{
m_Module = sz[sizeof(m_Callsign)-1];
}
// dmrid ok ?
if ( m_uiDmrid == 0 )
{
m_uiDmrid = g_DmridDir.FindDmrid(*this);
}
}
else if ( m_uiDmrid != 0 )
{
const CCallsign *callsign = g_DmridDir.FindCallsign(m_uiDmrid);
if ( callsign != NULL )
{
::memcpy(m_Callsign, callsign->m_Callsign, sizeof(m_Callsign));
}
}
}
@@ -57,9 +78,9 @@ CCallsign::CCallsign(const CCallsign &callsign)
::memcpy(m_Callsign, callsign.m_Callsign, sizeof(m_Callsign));
::memcpy(m_Suffix, callsign.m_Suffix, sizeof(m_Suffix));
m_Module = callsign.m_Module;
m_uiDmrid = callsign.m_uiDmrid;
}
////////////////////////////////////////////////////////////////////////////////////////
// status
@@ -97,6 +118,9 @@ bool CCallsign::IsValid(void) const
// is an letter or space
valid &= IsLetter(m_Module) || IsSpace(m_Module);
// dmrid is not tested, as it can be NULL
// if station does is not dmr registered
// done
return valid;
}
@@ -114,8 +138,9 @@ bool CCallsign::HasSuffix(void) const
////////////////////////////////////////////////////////////////////////////////////////
// set
void CCallsign::SetCallsign(const char *sz)
void CCallsign::SetCallsign(const char *sz, bool UpdateDmrid)
{
// set callsign
::memset(m_Callsign, ' ', sizeof(m_Callsign));
m_Module = ' ';
::memcpy(m_Callsign, sz, MIN(strlen(sz), sizeof(m_Callsign)-1));
@@ -123,10 +148,16 @@ void CCallsign::SetCallsign(const char *sz)
{
m_Module = sz[sizeof(m_Callsign)-1];
}
// and update dmrid
if ( UpdateDmrid )
{
m_uiDmrid = g_DmridDir.FindDmrid(*this);
}
}
void CCallsign::SetCallsign(const uint8 *buffer, int len)
void CCallsign::SetCallsign(const uint8 *buffer, int len, bool UpdateDmrid)
{
// set callsign
::memset(m_Callsign, ' ', sizeof(m_Callsign));
m_Module = ' ';
::memcpy(m_Callsign, buffer, MIN(len, sizeof(m_Callsign)-1));
@@ -141,6 +172,31 @@ void CCallsign::SetCallsign(const uint8 *buffer, int len)
{
m_Module = (char)buffer[sizeof(m_Callsign)-1];
}
if ( UpdateDmrid )
{
m_uiDmrid = g_DmridDir.FindDmrid(*this);
}
}
void CCallsign::SetDmrid(uint32 dmrid, bool UpdateCallsign)
{
m_uiDmrid = dmrid;
if ( UpdateCallsign )
{
const CCallsign *callsign = g_DmridDir.FindCallsign(dmrid);
if ( callsign != NULL )
{
::memcpy(m_Callsign, callsign->m_Callsign, sizeof(m_Callsign));
}
}
}
void CCallsign::SetDmrid(const uint8 *buffer, bool UpdateCallsign)
{
char sz[9];
::memcpy(sz, buffer, 8);
sz[8] = 0;
SetDmrid((uint32)::strtol(sz, NULL, 16), UpdateCallsign);
}
void CCallsign::SetModule(char c)
@@ -224,11 +280,17 @@ bool CCallsign::HasSameCallsignWithWildcard(const CCallsign &callsign) const
return same;
}
bool CCallsign::HasLowerCallsign(const CCallsign &Callsign) const
{
return (::memcmp(m_Callsign, Callsign.m_Callsign, sizeof(m_Callsign)) < 0);
}
bool CCallsign::HasSameModule(const CCallsign &Callsign) const
{
return (m_Module == Callsign.m_Module);
}
////////////////////////////////////////////////////////////////////////////////////////
// operators
@@ -236,7 +298,8 @@ bool CCallsign::operator ==(const CCallsign &callsign) const
{
return ((::memcmp(callsign.m_Callsign, m_Callsign, sizeof(m_Callsign)) == 0) &&
(m_Module == callsign.m_Module) &&
(::memcmp(callsign.m_Suffix, m_Suffix, sizeof(m_Suffix)) == 0));
(::memcmp(callsign.m_Suffix, m_Suffix, sizeof(m_Suffix)) == 0) &&
(m_uiDmrid == callsign.m_uiDmrid) );
}
CCallsign::operator const char *() const