diff --git a/src/host/Host.Config.cpp b/src/host/Host.Config.cpp index cb8cf5c3..dd444613 100644 --- a/src/host/Host.Config.cpp +++ b/src/host/Host.Config.cpp @@ -494,6 +494,7 @@ bool Host::createModem() bool disableOFlowReset = modemConf["disableOFlowReset"].as(false); bool ignoreModemConfigArea = modemConf["ignoreModemConfigArea"].as(false); bool dumpModemStatus = modemConf["dumpModemStatus"].as(false); + bool respTrace = modemConf["respTrace"].as(false); bool trace = modemConf["trace"].as(false); bool debug = modemConf["debug"].as(false); @@ -687,6 +688,8 @@ bool Host::createModem() m_modem->setP25NAC(m_p25NAC); } + m_modem->setResponseTrace(respTrace); + if (m_modemRemote) { m_modem->setOpenHandler(MODEM_OC_PORT_HANDLER_BIND(Host::rmtPortModemOpen, this)); m_modem->setCloseHandler(MODEM_OC_PORT_HANDLER_BIND(Host::rmtPortModemClose, this)); diff --git a/src/host/modem/Modem.cpp b/src/host/modem/Modem.cpp index c3fc90e4..53bbbd35 100644 --- a/src/host/modem/Modem.cpp +++ b/src/host/modem/Modem.cpp @@ -158,6 +158,7 @@ Modem::Modem(port::IModemPort* port, bool duplex, bool rxInvert, bool txInvert, m_flashDisabled(false), m_gotModemStatus(false), m_dumpModemStatus(dumpModemStatus), + m_respTrace(false), m_trace(trace), m_debug(debug) { @@ -579,6 +580,8 @@ void Modem::clock(uint32_t ms) m_rxDMRQueue1.addData(&data, 1U); m_rxDMRQueue1.addData(m_buffer + 3U, m_length - 3U); + if (m_trace) + Utils::dump(1U, "Modem::clock() RX DMR Data 1", m_buffer + 3U, m_length - 3U); } } break; @@ -603,6 +606,8 @@ void Modem::clock(uint32_t ms) m_rxDMRQueue2.addData(&data, 1U); m_rxDMRQueue2.addData(m_buffer + 3U, m_length - 3U); + if (m_trace) + Utils::dump(1U, "Modem::clock() RX DMR Data 2", m_buffer + 3U, m_length - 3U); } } break; @@ -663,6 +668,8 @@ void Modem::clock(uint32_t ms) m_rxP25Queue.addData(&data, 1U); m_rxP25Queue.addData(m_buffer + (cmdOffset + 1U), m_length - (cmdOffset + 1U)); + if (m_trace) + Utils::dump(1U, "Modem::clock() RX P25 Data", m_buffer + (cmdOffset + 1U), m_length - (cmdOffset + 1U)); } } break; @@ -704,6 +711,8 @@ void Modem::clock(uint32_t ms) m_rxNXDNQueue.addData(&data, 1U); m_rxNXDNQueue.addData(m_buffer + 3U, m_length - 3U); + if (m_trace) + Utils::dump(1U, "Modem::clock() RX NXDN Data", m_buffer + 3U, m_length - 3U); } } break; @@ -1391,8 +1400,8 @@ bool Modem::writeDMRFrame1(const uint8_t* data, uint32_t length) if (m_dmrSpace1 >= length) { if (m_debug) LogDebug(LOG_MODEM, "Modem::writeDMRData1(); immediate write (len %u)", length); - //if (m_trace) - // Utils::dump(1U, "Immediate TX DMR Data 1", buffer, len); + if (m_trace) + Utils::dump(1U, "Modem::writeDMRData1() Immediate TX DMR Data 1", buffer + 3U, length - 1U); int ret = write(buffer, len); if (ret != int(len)) { @@ -1445,8 +1454,8 @@ bool Modem::writeDMRFrame2(const uint8_t* data, uint32_t length) if (m_dmrSpace2 >= length) { if (m_debug) LogDebug(LOG_MODEM, "Modem::writeDMRData2(); immediate write (len %u)", length); - //if (m_trace) - // Utils::dump(1U, "Immediate TX DMR Data 2", buffer, len); + if (m_trace) + Utils::dump(1U, "Modem::writeDMRData2() Immediate TX DMR Data 2", buffer + 3U, length - 1U); int ret = write(buffer, len); if (ret != int(len)) { @@ -1511,8 +1520,8 @@ bool Modem::writeP25Frame(const uint8_t* data, uint32_t length) if (m_p25Space >= length) { if (m_debug) LogDebug(LOG_MODEM, "Modem::writeP25Data(); immediate write (len %u)", length); - //if (m_trace) - // Utils::dump(1U, "Immediate TX P25 Data", buffer, len); + if (m_trace) + Utils::dump(1U, "Modem::writeP25Data() Immediate TX P25 Data", buffer + 3U, length - 3U); int ret = write(buffer, len); if (ret != int(len)) { @@ -1565,8 +1574,8 @@ bool Modem::writeNXDNFrame(const uint8_t* data, uint32_t length) if (m_nxdnSpace >= length) { if (m_debug) LogDebug(LOG_MODEM, "Modem::writeNXDNData(); immediate write (len %u)", length); - //if (m_trace) - // Utils::dump(1U, "Immediate TX NXDN Data", buffer, len); + if (m_trace) + Utils::dump(1U, "Modem::writeNXDNData() Immediate TX NXDN Data", buffer + 3U, length - 1U); int ret = write(buffer, len); if (ret != int(len)) { @@ -1749,8 +1758,8 @@ bool Modem::sendCWId(const std::string& callsign) for (uint32_t i = 0U; i < length; i++) buffer[i + 3U] = callsign.at(i); - //if (m_trace) - // Utils::dump(1U, "CW ID Data", buffer, length + 3U); + if (m_trace) + Utils::dump(1U, "CW ID Data", buffer, length + 3U); return write(buffer, length + 3U) == int(length + 3U); } @@ -2324,36 +2333,36 @@ void Modem::printDebug(const uint8_t* buffer, uint16_t len) } if (buffer[2U] == CMD_DEBUG1) { - LogDebug(LOG_MODEM, "M: %.*s", len - 3U, buffer + 3U); + LogDebug(LOG_MODEM, "DSP_FW_API %.*s", len - 3U, buffer + 3U); } else if (buffer[2U] == CMD_DEBUG2) { short val1 = (buffer[len - 2U] << 8) | buffer[len - 1U]; - LogDebug(LOG_MODEM, "M: %.*s %X", len - 5U, buffer + 3U, val1); + LogDebug(LOG_MODEM, "DSP_FW_API %.*s %X", len - 5U, buffer + 3U, val1); } else if (buffer[2U] == CMD_DEBUG3) { short val1 = (buffer[len - 4U] << 8) | buffer[len - 3U]; short val2 = (buffer[len - 2U] << 8) | buffer[len - 1U]; - LogDebug(LOG_MODEM, "M: %.*s %X %X", len - 7U, buffer + 3U, val1, val2); + LogDebug(LOG_MODEM, "DSP_FW_API %.*s %X %X", len - 7U, buffer + 3U, val1, val2); } else if (buffer[2U] == CMD_DEBUG4) { short val1 = (buffer[len - 6U] << 8) | buffer[len - 5U]; short val2 = (buffer[len - 4U] << 8) | buffer[len - 3U]; short val3 = (buffer[len - 2U] << 8) | buffer[len - 1U]; - LogDebug(LOG_MODEM, "M: %.*s %X %X %X", len - 9U, buffer + 3U, val1, val2, val3); + LogDebug(LOG_MODEM, "DSP_FW_API %.*s %X %X %X", len - 9U, buffer + 3U, val1, val2, val3); } else if (buffer[2U] == CMD_DEBUG5) { short val1 = (buffer[len - 8U] << 8) | buffer[len - 7U]; short val2 = (buffer[len - 6U] << 8) | buffer[len - 5U]; short val3 = (buffer[len - 4U] << 8) | buffer[len - 3U]; short val4 = (buffer[len - 2U] << 8) | buffer[len - 1U]; - LogDebug(LOG_MODEM, "M: %.*s %X %X %X %X", len - 11U, buffer + 3U, val1, val2, val3, val4); + LogDebug(LOG_MODEM, "DSP_FW_API %.*s %X %X %X %X", len - 11U, buffer + 3U, val1, val2, val3, val4); } else if (buffer[2U] == CMD_DEBUG_DUMP) { uint8_t data[255U]; ::memset(data, 0x00U, 255U); ::memcpy(data, buffer, len); - Utils::dump(1U, "Modem Debug Dump", data, len); + Utils::dump(1U, "Modem::printDebug() DSP_FW_API Debug Dump", data, len); } } @@ -2363,7 +2372,7 @@ RESP_TYPE_DVM Modem::getResponse() { m_rspDoubleLength = false; - //LogDebug(LOG_MODEM, "getResponse(), checking if we have data"); + //LogDebug(LOG_MODEM, "Modem::getResponse(), checking if we have data"); // get the start of the frame or nothing at all if (m_rspState == RESP_START) { @@ -2375,7 +2384,7 @@ RESP_TYPE_DVM Modem::getResponse() } if (ret == 0) { - //LogDebug(LOG_MODEM, "getResponse(), no data available"); + //LogDebug(LOG_MODEM, "Modem::getResponse(), no data available"); return RTM_TIMEOUT; } @@ -2391,12 +2400,12 @@ RESP_TYPE_DVM Modem::getResponse() m_rspDoubleLength = true; } - //LogDebug(LOG_MODEM, "getResponse(), RESP_START"); + //LogDebug(LOG_MODEM, "Modem::getResponse(), RESP_START"); m_rspState = RESP_LENGTH1; } - //LogDebug(LOG_MODEM, "getResponse(), getting frame length 1/2, rspDoubleLength = %u", m_rspDoubleLength); + //LogDebug(LOG_MODEM, "Modem::getResponse(), getting frame length 1/2, rspDoubleLength = %u", m_rspDoubleLength); // get the length of the frame, 1/2 if (m_rspState == RESP_LENGTH1) { int ret = m_port->read(m_buffer + 1U, 1U); @@ -2423,12 +2432,12 @@ RESP_TYPE_DVM Modem::getResponse() m_length = m_buffer[1U]; } - //LogDebug(LOG_MODEM, "getResponse(), RESP_LENGTH1, len = %u", m_length); + //LogDebug(LOG_MODEM, "Modem::getResponse(), RESP_LENGTH1, len = %u", m_length); m_rspOffset = 2U; } - //LogDebug(LOG_MODEM, "getResponse(), getting frame length 2/2"); + //LogDebug(LOG_MODEM, "Modem::getResponse(), getting frame length 2/2"); // get the length of the frame, 2/2 if (m_rspState == RESP_LENGTH2) { int ret = m_port->read(m_buffer + 2U, 1U); @@ -2444,13 +2453,13 @@ RESP_TYPE_DVM Modem::getResponse() m_length = (m_length + (m_buffer[2U] & 0xFFU)); m_rspState = RESP_TYPE; - //LogDebug(LOG_MODEM, "getResponse(), RESP_LENGTH2, len = %u", m_length); + //LogDebug(LOG_MODEM, "Modem::getResponse(), RESP_LENGTH2, len = %u", m_length); m_rspDoubleLength = true; m_rspOffset = 3U; } - //LogDebug(LOG_MODEM, "getResponse(), getting frame type"); + //LogDebug(LOG_MODEM, "Modem::getResponse(), getting frame type"); // get the frame type if (m_rspState == RESP_TYPE) { int ret = m_port->read(m_buffer + m_rspOffset, 1U); @@ -2465,18 +2474,18 @@ RESP_TYPE_DVM Modem::getResponse() m_rspType = (DVM_COMMANDS)m_buffer[m_rspOffset]; - //LogDebug(LOG_MODEM, "getResponse(), RESP_TYPE, len = %u, type = %u", m_length, m_rspType); + //LogDebug(LOG_MODEM, "Modem::getResponse(), RESP_TYPE, len = %u, type = %u", m_length, m_rspType); m_rspState = RESP_DATA; m_rspOffset++; } - //LogDebug(LOG_MODEM, "getResponse(), getting frame data"); + //LogDebug(LOG_MODEM, "Modem::getResponse(), getting frame data"); // get the frame data if (m_rspState == RESP_DATA) { - if (m_debug && m_trace) - LogDebug(LOG_MODEM, "getResponse(), RESP_DATA, len = %u, offset = %u, type = %02X", m_length, m_rspOffset, m_rspType); + if (m_respTrace) + LogDebug(LOG_MODEM, "Modem::getResponse(), RESP_DATA, len = %u, offset = %u, type = %02X", m_length, m_rspOffset, m_rspType); while (m_rspOffset < m_length) { int ret = m_port->read(m_buffer + m_rspOffset, m_length - m_rspOffset); @@ -2493,8 +2502,8 @@ RESP_TYPE_DVM Modem::getResponse() m_rspOffset += ret; } - if (m_debug && m_trace) - Utils::dump(1U, "Modem getResponse()", m_buffer, m_length); + if (m_respTrace) + Utils::dump(1U, "Modem::getResponse() Buffer", m_buffer, m_length); } m_rspState = RESP_START; diff --git a/src/host/modem/Modem.h b/src/host/modem/Modem.h index fb1728dd..93e6711f 100644 --- a/src/host/modem/Modem.h +++ b/src/host/modem/Modem.h @@ -897,6 +897,10 @@ namespace modem std::string rsnToString(uint8_t reason); public: + /** + * @brief Flag indicating if modem response trace is enabled. + */ + __PROTECTED_PROPERTY(bool, respTrace, ResponseTrace); /** * @brief Flag indicating if modem trace is enabled. */ diff --git a/src/host/modem/ModemV24.cpp b/src/host/modem/ModemV24.cpp index a12ee435..6a355ac8 100644 --- a/src/host/modem/ModemV24.cpp +++ b/src/host/modem/ModemV24.cpp @@ -198,6 +198,8 @@ void ModemV24::clock(uint32_t ms) convertToAirTIA(m_buffer + (cmdOffset + 1U), m_length - (cmdOffset + 1U)); else convertToAir(m_buffer + (cmdOffset + 1U), m_length - (cmdOffset + 1U)); + if (m_trace) + Utils::dump(1U, "ModemV24::clock() RX P25 Data", m_buffer + (cmdOffset + 1U), m_length - (cmdOffset + 1U)); } } break;