Insert the correct bytes for data transmissions in the Icom protocol.
This commit is contained in:
parent
992b0f27ab
commit
02096f2c67
|
@ -245,7 +245,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne
|
||||||
|
|
||||||
scrambler(data + 2U);
|
scrambler(data + 2U);
|
||||||
|
|
||||||
writeNetwork(netData, true);
|
writeNetwork(netData, data[0U] == TAG_EOT ? NNMT_VOICE_TRAILER : NNMT_VOICE_HEADER);
|
||||||
|
|
||||||
#if defined(DUMP_NXDN)
|
#if defined(DUMP_NXDN)
|
||||||
writeFile(data + 2U);
|
writeFile(data + 2U);
|
||||||
|
@ -424,7 +424,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne
|
||||||
|
|
||||||
scrambler(start + 2U);
|
scrambler(start + 2U);
|
||||||
|
|
||||||
writeNetwork(netData, true);
|
writeNetwork(netData, NNMT_VOICE_HEADER);
|
||||||
|
|
||||||
#if defined(DUMP_NXDN)
|
#if defined(DUMP_NXDN)
|
||||||
writeFile(start + 2U);
|
writeFile(start + 2U);
|
||||||
|
@ -529,7 +529,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne
|
||||||
|
|
||||||
scrambler(data + 2U);
|
scrambler(data + 2U);
|
||||||
|
|
||||||
writeNetwork(netData, false);
|
writeNetwork(netData, NNMT_VOICE_BODY);
|
||||||
|
|
||||||
#if defined(DUMP_NXDN)
|
#if defined(DUMP_NXDN)
|
||||||
writeFile(data + 2U);
|
writeFile(data + 2U);
|
||||||
|
@ -618,8 +618,10 @@ bool CNXDNControl::processData(unsigned char option, unsigned char *data)
|
||||||
|
|
||||||
udch.getRaw(netData + 1U);
|
udch.getRaw(netData + 1U);
|
||||||
|
|
||||||
|
unsigned char type = NXDN_MESSAGE_TYPE_DCALL_DATA;
|
||||||
|
|
||||||
if (validUDCH) {
|
if (validUDCH) {
|
||||||
unsigned char type = layer3.getMessageType();
|
type = layer3.getMessageType();
|
||||||
data[0U] = type == NXDN_MESSAGE_TYPE_TX_REL ? TAG_EOT : TAG_DATA;
|
data[0U] = type == NXDN_MESSAGE_TYPE_TX_REL ? TAG_EOT : TAG_DATA;
|
||||||
|
|
||||||
udch.setRAN(m_ran);
|
udch.setRAN(m_ran);
|
||||||
|
@ -631,7 +633,17 @@ bool CNXDNControl::processData(unsigned char option, unsigned char *data)
|
||||||
|
|
||||||
scrambler(data + 2U);
|
scrambler(data + 2U);
|
||||||
|
|
||||||
writeNetwork(netData, true);
|
switch (type) {
|
||||||
|
case NXDN_MESSAGE_TYPE_DCALL_HDR:
|
||||||
|
writeNetwork(netData, NNMT_DATA_HEADER);
|
||||||
|
break;
|
||||||
|
case NXDN_MESSAGE_TYPE_TX_REL:
|
||||||
|
writeNetwork(netData, NNMT_DATA_TRAILER);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
writeNetwork(netData, NNMT_DATA_BODY);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_duplex)
|
if (m_duplex)
|
||||||
writeQueueRF(data);
|
writeQueueRF(data);
|
||||||
|
@ -1005,7 +1017,7 @@ void CNXDNControl::writeQueueNet(const unsigned char *data)
|
||||||
m_queue.addData(data, len);
|
m_queue.addData(data, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNXDNControl::writeNetwork(const unsigned char *data, bool single)
|
void CNXDNControl::writeNetwork(const unsigned char *data, NXDN_NETWORK_MESSAGE_TYPE type)
|
||||||
{
|
{
|
||||||
assert(data != NULL);
|
assert(data != NULL);
|
||||||
|
|
||||||
|
@ -1015,7 +1027,7 @@ void CNXDNControl::writeNetwork(const unsigned char *data, bool single)
|
||||||
if (m_rfTimeoutTimer.isRunning() && m_rfTimeoutTimer.hasExpired())
|
if (m_rfTimeoutTimer.isRunning() && m_rfTimeoutTimer.hasExpired())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_network->write(data, single);
|
m_network->write(data, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNXDNControl::scrambler(unsigned char* data) const
|
void CNXDNControl::scrambler(unsigned char* data) const
|
||||||
|
|
|
@ -84,7 +84,7 @@ private:
|
||||||
|
|
||||||
void writeQueueRF(const unsigned char* data);
|
void writeQueueRF(const unsigned char* data);
|
||||||
void writeQueueNet(const unsigned char* data);
|
void writeQueueNet(const unsigned char* data);
|
||||||
void writeNetwork(const unsigned char* data, bool single);
|
void writeNetwork(const unsigned char* data, NXDN_NETWORK_MESSAGE_TYPE type);
|
||||||
void writeNetwork();
|
void writeNetwork();
|
||||||
|
|
||||||
void scrambler(unsigned char* data) const;
|
void scrambler(unsigned char* data) const;
|
||||||
|
|
|
@ -56,7 +56,7 @@ bool CNXDNNetwork::open()
|
||||||
return m_socket.open();
|
return m_socket.open();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CNXDNNetwork::write(const unsigned char* data, bool single)
|
bool CNXDNNetwork::write(const unsigned char* data, NXDN_NETWORK_MESSAGE_TYPE type)
|
||||||
{
|
{
|
||||||
assert(data != NULL);
|
assert(data != NULL);
|
||||||
|
|
||||||
|
@ -72,9 +72,28 @@ bool CNXDNNetwork::write(const unsigned char* data, bool single)
|
||||||
buffer[6U] = 0x08U;
|
buffer[6U] = 0x08U;
|
||||||
buffer[7U] = 0xE0U;
|
buffer[7U] = 0xE0U;
|
||||||
|
|
||||||
buffer[37U] = 0x23U;
|
switch (type) {
|
||||||
buffer[38U] = single ? 0x1CU : 0x10U;
|
case NNMT_VOICE_HEADER:
|
||||||
buffer[39U] = 0x21U;
|
case NNMT_VOICE_TRAILER:
|
||||||
|
buffer[37U] = 0x23U;
|
||||||
|
buffer[38U] = 0x1CU;
|
||||||
|
buffer[39U] = 0x21U;
|
||||||
|
break;
|
||||||
|
case NNMT_VOICE_BODY:
|
||||||
|
buffer[37U] = 0x23U;
|
||||||
|
buffer[38U] = 0x10U;
|
||||||
|
buffer[39U] = 0x21U;
|
||||||
|
break;
|
||||||
|
case NNMT_DATA_HEADER:
|
||||||
|
case NNMT_DATA_BODY:
|
||||||
|
case NNMT_DATA_TRAILER:
|
||||||
|
buffer[37U] = 0x23U;
|
||||||
|
buffer[38U] = 0x02U;
|
||||||
|
buffer[39U] = 0x18U;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
::memcpy(buffer + 40U, data, 33U);
|
::memcpy(buffer + 40U, data, 33U);
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,15 @@
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
enum NXDN_NETWORK_MESSAGE_TYPE {
|
||||||
|
NNMT_VOICE_HEADER,
|
||||||
|
NNMT_VOICE_BODY,
|
||||||
|
NNMT_VOICE_TRAILER,
|
||||||
|
NNMT_DATA_HEADER,
|
||||||
|
NNMT_DATA_BODY,
|
||||||
|
NNMT_DATA_TRAILER
|
||||||
|
};
|
||||||
|
|
||||||
class CNXDNNetwork {
|
class CNXDNNetwork {
|
||||||
public:
|
public:
|
||||||
CNXDNNetwork(const std::string& localAddress, unsigned int localPort, const std::string& gatewayAddress, unsigned int gatewayPort, bool debug);
|
CNXDNNetwork(const std::string& localAddress, unsigned int localPort, const std::string& gatewayAddress, unsigned int gatewayPort, bool debug);
|
||||||
|
@ -36,7 +45,7 @@ public:
|
||||||
|
|
||||||
void enable(bool enabled);
|
void enable(bool enabled);
|
||||||
|
|
||||||
bool write(const unsigned char* data, bool single);
|
bool write(const unsigned char* data, NXDN_NETWORK_MESSAGE_TYPE type);
|
||||||
|
|
||||||
bool read(unsigned char* data);
|
bool read(unsigned char* data);
|
||||||
|
|
||||||
|
|
|
@ -187,8 +187,6 @@ void CNXDNUDCH::getRaw(unsigned char* data) const
|
||||||
|
|
||||||
::memset(data, 0x00U, 25U);
|
::memset(data, 0x00U, 25U);
|
||||||
::memcpy(data, m_data, 23U);
|
::memcpy(data, m_data, 23U);
|
||||||
|
|
||||||
CNXDNCRC::encodeCRC15(data, 184U);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CNXDNUDCH::setRAN(unsigned char ran)
|
void CNXDNUDCH::setRAN(unsigned char ran)
|
||||||
|
|
Loading…
Reference in a new issue