Merge branch 'master' into mqtt

This commit is contained in:
Jonathan Naylor 2025-03-14 13:39:49 +00:00
commit 62c33086ca
102 changed files with 1621 additions and 1489 deletions

286
Modem.cpp
View file

@ -1,5 +1,5 @@
/*
* Copyright (C) 2011-2018,2020,2021,2023 by Jonathan Naylor G4KLX
* Copyright (C) 2011-2018,2020,2021,2023,2025 by Jonathan Naylor G4KLX
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -234,11 +234,11 @@ m_ax25Enabled(false),
#endif
m_rxDCOffset(0),
m_txDCOffset(0),
m_port(NULL),
m_buffer(NULL),
m_port(nullptr),
m_buffer(nullptr),
m_length(0U),
m_offset(0U),
m_state(SS_START),
m_state(SERIAL_STATE::START),
m_type(0U),
#if defined(USE_DSTAR)
m_rxDStarData(1000U, "Modem RX D-Star"),
@ -376,7 +376,7 @@ CModem::~CModem()
void CModem::setPort(IModemPort* port)
{
assert(port != NULL);
assert(port != nullptr);
m_port = port;
}
@ -522,7 +522,7 @@ bool CModem::open()
if (!ret) {
m_port->close();
delete m_port;
m_port = NULL;
m_port = nullptr;
return false;
} else {
/* Stopping the inactivity timer here when a firmware version has been
@ -534,7 +534,7 @@ bool CModem::open()
if (!ret) {
m_port->close();
delete m_port;
m_port = NULL;
m_port = nullptr;
return false;
}
@ -542,7 +542,7 @@ bool CModem::open()
if (!ret) {
m_port->close();
delete m_port;
m_port = NULL;
m_port = nullptr;
return false;
}
@ -552,7 +552,7 @@ bool CModem::open()
if (!ret) {
m_port->close();
delete m_port;
m_port = NULL;
m_port = nullptr;
return false;
}
@ -560,7 +560,7 @@ bool CModem::open()
if (!ret) {
m_port->close();
delete m_port;
m_port = NULL;
m_port = nullptr;
return false;
}
@ -568,7 +568,7 @@ bool CModem::open()
if (!ret) {
m_port->close();
delete m_port;
m_port = NULL;
m_port = nullptr;
return false;
}
@ -577,7 +577,7 @@ bool CModem::open()
if (!ret) {
m_port->close();
delete m_port;
m_port = NULL;
m_port = nullptr;
return false;
}
}
@ -594,7 +594,7 @@ bool CModem::open()
void CModem::clock(unsigned int ms)
{
assert(m_port != NULL);
assert(m_port != nullptr);
// Poll the modem status every 250ms
m_statusTimer.clock(ms);
@ -616,12 +616,12 @@ void CModem::clock(unsigned int ms)
RESP_TYPE_MMDVM type = getResponse();
if (type == RTM_TIMEOUT) {
if (type == RESP_TYPE_MMDVM::TIMEOUT) {
// Nothing to do
} else if (type == RTM_ERROR) {
} else if (type == RESP_TYPE_MMDVM::ERR) {
// Nothing to do
} else {
// type == RTM_OK
// type == OK
switch (m_type) {
#if defined(USE_DSTAR)
case MMDVM_DSTAR_HEADER: {
@ -1445,7 +1445,7 @@ void CModem::clock(unsigned int ms)
void CModem::close()
{
assert(m_port != NULL);
assert(m_port != nullptr);
::LogMessage("Closing the MMDVM");
@ -1455,7 +1455,7 @@ void CModem::close()
#if defined(USE_DSTAR)
unsigned int CModem::readDStarData(unsigned char* data)
{
assert(data != NULL);
assert(data != nullptr);
if (m_rxDStarData.isEmpty())
return 0U;
@ -1471,7 +1471,7 @@ unsigned int CModem::readDStarData(unsigned char* data)
#if defined(USE_DMR)
unsigned int CModem::readDMRData1(unsigned char* data)
{
assert(data != NULL);
assert(data != nullptr);
if (m_rxDMRData1.isEmpty())
return 0U;
@ -1485,7 +1485,7 @@ unsigned int CModem::readDMRData1(unsigned char* data)
unsigned int CModem::readDMRData2(unsigned char* data)
{
assert(data != NULL);
assert(data != nullptr);
if (m_rxDMRData2.isEmpty())
return 0U;
@ -1501,7 +1501,7 @@ unsigned int CModem::readDMRData2(unsigned char* data)
#if defined(USE_YSF)
unsigned int CModem::readYSFData(unsigned char* data)
{
assert(data != NULL);
assert(data != nullptr);
if (m_rxYSFData.isEmpty())
return 0U;
@ -1517,7 +1517,7 @@ unsigned int CModem::readYSFData(unsigned char* data)
#if defined(USE_P25)
unsigned int CModem::readP25Data(unsigned char* data)
{
assert(data != NULL);
assert(data != nullptr);
if (m_rxP25Data.isEmpty())
return 0U;
@ -1533,7 +1533,7 @@ unsigned int CModem::readP25Data(unsigned char* data)
#if defined(USE_NXDN)
unsigned int CModem::readNXDNData(unsigned char* data)
{
assert(data != NULL);
assert(data != nullptr);
if (m_rxNXDNData.isEmpty())
return 0U;
@ -1549,7 +1549,7 @@ unsigned int CModem::readNXDNData(unsigned char* data)
#if defined(USE_M17)
unsigned int CModem::readM17Data(unsigned char* data)
{
assert(data != NULL);
assert(data != nullptr);
if (m_rxM17Data.isEmpty())
return 0U;
@ -1565,7 +1565,7 @@ unsigned int CModem::readM17Data(unsigned char* data)
#if defined(USE_FM)
unsigned int CModem::readFMData(unsigned char* data)
{
assert(data != NULL);
assert(data != nullptr);
if (m_rxFMData.isEmpty())
return 0U;
@ -1581,7 +1581,7 @@ unsigned int CModem::readFMData(unsigned char* data)
#if defined(USE_AX25)
unsigned int CModem::readAX25Data(unsigned char* data)
{
assert(data != NULL);
assert(data != nullptr);
if (m_rxAX25Data.isEmpty())
return 0U;
@ -1596,7 +1596,7 @@ unsigned int CModem::readAX25Data(unsigned char* data)
unsigned int CModem::readTransparentData(unsigned char* data)
{
assert(data != NULL);
assert(data != nullptr);
if (m_rxTransparentData.isEmpty())
return 0U;
@ -1632,7 +1632,7 @@ bool CModem::hasDStarSpace() const
bool CModem::writeDStarData(const unsigned char* data, unsigned int length)
{
assert(data != NULL);
assert(data != nullptr);
assert(length > 0U);
unsigned char buffer[50U];
@ -1682,7 +1682,7 @@ bool CModem::hasDMRSpace2() const
bool CModem::writeDMRData1(const unsigned char* data, unsigned int length)
{
assert(data != NULL);
assert(data != nullptr);
assert(length > 0U);
if (data[0U] != TAG_DATA && data[0U] != TAG_EOT)
@ -1705,7 +1705,7 @@ bool CModem::writeDMRData1(const unsigned char* data, unsigned int length)
bool CModem::writeDMRData2(const unsigned char* data, unsigned int length)
{
assert(data != NULL);
assert(data != nullptr);
assert(length > 0U);
if (data[0U] != TAG_DATA && data[0U] != TAG_EOT)
@ -1737,7 +1737,7 @@ bool CModem::hasYSFSpace() const
bool CModem::writeYSFData(const unsigned char* data, unsigned int length)
{
assert(data != NULL);
assert(data != nullptr);
assert(length > 0U);
if (data[0U] != TAG_DATA && data[0U] != TAG_EOT)
@ -1769,7 +1769,7 @@ bool CModem::hasP25Space() const
bool CModem::writeP25Data(const unsigned char* data, unsigned int length)
{
assert(data != NULL);
assert(data != nullptr);
assert(length > 0U);
if (data[0U] != TAG_HEADER && data[0U] != TAG_DATA && data[0U] != TAG_EOT)
@ -1801,7 +1801,7 @@ bool CModem::hasNXDNSpace() const
bool CModem::writeNXDNData(const unsigned char* data, unsigned int length)
{
assert(data != NULL);
assert(data != nullptr);
assert(length > 0U);
if (data[0U] != TAG_DATA && data[0U] != TAG_EOT)
@ -1833,7 +1833,7 @@ bool CModem::hasM17Space() const
bool CModem::writeM17Data(const unsigned char* data, unsigned int length)
{
assert(data != NULL);
assert(data != nullptr);
assert(length > 0U);
unsigned char buffer[130U];
@ -1876,7 +1876,7 @@ bool CModem::hasPOCSAGSpace() const
bool CModem::writePOCSAGData(const unsigned char* data, unsigned int length)
{
assert(data != NULL);
assert(data != nullptr);
assert(length > 0U);
unsigned char buffer[130U];
@ -1903,7 +1903,7 @@ unsigned int CModem::getFMSpace() const
bool CModem::writeFMData(const unsigned char* data, unsigned int length)
{
assert(data != NULL);
assert(data != nullptr);
assert(length > 0U);
unsigned char buffer[500U];
@ -1941,7 +1941,7 @@ bool CModem::hasAX25Space() const
bool CModem::writeAX25Data(const unsigned char* data, unsigned int length)
{
assert(data != NULL);
assert(data != nullptr);
assert(length > 0U);
unsigned char buffer[500U];
@ -1971,7 +1971,7 @@ bool CModem::writeAX25Data(const unsigned char* data, unsigned int length)
bool CModem::writeTransparentData(const unsigned char* data, unsigned int length)
{
assert(data != NULL);
assert(data != nullptr);
assert(length > 0U);
unsigned char buffer[250U];
@ -2006,12 +2006,12 @@ bool CModem::writeTransparentData(const unsigned char* data, unsigned int length
#if defined(USE_DSTAR)
bool CModem::writeDStarInfo(const char* my1, const char* my2, const char* your, const char* type, const char* reflector)
{
assert(m_port != NULL);
assert(my1 != NULL);
assert(my2 != NULL);
assert(your != NULL);
assert(type != NULL);
assert(reflector != NULL);
assert(m_port != nullptr);
assert(my1 != nullptr);
assert(my2 != nullptr);
assert(your != nullptr);
assert(type != nullptr);
assert(reflector != nullptr);
unsigned char buffer[50U];
@ -2037,8 +2037,8 @@ bool CModem::writeDStarInfo(const char* my1, const char* my2, const char* your,
#if defined(USE_DMR)
bool CModem::writeDMRInfo(unsigned int slotNo, const std::string& src, bool group, const std::string& dest, const char* type)
{
assert(m_port != NULL);
assert(type != NULL);
assert(m_port != nullptr);
assert(type != nullptr);
unsigned char buffer[50U];
@ -2065,11 +2065,11 @@ bool CModem::writeDMRInfo(unsigned int slotNo, const std::string& src, bool grou
#if defined(USE_YSF)
bool CModem::writeYSFInfo(const char* source, const char* dest, unsigned char dgid, const char* type, const char* origin)
{
assert(m_port != NULL);
assert(source != NULL);
assert(dest != NULL);
assert(type != NULL);
assert(origin != NULL);
assert(m_port != nullptr);
assert(source != nullptr);
assert(dest != nullptr);
assert(type != nullptr);
assert(origin != nullptr);
unsigned char buffer[40U];
@ -2095,9 +2095,9 @@ bool CModem::writeYSFInfo(const char* source, const char* dest, unsigned char dg
#if defined(USE_P25)
bool CModem::writeP25Info(const char* source, bool group, unsigned int dest, const char* type)
{
assert(m_port != NULL);
assert(source != NULL);
assert(type != NULL);
assert(m_port != nullptr);
assert(source != nullptr);
assert(type != nullptr);
unsigned char buffer[40U];
@ -2122,9 +2122,9 @@ bool CModem::writeP25Info(const char* source, bool group, unsigned int dest, con
#if defined(USE_NXDN)
bool CModem::writeNXDNInfo(const char* source, bool group, unsigned int dest, const char* type)
{
assert(m_port != NULL);
assert(source != NULL);
assert(type != NULL);
assert(m_port != nullptr);
assert(source != nullptr);
assert(type != nullptr);
unsigned char buffer[40U];
@ -2149,10 +2149,10 @@ bool CModem::writeNXDNInfo(const char* source, bool group, unsigned int dest, co
#if defined(USE_M17)
bool CModem::writeM17Info(const char* source, const char* dest, const char* type)
{
assert(m_port != NULL);
assert(source != NULL);
assert(dest != NULL);
assert(type != NULL);
assert(m_port != nullptr);
assert(source != nullptr);
assert(dest != nullptr);
assert(type != nullptr);
unsigned char buffer[40U];
@ -2175,7 +2175,7 @@ bool CModem::writeM17Info(const char* source, const char* dest, const char* type
#if defined(USE_POCSAG)
bool CModem::writePOCSAGInfo(unsigned int ric, const std::string& message)
{
assert(m_port != NULL);
assert(m_port != nullptr);
size_t length = message.size();
@ -2199,7 +2199,7 @@ bool CModem::writePOCSAGInfo(unsigned int ric, const std::string& message)
bool CModem::writeIPInfo(const std::string& address)
{
assert(m_port != NULL);
assert(m_port != nullptr);
size_t length = address.size();
@ -2220,8 +2220,8 @@ bool CModem::writeIPInfo(const std::string& address)
bool CModem::writeSerialData(const unsigned char* data, unsigned int length)
{
assert(m_port != NULL);
assert(data != NULL);
assert(m_port != nullptr);
assert(data != nullptr);
assert(length > 0U);
unsigned char buffer[255U];
@ -2311,7 +2311,7 @@ unsigned int CModem::getVersion() const
bool CModem::readVersion()
{
assert(m_port != NULL);
assert(m_port != nullptr);
CThread::sleep(2000U); // 2s
@ -2335,31 +2335,31 @@ bool CModem::readVersion()
for (unsigned int count = 0U; count < MAX_RESPONSES; count++) {
CThread::sleep(10U);
RESP_TYPE_MMDVM resp = getResponse();
if (resp == RTM_OK && m_buffer[2U] == MMDVM_GET_VERSION) {
if ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] == MMDVM_GET_VERSION)) {
if (::memcmp(m_buffer + 4U, "MMDVM ", 6U) == 0)
m_hwType = HWT_MMDVM;
m_hwType = HW_TYPE::MMDVM;
else if (::memcmp(m_buffer + 23U, "MMDVM ", 6U) == 0)
m_hwType = HWT_MMDVM;
m_hwType = HW_TYPE::MMDVM;
else if (::memcmp(m_buffer + 4U, "DVMEGA", 6U) == 0)
m_hwType = HWT_DVMEGA;
m_hwType = HW_TYPE::DVMEGA;
else if (::memcmp(m_buffer + 4U, "ZUMspot", 7U) == 0)
m_hwType = HWT_MMDVM_ZUMSPOT;
m_hwType = HW_TYPE::MMDVM_ZUMSPOT;
else if (::memcmp(m_buffer + 4U, "MMDVM_HS_Hat", 12U) == 0)
m_hwType = HWT_MMDVM_HS_HAT;
m_hwType = HW_TYPE::MMDVM_HS_HAT;
else if (::memcmp(m_buffer + 4U, "MMDVM_HS_Dual_Hat", 17U) == 0)
m_hwType = HWT_MMDVM_HS_DUAL_HAT;
m_hwType = HW_TYPE::MMDVM_HS_DUAL_HAT;
else if (::memcmp(m_buffer + 4U, "Nano_hotSPOT", 12U) == 0)
m_hwType = HWT_NANO_HOTSPOT;
m_hwType = HW_TYPE::NANO_HOTSPOT;
else if (::memcmp(m_buffer + 4U, "Nano_DV", 7U) == 0)
m_hwType = HWT_NANO_DV;
m_hwType = HW_TYPE::NANO_DV;
else if (::memcmp(m_buffer + 4U, "D2RG_MMDVM_HS", 13U) == 0)
m_hwType = HWT_D2RG_MMDVM_HS;
m_hwType = HW_TYPE::D2RG_MMDVM_HS;
else if (::memcmp(m_buffer + 4U, "MMDVM_HS-", 9U) == 0)
m_hwType = HWT_MMDVM_HS;
m_hwType = HW_TYPE::MMDVM_HS;
else if (::memcmp(m_buffer + 4U, "OpenGD77_HS", 11U) == 0)
m_hwType = HWT_OPENGD77_HS;
m_hwType = HW_TYPE::OPENGD77_HS;
else if (::memcmp(m_buffer + 4U, "SkyBridge", 9U) == 0)
m_hwType = HWT_SKYBRIDGE;
m_hwType = HW_TYPE::SKYBRIDGE;
m_protocolVersion = m_buffer[3U];
@ -2433,7 +2433,7 @@ bool CModem::readVersion()
bool CModem::readStatus()
{
assert(m_port != NULL);
assert(m_port != nullptr);
unsigned char buffer[3U];
@ -2460,7 +2460,7 @@ bool CModem::writeConfig()
bool CModem::setConfig1()
{
assert(m_port != NULL);
assert(m_port != nullptr);
unsigned char buffer[30U];
@ -2610,18 +2610,18 @@ bool CModem::setConfig1()
CThread::sleep(10U);
resp = getResponse();
if (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK) {
if ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] != MMDVM_ACK) && (m_buffer[2U] != MMDVM_NAK)) {
count++;
if (count >= MAX_RESPONSES) {
LogError("The MMDVM is not responding to the SET_CONFIG command");
return false;
}
}
} while (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK);
} while ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] != MMDVM_ACK) && (m_buffer[2U] != MMDVM_NAK));
// CUtils::dump(1U, "Response", m_buffer, m_length);
if (resp == RTM_OK && m_buffer[2U] == MMDVM_NAK) {
if ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] == MMDVM_NAK)) {
LogError("Received a NAK to the SET_CONFIG command from the modem");
return false;
}
@ -2633,7 +2633,7 @@ bool CModem::setConfig1()
bool CModem::setConfig2()
{
assert(m_port != NULL);
assert(m_port != nullptr);
unsigned char buffer[50U];
@ -2822,18 +2822,18 @@ bool CModem::setConfig2()
CThread::sleep(10U);
resp = getResponse();
if (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK) {
if ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] != MMDVM_ACK) && (m_buffer[2U] != MMDVM_NAK)) {
count++;
if (count >= MAX_RESPONSES) {
LogError("The MMDVM is not responding to the SET_CONFIG command");
return false;
}
}
} while (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK);
} while ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] != MMDVM_ACK) && (m_buffer[2U] != MMDVM_NAK));
// CUtils::dump(1U, "Response", m_buffer, m_length);
if (resp == RTM_OK && m_buffer[2U] == MMDVM_NAK) {
if ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] == MMDVM_NAK)) {
LogError("Received a NAK to the SET_CONFIG command from the modem");
return false;
}
@ -2845,7 +2845,7 @@ bool CModem::setConfig2()
bool CModem::setFrequency()
{
assert(m_port != NULL);
assert(m_port != nullptr);
unsigned char buffer[20U];
unsigned char len;
@ -2856,7 +2856,7 @@ bool CModem::setFrequency()
pocsagFrequency = m_pocsagFrequency;
#endif
if (m_hwType == HWT_DVMEGA)
if (m_hwType == HW_TYPE::DVMEGA)
len = 12U;
else {
buffer[12U] = (unsigned char)(m_rfLevel * 2.55F + 0.5F);
@ -2906,18 +2906,18 @@ bool CModem::setFrequency()
CThread::sleep(10U);
resp = getResponse();
if (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK) {
if ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] != MMDVM_ACK) && (m_buffer[2U] != MMDVM_NAK)) {
count++;
if (count >= MAX_RESPONSES) {
LogError("The MMDVM is not responding to the SET_FREQ command");
return false;
}
}
} while (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK);
} while ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] != MMDVM_ACK) && (m_buffer[2U] != MMDVM_NAK));
// CUtils::dump(1U, "Response", m_buffer, m_length);
if (resp == RTM_OK && m_buffer[2U] == MMDVM_NAK) {
if ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] == MMDVM_NAK)) {
LogError("Received a NAK to the SET_FREQ command from the modem");
return false;
}
@ -2927,92 +2927,92 @@ bool CModem::setFrequency()
RESP_TYPE_MMDVM CModem::getResponse()
{
assert(m_port != NULL);
assert(m_port != nullptr);
if (m_state == SS_START) {
if (m_state == SERIAL_STATE::START) {
// Get the start of the frame or nothing at all
int ret = m_port->read(m_buffer + 0U, 1U);
if (ret < 0) {
LogError("Error when reading from the modem");
return RTM_ERROR;
return RESP_TYPE_MMDVM::ERR;
}
if (ret == 0)
return RTM_TIMEOUT;
return RESP_TYPE_MMDVM::TIMEOUT;
if (m_buffer[0U] != MMDVM_FRAME_START)
return RTM_TIMEOUT;
return RESP_TYPE_MMDVM::TIMEOUT;
m_state = SS_LENGTH1;
m_state = SERIAL_STATE::LENGTH1;
m_length = 1U;
}
if (m_state == SS_LENGTH1) {
if (m_state == SERIAL_STATE::LENGTH1) {
// Get the length of the frame, 1/2
int ret = m_port->read(m_buffer + 1U, 1U);
if (ret < 0) {
LogError("Error when reading from the modem");
m_state = SS_START;
return RTM_ERROR;
m_state = SERIAL_STATE::START;
return RESP_TYPE_MMDVM::ERR;
}
if (ret == 0)
return RTM_TIMEOUT;
return RESP_TYPE_MMDVM::TIMEOUT;
m_length = m_buffer[1U];
m_offset = 2U;
if (m_length == 0U)
m_state = SS_LENGTH2;
m_state = SERIAL_STATE::LENGTH2;
else
m_state = SS_TYPE;
m_state = SERIAL_STATE::TYPE;
}
if (m_state == SS_LENGTH2) {
if (m_state == SERIAL_STATE::LENGTH2) {
// Get the length of the frane, 2/2
int ret = m_port->read(m_buffer + 2U, 1U);
if (ret < 0) {
LogError("Error when reading from the modem");
m_state = SS_START;
return RTM_ERROR;
m_state = SERIAL_STATE::START;
return RESP_TYPE_MMDVM::ERR;
}
if (ret == 0)
return RTM_TIMEOUT;
return RESP_TYPE_MMDVM::TIMEOUT;
m_length = m_buffer[2U] + 255U;
m_offset = 3U;
m_state = SS_TYPE;
m_state = SERIAL_STATE::TYPE;
}
if (m_state == SS_TYPE) {
if (m_state == SERIAL_STATE::TYPE) {
// Get the frame type
int ret = m_port->read(&m_type, 1U);
if (ret < 0) {
LogError("Error when reading from the modem");
m_state = SS_START;
return RTM_ERROR;
m_state = SERIAL_STATE::START;
return RESP_TYPE_MMDVM::ERR;
}
if (ret == 0)
return RTM_TIMEOUT;
return RESP_TYPE_MMDVM::TIMEOUT;
m_buffer[m_offset++] = m_type;
m_state = SS_DATA;
m_state = SERIAL_STATE::DATA;
}
if (m_state == SS_DATA) {
if (m_state == SERIAL_STATE::DATA) {
while (m_offset < m_length) {
int ret = m_port->read(m_buffer + m_offset, m_length - m_offset);
if (ret < 0) {
LogError("Error when reading from the modem");
m_state = SS_START;
return RTM_ERROR;
m_state = SERIAL_STATE::START;
return RESP_TYPE_MMDVM::ERR;
}
if (ret == 0)
return RTM_TIMEOUT;
return RESP_TYPE_MMDVM::TIMEOUT;
if (ret > 0)
m_offset += ret;
@ -3022,9 +3022,9 @@ RESP_TYPE_MMDVM CModem::getResponse()
// CUtils::dump(1U, "Received", m_buffer, m_length);
m_offset = m_length > 255U ? 4U : 3U;
m_state = SS_START;
m_state = SERIAL_STATE::START;
return RTM_OK;
return RESP_TYPE_MMDVM::OK;
}
HW_TYPE CModem::getHWType() const
@ -3039,7 +3039,7 @@ unsigned char CModem::getMode() const
bool CModem::setMode(unsigned char mode)
{
assert(m_port != NULL);
assert(m_port != nullptr);
unsigned char buffer[4U];
@ -3055,7 +3055,7 @@ bool CModem::setMode(unsigned char mode)
bool CModem::sendCWId(const std::string& callsign)
{
assert(m_port != NULL);
assert(m_port != nullptr);
unsigned int length = (unsigned int)callsign.length();
if (length > 200U)
@ -3078,7 +3078,7 @@ bool CModem::sendCWId(const std::string& callsign)
#if defined(USE_DMR)
bool CModem::writeDMRStart(bool tx)
{
assert(m_port != NULL);
assert(m_port != nullptr);
if (tx && m_tx)
return true;
@ -3099,7 +3099,7 @@ bool CModem::writeDMRStart(bool tx)
bool CModem::writeDMRAbort(unsigned int slotNo)
{
assert(m_port != NULL);
assert(m_port != nullptr);
if (slotNo == 1U)
m_txDMRData1.clear();
@ -3120,8 +3120,8 @@ bool CModem::writeDMRAbort(unsigned int slotNo)
bool CModem::writeDMRShortLC(const unsigned char* lc)
{
assert(m_port != NULL);
assert(lc != NULL);
assert(m_port != nullptr);
assert(lc != nullptr);
unsigned char buffer[12U];
@ -3204,7 +3204,7 @@ void CModem::setFMExtParams(const std::string& ack, unsigned int audioBoost)
bool CModem::setFMCallsignParams()
{
assert(m_port != NULL);
assert(m_port != nullptr);
unsigned char buffer[80U];
unsigned char len = 10U + (unsigned char)m_fmCallsign.size();
@ -3244,18 +3244,18 @@ bool CModem::setFMCallsignParams()
CThread::sleep(10U);
resp = getResponse();
if (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK) {
if ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] != MMDVM_ACK) && (m_buffer[2U] != MMDVM_NAK)) {
count++;
if (count >= MAX_RESPONSES) {
LogError("The MMDVM is not responding to the SET_FM_PARAMS1 command");
return false;
}
}
} while (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK);
} while ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] != MMDVM_ACK) && (m_buffer[2U] != MMDVM_NAK));
// CUtils::dump(1U, "Response", m_buffer, m_length);
if (resp == RTM_OK && m_buffer[2U] == MMDVM_NAK) {
if ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] == MMDVM_NAK)) {
LogError("Received a NAK to the SET_FM_PARAMS1 command from the modem");
return false;
}
@ -3265,7 +3265,7 @@ bool CModem::setFMCallsignParams()
bool CModem::setFMAckParams()
{
assert(m_port != NULL);
assert(m_port != nullptr);
unsigned char buffer[80U];
unsigned char len = 8U + (unsigned char)m_fmRfAck.size();
@ -3296,18 +3296,18 @@ bool CModem::setFMAckParams()
CThread::sleep(10U);
resp = getResponse();
if (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK) {
if ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] != MMDVM_ACK) && (m_buffer[2U] != MMDVM_NAK)) {
count++;
if (count >= MAX_RESPONSES) {
LogError("The MMDVM is not responding to the SET_FM_PARAMS2 command");
return false;
}
}
} while (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK);
} while ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] != MMDVM_ACK) && (m_buffer[2U] != MMDVM_NAK));
// CUtils::dump(1U, "Response", m_buffer, m_length);
if (resp == RTM_OK && m_buffer[2U] == MMDVM_NAK) {
if ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] == MMDVM_NAK)) {
LogError("Received a NAK to the SET_FM_PARAMS2 command from the modem");
return false;
}
@ -3317,7 +3317,7 @@ bool CModem::setFMAckParams()
bool CModem::setFMMiscParams()
{
assert(m_port != NULL);
assert(m_port != nullptr);
unsigned char buffer[20U];
@ -3365,18 +3365,18 @@ bool CModem::setFMMiscParams()
CThread::sleep(10U);
resp = getResponse();
if (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK) {
if ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] != MMDVM_ACK) && (m_buffer[2U] != MMDVM_NAK)) {
count++;
if (count >= MAX_RESPONSES) {
LogError("The MMDVM is not responding to the SET_FM_PARAMS3 command");
return false;
}
}
} while (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK);
} while ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] != MMDVM_ACK) && (m_buffer[2U] != MMDVM_NAK));
// CUtils::dump(1U, "Response", m_buffer, m_length);
if (resp == RTM_OK && m_buffer[2U] == MMDVM_NAK) {
if ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] == MMDVM_NAK)) {
LogError("Received a NAK to the SET_FM_PARAMS3 command from the modem");
return false;
}
@ -3386,7 +3386,7 @@ bool CModem::setFMMiscParams()
bool CModem::setFMExtParams()
{
assert(m_port != NULL);
assert(m_port != nullptr);
unsigned char buffer[80U];
unsigned char len = 7U + (unsigned char)m_fmExtAck.size();
@ -3416,18 +3416,18 @@ bool CModem::setFMExtParams()
CThread::sleep(10U);
resp = getResponse();
if (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK) {
if ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] != MMDVM_ACK) && (m_buffer[2U] != MMDVM_NAK)) {
count++;
if (count >= MAX_RESPONSES) {
LogError("The MMDVM is not responding to the SET_FM_PARAMS4 command");
return false;
}
}
} while (resp == RTM_OK && m_buffer[2U] != MMDVM_ACK && m_buffer[2U] != MMDVM_NAK);
} while ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] != MMDVM_ACK) && (m_buffer[2U] != MMDVM_NAK));
// CUtils::dump(1U, "Response", m_buffer, m_length);
if (resp == RTM_OK && m_buffer[2U] == MMDVM_NAK) {
if ((resp == RESP_TYPE_MMDVM::OK) && (m_buffer[2U] == MMDVM_NAK)) {
LogError("Received a NAK to the SET_FM_PARAMS4 command from the modem");
return false;
}