|
|
|
@ -589,6 +589,7 @@ void Modem::clock(uint32_t ms)
|
|
|
|
/** Digital Mobile Radio */
|
|
|
|
/** Digital Mobile Radio */
|
|
|
|
case CMD_DMR_DATA1:
|
|
|
|
case CMD_DMR_DATA1:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined(ENABLE_DMR)
|
|
|
|
//if (m_trace)
|
|
|
|
//if (m_trace)
|
|
|
|
// Utils::dump(1U, "RX DMR Data 1", m_buffer, m_length);
|
|
|
|
// Utils::dump(1U, "RX DMR Data 1", m_buffer, m_length);
|
|
|
|
|
|
|
|
|
|
|
|
@ -608,10 +609,12 @@ void Modem::clock(uint32_t ms)
|
|
|
|
|
|
|
|
|
|
|
|
m_rxDMRData1.addData(m_buffer + 3U, m_length - 3U);
|
|
|
|
m_rxDMRData1.addData(m_buffer + 3U, m_length - 3U);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_DMR)
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case CMD_DMR_DATA2:
|
|
|
|
case CMD_DMR_DATA2:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined(ENABLE_DMR)
|
|
|
|
//if (m_trace)
|
|
|
|
//if (m_trace)
|
|
|
|
// Utils::dump(1U, "RX DMR Data 2", m_buffer, m_length);
|
|
|
|
// Utils::dump(1U, "RX DMR Data 2", m_buffer, m_length);
|
|
|
|
|
|
|
|
|
|
|
|
@ -630,11 +633,13 @@ void Modem::clock(uint32_t ms)
|
|
|
|
m_rxDMRData2.addData(&data, 1U);
|
|
|
|
m_rxDMRData2.addData(&data, 1U);
|
|
|
|
|
|
|
|
|
|
|
|
m_rxDMRData2.addData(m_buffer + 3U, m_length - 3U);
|
|
|
|
m_rxDMRData2.addData(m_buffer + 3U, m_length - 3U);
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_DMR)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case CMD_DMR_LOST1:
|
|
|
|
case CMD_DMR_LOST1:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined(ENABLE_DMR)
|
|
|
|
//if (m_trace)
|
|
|
|
//if (m_trace)
|
|
|
|
// Utils::dump(1U, "RX DMR Lost 1", m_buffer, m_length);
|
|
|
|
// Utils::dump(1U, "RX DMR Lost 1", m_buffer, m_length);
|
|
|
|
|
|
|
|
|
|
|
|
@ -648,11 +653,13 @@ void Modem::clock(uint32_t ms)
|
|
|
|
|
|
|
|
|
|
|
|
data = TAG_LOST;
|
|
|
|
data = TAG_LOST;
|
|
|
|
m_rxDMRData1.addData(&data, 1U);
|
|
|
|
m_rxDMRData1.addData(&data, 1U);
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_DMR)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case CMD_DMR_LOST2:
|
|
|
|
case CMD_DMR_LOST2:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined(ENABLE_DMR)
|
|
|
|
//if (m_trace)
|
|
|
|
//if (m_trace)
|
|
|
|
// Utils::dump(1U, "RX DMR Lost 2", m_buffer, m_length);
|
|
|
|
// Utils::dump(1U, "RX DMR Lost 2", m_buffer, m_length);
|
|
|
|
|
|
|
|
|
|
|
|
@ -666,12 +673,14 @@ void Modem::clock(uint32_t ms)
|
|
|
|
|
|
|
|
|
|
|
|
data = TAG_LOST;
|
|
|
|
data = TAG_LOST;
|
|
|
|
m_rxDMRData2.addData(&data, 1U);
|
|
|
|
m_rxDMRData2.addData(&data, 1U);
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_DMR)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
/** Project 25 */
|
|
|
|
/** Project 25 */
|
|
|
|
case CMD_P25_DATA:
|
|
|
|
case CMD_P25_DATA:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined(ENABLE_P25)
|
|
|
|
//if (m_trace)
|
|
|
|
//if (m_trace)
|
|
|
|
// Utils::dump(1U, "RX P25 Data", m_buffer, m_length);
|
|
|
|
// Utils::dump(1U, "RX P25 Data", m_buffer, m_length);
|
|
|
|
|
|
|
|
|
|
|
|
@ -687,11 +696,13 @@ void Modem::clock(uint32_t ms)
|
|
|
|
m_rxP25Data.addData(&data, 1U);
|
|
|
|
m_rxP25Data.addData(&data, 1U);
|
|
|
|
|
|
|
|
|
|
|
|
m_rxP25Data.addData(m_buffer + 3U, m_length - 3U);
|
|
|
|
m_rxP25Data.addData(m_buffer + 3U, m_length - 3U);
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_P25)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case CMD_P25_LOST:
|
|
|
|
case CMD_P25_LOST:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined(ENABLE_P25)
|
|
|
|
//if (m_trace)
|
|
|
|
//if (m_trace)
|
|
|
|
// Utils::dump(1U, "RX P25 Lost", m_buffer, m_length);
|
|
|
|
// Utils::dump(1U, "RX P25 Lost", m_buffer, m_length);
|
|
|
|
|
|
|
|
|
|
|
|
@ -705,13 +716,14 @@ void Modem::clock(uint32_t ms)
|
|
|
|
|
|
|
|
|
|
|
|
data = TAG_LOST;
|
|
|
|
data = TAG_LOST;
|
|
|
|
m_rxP25Data.addData(&data, 1U);
|
|
|
|
m_rxP25Data.addData(&data, 1U);
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_P25)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
/** Next Generation Digital Narrowband */
|
|
|
|
/** Next Generation Digital Narrowband */
|
|
|
|
case CMD_NXDN_DATA:
|
|
|
|
case CMD_NXDN_DATA:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
#if ENABLE_NXDN_SUPPORT
|
|
|
|
#if defined(ENABLE_NXDN)
|
|
|
|
//if (m_trace)
|
|
|
|
//if (m_trace)
|
|
|
|
// Utils::dump(1U, "RX NXDN Data", m_buffer, m_length);
|
|
|
|
// Utils::dump(1U, "RX NXDN Data", m_buffer, m_length);
|
|
|
|
|
|
|
|
|
|
|
|
@ -727,13 +739,13 @@ void Modem::clock(uint32_t ms)
|
|
|
|
m_rxNXDNData.addData(&data, 1U);
|
|
|
|
m_rxNXDNData.addData(&data, 1U);
|
|
|
|
|
|
|
|
|
|
|
|
m_rxNXDNData.addData(m_buffer + 3U, m_length - 3U);
|
|
|
|
m_rxNXDNData.addData(m_buffer + 3U, m_length - 3U);
|
|
|
|
#endif
|
|
|
|
#endif // defined(ENABLE_NXDN)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case CMD_NXDN_LOST:
|
|
|
|
case CMD_NXDN_LOST:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
#if ENABLE_NXDN_SUPPORT
|
|
|
|
#if defined(ENABLE_NXDN)
|
|
|
|
//if (m_trace)
|
|
|
|
//if (m_trace)
|
|
|
|
// Utils::dump(1U, "RX NXDN Lost", m_buffer, m_length);
|
|
|
|
// Utils::dump(1U, "RX NXDN Lost", m_buffer, m_length);
|
|
|
|
|
|
|
|
|
|
|
|
@ -747,7 +759,7 @@ void Modem::clock(uint32_t ms)
|
|
|
|
|
|
|
|
|
|
|
|
data = TAG_LOST;
|
|
|
|
data = TAG_LOST;
|
|
|
|
m_rxNXDNData.addData(&data, 1U);
|
|
|
|
m_rxNXDNData.addData(&data, 1U);
|
|
|
|
#endif
|
|
|
|
#endif // defined(ENABLE_NXDN)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
@ -880,6 +892,8 @@ void Modem::clock(uint32_t ms)
|
|
|
|
if (!m_playoutTimer.hasExpired())
|
|
|
|
if (!m_playoutTimer.hasExpired())
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Digital Mobile Radio */
|
|
|
|
|
|
|
|
#if defined(ENABLE_DMR)
|
|
|
|
// write DMR slot 1 data to air interface
|
|
|
|
// write DMR slot 1 data to air interface
|
|
|
|
if (m_dmrSpace1 > 1U && !m_txDMRData1.isEmpty()) {
|
|
|
|
if (m_dmrSpace1 > 1U && !m_txDMRData1.isEmpty()) {
|
|
|
|
uint8_t len = 0U;
|
|
|
|
uint8_t len = 0U;
|
|
|
|
@ -915,7 +929,10 @@ void Modem::clock(uint32_t ms)
|
|
|
|
|
|
|
|
|
|
|
|
m_dmrSpace2--;
|
|
|
|
m_dmrSpace2--;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_DMR)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Project 25 */
|
|
|
|
|
|
|
|
#if defined(ENABLE_P25)
|
|
|
|
// write P25 data to air interface
|
|
|
|
// write P25 data to air interface
|
|
|
|
if (m_p25Space > 1U && !m_txP25Data.isEmpty()) {
|
|
|
|
if (m_p25Space > 1U && !m_txP25Data.isEmpty()) {
|
|
|
|
uint8_t len = 0U;
|
|
|
|
uint8_t len = 0U;
|
|
|
|
@ -933,6 +950,28 @@ void Modem::clock(uint32_t ms)
|
|
|
|
|
|
|
|
|
|
|
|
m_p25Space--;
|
|
|
|
m_p25Space--;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_P25)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Next Generation Digital Narrowband */
|
|
|
|
|
|
|
|
#if defined(ENABLE_NXDN)
|
|
|
|
|
|
|
|
// write NXDN data to air interface
|
|
|
|
|
|
|
|
if (m_nxdnSpace > 1U && !m_txNXDNData.isEmpty()) {
|
|
|
|
|
|
|
|
uint8_t len = 0U;
|
|
|
|
|
|
|
|
m_txNXDNData.getData(&len, 1U);
|
|
|
|
|
|
|
|
m_txNXDNData.getData(m_buffer, len);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//if (m_trace)
|
|
|
|
|
|
|
|
// Utils::dump(1U, "Buffered TX NXDN Data", m_buffer, len);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int ret = write(m_buffer, len);
|
|
|
|
|
|
|
|
if (ret != int(len))
|
|
|
|
|
|
|
|
LogError(LOG_MODEM, "Error writing NXDN data");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m_playoutTimer.start();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m_nxdnSpace--;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_NXDN)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// <summary>
|
|
|
|
@ -1176,6 +1215,7 @@ void Modem::clearNXDNData()
|
|
|
|
/// <param name="length">Length of data to write.</param>
|
|
|
|
/// <param name="length">Length of data to write.</param>
|
|
|
|
void Modem::injectDMRData1(const uint8_t* data, uint32_t length)
|
|
|
|
void Modem::injectDMRData1(const uint8_t* data, uint32_t length)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined(ENABLE_DMR)
|
|
|
|
assert(data != NULL);
|
|
|
|
assert(data != NULL);
|
|
|
|
assert(length > 0U);
|
|
|
|
assert(length > 0U);
|
|
|
|
|
|
|
|
|
|
|
|
@ -1196,6 +1236,7 @@ void Modem::injectDMRData1(const uint8_t* data, uint32_t length)
|
|
|
|
m_rxDMRData1.addData(&val, 1U);
|
|
|
|
m_rxDMRData1.addData(&val, 1U);
|
|
|
|
|
|
|
|
|
|
|
|
m_rxDMRData1.addData(data, length);
|
|
|
|
m_rxDMRData1.addData(data, length);
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_DMR)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// <summary>
|
|
|
|
@ -1205,6 +1246,7 @@ void Modem::injectDMRData1(const uint8_t* data, uint32_t length)
|
|
|
|
/// <param name="length">Length of data to write.</param>
|
|
|
|
/// <param name="length">Length of data to write.</param>
|
|
|
|
void Modem::injectDMRData2(const uint8_t* data, uint32_t length)
|
|
|
|
void Modem::injectDMRData2(const uint8_t* data, uint32_t length)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined(ENABLE_DMR)
|
|
|
|
assert(data != NULL);
|
|
|
|
assert(data != NULL);
|
|
|
|
assert(length > 0U);
|
|
|
|
assert(length > 0U);
|
|
|
|
|
|
|
|
|
|
|
|
@ -1225,6 +1267,7 @@ void Modem::injectDMRData2(const uint8_t* data, uint32_t length)
|
|
|
|
m_rxDMRData2.addData(&val, 1U);
|
|
|
|
m_rxDMRData2.addData(&val, 1U);
|
|
|
|
|
|
|
|
|
|
|
|
m_rxDMRData2.addData(data, length);
|
|
|
|
m_rxDMRData2.addData(data, length);
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_DMR)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// <summary>
|
|
|
|
@ -1234,6 +1277,7 @@ void Modem::injectDMRData2(const uint8_t* data, uint32_t length)
|
|
|
|
/// <param name="length">Length of data to write.</param>
|
|
|
|
/// <param name="length">Length of data to write.</param>
|
|
|
|
void Modem::injectP25Data(const uint8_t* data, uint32_t length)
|
|
|
|
void Modem::injectP25Data(const uint8_t* data, uint32_t length)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined(ENABLE_P25)
|
|
|
|
assert(data != NULL);
|
|
|
|
assert(data != NULL);
|
|
|
|
assert(length > 0U);
|
|
|
|
assert(length > 0U);
|
|
|
|
|
|
|
|
|
|
|
|
@ -1249,6 +1293,7 @@ void Modem::injectP25Data(const uint8_t* data, uint32_t length)
|
|
|
|
m_rxP25Data.addData(&val, 1U);
|
|
|
|
m_rxP25Data.addData(&val, 1U);
|
|
|
|
|
|
|
|
|
|
|
|
m_rxP25Data.addData(data, length);
|
|
|
|
m_rxP25Data.addData(data, length);
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_P25)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// <summary>
|
|
|
|
@ -1258,6 +1303,7 @@ void Modem::injectP25Data(const uint8_t* data, uint32_t length)
|
|
|
|
/// <param name="length">Length of data to write.</param>
|
|
|
|
/// <param name="length">Length of data to write.</param>
|
|
|
|
void Modem::injectNXDNData(const uint8_t* data, uint32_t length)
|
|
|
|
void Modem::injectNXDNData(const uint8_t* data, uint32_t length)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined(ENABLE_NXDN)
|
|
|
|
assert(data != NULL);
|
|
|
|
assert(data != NULL);
|
|
|
|
assert(length > 0U);
|
|
|
|
assert(length > 0U);
|
|
|
|
|
|
|
|
|
|
|
|
@ -1273,6 +1319,7 @@ void Modem::injectNXDNData(const uint8_t* data, uint32_t length)
|
|
|
|
m_rxNXDNData.addData(&val, 1U);
|
|
|
|
m_rxNXDNData.addData(&val, 1U);
|
|
|
|
|
|
|
|
|
|
|
|
m_rxNXDNData.addData(data, length);
|
|
|
|
m_rxNXDNData.addData(data, length);
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_NXDN)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// <summary>
|
|
|
|
@ -1283,6 +1330,7 @@ void Modem::injectNXDNData(const uint8_t* data, uint32_t length)
|
|
|
|
/// <returns>True, if data is written, otherwise false.</returns>
|
|
|
|
/// <returns>True, if data is written, otherwise false.</returns>
|
|
|
|
bool Modem::writeDMRData1(const uint8_t* data, uint32_t length, bool immediate)
|
|
|
|
bool Modem::writeDMRData1(const uint8_t* data, uint32_t length, bool immediate)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined(ENABLE_DMR)
|
|
|
|
assert(data != NULL);
|
|
|
|
assert(data != NULL);
|
|
|
|
assert(length > 0U);
|
|
|
|
assert(length > 0U);
|
|
|
|
|
|
|
|
|
|
|
|
@ -1327,6 +1375,9 @@ bool Modem::writeDMRData1(const uint8_t* data, uint32_t length, bool immediate)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_DMR)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// <summary>
|
|
|
|
@ -1338,6 +1389,7 @@ bool Modem::writeDMRData1(const uint8_t* data, uint32_t length, bool immediate)
|
|
|
|
/// <returns>True, if data is written, otherwise false.</returns>
|
|
|
|
/// <returns>True, if data is written, otherwise false.</returns>
|
|
|
|
bool Modem::writeDMRData2(const uint8_t* data, uint32_t length, bool immediate)
|
|
|
|
bool Modem::writeDMRData2(const uint8_t* data, uint32_t length, bool immediate)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined(ENABLE_DMR)
|
|
|
|
assert(data != NULL);
|
|
|
|
assert(data != NULL);
|
|
|
|
assert(length > 0U);
|
|
|
|
assert(length > 0U);
|
|
|
|
|
|
|
|
|
|
|
|
@ -1382,6 +1434,9 @@ bool Modem::writeDMRData2(const uint8_t* data, uint32_t length, bool immediate)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_DMR)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// <summary>
|
|
|
|
@ -1393,6 +1448,7 @@ bool Modem::writeDMRData2(const uint8_t* data, uint32_t length, bool immediate)
|
|
|
|
/// <returns>True, if data is written, otherwise false.</returns>
|
|
|
|
/// <returns>True, if data is written, otherwise false.</returns>
|
|
|
|
bool Modem::writeP25Data(const uint8_t* data, uint32_t length, bool immediate)
|
|
|
|
bool Modem::writeP25Data(const uint8_t* data, uint32_t length, bool immediate)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined(ENABLE_P25)
|
|
|
|
assert(data != NULL);
|
|
|
|
assert(data != NULL);
|
|
|
|
assert(length > 0U);
|
|
|
|
assert(length > 0U);
|
|
|
|
|
|
|
|
|
|
|
|
@ -1437,6 +1493,9 @@ bool Modem::writeP25Data(const uint8_t* data, uint32_t length, bool immediate)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_P25)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// <summary>
|
|
|
|
@ -1448,6 +1507,7 @@ bool Modem::writeP25Data(const uint8_t* data, uint32_t length, bool immediate)
|
|
|
|
/// <returns>True, if data is written, otherwise false.</returns>
|
|
|
|
/// <returns>True, if data is written, otherwise false.</returns>
|
|
|
|
bool Modem::writeNXDNData(const uint8_t* data, uint32_t length, bool immediate)
|
|
|
|
bool Modem::writeNXDNData(const uint8_t* data, uint32_t length, bool immediate)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined(ENABLE_NXDN)
|
|
|
|
assert(data != NULL);
|
|
|
|
assert(data != NULL);
|
|
|
|
assert(length > 0U);
|
|
|
|
assert(length > 0U);
|
|
|
|
|
|
|
|
|
|
|
|
@ -1492,6 +1552,9 @@ bool Modem::writeNXDNData(const uint8_t* data, uint32_t length, bool immediate)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_NXDN)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// <summary>
|
|
|
|
@ -1501,6 +1564,7 @@ bool Modem::writeNXDNData(const uint8_t* data, uint32_t length, bool immediate)
|
|
|
|
/// <returns>True, if DMR transmit started, otherwise false.</returns>
|
|
|
|
/// <returns>True, if DMR transmit started, otherwise false.</returns>
|
|
|
|
bool Modem::writeDMRStart(bool tx)
|
|
|
|
bool Modem::writeDMRStart(bool tx)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined(ENABLE_DMR)
|
|
|
|
if (tx && m_tx)
|
|
|
|
if (tx && m_tx)
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
if (!tx && !m_tx)
|
|
|
|
if (!tx && !m_tx)
|
|
|
|
@ -1516,6 +1580,9 @@ bool Modem::writeDMRStart(bool tx)
|
|
|
|
Utils::dump(1U, "Modem::writeDMRStart(), Written", buffer, 4U);
|
|
|
|
Utils::dump(1U, "Modem::writeDMRStart(), Written", buffer, 4U);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
return write(buffer, 4U) == 4;
|
|
|
|
return write(buffer, 4U) == 4;
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_DMR)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// <summary>
|
|
|
|
@ -1525,6 +1592,7 @@ bool Modem::writeDMRStart(bool tx)
|
|
|
|
/// <returns>True, if DMR LC is written, otherwise false.</returns>
|
|
|
|
/// <returns>True, if DMR LC is written, otherwise false.</returns>
|
|
|
|
bool Modem::writeDMRShortLC(const uint8_t* lc)
|
|
|
|
bool Modem::writeDMRShortLC(const uint8_t* lc)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined(ENABLE_DMR)
|
|
|
|
assert(lc != NULL);
|
|
|
|
assert(lc != NULL);
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t buffer[12U];
|
|
|
|
uint8_t buffer[12U];
|
|
|
|
@ -1545,6 +1613,9 @@ bool Modem::writeDMRShortLC(const uint8_t* lc)
|
|
|
|
Utils::dump(1U, "Modem::writeDMRShortLC(), Written", buffer, 12U);
|
|
|
|
Utils::dump(1U, "Modem::writeDMRShortLC(), Written", buffer, 12U);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
return write(buffer, 12U) == 12;
|
|
|
|
return write(buffer, 12U) == 12;
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_DMR)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// <summary>
|
|
|
|
@ -1554,6 +1625,7 @@ bool Modem::writeDMRShortLC(const uint8_t* lc)
|
|
|
|
/// <returns>True, if DMR abort is written, otherwise false.</returns>
|
|
|
|
/// <returns>True, if DMR abort is written, otherwise false.</returns>
|
|
|
|
bool Modem::writeDMRAbort(uint32_t slotNo)
|
|
|
|
bool Modem::writeDMRAbort(uint32_t slotNo)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
#if defined(ENABLE_DMR)
|
|
|
|
if (slotNo == 1U)
|
|
|
|
if (slotNo == 1U)
|
|
|
|
m_txDMRData1.clear();
|
|
|
|
m_txDMRData1.clear();
|
|
|
|
else
|
|
|
|
else
|
|
|
|
@ -1569,6 +1641,9 @@ bool Modem::writeDMRAbort(uint32_t slotNo)
|
|
|
|
Utils::dump(1U, "Modem::writeDMRAbort(), Written", buffer, 4U);
|
|
|
|
Utils::dump(1U, "Modem::writeDMRAbort(), Written", buffer, 4U);
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
return write(buffer, 4U) == 4;
|
|
|
|
return write(buffer, 4U) == 4;
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_DMR)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// <summary>
|
|
|
|
@ -1791,10 +1866,14 @@ bool Modem::writeConfig()
|
|
|
|
if (m_cosLockout)
|
|
|
|
if (m_cosLockout)
|
|
|
|
buffer[4U] |= 0x04U;
|
|
|
|
buffer[4U] |= 0x04U;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(ENABLE_DMR)
|
|
|
|
if (m_dmrEnabled)
|
|
|
|
if (m_dmrEnabled)
|
|
|
|
buffer[4U] |= 0x02U;
|
|
|
|
buffer[4U] |= 0x02U;
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_DMR)
|
|
|
|
|
|
|
|
#if defined(ENABLE_P25)
|
|
|
|
if (m_p25Enabled)
|
|
|
|
if (m_p25Enabled)
|
|
|
|
buffer[4U] |= 0x08U;
|
|
|
|
buffer[4U] |= 0x08U;
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_P25)
|
|
|
|
|
|
|
|
|
|
|
|
if (m_fdmaPreamble > MAX_FDMA_PREAMBLE) {
|
|
|
|
if (m_fdmaPreamble > MAX_FDMA_PREAMBLE) {
|
|
|
|
LogWarning(LOG_P25, "oversized FDMA preamble count, reducing to maximum %u", MAX_FDMA_PREAMBLE);
|
|
|
|
LogWarning(LOG_P25, "oversized FDMA preamble count, reducing to maximum %u", MAX_FDMA_PREAMBLE);
|
|
|
|
@ -1828,8 +1907,10 @@ bool Modem::writeConfig()
|
|
|
|
if (m_protoVer >= 3U) {
|
|
|
|
if (m_protoVer >= 3U) {
|
|
|
|
lengthToWrite = 24U;
|
|
|
|
lengthToWrite = 24U;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(ENABLE_NXDN)
|
|
|
|
if (m_nxdnEnabled)
|
|
|
|
if (m_nxdnEnabled)
|
|
|
|
buffer[4U] |= 0x10U;
|
|
|
|
buffer[4U] |= 0x10U;
|
|
|
|
|
|
|
|
#endif // defined(ENABLE_NXDN)
|
|
|
|
|
|
|
|
|
|
|
|
buffer[18U] = (uint8_t)(m_nxdnTXLevel * 2.55F + 0.5F);
|
|
|
|
buffer[18U] = (uint8_t)(m_nxdnTXLevel * 2.55F + 0.5F);
|
|
|
|
|
|
|
|
|
|
|
|
|