Pass through new GPS and TA data.

This commit is contained in:
Jonathan Naylor
2017-05-17 18:58:46 +01:00
parent 5eff056ed0
commit 90f5e17be9
8 changed files with 115 additions and 6 deletions

View File

@@ -42,7 +42,11 @@ m_buffer(NULL),
m_rxData(1000U, "MMDVM Network"),
m_options(),
m_configData(NULL),
m_configLen(0U)
m_configLen(0U),
m_positionData(NULL),
m_positionLen(0U),
m_talkerAliasData(NULL),
m_talkerAliasLen(0U)
{
assert(!rptAddress.empty());
assert(rptPort > 0U);
@@ -52,6 +56,9 @@ m_configLen(0U)
m_buffer = new unsigned char[BUFFER_LENGTH];
m_netId = new unsigned char[4U];
m_positionData = new unsigned char[50U];
m_talkerAliasData = new unsigned char[50U];
CStopWatch stopWatch;
::srand(stopWatch.start());
}
@@ -61,6 +68,8 @@ CMMDVMNetwork::~CMMDVMNetwork()
delete[] m_netId;
delete[] m_buffer;
delete[] m_configData;
delete[] m_positionData;
delete[] m_talkerAliasData;
}
std::string CMMDVMNetwork::getOptions() const
@@ -209,6 +218,32 @@ bool CMMDVMNetwork::write(const CDMRData& data)
return true;
}
bool CMMDVMNetwork::readPosition(unsigned char* data, unsigned int& length)
{
if (m_positionLen == 0U)
return false;
::memcpy(data, m_positionData, m_positionLen);
length = m_positionLen;
m_positionLen = 0U;
return true;
}
bool CMMDVMNetwork::readTalkerAlias(unsigned char* data, unsigned int& length)
{
if (m_talkerAliasLen == 0U)
return false;
::memcpy(data, m_talkerAliasData, m_talkerAliasLen);
length = m_talkerAliasLen;
m_talkerAliasLen = 0U;
return true;
}
void CMMDVMNetwork::close()
{
LogMessage("DMR, Closing MMDVM Network");
@@ -239,6 +274,12 @@ void CMMDVMNetwork::clock(unsigned int ms)
unsigned char len = length;
m_rxData.addData(&len, 1U);
m_rxData.addData(m_buffer, len);
} else if (::memcmp(m_buffer, "DMRG", 4U) == 0) {
::memcpy(m_positionData, m_buffer, length);
m_positionLen = length;
} else if (::memcmp(m_buffer, "DMRA", 4U) == 0) {
::memcpy(m_talkerAliasData, m_buffer, length);
m_talkerAliasLen = length;
} else if (::memcmp(m_buffer, "RPTL", 4U) == 0) {
m_id = (m_buffer[4U] << 24) | (m_buffer[5U] << 16) | (m_buffer[6U] << 8) | (m_buffer[7U] << 0);
::memcpy(m_netId, m_buffer + 4U, 4U);