|
|
|
@ -508,17 +508,17 @@ bool Voice::process(uint8_t* data, uint32_t len)
|
|
|
|
uint8_t buffer[P25_HDU_FRAME_LENGTH_BYTES + 2U];
|
|
|
|
uint8_t buffer[P25_HDU_FRAME_LENGTH_BYTES + 2U];
|
|
|
|
::memset(buffer, 0x00U, P25_HDU_FRAME_LENGTH_BYTES + 2U);
|
|
|
|
::memset(buffer, 0x00U, P25_HDU_FRAME_LENGTH_BYTES + 2U);
|
|
|
|
|
|
|
|
|
|
|
|
// Generate Sync
|
|
|
|
// generate Sync
|
|
|
|
Sync::addP25Sync(buffer + 2U);
|
|
|
|
Sync::addP25Sync(buffer + 2U);
|
|
|
|
|
|
|
|
|
|
|
|
// Generate NID
|
|
|
|
// generate NID
|
|
|
|
m_p25->m_nid.encode(buffer + 2U, DUID::HDU);
|
|
|
|
m_p25->m_nid.encode(buffer + 2U, DUID::HDU);
|
|
|
|
|
|
|
|
|
|
|
|
// Generate HDU
|
|
|
|
// generate HDU
|
|
|
|
m_rfLC.encodeHDU(buffer + 2U);
|
|
|
|
m_rfLC.encodeHDU(buffer + 2U);
|
|
|
|
|
|
|
|
|
|
|
|
// Add busy bits
|
|
|
|
// add status bits
|
|
|
|
P25Utils::addStatusBits(buffer + 2U, P25_HDU_FRAME_LENGTH_BITS, m_inbound);
|
|
|
|
P25Utils::addStatusBits(buffer + 2U, P25_HDU_FRAME_LENGTH_BITS, m_inbound, false);
|
|
|
|
|
|
|
|
|
|
|
|
writeNetwork(buffer, DUID::HDU);
|
|
|
|
writeNetwork(buffer, DUID::HDU);
|
|
|
|
|
|
|
|
|
|
|
|
@ -740,8 +740,8 @@ bool Voice::process(uint8_t* data, uint32_t len)
|
|
|
|
m_rfErrs += errors;
|
|
|
|
m_rfErrs += errors;
|
|
|
|
m_rfFrames++;
|
|
|
|
m_rfFrames++;
|
|
|
|
|
|
|
|
|
|
|
|
// add busy bits
|
|
|
|
// add status bits
|
|
|
|
P25Utils::addStatusBits(data + 2U, P25_LDU_FRAME_LENGTH_BITS, m_inbound);
|
|
|
|
P25Utils::addStatusBits(data + 2U, P25_LDU_FRAME_LENGTH_BITS, m_inbound, false);
|
|
|
|
|
|
|
|
|
|
|
|
writeNetwork(data + 2U, DUID::LDU1, frameType);
|
|
|
|
writeNetwork(data + 2U, DUID::LDU1, frameType);
|
|
|
|
|
|
|
|
|
|
|
|
@ -857,8 +857,8 @@ bool Voice::process(uint8_t* data, uint32_t len)
|
|
|
|
m_rfErrs += errors;
|
|
|
|
m_rfErrs += errors;
|
|
|
|
m_rfFrames++;
|
|
|
|
m_rfFrames++;
|
|
|
|
|
|
|
|
|
|
|
|
// add busy bits
|
|
|
|
// add status bits
|
|
|
|
P25Utils::addStatusBits(data + 2U, P25_LDU_FRAME_LENGTH_BITS, m_inbound);
|
|
|
|
P25Utils::addStatusBits(data + 2U, P25_LDU_FRAME_LENGTH_BITS, m_inbound, false);
|
|
|
|
|
|
|
|
|
|
|
|
writeNetwork(data + 2U, DUID::LDU2);
|
|
|
|
writeNetwork(data + 2U, DUID::LDU2);
|
|
|
|
|
|
|
|
|
|
|
|
@ -937,17 +937,17 @@ bool Voice::process(uint8_t* data, uint32_t len)
|
|
|
|
uint8_t buffer[P25_HDU_FRAME_LENGTH_BYTES + 2U];
|
|
|
|
uint8_t buffer[P25_HDU_FRAME_LENGTH_BYTES + 2U];
|
|
|
|
::memset(buffer, 0x00U, P25_HDU_FRAME_LENGTH_BYTES + 2U);
|
|
|
|
::memset(buffer, 0x00U, P25_HDU_FRAME_LENGTH_BYTES + 2U);
|
|
|
|
|
|
|
|
|
|
|
|
// Generate Sync
|
|
|
|
// generate Sync
|
|
|
|
Sync::addP25Sync(buffer + 2U);
|
|
|
|
Sync::addP25Sync(buffer + 2U);
|
|
|
|
|
|
|
|
|
|
|
|
// Generate NID
|
|
|
|
// generate NID
|
|
|
|
m_p25->m_nid.encode(buffer + 2U, DUID::HDU);
|
|
|
|
m_p25->m_nid.encode(buffer + 2U, DUID::HDU);
|
|
|
|
|
|
|
|
|
|
|
|
// Generate HDU
|
|
|
|
// generate HDU
|
|
|
|
m_rfLC.encodeHDU(buffer + 2U);
|
|
|
|
m_rfLC.encodeHDU(buffer + 2U);
|
|
|
|
|
|
|
|
|
|
|
|
// Add busy bits
|
|
|
|
// add status bits
|
|
|
|
P25Utils::addStatusBits(buffer + 2U, P25_HDU_FRAME_LENGTH_BITS, m_inbound);
|
|
|
|
P25Utils::addStatusBits(buffer + 2U, P25_HDU_FRAME_LENGTH_BITS, m_inbound, false);
|
|
|
|
|
|
|
|
|
|
|
|
writeNetwork(buffer, DUID::HDU);
|
|
|
|
writeNetwork(buffer, DUID::HDU);
|
|
|
|
|
|
|
|
|
|
|
|
@ -989,8 +989,8 @@ bool Voice::process(uint8_t* data, uint32_t len)
|
|
|
|
// generate NID
|
|
|
|
// generate NID
|
|
|
|
m_p25->m_nid.encode(data + 2U, DUID::VSELP1);
|
|
|
|
m_p25->m_nid.encode(data + 2U, DUID::VSELP1);
|
|
|
|
|
|
|
|
|
|
|
|
// add busy bits
|
|
|
|
// add status bits
|
|
|
|
P25Utils::addStatusBits(data + 2U, P25_LDU_FRAME_LENGTH_BITS, m_inbound);
|
|
|
|
P25Utils::addStatusBits(data + 2U, P25_LDU_FRAME_LENGTH_BITS, m_inbound, false);
|
|
|
|
|
|
|
|
|
|
|
|
writeNetwork(data + 2U, DUID::VSELP1);
|
|
|
|
writeNetwork(data + 2U, DUID::VSELP1);
|
|
|
|
|
|
|
|
|
|
|
|
@ -1031,8 +1031,8 @@ bool Voice::process(uint8_t* data, uint32_t len)
|
|
|
|
// generate NID
|
|
|
|
// generate NID
|
|
|
|
m_p25->m_nid.encode(data + 2U, DUID::VSELP2);
|
|
|
|
m_p25->m_nid.encode(data + 2U, DUID::VSELP2);
|
|
|
|
|
|
|
|
|
|
|
|
// add busy bits
|
|
|
|
// add status bits
|
|
|
|
P25Utils::addStatusBits(data + 2U, P25_LDU_FRAME_LENGTH_BITS, m_inbound);
|
|
|
|
P25Utils::addStatusBits(data + 2U, P25_LDU_FRAME_LENGTH_BITS, m_inbound, false);
|
|
|
|
|
|
|
|
|
|
|
|
writeNetwork(data + 2U, DUID::VSELP2);
|
|
|
|
writeNetwork(data + 2U, DUID::VSELP2);
|
|
|
|
|
|
|
|
|
|
|
|
@ -1507,14 +1507,14 @@ void Voice::writeNet_TDU()
|
|
|
|
buffer[0U] = modem::TAG_EOT;
|
|
|
|
buffer[0U] = modem::TAG_EOT;
|
|
|
|
buffer[1U] = 0x00U;
|
|
|
|
buffer[1U] = 0x00U;
|
|
|
|
|
|
|
|
|
|
|
|
// Generate Sync
|
|
|
|
// generate Sync
|
|
|
|
Sync::addP25Sync(buffer + 2U);
|
|
|
|
Sync::addP25Sync(buffer + 2U);
|
|
|
|
|
|
|
|
|
|
|
|
// Generate NID
|
|
|
|
// generate NID
|
|
|
|
m_p25->m_nid.encode(buffer + 2U, DUID::TDU);
|
|
|
|
m_p25->m_nid.encode(buffer + 2U, DUID::TDU);
|
|
|
|
|
|
|
|
|
|
|
|
// Add busy bits
|
|
|
|
// add status bits
|
|
|
|
P25Utils::addStatusBits(buffer + 2U, P25_TDU_FRAME_LENGTH_BITS, false);
|
|
|
|
P25Utils::addStatusBits(buffer + 2U, P25_TDU_FRAME_LENGTH_BITS, false, false);
|
|
|
|
|
|
|
|
|
|
|
|
m_p25->addFrame(buffer, P25_TDU_FRAME_LENGTH_BYTES + 2U, true);
|
|
|
|
m_p25->addFrame(buffer, P25_TDU_FRAME_LENGTH_BYTES + 2U, true);
|
|
|
|
|
|
|
|
|
|
|
|
@ -1776,17 +1776,17 @@ void Voice::writeNet_LDU1()
|
|
|
|
uint8_t buffer[P25_HDU_FRAME_LENGTH_BYTES + 2U];
|
|
|
|
uint8_t buffer[P25_HDU_FRAME_LENGTH_BYTES + 2U];
|
|
|
|
::memset(buffer, 0x00U, P25_HDU_FRAME_LENGTH_BYTES + 2U);
|
|
|
|
::memset(buffer, 0x00U, P25_HDU_FRAME_LENGTH_BYTES + 2U);
|
|
|
|
|
|
|
|
|
|
|
|
// Generate Sync
|
|
|
|
// generate Sync
|
|
|
|
Sync::addP25Sync(buffer + 2U);
|
|
|
|
Sync::addP25Sync(buffer + 2U);
|
|
|
|
|
|
|
|
|
|
|
|
// Generate NID
|
|
|
|
// generate NID
|
|
|
|
m_p25->m_nid.encode(buffer + 2U, DUID::HDU);
|
|
|
|
m_p25->m_nid.encode(buffer + 2U, DUID::HDU);
|
|
|
|
|
|
|
|
|
|
|
|
// Generate header
|
|
|
|
// generate HDU
|
|
|
|
m_netLC.encodeHDU(buffer + 2U);
|
|
|
|
m_netLC.encodeHDU(buffer + 2U);
|
|
|
|
|
|
|
|
|
|
|
|
// Add busy bits
|
|
|
|
// add status bits
|
|
|
|
P25Utils::addStatusBits(buffer + 2U, P25_HDU_FRAME_LENGTH_BITS, false);
|
|
|
|
P25Utils::addStatusBits(buffer + 2U, P25_HDU_FRAME_LENGTH_BITS, false, false);
|
|
|
|
|
|
|
|
|
|
|
|
buffer[0U] = modem::TAG_DATA;
|
|
|
|
buffer[0U] = modem::TAG_DATA;
|
|
|
|
buffer[1U] = 0x00U;
|
|
|
|
buffer[1U] = 0x00U;
|
|
|
|
@ -1864,13 +1864,13 @@ void Voice::writeNet_LDU1()
|
|
|
|
uint8_t buffer[P25_LDU_FRAME_LENGTH_BYTES + 2U];
|
|
|
|
uint8_t buffer[P25_LDU_FRAME_LENGTH_BYTES + 2U];
|
|
|
|
::memset(buffer, 0x00U, P25_LDU_FRAME_LENGTH_BYTES + 2U);
|
|
|
|
::memset(buffer, 0x00U, P25_LDU_FRAME_LENGTH_BYTES + 2U);
|
|
|
|
|
|
|
|
|
|
|
|
// Generate Sync
|
|
|
|
// generate Sync
|
|
|
|
Sync::addP25Sync(buffer + 2U);
|
|
|
|
Sync::addP25Sync(buffer + 2U);
|
|
|
|
|
|
|
|
|
|
|
|
// Generate NID
|
|
|
|
// generate NID
|
|
|
|
m_p25->m_nid.encode(buffer + 2U, DUID::LDU1);
|
|
|
|
m_p25->m_nid.encode(buffer + 2U, DUID::LDU1);
|
|
|
|
|
|
|
|
|
|
|
|
// Generate LDU1 data
|
|
|
|
// generate LDU1 data
|
|
|
|
if (!m_netLC.isStandardMFId()) {
|
|
|
|
if (!m_netLC.isStandardMFId()) {
|
|
|
|
if (m_debug) {
|
|
|
|
if (m_debug) {
|
|
|
|
LogDebug(LOG_NET, "P25, LDU1 LC, non-standard payload, lco = $%02X, mfId = $%02X", m_netLC.getLCO(), m_netLC.getMFId());
|
|
|
|
LogDebug(LOG_NET, "P25, LDU1 LC, non-standard payload, lco = $%02X, mfId = $%02X", m_netLC.getLCO(), m_netLC.getMFId());
|
|
|
|
@ -1880,7 +1880,7 @@ void Voice::writeNet_LDU1()
|
|
|
|
|
|
|
|
|
|
|
|
m_netLC.encodeLDU1(buffer + 2U);
|
|
|
|
m_netLC.encodeLDU1(buffer + 2U);
|
|
|
|
|
|
|
|
|
|
|
|
// Add the Audio
|
|
|
|
// add the Audio
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU1 + 10U, 0U);
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU1 + 10U, 0U);
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU1 + 26U, 1U);
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU1 + 26U, 1U);
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU1 + 55U, 2U);
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU1 + 55U, 2U);
|
|
|
|
@ -1891,13 +1891,13 @@ void Voice::writeNet_LDU1()
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU1 + 180U, 7U);
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU1 + 180U, 7U);
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU1 + 204U, 8U);
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU1 + 204U, 8U);
|
|
|
|
|
|
|
|
|
|
|
|
// Add the Low Speed Data
|
|
|
|
// add the Low Speed Data
|
|
|
|
m_netLSD.setLSD1(lsd.getLSD1());
|
|
|
|
m_netLSD.setLSD1(lsd.getLSD1());
|
|
|
|
m_netLSD.setLSD2(lsd.getLSD2());
|
|
|
|
m_netLSD.setLSD2(lsd.getLSD2());
|
|
|
|
m_netLSD.encode(buffer + 2U);
|
|
|
|
m_netLSD.encode(buffer + 2U);
|
|
|
|
|
|
|
|
|
|
|
|
// Add busy bits
|
|
|
|
// add status bits
|
|
|
|
P25Utils::addStatusBits(buffer + 2U, P25_LDU_FRAME_LENGTH_BITS, false);
|
|
|
|
P25Utils::addStatusBits(buffer + 2U, P25_LDU_FRAME_LENGTH_BITS, false, false);
|
|
|
|
|
|
|
|
|
|
|
|
buffer[0U] = modem::TAG_DATA;
|
|
|
|
buffer[0U] = modem::TAG_DATA;
|
|
|
|
buffer[1U] = 0x00U;
|
|
|
|
buffer[1U] = 0x00U;
|
|
|
|
@ -1962,16 +1962,16 @@ void Voice::writeNet_LDU2()
|
|
|
|
uint8_t buffer[P25_LDU_FRAME_LENGTH_BYTES + 2U];
|
|
|
|
uint8_t buffer[P25_LDU_FRAME_LENGTH_BYTES + 2U];
|
|
|
|
::memset(buffer, 0x00U, P25_LDU_FRAME_LENGTH_BYTES + 2U);
|
|
|
|
::memset(buffer, 0x00U, P25_LDU_FRAME_LENGTH_BYTES + 2U);
|
|
|
|
|
|
|
|
|
|
|
|
// Generate Sync
|
|
|
|
// generate Sync
|
|
|
|
Sync::addP25Sync(buffer + 2U);
|
|
|
|
Sync::addP25Sync(buffer + 2U);
|
|
|
|
|
|
|
|
|
|
|
|
// Generate NID
|
|
|
|
// generate NID
|
|
|
|
m_p25->m_nid.encode(buffer + 2U, DUID::LDU2);
|
|
|
|
m_p25->m_nid.encode(buffer + 2U, DUID::LDU2);
|
|
|
|
|
|
|
|
|
|
|
|
// Generate LDU2 data
|
|
|
|
// generate LDU2 data
|
|
|
|
m_netLC.encodeLDU2(buffer + 2U);
|
|
|
|
m_netLC.encodeLDU2(buffer + 2U);
|
|
|
|
|
|
|
|
|
|
|
|
// Add the Audio
|
|
|
|
// add the Audio
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU2 + 10U, 0U);
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU2 + 10U, 0U);
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU2 + 26U, 1U);
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU2 + 26U, 1U);
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU2 + 55U, 2U);
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU2 + 55U, 2U);
|
|
|
|
@ -1982,13 +1982,13 @@ void Voice::writeNet_LDU2()
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU2 + 180U, 7U);
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU2 + 180U, 7U);
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU2 + 204U, 8U);
|
|
|
|
m_audio.encode(buffer + 2U, m_netLDU2 + 204U, 8U);
|
|
|
|
|
|
|
|
|
|
|
|
// Add the Low Speed Data
|
|
|
|
// add the Low Speed Data
|
|
|
|
m_netLSD.setLSD1(lsd.getLSD1());
|
|
|
|
m_netLSD.setLSD1(lsd.getLSD1());
|
|
|
|
m_netLSD.setLSD2(lsd.getLSD2());
|
|
|
|
m_netLSD.setLSD2(lsd.getLSD2());
|
|
|
|
m_netLSD.encode(buffer + 2U);
|
|
|
|
m_netLSD.encode(buffer + 2U);
|
|
|
|
|
|
|
|
|
|
|
|
// Add busy bits
|
|
|
|
// add status bits
|
|
|
|
P25Utils::addStatusBits(buffer + 2U, P25_LDU_FRAME_LENGTH_BITS, false);
|
|
|
|
P25Utils::addStatusBits(buffer + 2U, P25_LDU_FRAME_LENGTH_BITS, false, false);
|
|
|
|
|
|
|
|
|
|
|
|
buffer[0U] = modem::TAG_DATA;
|
|
|
|
buffer[0U] = modem::TAG_DATA;
|
|
|
|
buffer[1U] = 0x00U;
|
|
|
|
buffer[1U] = 0x00U;
|
|
|
|
|