diff --git a/Conf.cpp b/Conf.cpp index 6091f78..fe6f1b5 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2023 by Jonathan Naylor G4KLX + * Copyright (C) 2015-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 @@ -27,41 +27,41 @@ const int BUFFER_SIZE = 500; -enum SECTION { - SECTION_NONE, - SECTION_GENERAL, - SECTION_INFO, - SECTION_LOG, - SECTION_CWID, - SECTION_DMRID_LOOKUP, - SECTION_NXDNID_LOOKUP, - SECTION_MODEM, - SECTION_TRANSPARENT, - SECTION_DSTAR, - SECTION_DMR, - SECTION_FUSION, - SECTION_P25, - SECTION_NXDN, - SECTION_M17, - SECTION_POCSAG, - SECTION_FM, - SECTION_AX25, - SECTION_DSTAR_NETWORK, - SECTION_DMR_NETWORK, - SECTION_FUSION_NETWORK, - SECTION_P25_NETWORK, - SECTION_NXDN_NETWORK, - SECTION_M17_NETWORK, - SECTION_POCSAG_NETWORK, - SECTION_FM_NETWORK, - SECTION_AX25_NETWORK, - SECTION_TFTSERIAL, - SECTION_HD44780, - SECTION_NEXTION, - SECTION_OLED, - SECTION_LCDPROC, - SECTION_LOCK_FILE, - SECTION_REMOTE_CONTROL +enum class SECTION { + NONE, + GENERAL, + INFO, + LOG, + CWID, + DMRID_LOOKUP, + NXDNID_LOOKUP, + MODEM, + TRANSPARENT, + DSTAR, + DMR, + FUSION, + P25, + NXDN, + M17, + POCSAG, + FM, + AX25, + DSTAR_NETWORK, + DMR_NETWORK, + FUSION_NETWORK, + P25_NETWORK, + NXDN_NETWORK, + M17_NETWORK, + POCSAG_NETWORK, + FM_NETWORK, + AX25_NETWORK, + TFTSERIAL, + HD44780, + NEXTION, + OLED, + LCDPROC, + LOCK_FILE, + REMOTE_CONTROL }; CConf::CConf(const std::string& file) : @@ -139,12 +139,12 @@ m_dstarBlackList(), m_dstarWhiteList(), m_dstarAckReply(true), m_dstarAckTime(750U), -m_dstarAckMessage(DSTAR_ACK_BER), +m_dstarAckMessage(DSTAR_ACK::BER), m_dstarErrorReply(true), m_dstarRemoteGateway(false), m_dstarModeHang(10U), m_dmrEnabled(false), -m_dmrBeacons(DMR_BEACONS_OFF), +m_dmrBeacons(DMR_BEACONS::OFF), m_dmrBeaconInterval(60U), m_dmrBeaconDuration(3U), m_dmrId(0U), @@ -160,7 +160,7 @@ m_dmrSlot2TGWhiteList(), m_dmrCallHang(10U), m_dmrTXHang(4U), m_dmrModeHang(10U), -m_dmrOVCM(DMR_OVCM_OFF), +m_dmrOVCM(DMR_OVCM::OFF), m_dmrProtect(false), m_fusionEnabled(false), m_fusionLowDeviation(false), @@ -361,7 +361,7 @@ bool CConf::read() return false; } - SECTION section = SECTION_NONE; + SECTION section = SECTION::NONE; char buffer[BUFFER_SIZE]; while (::fgets(buffer, BUFFER_SIZE, fp) != NULL) { @@ -370,73 +370,73 @@ bool CConf::read() if (buffer[0U] == '[') { if (::strncmp(buffer, "[General]", 9U) == 0) - section = SECTION_GENERAL; + section = SECTION::GENERAL; else if (::strncmp(buffer, "[Info]", 6U) == 0) - section = SECTION_INFO; + section = SECTION::INFO; else if (::strncmp(buffer, "[Log]", 5U) == 0) - section = SECTION_LOG; + section = SECTION::LOG; else if (::strncmp(buffer, "[CW Id]", 7U) == 0) - section = SECTION_CWID; + section = SECTION::CWID; else if (::strncmp(buffer, "[DMR Id Lookup]", 15U) == 0) - section = SECTION_DMRID_LOOKUP; + section = SECTION::DMRID_LOOKUP; else if (::strncmp(buffer, "[NXDN Id Lookup]", 16U) == 0) - section = SECTION_NXDNID_LOOKUP; + section = SECTION::NXDNID_LOOKUP; else if (::strncmp(buffer, "[Modem]", 7U) == 0) - section = SECTION_MODEM; + section = SECTION::MODEM; else if (::strncmp(buffer, "[Transparent Data]", 18U) == 0) - section = SECTION_TRANSPARENT; + section = SECTION::TRANSPARENT; else if (::strncmp(buffer, "[D-Star]", 8U) == 0) - section = SECTION_DSTAR; + section = SECTION::DSTAR; else if (::strncmp(buffer, "[DMR]", 5U) == 0) - section = SECTION_DMR; + section = SECTION::DMR; else if (::strncmp(buffer, "[System Fusion]", 15U) == 0) - section = SECTION_FUSION; + section = SECTION::FUSION; else if (::strncmp(buffer, "[P25]", 5U) == 0) - section = SECTION_P25; + section = SECTION::P25; else if (::strncmp(buffer, "[NXDN]", 6U) == 0) - section = SECTION_NXDN; + section = SECTION::NXDN; else if (::strncmp(buffer, "[M17]", 5U) == 0) - section = SECTION_M17; + section = SECTION::M17; else if (::strncmp(buffer, "[POCSAG]", 8U) == 0) - section = SECTION_POCSAG; + section = SECTION::POCSAG; else if (::strncmp(buffer, "[FM]", 4U) == 0) - section = SECTION_FM; + section = SECTION::FM; else if (::strncmp(buffer, "[AX.25]", 7U) == 0) - section = SECTION_AX25; + section = SECTION::AX25; else if (::strncmp(buffer, "[D-Star Network]", 16U) == 0) - section = SECTION_DSTAR_NETWORK; + section = SECTION::DSTAR_NETWORK; else if (::strncmp(buffer, "[DMR Network]", 13U) == 0) - section = SECTION_DMR_NETWORK; + section = SECTION::DMR_NETWORK; else if (::strncmp(buffer, "[System Fusion Network]", 23U) == 0) - section = SECTION_FUSION_NETWORK; + section = SECTION::FUSION_NETWORK; else if (::strncmp(buffer, "[P25 Network]", 13U) == 0) - section = SECTION_P25_NETWORK; + section = SECTION::P25_NETWORK; else if (::strncmp(buffer, "[NXDN Network]", 14U) == 0) - section = SECTION_NXDN_NETWORK; + section = SECTION::NXDN_NETWORK; else if (::strncmp(buffer, "[M17 Network]", 13U) == 0) - section = SECTION_M17_NETWORK; + section = SECTION::M17_NETWORK; else if (::strncmp(buffer, "[POCSAG Network]", 16U) == 0) - section = SECTION_POCSAG_NETWORK; + section = SECTION::POCSAG_NETWORK; else if (::strncmp(buffer, "[FM Network]", 12U) == 0) - section = SECTION_FM_NETWORK; + section = SECTION::FM_NETWORK; else if (::strncmp(buffer, "[AX.25 Network]", 15U) == 0) - section = SECTION_AX25_NETWORK; + section = SECTION::AX25_NETWORK; else if (::strncmp(buffer, "[TFT Serial]", 12U) == 0) - section = SECTION_TFTSERIAL; + section = SECTION::TFTSERIAL; else if (::strncmp(buffer, "[HD44780]", 9U) == 0) - section = SECTION_HD44780; + section = SECTION::HD44780; else if (::strncmp(buffer, "[Nextion]", 9U) == 0) - section = SECTION_NEXTION; + section = SECTION::NEXTION; else if (::strncmp(buffer, "[OLED]", 6U) == 0) - section = SECTION_OLED; + section = SECTION::OLED; else if (::strncmp(buffer, "[LCDproc]", 9U) == 0) - section = SECTION_LCDPROC; + section = SECTION::LCDPROC; else if (::strncmp(buffer, "[Lock File]", 11U) == 0) - section = SECTION_LOCK_FILE; + section = SECTION::LOCK_FILE; else if (::strncmp(buffer, "[Remote Control]", 16U) == 0) - section = SECTION_REMOTE_CONTROL; + section = SECTION::REMOTE_CONTROL; else - section = SECTION_NONE; + section = SECTION::NONE; continue; } @@ -466,7 +466,7 @@ bool CConf::read() *p = '\0'; } - if (section == SECTION_GENERAL) { + if (section == SECTION::GENERAL) { if (::strcmp(key, "Callsign") == 0) { // Convert the callsign to upper case for (unsigned int i = 0U; value[i] != 0; i++) @@ -489,7 +489,7 @@ bool CConf::read() m_display = value; else if (::strcmp(key, "Daemon") == 0) m_daemon = ::atoi(value) == 1; - } else if (section == SECTION_INFO) { + } else if (section == SECTION::INFO) { if (::strcmp(key, "TXFrequency") == 0) m_pocsagFrequency = m_txFrequency = (unsigned int)::atoi(value); else if (::strcmp(key, "RXFrequency") == 0) @@ -508,7 +508,7 @@ bool CConf::read() m_description = value; else if (::strcmp(key, "URL") == 0) m_url = value; - } else if (section == SECTION_LOG) { + } else if (section == SECTION::LOG) { if (::strcmp(key, "FilePath") == 0) m_logFilePath = value; else if (::strcmp(key, "FileRoot") == 0) @@ -519,7 +519,7 @@ bool CConf::read() m_logDisplayLevel = (unsigned int)::atoi(value); else if (::strcmp(key, "FileRotate") == 0) m_logFileRotate = ::atoi(value) == 1; - } else if (section == SECTION_CWID) { + } else if (section == SECTION::CWID) { if (::strcmp(key, "Enable") == 0) m_cwIdEnabled = ::atoi(value) == 1; else if (::strcmp(key, "Time") == 0) @@ -530,17 +530,17 @@ bool CConf::read() value[i] = ::toupper(value[i]); m_cwIdCallsign = value; } - } else if (section == SECTION_DMRID_LOOKUP) { + } else if (section == SECTION::DMRID_LOOKUP) { if (::strcmp(key, "File") == 0) m_dmrIdLookupFile = value; else if (::strcmp(key, "Time") == 0) m_dmrIdLookupTime = (unsigned int)::atoi(value); - } else if (section == SECTION_NXDNID_LOOKUP) { + } else if (section == SECTION::NXDNID_LOOKUP) { if (::strcmp(key, "File") == 0) m_nxdnIdLookupFile = value; else if (::strcmp(key, "Time") == 0) m_nxdnIdLookupTime = (unsigned int)::atoi(value); - } else if (section == SECTION_MODEM) { + } else if (section == SECTION::MODEM) { if (::strcmp(key, "Protocol") == 0) m_modemProtocol = value; else if (::strcmp(key, "UARTPort") == 0) @@ -611,7 +611,7 @@ bool CConf::read() m_modemTrace = ::atoi(value) == 1; else if (::strcmp(key, "Debug") == 0) m_modemDebug = ::atoi(value) == 1; - } else if (section == SECTION_TRANSPARENT) { + } else if (section == SECTION::TRANSPARENT) { if (::strcmp(key, "Enable") == 0) m_transparentEnabled = ::atoi(value) == 1; else if (::strcmp(key, "RemoteAddress") == 0) @@ -622,7 +622,7 @@ bool CConf::read() m_transparentLocalPort = (unsigned short)::atoi(value); else if (::strcmp(key, "SendFrameType") == 0) m_transparentSendFrameType = (unsigned int)::atoi(value); - } else if (section == SECTION_DSTAR) { + } else if (section == SECTION::DSTAR) { if (::strcmp(key, "Enable") == 0) m_dstarEnabled = ::atoi(value) == 1; else if (::strcmp(key, "Module") == 0) { @@ -661,22 +661,22 @@ bool CConf::read() else if (::strcmp(key, "AckTime") == 0) m_dstarAckTime = (unsigned int)::atoi(value); else if (::strcmp(key, "AckMessage") == 0) { - m_dstarAckMessage = (DSTAR_ACK_MESSAGE)::atoi(value); - if (m_dstarAckMessage != DSTAR_ACK_BER && m_dstarAckMessage != DSTAR_ACK_RSSI && m_dstarAckMessage != DSTAR_ACK_SMETER) - m_dstarAckMessage = DSTAR_ACK_BER; + m_dstarAckMessage = DSTAR_ACK(::atoi(value)); + if ((m_dstarAckMessage != DSTAR_ACK::BER) && (m_dstarAckMessage != DSTAR_ACK::RSSI) && (m_dstarAckMessage != DSTAR_ACK::SMETER)) + m_dstarAckMessage = DSTAR_ACK::BER; } else if (::strcmp(key, "ErrorReply") == 0) m_dstarErrorReply = ::atoi(value) == 1; else if (::strcmp(key, "RemoteGateway") == 0) m_dstarRemoteGateway = ::atoi(value) == 1; else if (::strcmp(key, "ModeHang") == 0) m_dstarModeHang = (unsigned int)::atoi(value); - } else if (section == SECTION_DMR) { + } else if (section == SECTION::DMR) { if (::strcmp(key, "Enable") == 0) m_dmrEnabled = ::atoi(value) == 1; else if (::strcmp(key, "Beacons") == 0) - m_dmrBeacons = ::atoi(value) == 1 ? DMR_BEACONS_NETWORK : DMR_BEACONS_OFF; + m_dmrBeacons = ::atoi(value) == 1 ? DMR_BEACONS::NETWORK : DMR_BEACONS::OFF; else if (::strcmp(key, "BeaconInterval") == 0) { - m_dmrBeacons = m_dmrBeacons != DMR_BEACONS_OFF ? DMR_BEACONS_TIMED : DMR_BEACONS_OFF; + m_dmrBeacons = m_dmrBeacons != DMR_BEACONS::OFF ? DMR_BEACONS::TIMED : DMR_BEACONS::OFF; m_dmrBeaconInterval = (unsigned int)::atoi(value); } else if (::strcmp(key, "BeaconDuration") == 0) m_dmrBeaconDuration = (unsigned int)::atoi(value); @@ -739,24 +739,24 @@ bool CConf::read() else if (::strcmp(key, "OVCM") == 0) { switch (::atoi(value)) { case 1: - m_dmrOVCM = DMR_OVCM_RX_ON; + m_dmrOVCM = DMR_OVCM::RX_ON; break; case 2: - m_dmrOVCM = DMR_OVCM_TX_ON; + m_dmrOVCM = DMR_OVCM::TX_ON; break; case 3: - m_dmrOVCM = DMR_OVCM_ON; + m_dmrOVCM = DMR_OVCM::ON; break; case 4: - m_dmrOVCM = DMR_OVCM_FORCE_OFF; + m_dmrOVCM = DMR_OVCM::FORCE_OFF; break; default: - m_dmrOVCM = DMR_OVCM_OFF; + m_dmrOVCM = DMR_OVCM::OFF; break; } } else if (::strcmp(key, "Protect") == 0) m_dmrProtect = ::atoi(value) == 1; - } else if (section == SECTION_FUSION) { + } else if (section == SECTION::FUSION) { if (::strcmp(key, "Enable") == 0) m_fusionEnabled = ::atoi(value) == 1; else if (::strcmp(key, "LowDeviation") == 0) @@ -769,7 +769,7 @@ bool CConf::read() m_fusionTXHang = (unsigned int)::atoi(value); else if (::strcmp(key, "ModeHang") == 0) m_fusionModeHang = (unsigned int)::atoi(value); - } else if (section == SECTION_P25) { + } else if (section == SECTION::P25) { if (::strcmp(key, "Enable") == 0) m_p25Enabled = ::atoi(value) == 1; else if (::strcmp(key, "Id") == 0) @@ -786,7 +786,7 @@ bool CConf::read() m_p25TXHang = (unsigned int)::atoi(value); else if (::strcmp(key, "ModeHang") == 0) m_p25ModeHang = (unsigned int)::atoi(value); - } else if (section == SECTION_NXDN) { + } else if (section == SECTION::NXDN) { if (::strcmp(key, "Enable") == 0) m_nxdnEnabled = ::atoi(value) == 1; else if (::strcmp(key, "Id") == 0) @@ -801,7 +801,7 @@ bool CConf::read() m_nxdnTXHang = (unsigned int)::atoi(value); else if (::strcmp(key, "ModeHang") == 0) m_nxdnModeHang = (unsigned int)::atoi(value); - } else if (section == SECTION_M17) { + } else if (section == SECTION::M17) { if (::strcmp(key, "Enable") == 0) m_m17Enabled = ::atoi(value) == 1; else if (::strcmp(key, "CAN") == 0) @@ -814,12 +814,12 @@ bool CConf::read() m_m17TXHang = (unsigned int)::atoi(value); else if (::strcmp(key, "ModeHang") == 0) m_m17ModeHang = (unsigned int)::atoi(value); - } else if (section == SECTION_POCSAG) { + } else if (section == SECTION::POCSAG) { if (::strcmp(key, "Enable") == 0) m_pocsagEnabled = ::atoi(value) == 1; else if (::strcmp(key, "Frequency") == 0) m_pocsagFrequency = (unsigned int)::atoi(value); - } else if (section == SECTION_FM) { + } else if (section == SECTION::FM) { if (::strcmp(key, "Enable") == 0) m_fmEnabled = ::atoi(value) == 1; else if (::strcmp(key, "Callsign") == 0) { @@ -905,7 +905,7 @@ bool CConf::read() m_fmExtAudioBoost = (unsigned int)::atoi(value); else if (::strcmp(key, "ModeHang") == 0) m_fmModeHang = (unsigned int)::atoi(value); - } else if (section == SECTION_AX25) { + } else if (section == SECTION::AX25) { if (::strcmp(key, "Enable") == 0) m_ax25Enabled = ::atoi(value) == 1; else if (::strcmp(key, "TXDelay") == 0) @@ -918,7 +918,7 @@ bool CConf::read() m_ax25PPersist = (unsigned int)::atoi(value); else if (::strcmp(key, "Trace") == 0) m_ax25Trace = ::atoi(value) == 1; - } else if (section == SECTION_DSTAR_NETWORK) { + } else if (section == SECTION::DSTAR_NETWORK) { if (::strcmp(key, "Enable") == 0) m_dstarNetworkEnabled = ::atoi(value) == 1; else if (::strcmp(key, "GatewayAddress") == 0) @@ -933,7 +933,7 @@ bool CConf::read() m_dstarNetworkModeHang = (unsigned int)::atoi(value); else if (::strcmp(key, "Debug") == 0) m_dstarNetworkDebug = ::atoi(value) == 1; - } else if (section == SECTION_DMR_NETWORK) { + } else if (section == SECTION::DMR_NETWORK) { if (::strcmp(key, "Enable") == 0) m_dmrNetworkEnabled = ::atoi(value) == 1; else if (::strcmp(key, "Type") == 0) @@ -960,7 +960,7 @@ bool CConf::read() m_dmrNetworkSlot2 = ::atoi(value) == 1; else if (::strcmp(key, "ModeHang") == 0) m_dmrNetworkModeHang = (unsigned int)::atoi(value); - } else if (section == SECTION_FUSION_NETWORK) { + } else if (section == SECTION::FUSION_NETWORK) { if (::strcmp(key, "Enable") == 0) m_fusionNetworkEnabled = ::atoi(value) == 1; else if (::strcmp(key, "LocalAddress") == 0) @@ -975,7 +975,7 @@ bool CConf::read() m_fusionNetworkModeHang = (unsigned int)::atoi(value); else if (::strcmp(key, "Debug") == 0) m_fusionNetworkDebug = ::atoi(value) == 1; - } else if (section == SECTION_P25_NETWORK) { + } else if (section == SECTION::P25_NETWORK) { if (::strcmp(key, "Enable") == 0) m_p25NetworkEnabled = ::atoi(value) == 1; else if (::strcmp(key, "GatewayAddress") == 0) @@ -990,7 +990,7 @@ bool CConf::read() m_p25NetworkModeHang = (unsigned int)::atoi(value); else if (::strcmp(key, "Debug") == 0) m_p25NetworkDebug = ::atoi(value) == 1; - } else if (section == SECTION_NXDN_NETWORK) { + } else if (section == SECTION::NXDN_NETWORK) { if (::strcmp(key, "Enable") == 0) m_nxdnNetworkEnabled = ::atoi(value) == 1; else if (::strcmp(key, "LocalAddress") == 0) @@ -1005,7 +1005,7 @@ bool CConf::read() m_nxdnNetworkModeHang = (unsigned int)::atoi(value); else if (::strcmp(key, "Debug") == 0) m_nxdnNetworkDebug = ::atoi(value) == 1; - } else if (section == SECTION_M17_NETWORK) { + } else if (section == SECTION::M17_NETWORK) { if (::strcmp(key, "Enable") == 0) m_m17NetworkEnabled = ::atoi(value) == 1; else if (::strcmp(key, "LocalAddress") == 0) @@ -1020,7 +1020,7 @@ bool CConf::read() m_m17NetworkModeHang = (unsigned int)::atoi(value); else if (::strcmp(key, "Debug") == 0) m_m17NetworkDebug = ::atoi(value) == 1; - } else if (section == SECTION_POCSAG_NETWORK) { + } else if (section == SECTION::POCSAG_NETWORK) { if (::strcmp(key, "Enable") == 0) m_pocsagNetworkEnabled = ::atoi(value) == 1; else if (::strcmp(key, "LocalAddress") == 0) @@ -1035,7 +1035,7 @@ bool CConf::read() m_pocsagNetworkModeHang = (unsigned int)::atoi(value); else if (::strcmp(key, "Debug") == 0) m_pocsagNetworkDebug = ::atoi(value) == 1; - } else if (section == SECTION_FM_NETWORK) { + } else if (section == SECTION::FM_NETWORK) { if (::strcmp(key, "Enable") == 0) m_fmNetworkEnabled = ::atoi(value) == 1; else if (::strcmp(key, "Protocol") == 0) @@ -1064,7 +1064,7 @@ bool CConf::read() m_fmNetworkModeHang = (unsigned int)::atoi(value); else if (::strcmp(key, "Debug") == 0) m_fmNetworkDebug = ::atoi(value) == 1; - } else if (section == SECTION_AX25_NETWORK) { + } else if (section == SECTION::AX25_NETWORK) { if (::strcmp(key, "Enable") == 0) m_ax25NetworkEnabled = ::atoi(value) == 1; else if (::strcmp(key, "Port") == 0) @@ -1073,14 +1073,14 @@ bool CConf::read() m_ax25NetworkSpeed = (unsigned int)::atoi(value); else if (::strcmp(key, "Debug") == 0) m_ax25NetworkDebug = ::atoi(value) == 1; - } else if (section == SECTION_TFTSERIAL) { + } else if (section == SECTION::TFTSERIAL) { if (::strcmp(key, "Port") == 0) m_tftSerialPort = value; else if (::strcmp(key, "Brightness") == 0) m_tftSerialBrightness = (unsigned int)::atoi(value); else if (::strcmp(key, "ScreenLayout") == 0) m_tftSerialScreenLayout = (unsigned int)::atoi(value); - } else if (section == SECTION_HD44780) { + } else if (section == SECTION::HD44780) { if (::strcmp(key, "Rows") == 0) m_hd44780Rows = (unsigned int)::atoi(value); else if (::strcmp(key, "Columns") == 0) @@ -1107,7 +1107,7 @@ bool CConf::read() p = ::strtok(NULL, ",\r\n"); } } - } else if (section == SECTION_NEXTION) { + } else if (section == SECTION::NEXTION) { if (::strcmp(key, "Port") == 0) m_nextionPort = value; else if (::strcmp(key, "Brightness") == 0) @@ -1126,7 +1126,7 @@ bool CConf::read() m_nextionOutput = ::atoi(value) == 1; else if (::strcmp(key, "NextionUDPPort") == 0) m_nextionUDPPort = (unsigned short)::atoi(value); - } else if (section == SECTION_OLED) { + } else if (section == SECTION::OLED) { if (::strcmp(key, "Type") == 0) m_oledType = (unsigned char)::atoi(value); else if (::strcmp(key, "Brightness") == 0) @@ -1139,7 +1139,7 @@ bool CConf::read() m_oledRotate = ::atoi(value) == 1; else if (::strcmp(key, "LogoScreensaver") == 0) m_oledLogoScreensaver = ::atoi(value) == 1; - } else if (section == SECTION_LCDPROC) { + } else if (section == SECTION::LCDPROC) { if (::strcmp(key, "Address") == 0) m_lcdprocAddress = value; else if (::strcmp(key, "Port") == 0) @@ -1152,12 +1152,12 @@ bool CConf::read() m_lcdprocUTC = ::atoi(value) == 1; else if (::strcmp(key, "DimOnIdle") == 0) m_lcdprocDimOnIdle = ::atoi(value) == 1; - } else if (section == SECTION_LOCK_FILE) { + } else if (section == SECTION::LOCK_FILE) { if (::strcmp(key, "Enable") == 0) m_lockFileEnabled = ::atoi(value) == 1; else if (::strcmp(key, "File") == 0) m_lockFileName = value; - } else if (section == SECTION_REMOTE_CONTROL) { + } else if (section == SECTION::REMOTE_CONTROL) { if (::strcmp(key, "Enable") == 0) m_remoteControlEnabled = ::atoi(value) == 1; else if (::strcmp(key, "Port") == 0) @@ -1535,7 +1535,7 @@ unsigned int CConf::getDStarAckTime() const return m_dstarAckTime; } -DSTAR_ACK_MESSAGE CConf::getDStarAckMessage() const +DSTAR_ACK CConf::getDStarAckMessage() const { return m_dstarAckMessage; } @@ -1640,7 +1640,7 @@ unsigned int CConf::getDMRModeHang() const return m_dmrModeHang; } -DMR_OVCM_TYPES CConf::getDMROVCM() const +DMR_OVCM CConf::getDMROVCM() const { return m_dmrOVCM; } diff --git a/Conf.h b/Conf.h index 6f210a5..d2689fd 100644 --- a/Conf.h +++ b/Conf.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2023 by Jonathan Naylor G4KLX + * Copyright (C) 2015-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 @@ -120,7 +120,7 @@ public: std::vector getDStarWhiteList() const; bool getDStarAckReply() const; unsigned int getDStarAckTime() const; - DSTAR_ACK_MESSAGE getDStarAckMessage() const; + DSTAR_ACK getDStarAckMessage() const; bool getDStarErrorReply() const; bool getDStarRemoteGateway() const; unsigned int getDStarModeHang() const; @@ -143,7 +143,7 @@ public: unsigned int getDMRCallHang() const; unsigned int getDMRTXHang() const; unsigned int getDMRModeHang() const; - DMR_OVCM_TYPES getDMROVCM() const; + DMR_OVCM getDMROVCM() const; bool getDMRProtect() const; // The System Fusion section @@ -459,7 +459,7 @@ private: std::vector m_dstarWhiteList; bool m_dstarAckReply; unsigned int m_dstarAckTime; - DSTAR_ACK_MESSAGE m_dstarAckMessage; + DSTAR_ACK m_dstarAckMessage; bool m_dstarErrorReply; bool m_dstarRemoteGateway; unsigned int m_dstarModeHang; @@ -481,7 +481,7 @@ private: unsigned int m_dmrCallHang; unsigned int m_dmrTXHang; unsigned int m_dmrModeHang; - DMR_OVCM_TYPES m_dmrOVCM; + DMR_OVCM m_dmrOVCM; bool m_dmrProtect; bool m_fusionEnabled; diff --git a/DMRCSBK.cpp b/DMRCSBK.cpp index ad02b0b..c30e8e7 100644 --- a/DMRCSBK.cpp +++ b/DMRCSBK.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2020,2021,2022 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2020,2021,2022,2025 by Jonathan Naylor G4KLX * Copyright (C) 2019 by Patrick Maier DK5MP * * This program is free software; you can redistribute it and/or modify @@ -27,7 +27,7 @@ CDMRCSBK::CDMRCSBK() : m_data(NULL), -m_CSBKO(CSBKO_NONE), +m_CSBKO(CSBKO::NONE), m_FID(0x00U), m_GI(false), m_bsId(0U), @@ -67,7 +67,7 @@ bool CDMRCSBK::put(const unsigned char* bytes) m_FID = m_data[1U]; switch (m_CSBKO) { - case CSBKO_BSDWNACT: + case CSBKO::BSDWNACT: m_GI = false; m_bsId = m_data[4U] << 16 | m_data[5U] << 8 | m_data[6U]; m_srcId = m_data[7U] << 16 | m_data[8U] << 8 | m_data[9U]; @@ -76,7 +76,7 @@ bool CDMRCSBK::put(const unsigned char* bytes) CUtils::dump(1U, "Downlink Activate CSBK", m_data, 12U); break; - case CSBKO_UUVREQ: + case CSBKO::UUVREQ: m_GI = false; m_dstId = m_data[4U] << 16 | m_data[5U] << 8 | m_data[6U]; m_srcId = m_data[7U] << 16 | m_data[8U] << 8 | m_data[9U]; @@ -86,7 +86,7 @@ bool CDMRCSBK::put(const unsigned char* bytes) CUtils::dump(1U, "Unit to Unit Service Request CSBK", m_data, 12U); break; - case CSBKO_UUANSRSP: + case CSBKO::UUANSRSP: m_GI = false; m_dstId = m_data[4U] << 16 | m_data[5U] << 8 | m_data[6U]; m_srcId = m_data[7U] << 16 | m_data[8U] << 8 | m_data[9U]; @@ -96,7 +96,7 @@ bool CDMRCSBK::put(const unsigned char* bytes) CUtils::dump(1U, "Unit to Unit Service Answer Response CSBK", m_data, 12U); break; - case CSBKO_PRECCSBK: + case CSBKO::PRECCSBK: m_GI = (m_data[2U] & 0x40U) == 0x40U; m_dstId = m_data[4U] << 16 | m_data[5U] << 8 | m_data[6U]; m_srcId = m_data[7U] << 16 | m_data[8U] << 8 | m_data[9U]; @@ -105,7 +105,7 @@ bool CDMRCSBK::put(const unsigned char* bytes) CUtils::dump(1U, "Preamble CSBK", m_data, 12U); break; - case CSBKO_NACKRSP: + case CSBKO::NACKRSP: m_GI = false; m_srcId = m_data[4U] << 16 | m_data[5U] << 8 | m_data[6U]; m_dstId = m_data[7U] << 16 | m_data[8U] << 8 | m_data[9U]; @@ -114,7 +114,7 @@ bool CDMRCSBK::put(const unsigned char* bytes) CUtils::dump(1U, "Negative Acknowledge Response CSBK", m_data, 12U); break; - case CSBKO_CALL_ALERT: + case CSBKO::CALL_ALERT: m_GI = false; m_dstId = m_data[4U] << 16 | m_data[5U] << 8 | m_data[6U]; m_srcId = m_data[7U] << 16 | m_data[8U] << 8 | m_data[9U]; @@ -123,7 +123,7 @@ bool CDMRCSBK::put(const unsigned char* bytes) CUtils::dump(1U, "Call Alert CSBK", m_data, 12U); break; - case CSBKO_CALL_ALERT_ACK: + case CSBKO::CALL_ALERT_ACK: m_GI = false; m_dstId = m_data[4U] << 16 | m_data[5U] << 8 | m_data[6U]; m_srcId = m_data[7U] << 16 | m_data[8U] << 8 | m_data[9U]; @@ -132,7 +132,7 @@ bool CDMRCSBK::put(const unsigned char* bytes) CUtils::dump(1U, "Call Alert Ack CSBK", m_data, 12U); break; - case CSBKO_RADIO_CHECK: + case CSBKO::RADIO_CHECK: m_GI = false; if (m_data[3U] == 0x80) { m_dstId = m_data[4U] << 16 | m_data[5U] << 8 | m_data[6U]; @@ -147,7 +147,7 @@ bool CDMRCSBK::put(const unsigned char* bytes) m_CBF = 0U; break; - case CSBKO_CALL_EMERGENCY: + case CSBKO::CALL_EMERGENCY: m_GI = true; m_dstId = m_data[4U] << 16 | m_data[5U] << 8 | m_data[6U]; m_srcId = m_data[7U] << 16 | m_data[8U] << 8 | m_data[9U]; @@ -202,7 +202,7 @@ bool CDMRCSBK::getOVCM() const void CDMRCSBK::setOVCM(bool ovcm) { - if (m_CSBKO == CSBKO_UUVREQ || m_CSBKO == CSBKO_UUANSRSP) { + if ((m_CSBKO == CSBKO::UUVREQ) || (m_CSBKO == CSBKO::UUANSRSP)) { m_OVCM = ovcm; if (ovcm) diff --git a/DMRCSBK.h b/DMRCSBK.h index 52f16d2..42b871d 100644 --- a/DMRCSBK.h +++ b/DMRCSBK.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2020,2021,2022 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2020,2021,2022,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 @@ -21,18 +21,18 @@ #include "DMRDefines.h" -enum CSBKO { - CSBKO_NONE = 0x00, - CSBKO_UUVREQ = 0x04, - CSBKO_UUANSRSP = 0x05, - CSBKO_CTCSBK = 0x07, - CSBKO_CALL_ALERT = 0x1F, - CSBKO_CALL_ALERT_ACK = 0x20, - CSBKO_RADIO_CHECK = 0x24, - CSBKO_NACKRSP = 0x26, - CSBKO_CALL_EMERGENCY = 0x27, - CSBKO_BSDWNACT = 0x38, - CSBKO_PRECCSBK = 0x3D +enum class CSBKO { + NONE = 0x00, + UUVREQ = 0x04, + UUANSRSP = 0x05, + CTCSBK = 0x07, + CALL_ALERT = 0x1F, + CALL_ALERT_ACK = 0x20, + RADIO_CHECK = 0x24, + NACKRSP = 0x26, + CALL_EMERGENCY = 0x27, + BSDWNACT = 0x38, + PRECCSBK = 0x3D }; class CDMRCSBK diff --git a/DMRControl.cpp b/DMRControl.cpp index 3cedb5a..20fd49b 100644 --- a/DMRControl.cpp +++ b/DMRControl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2021 Jonathan Naylor, G4KLX + * Copyright (C) 2015-2021,2025 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 @@ -21,7 +21,7 @@ #include #include -CDMRControl::CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, bool embeddedLCOnly, bool dumpTAData, const std::vector& prefixes, const std::vector& blacklist, const std::vector& whitelist, const std::vector& slot1TGWhitelist, const std::vector& slot2TGWhitelist, unsigned int timeout, CModem* modem, IDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssi, unsigned int jitter, DMR_OVCM_TYPES ovcm, bool protect) : +CDMRControl::CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, bool embeddedLCOnly, bool dumpTAData, const std::vector& prefixes, const std::vector& blacklist, const std::vector& whitelist, const std::vector& slot1TGWhitelist, const std::vector& slot2TGWhitelist, unsigned int timeout, CModem* modem, IDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssi, unsigned int jitter, DMR_OVCM ovcm, bool protect) : m_colorCode(colorCode), m_modem(modem), m_network(network), @@ -59,7 +59,7 @@ bool CDMRControl::processWakeup(const unsigned char* data) return false; CSBKO csbko = csbk.getCSBKO(); - if (csbko != CSBKO_BSDWNACT) + if (csbko != CSBKO::BSDWNACT) return false; unsigned int srcId = csbk.getSrcId(); diff --git a/DMRControl.h b/DMRControl.h index 30cccdf..7ed14de 100644 --- a/DMRControl.h +++ b/DMRControl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2021 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2021,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 @@ -31,7 +31,7 @@ class CDMRControl { public: - CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, bool embeddedLCOnly, bool dumpTAData, const std::vector& prefixes, const std::vector& blacklist, const std::vector& whitelist, const std::vector& slot1TGWhitelist, const std::vector& slot2TGWhitelist, unsigned int timeout, CModem* modem, IDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssi, unsigned int jitter, DMR_OVCM_TYPES ovcm, bool protect); + CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, bool embeddedLCOnly, bool dumpTAData, const std::vector& prefixes, const std::vector& blacklist, const std::vector& whitelist, const std::vector& slot1TGWhitelist, const std::vector& slot2TGWhitelist, unsigned int timeout, CModem* modem, IDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssi, unsigned int jitter, DMR_OVCM ovcm, bool protect); ~CDMRControl(); bool processWakeup(const unsigned char* data); diff --git a/DMRData.cpp b/DMRData.cpp index 25dea58..39830d8 100644 --- a/DMRData.cpp +++ b/DMRData.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017 Jonathan Naylor, G4KLX + * Copyright (C) 2015,2016,2017,2025 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 @@ -42,7 +42,7 @@ m_slotNo(1U), m_data(NULL), m_srcId(0U), m_dstId(0U), -m_flco(FLCO_GROUP), +m_flco(FLCO::GROUP), m_dataType(0U), m_seqNo(0U), m_n(0U), diff --git a/DMRDefines.h b/DMRDefines.h index 839f764..2f38874 100644 --- a/DMRDefines.h +++ b/DMRDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2021 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2021,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 @@ -110,14 +110,14 @@ const unsigned char DPF_PROPRIETARY = 0x0FU; const unsigned char FID_ETSI = 0U; const unsigned char FID_DMRA = 16U; -enum FLCO { - FLCO_GROUP = 0, - FLCO_USER_USER = 3, - FLCO_TALKER_ALIAS_HEADER = 4, - FLCO_TALKER_ALIAS_BLOCK1 = 5, - FLCO_TALKER_ALIAS_BLOCK2 = 6, - FLCO_TALKER_ALIAS_BLOCK3 = 7, - FLCO_GPS_INFO = 8 +enum class FLCO { + GROUP = 0, + USER_USER = 3, + TALKER_ALIAS_HEADER = 4, + TALKER_ALIAS_BLOCK1 = 5, + TALKER_ALIAS_BLOCK2 = 6, + TALKER_ALIAS_BLOCK3 = 7, + GINFO = 8 }; #endif diff --git a/DMRDirectNetwork.cpp b/DMRDirectNetwork.cpp index d8c34fe..d231972 100644 --- a/DMRDirectNetwork.cpp +++ b/DMRDirectNetwork.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018,2020,2021,2024 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2017,2018,2020,2021,2024,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 @@ -45,7 +45,7 @@ m_enabled(false), m_slot1(slot1), m_slot2(slot2), m_hwType(hwType), -m_status(WAITING_CONNECT), +m_status(STATUS::WAITING_CONNECT), m_retryTimer(1000U, 10U), m_timeoutTimer(1000U, 60U), m_buffer(NULL), @@ -131,7 +131,7 @@ bool CDMRDirectNetwork::open() LogMessage("DMR, Opening DMR Network"); - m_status = WAITING_CONNECT; + m_status = STATUS::WAITING_CONNECT; m_timeoutTimer.stop(); m_retryTimer.start(); @@ -148,7 +148,7 @@ void CDMRDirectNetwork::enable(bool enabled) bool CDMRDirectNetwork::read(CDMRData& data) { - if (m_status != RUNNING) + if (m_status != STATUS::RUNNING) return false; if (m_rxData.isEmpty()) @@ -180,7 +180,7 @@ bool CDMRDirectNetwork::read(CDMRData& data) if (slotNo == 2U && !m_slot2) return false; - FLCO flco = (m_buffer[15U] & 0x40U) == 0x40U ? FLCO_USER_USER : FLCO_GROUP; + FLCO flco = (m_buffer[15U] & 0x40U) == 0x40U ? FLCO::USER_USER : FLCO::GROUP; data.setSeqNo(seqNo); data.setSlotNo(slotNo); @@ -212,7 +212,7 @@ bool CDMRDirectNetwork::read(CDMRData& data) bool CDMRDirectNetwork::write(const CDMRData& data) { - if (m_status != RUNNING) + if (m_status != STATUS::RUNNING) return false; unsigned char buffer[HOMEBREW_DATA_PACKET_LENGTH]; @@ -246,7 +246,7 @@ bool CDMRDirectNetwork::write(const CDMRData& data) buffer[15U] = slotNo == 1U ? 0x00U : 0x80U; FLCO flco = data.getFLCO(); - buffer[15U] |= flco == FLCO_GROUP ? 0x00U : 0x40U; + buffer[15U] |= flco == FLCO::GROUP ? 0x00U : 0x40U; unsigned int slotIndex = slotNo - 1U; @@ -283,7 +283,7 @@ bool CDMRDirectNetwork::write(const CDMRData& data) bool CDMRDirectNetwork::writeRadioPosition(unsigned int id, const unsigned char* data) { - if (m_status != RUNNING) + if (m_status != STATUS::RUNNING) return false; unsigned char buffer[20U]; @@ -301,7 +301,7 @@ bool CDMRDirectNetwork::writeRadioPosition(unsigned int id, const unsigned char* bool CDMRDirectNetwork::writeTalkerAlias(unsigned int id, unsigned char type, const unsigned char* data) { - if (m_status != RUNNING) + if (m_status != STATUS::RUNNING) return false; unsigned char buffer[20U]; @@ -321,14 +321,14 @@ bool CDMRDirectNetwork::writeTalkerAlias(unsigned int id, unsigned char type, co bool CDMRDirectNetwork::isConnected() const { - return (m_status == RUNNING); + return (m_status == STATUS::RUNNING); } void CDMRDirectNetwork::close(bool sayGoodbye) { LogMessage("DMR, Closing DMR Network"); - if (sayGoodbye && (m_status == RUNNING)) { + if (sayGoodbye && (m_status == STATUS::RUNNING)) { unsigned char buffer[9U]; ::memcpy(buffer + 0U, "RPTCL", 5U); ::memcpy(buffer + 5U, m_id, 4U); @@ -346,23 +346,23 @@ void CDMRDirectNetwork::clock(unsigned int ms) m_retryTimer.clock(ms); if (m_retryTimer.isRunning() && m_retryTimer.hasExpired()) { switch (m_status) { - case WAITING_CONNECT: + case STATUS::WAITING_CONNECT: writeLogin(); - m_status = WAITING_LOGIN; + m_status = STATUS::WAITING_LOGIN; break; - case WAITING_LOGIN: + case STATUS::WAITING_LOGIN: writeLogin(); break; - case WAITING_AUTHORISATION: + case STATUS::WAITING_AUTHORISATION: writeAuthorisation(); break; - case WAITING_OPTIONS: + case STATUS::WAITING_OPTIONS: writeOptions(); break; - case WAITING_CONFIG: + case STATUS::WAITING_CONFIG: writeConfig(); break; - case RUNNING: + case STATUS::RUNNING: writePing(); break; default: @@ -398,9 +398,9 @@ void CDMRDirectNetwork::clock(unsigned int ms) m_rxData.addData(m_buffer, len); } } else if (::memcmp(m_buffer, "MSTNAK", 6U) == 0) { - if (m_status == RUNNING) { + if (m_status == STATUS::RUNNING) { LogWarning("DMR, Login to the master has failed, retrying login ..."); - m_status = WAITING_LOGIN; + m_status = STATUS::WAITING_LOGIN; m_timeoutTimer.start(); m_retryTimer.start(); } else { @@ -414,36 +414,36 @@ void CDMRDirectNetwork::clock(unsigned int ms) } } else if (::memcmp(m_buffer, "RPTACK", 6U) == 0) { switch (m_status) { - case WAITING_LOGIN: + case STATUS::WAITING_LOGIN: LogDebug("DMR, Sending authorisation"); ::memcpy(m_salt, m_buffer + 6U, sizeof(uint32_t)); writeAuthorisation(); - m_status = WAITING_AUTHORISATION; + m_status = STATUS::WAITING_AUTHORISATION; m_timeoutTimer.start(); m_retryTimer.start(); break; - case WAITING_AUTHORISATION: + case STATUS::WAITING_AUTHORISATION: LogDebug("DMR, Sending configuration"); writeConfig(); - m_status = WAITING_CONFIG; + m_status = STATUS::WAITING_CONFIG; m_timeoutTimer.start(); m_retryTimer.start(); break; - case WAITING_CONFIG: + case STATUS::WAITING_CONFIG: if (m_options.empty()) { LogMessage("DMR, Logged into the master successfully"); - m_status = RUNNING; + m_status = STATUS::RUNNING; } else { LogDebug("DMR, Sending options"); writeOptions(); - m_status = WAITING_OPTIONS; + m_status = STATUS::WAITING_OPTIONS; } m_timeoutTimer.start(); m_retryTimer.start(); break; - case WAITING_OPTIONS: + case STATUS::WAITING_OPTIONS: LogMessage("DMR, Logged into the master successfully"); - m_status = RUNNING; + m_status = STATUS::RUNNING; m_timeoutTimer.start(); m_retryTimer.start(); break; @@ -526,16 +526,16 @@ bool CDMRDirectNetwork::writeConfig() slots = '2'; switch (m_hwType) { - case HWT_MMDVM: + case HW_TYPE::MMDVM: software = "MMDVM"; break; - case HWT_MMDVM_HS: + case HW_TYPE::MMDVM_HS: software = "MMDVM_MMDVM_HS"; break; - case HWT_MMDVM_HS_DUAL_HAT: + case HW_TYPE::MMDVM_HS_DUAL_HAT: software = "MMDVM_MMDVM_HS_Dual_Hat"; break; - case HWT_NANO_HOTSPOT: + case HW_TYPE::NANO_HOTSPOT: software = "MMDVM_Nano_hotSPOT"; break; default: @@ -546,31 +546,31 @@ bool CDMRDirectNetwork::writeConfig() slots = '4'; switch (m_hwType) { - case HWT_MMDVM: + case HW_TYPE::MMDVM: software = "MMDVM_DMO"; break; - case HWT_DVMEGA: + case HW_TYPE::DVMEGA: software = "MMDVM_DVMega"; break; - case HWT_MMDVM_ZUMSPOT: + case HW_TYPE::MMDVM_ZUMSPOT: software = "MMDVM_ZUMspot"; break; - case HWT_MMDVM_HS_HAT: + case HW_TYPE::MMDVM_HS_HAT: software = "MMDVM_MMDVM_HS_Hat"; break; - case HWT_MMDVM_HS_DUAL_HAT: + case HW_TYPE::MMDVM_HS_DUAL_HAT: software = "MMDVM_MMDVM_HS_Dual_Hat"; break; - case HWT_NANO_HOTSPOT: + case HW_TYPE::NANO_HOTSPOT: software = "MMDVM_Nano_hotSPOT"; break; - case HWT_NANO_DV: + case HW_TYPE::NANO_DV: software = "MMDVM_Nano_DV"; break; - case HWT_D2RG_MMDVM_HS: + case HW_TYPE::D2RG_MMDVM_HS: software = "MMDVM_D2RG_MMDVM_HS"; break; - case HWT_MMDVM_HS: + case HW_TYPE::MMDVM_HS: software = "MMDVM_MMDVM_HS"; break; default: diff --git a/DMRDirectNetwork.h b/DMRDirectNetwork.h index 5d6a959..ed8c4c6 100644 --- a/DMRDirectNetwork.h +++ b/DMRDirectNetwork.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018,2020,2021 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2017,2018,2020,2021,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 @@ -75,7 +75,7 @@ private: bool m_slot2; HW_TYPE m_hwType; - enum STATUS { + enum class STATUS { WAITING_CONNECT, WAITING_LOGIN, WAITING_AUTHORISATION, diff --git a/DMREmbeddedData.cpp b/DMREmbeddedData.cpp index a5a3e42..f2fb365 100644 --- a/DMREmbeddedData.cpp +++ b/DMREmbeddedData.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2017,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 @@ -28,9 +28,9 @@ CDMREmbeddedData::CDMREmbeddedData() : m_raw(NULL), -m_state(LCS_NONE), +m_state(LC_STATE::NONE), m_data(NULL), -m_FLCO(FLCO_GROUP), +m_FLCO(FLCO::GROUP), m_valid(false) { m_raw = new bool[128U]; @@ -61,41 +61,41 @@ bool CDMREmbeddedData::addData(const unsigned char* data, unsigned char lcss) m_raw[a] = rawData[a + 4U]; // Show we are ready for the next LC block - m_state = LCS_FIRST; + m_state = LC_STATE::FIRST; m_valid = false; return false; } // Is this the 2nd block of a 4 block embedded LC ? - if (lcss == 3U && m_state == LCS_FIRST) { + if ((lcss == 3U) && (m_state == LC_STATE::FIRST)) { for (unsigned int a = 0U; a < 32U; a++) m_raw[a + 32U] = rawData[a + 4U]; // Show we are ready for the next LC block - m_state = LCS_SECOND; + m_state = LC_STATE::SECOND; return false; } // Is this the 3rd block of a 4 block embedded LC ? - if (lcss == 3U && m_state == LCS_SECOND) { + if ((lcss == 3U) && (m_state == LC_STATE::SECOND)) { for (unsigned int a = 0U; a < 32U; a++) m_raw[a + 64U] = rawData[a + 4U]; // Show we are ready for the final LC block - m_state = LCS_THIRD; + m_state = LC_STATE::THIRD; return false; } // Is this the final block of a 4 block embedded LC ? - if (lcss == 2U && m_state == LCS_THIRD) { + if ((lcss == 2U) && (m_state == LC_STATE::THIRD)) { for (unsigned int a = 0U; a < 32U; a++) m_raw[a + 96U] = rawData[a + 4U]; // Show that we're not ready for any more data - m_state = LCS_NONE; + m_state = LC_STATE::NONE; // Process the complete data block decodeEmbeddedData(); @@ -279,7 +279,7 @@ CDMRLC* CDMREmbeddedData::getLC() const if (!m_valid) return NULL; - if (m_FLCO != FLCO_GROUP && m_FLCO != FLCO_USER_USER) + if ((m_FLCO != FLCO::GROUP) && (m_FLCO != FLCO::USER_USER)) return NULL; return new CDMRLC(m_data); @@ -297,7 +297,7 @@ FLCO CDMREmbeddedData::getFLCO() const void CDMREmbeddedData::reset() { - m_state = LCS_NONE; + m_state = LC_STATE::NONE; m_valid = false; } diff --git a/DMREmbeddedData.h b/DMREmbeddedData.h index 7222dcd..dbadec8 100644 --- a/DMREmbeddedData.h +++ b/DMREmbeddedData.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2017,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 @@ -22,11 +22,11 @@ #include "DMRDefines.h" #include "DMRLC.h" -enum LC_STATE { - LCS_NONE, - LCS_FIRST, - LCS_SECOND, - LCS_THIRD +enum class LC_STATE { + NONE, + FIRST, + SECOND, + THIRD }; class CDMREmbeddedData diff --git a/DMRGatewayNetwork.cpp b/DMRGatewayNetwork.cpp index 1eb7e63..0bb3e66 100644 --- a/DMRGatewayNetwork.cpp +++ b/DMRGatewayNetwork.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2021 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2021,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 @@ -157,7 +157,7 @@ bool CDMRGatewayNetwork::read(CDMRData& data) if (slotNo == 2U && !m_slot2) return false; - FLCO flco = (m_buffer[15U] & 0x40U) == 0x40U ? FLCO_USER_USER : FLCO_GROUP; + FLCO flco = (m_buffer[15U] & 0x40U) == 0x40U ? FLCO::USER_USER : FLCO::GROUP; data.setSeqNo(seqNo); data.setSlotNo(slotNo); @@ -220,7 +220,7 @@ bool CDMRGatewayNetwork::write(const CDMRData& data) buffer[15U] = slotNo == 1U ? 0x00U : 0x80U; FLCO flco = data.getFLCO(); - buffer[15U] |= flco == FLCO_GROUP ? 0x00U : 0x40U; + buffer[15U] |= flco == FLCO::GROUP ? 0x00U : 0x40U; unsigned int slotIndex = slotNo - 1U; @@ -349,16 +349,16 @@ bool CDMRGatewayNetwork::writeConfig() slots = '2'; switch (m_hwType) { - case HWT_MMDVM: + case HW_TYPE::MMDVM: software = "MMDVM"; break; - case HWT_MMDVM_HS: + case HW_TYPE::MMDVM_HS: software = "MMDVM_MMDVM_HS"; break; - case HWT_MMDVM_HS_DUAL_HAT: + case HW_TYPE::MMDVM_HS_DUAL_HAT: software = "MMDVM_MMDVM_HS_Dual_Hat"; break; - case HWT_NANO_HOTSPOT: + case HW_TYPE::NANO_HOTSPOT: software = "MMDVM_Nano_hotSPOT"; break; default: @@ -369,37 +369,37 @@ bool CDMRGatewayNetwork::writeConfig() slots = '4'; switch (m_hwType) { - case HWT_MMDVM: + case HW_TYPE::MMDVM: software = "MMDVM_DMO"; break; - case HWT_DVMEGA: + case HW_TYPE::DVMEGA: software = "MMDVM_DVMega"; break; - case HWT_MMDVM_ZUMSPOT: + case HW_TYPE::MMDVM_ZUMSPOT: software = "MMDVM_ZUMspot"; break; - case HWT_MMDVM_HS_HAT: + case HW_TYPE::MMDVM_HS_HAT: software = "MMDVM_MMDVM_HS_Hat"; break; - case HWT_MMDVM_HS_DUAL_HAT: + case HW_TYPE::MMDVM_HS_DUAL_HAT: software = "MMDVM_MMDVM_HS_Dual_Hat"; break; - case HWT_NANO_HOTSPOT: + case HW_TYPE::NANO_HOTSPOT: software = "MMDVM_Nano_hotSPOT"; break; - case HWT_NANO_DV: + case HW_TYPE::NANO_DV: software = "MMDVM_Nano_DV"; break; - case HWT_D2RG_MMDVM_HS: + case HW_TYPE::D2RG_MMDVM_HS: software = "MMDVM_D2RG_MMDVM_HS"; break; - case HWT_MMDVM_HS: + case HW_TYPE::MMDVM_HS: software = "MMDVM_MMDVM_HS"; break; - case HWT_OPENGD77_HS: + case HW_TYPE::OPENGD77_HS: software = "MMDVM_OpenGD77_HS"; break; - case HWT_SKYBRIDGE: + case HW_TYPE::SKYBRIDGE: software = "MMDVM_SkyBridge"; break; default: diff --git a/DMRLC.cpp b/DMRLC.cpp index 6433647..36c0cfa 100644 --- a/DMRLC.cpp +++ b/DMRLC.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2019,2021,2022 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2019,2021,2022,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 @@ -37,7 +37,7 @@ m_dstId(dstId) CDMRLC::CDMRLC(const unsigned char* bytes) : m_PF(false), m_R(false), -m_FLCO(FLCO_GROUP), +m_FLCO(FLCO::GROUP), m_FID(0U), m_options(0U), m_srcId(0U), @@ -61,7 +61,7 @@ m_dstId(0U) CDMRLC::CDMRLC(const bool* bits) : m_PF(false), m_R(false), -m_FLCO(FLCO_GROUP), +m_FLCO(FLCO::GROUP), m_FID(0U), m_options(0U), m_srcId(0U), @@ -99,7 +99,7 @@ m_dstId(0U) CDMRLC::CDMRLC() : m_PF(false), m_R(false), -m_FLCO(FLCO_GROUP), +m_FLCO(FLCO::GROUP), m_FID(0U), m_options(0U), m_srcId(0U), diff --git a/DMRSlot.cpp b/DMRSlot.cpp index 7720b0a..0ae4fa8 100644 --- a/DMRSlot.cpp +++ b/DMRSlot.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2021,2023 Jonathan Naylor, G4KLX + * Copyright (C) 2015-2021,2023,2025 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 @@ -43,7 +43,7 @@ CDisplay* CDMRSlot::m_display = NULL; bool CDMRSlot::m_duplex = true; CDMRLookup* CDMRSlot::m_lookup = NULL; unsigned int CDMRSlot::m_hangCount = 3U * 17U; -DMR_OVCM_TYPES CDMRSlot::m_ovcm = DMR_OVCM_OFF; +DMR_OVCM CDMRSlot::m_ovcm = DMR_OVCM::OFF; bool CDMRSlot::m_protect = false; CRSSIInterpolator* CDMRSlot::m_rssiMapper = NULL; @@ -55,10 +55,10 @@ unsigned char* CDMRSlot::m_idle = NULL; FLCO CDMRSlot::m_flco1; unsigned char CDMRSlot::m_id1 = 0U; -ACTIVITY_TYPE CDMRSlot::m_activity1 = ACTIVITY_NONE; +ACTIVITY_TYPE CDMRSlot::m_activity1 = ACTIVITY_TYPE::NONE; FLCO CDMRSlot::m_flco2; unsigned char CDMRSlot::m_id2 = 0U; -ACTIVITY_TYPE CDMRSlot::m_activity2 = ACTIVITY_NONE; +ACTIVITY_TYPE CDMRSlot::m_activity2 = ACTIVITY_TYPE::NONE; const unsigned char TALKER_ID_NONE = 0x00U; const unsigned char TALKER_ID_HEADER = 0x01U; @@ -75,8 +75,8 @@ const unsigned int NO_PREAMBLE_CSBK = 15U; CDMRSlot::CDMRSlot(unsigned int slotNo, unsigned int timeout) : m_slotNo(slotNo), m_queue(5000U, "DMR Slot"), -m_rfState(RS_RF_LISTENING), -m_netState(RS_NET_IDLE), +m_rfState(RPT_RF_STATE::LISTENING), +m_netState(RPT_NET_STATE::IDLE), m_rfEmbeddedLC(), m_rfEmbeddedData(NULL), m_rfEmbeddedReadN(0U), @@ -143,15 +143,15 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (!m_enabled) return false; - if (data[0U] == TAG_LOST && m_rfState == RS_RF_AUDIO) { + if ((data[0U] == TAG_LOST) && (m_rfState == RPT_RF_STATE::AUDIO)) { std::string src = m_lookup->find(m_rfLC->getSrcId()); std::string dst = m_lookup->find(m_rfLC->getDstId()); FLCO flco = m_rfLC->getFLCO(); if (m_rssi != 0U) - LogMessage("DMR Slot %u, RF voice transmission lost from %s to %s%s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_slotNo, src.c_str(), flco == FLCO_GROUP ? "TG " : "", dst.c_str(), float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); + LogMessage("DMR Slot %u, RF voice transmission lost from %s to %s%s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_slotNo, src.c_str(), flco == FLCO::GROUP ? "TG " : "", dst.c_str(), float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); else - LogMessage("DMR Slot %u, RF voice transmission lost from %s to %s%s, %.1f seconds, BER: %.1f%%", m_slotNo, src.c_str(), flco == FLCO_GROUP ? "TG " : "", dst.c_str(), float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits)); + LogMessage("DMR Slot %u, RF voice transmission lost from %s to %s%s, %.1f seconds, BER: %.1f%%", m_slotNo, src.c_str(), flco == FLCO::GROUP ? "TG " : "", dst.c_str(), float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits)); if (m_rfTimeout) { writeEndRF(); return false; @@ -161,18 +161,18 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) } } - if (data[0U] == TAG_LOST && m_rfState == RS_RF_DATA) { + if ((data[0U] == TAG_LOST) && (m_rfState == RPT_RF_STATE::DATA)) { std::string src = m_lookup->find(m_rfLC->getSrcId()); std::string dst = m_lookup->find(m_rfLC->getDstId()); FLCO flco = m_rfLC->getFLCO(); - LogMessage("DMR Slot %u, RF data transmission lost from %s to %s%s", m_slotNo, src.c_str(), flco == FLCO_GROUP ? "TG " : "", dst.c_str()); + LogMessage("DMR Slot %u, RF data transmission lost from %s to %s%s", m_slotNo, src.c_str(), flco == FLCO::GROUP ? "TG " : "", dst.c_str()); writeEndRF(); return false; } if (data[0U] == TAG_LOST) { - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; return false; } @@ -211,7 +211,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) slotType.setDataType(dataType); if (dataType == DT_VOICE_LC_HEADER) { - if (m_rfState == RS_RF_AUDIO) + if (m_rfState == RPT_RF_STATE::AUDIO) return true; CDMRFullLC fullLC; @@ -227,7 +227,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (lc->getPF()) { LogMessage("DMR Slot %u, RF user %u rejected", m_slotNo, srcId); delete lc; - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; return false; } } @@ -235,20 +235,20 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (!CDMRAccessControl::validateSrcId(srcId)) { LogMessage("DMR Slot %u, RF user %u rejected", m_slotNo, srcId); delete lc; - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; return false; } - if (!CDMRAccessControl::validateTGId(m_slotNo, flco == FLCO_GROUP, dstId)) { + if (!CDMRAccessControl::validateTGId(m_slotNo, flco == FLCO::GROUP, dstId)) { LogMessage("DMR Slot %u, RF user %u rejected for using TG %u", m_slotNo, srcId, dstId); delete lc; - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; return false; } - if (m_ovcm == DMR_OVCM_TX_ON || m_ovcm == DMR_OVCM_ON) + if ((m_ovcm == DMR_OVCM::TX_ON) || (m_ovcm == DMR_OVCM::ON)) lc->setOVCM(true); - else if (m_ovcm == DMR_OVCM_FORCE_OFF) + else if (m_ovcm == DMR_OVCM::FORCE_OFF) lc->setOVCM(false); m_rfLC = lc; @@ -297,22 +297,22 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) writeNetworkRF(data, DT_VOICE_LC_HEADER); - m_rfState = RS_RF_AUDIO; + m_rfState = RPT_RF_STATE::AUDIO; std::string src = m_lookup->find(srcId); std::string dst = m_lookup->find(dstId); - if (m_netState == RS_NET_IDLE) { - setShortLC(m_slotNo, dstId, flco, ACTIVITY_VOICE); - m_display->writeDMR(m_slotNo, src, flco == FLCO_GROUP, dst, "R"); + if (m_netState == RPT_NET_STATE::IDLE) { + setShortLC(m_slotNo, dstId, flco, ACTIVITY_TYPE::VOICE); + m_display->writeDMR(m_slotNo, src, flco == FLCO::GROUP, dst, "R"); m_display->writeDMRRSSI(m_slotNo, m_rssi); } - LogMessage("DMR Slot %u, received RF voice header from %s to %s%s", m_slotNo, src.c_str(), flco == FLCO_GROUP ? "TG " : "", dst.c_str()); + LogMessage("DMR Slot %u, received RF voice header from %s to %s%s", m_slotNo, src.c_str(), flco == FLCO::GROUP ? "TG " : "", dst.c_str()); return true; } else if (dataType == DT_VOICE_PI_HEADER) { - if (m_rfState != RS_RF_AUDIO) + if (m_rfState != RPT_RF_STATE::AUDIO) return false; // Regenerate the Slot Type @@ -339,7 +339,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) return true; } else if (dataType == DT_TERMINATOR_WITH_LC) { - if (m_rfState != RS_RF_AUDIO) + if (m_rfState != RPT_RF_STATE::AUDIO) return false; // Regenerate the LC data @@ -369,9 +369,9 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) FLCO flco = m_rfLC->getFLCO(); if (m_rssi != 0U) - LogMessage("DMR Slot %u, received RF end of voice transmission from %s to %s%s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_slotNo, src.c_str(), flco == FLCO_GROUP ? "TG " : "", dst.c_str(), float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); + LogMessage("DMR Slot %u, received RF end of voice transmission from %s to %s%s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_slotNo, src.c_str(), flco == FLCO::GROUP ? "TG " : "", dst.c_str(), float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); else - LogMessage("DMR Slot %u, received RF end of voice transmission from %s to %s%s, %.1f seconds, BER: %.1f%%", m_slotNo, src.c_str(), flco == FLCO_GROUP ? "TG " : "", dst.c_str(), float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits)); + LogMessage("DMR Slot %u, received RF end of voice transmission from %s to %s%s, %.1f seconds, BER: %.1f%%", m_slotNo, src.c_str(), flco == FLCO::GROUP ? "TG " : "", dst.c_str(), float(m_rfFrames) / 16.667F, float(m_rfErrs * 100U) / float(m_rfBits)); m_display->writeDMRTA(m_slotNo, NULL, " "); @@ -383,7 +383,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) return true; } } else if (dataType == DT_DATA_HEADER) { - if (m_rfState == RS_RF_DATA) + if (m_rfState == RPT_RF_STATE::DATA) return true; CDMRDataHeader dataHeader; @@ -397,19 +397,19 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (!CDMRAccessControl::validateSrcId(srcId)) { LogMessage("DMR Slot %u, RF user %u rejected", m_slotNo, srcId); - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; return false; } if (!CDMRAccessControl::validateTGId(m_slotNo, gi, dstId)) { LogMessage("DMR Slot %u, RF user %u rejected for using TG %u", m_slotNo, srcId, dstId); - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; return false; } m_rfFrames = dataHeader.getBlocks(); - m_rfLC = new CDMRLC(gi ? FLCO_GROUP : FLCO_USER_USER, srcId, dstId); + m_rfLC = new CDMRLC(gi ? FLCO::GROUP : FLCO::USER_USER, srcId, dstId); // Regenerate the data header dataHeader.get(data + 2U); @@ -428,13 +428,13 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) writeNetworkRF(data, DT_DATA_HEADER); - m_rfState = RS_RF_DATA; + m_rfState = RPT_RF_STATE::DATA; std::string src = m_lookup->find(srcId); std::string dst = m_lookup->find(dstId); - if (m_netState == RS_NET_IDLE) { - setShortLC(m_slotNo, dstId, gi ? FLCO_GROUP : FLCO_USER_USER, ACTIVITY_DATA); + if (m_netState == RPT_NET_STATE::IDLE) { + setShortLC(m_slotNo, dstId, gi ? FLCO::GROUP : FLCO::USER_USER, ACTIVITY_TYPE::DATA); m_display->writeDMR(m_slotNo, src, gi, dst, "R"); m_display->writeDMRRSSI(m_slotNo, m_rssi); } @@ -454,13 +454,13 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) return false; CSBKO csbko = csbk.getCSBKO(); - if (csbko == CSBKO_BSDWNACT) + if (csbko == CSBKO::BSDWNACT) return false; // set the OVCM bit for the supported csbk - if (m_ovcm == DMR_OVCM_TX_ON || m_ovcm == DMR_OVCM_ON) + if ((m_ovcm == DMR_OVCM::TX_ON) || (m_ovcm == DMR_OVCM::ON)) csbk.setOVCM(true); - else if (m_ovcm == DMR_OVCM_FORCE_OFF) + else if (m_ovcm == DMR_OVCM::FORCE_OFF) csbk.setOVCM(false); bool gi = csbk.getGI(); @@ -470,13 +470,13 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (srcId != 0U || dstId != 0U) { if (!CDMRAccessControl::validateSrcId(srcId)) { LogMessage("DMR Slot %u, RF user %u rejected", m_slotNo, srcId); - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; return false; } if (!CDMRAccessControl::validateTGId(m_slotNo, gi, dstId)) { LogMessage("DMR Slot %u, RF user %u rejected for using TG %u", m_slotNo, srcId, dstId); - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; return false; } } @@ -496,34 +496,34 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (m_duplex) writeQueueRF(data); - writeNetworkRF(data, DT_CSBK, gi ? FLCO_GROUP : FLCO_USER_USER, srcId, dstId); + writeNetworkRF(data, DT_CSBK, gi ? FLCO::GROUP : FLCO::USER_USER, srcId, dstId); std::string src = m_lookup->find(srcId); std::string dst = m_lookup->find(dstId); switch (csbko) { - case CSBKO_UUVREQ: + case CSBKO::UUVREQ: LogMessage("DMR Slot %u, received RF Unit to Unit Voice Service Request CSBK from %s to %s%s", m_slotNo, src.c_str(), gi ? "TG ": "", dst.c_str()); break; - case CSBKO_UUANSRSP: + case CSBKO::UUANSRSP: LogMessage("DMR Slot %u, received RF Unit to Unit Voice Service Answer Response CSBK from %s to %s%s", m_slotNo, src.c_str(), gi ? "TG ": "", dst.c_str()); break; - case CSBKO_NACKRSP: + case CSBKO::NACKRSP: LogMessage("DMR Slot %u, received RF Negative Acknowledgment Response CSBK from %s to %s%s", m_slotNo, src.c_str(), gi ? "TG ": "", dst.c_str()); break; - case CSBKO_PRECCSBK: + case CSBKO::PRECCSBK: LogMessage("DMR Slot %u, received RF %s Preamble CSBK (%u to follow) from %s to %s%s", m_slotNo, csbk.getDataContent() ? "Data" : "CSBK", csbk.getCBF(), src.c_str(), gi ? "TG ": "", dst.c_str()); break; - case CSBKO_CALL_ALERT: + case CSBKO::CALL_ALERT: LogMessage("DMR Slot %u, received RF Call Alert CSBK from %s to %s%s", m_slotNo, src.c_str(), gi ? "TG " : "", dst.c_str()); break; - case CSBKO_CALL_ALERT_ACK: + case CSBKO::CALL_ALERT_ACK: LogMessage("DMR Slot %u, received RF Call Alert Ack CSBK from %s to %s%s", m_slotNo, src.c_str(), gi ? "TG " : "", dst.c_str()); break; - case CSBKO_RADIO_CHECK: + case CSBKO::RADIO_CHECK: LogMessage("DMR Slot %u, received RF Radio Check %s CSBK from %s to %s%s", m_slotNo, /* TBD */ 1 ? "Req" : "Ack", src.c_str(), gi ? "TG " : "", dst.c_str()); break; - case CSBKO_CALL_EMERGENCY: + case CSBKO::CALL_EMERGENCY: LogMessage("DMR Slot %u, received RF Call Emergency CSBK from %s to %s%s", m_slotNo, src.c_str(), gi ? "TG " : "", dst.c_str()); break; default: @@ -532,15 +532,15 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) } // If data preamble, signal its existence - if (m_netState == RS_NET_IDLE && csbko == CSBKO_PRECCSBK && csbk.getDataContent()) { - setShortLC(m_slotNo, dstId, gi ? FLCO_GROUP : FLCO_USER_USER, ACTIVITY_DATA); + if ((m_netState == RPT_NET_STATE::IDLE) && (csbko == CSBKO::PRECCSBK) && csbk.getDataContent()) { + setShortLC(m_slotNo, dstId, gi ? FLCO::GROUP : FLCO::USER_USER, ACTIVITY_TYPE::DATA); m_display->writeDMR(m_slotNo, src, gi, dst, "R"); m_display->writeDMRRSSI(m_slotNo, m_rssi); } return true; - } else if (dataType == DT_RATE_12_DATA || dataType == DT_RATE_34_DATA || dataType == DT_RATE_1_DATA) { - if (m_rfState != RS_RF_DATA || m_rfFrames == 0U) + } else if ((dataType == DT_RATE_12_DATA) || (dataType == DT_RATE_34_DATA) || (dataType == DT_RATE_1_DATA)) { + if ((m_rfState != RPT_RF_STATE::DATA) || (m_rfFrames == 0U)) return false; char title[80U]; @@ -593,7 +593,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) return true; } } else if (audioSync) { - if (m_rfState == RS_RF_AUDIO) { + if (m_rfState == RPT_RF_STATE::AUDIO) { m_lastrfN = 0; // Convert the Audio Sync to be from the BS or MS as needed CSync::addDMRAudioSync(data + 2U, m_duplex); @@ -630,13 +630,13 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) } return false; - } else if (m_rfState == RS_RF_LISTENING) { + } else if (m_rfState == RPT_RF_STATE::LISTENING) { m_rfEmbeddedLC.reset(); - m_rfState = RS_RF_LATE_ENTRY; + m_rfState = RPT_RF_STATE::LATE_ENTRY; return false; } } else { - if (m_rfState == RS_RF_AUDIO) { + if (m_rfState == RPT_RF_STATE::AUDIO) { m_rfN = data[1U] & 0x0FU; if (m_rfN > 5U) return false; @@ -673,13 +673,13 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) char text[80U]; switch (flco) { - case FLCO_GROUP: - case FLCO_USER_USER: + case FLCO::GROUP: + case FLCO::USER_USER: // ::sprintf(text, "DMR Slot %u, Embedded LC", m_slotNo); // CUtils::dump(1U, text, data, 9U); break; - case FLCO_GPS_INFO: + case FLCO::GINFO: if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded GPS Info", m_slotNo); CUtils::dump(1U, text, data, 9U); @@ -689,7 +689,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) m_network->writeRadioPosition(m_rfLC->getSrcId(), data); break; - case FLCO_TALKER_ALIAS_HEADER: + case FLCO::TALKER_ALIAS_HEADER: if (m_network != NULL) m_network->writeTalkerAlias(m_rfLC->getSrcId(), 0U, data); @@ -708,7 +708,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) } break; - case FLCO_TALKER_ALIAS_BLOCK1: + case FLCO::TALKER_ALIAS_BLOCK1: if (m_network != NULL) m_network->writeTalkerAlias(m_rfLC->getSrcId(), 1U, data); @@ -727,7 +727,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) } break; - case FLCO_TALKER_ALIAS_BLOCK2: + case FLCO::TALKER_ALIAS_BLOCK2: if (m_network != NULL) m_network->writeTalkerAlias(m_rfLC->getSrcId(), 2U, data); @@ -746,7 +746,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) } break; - case FLCO_TALKER_ALIAS_BLOCK3: + case FLCO::TALKER_ALIAS_BLOCK3: if (m_network != NULL) m_network->writeTalkerAlias(m_rfLC->getSrcId(), 3U, data); @@ -806,7 +806,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) } return false; - } else if (m_rfState == RS_RF_LATE_ENTRY) { + } else if (m_rfState == RPT_RF_STATE::LATE_ENTRY) { CDMREMB emb; emb.putData(data + 2U); @@ -826,7 +826,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (lc->getPF()) { LogMessage("DMR Slot %u, RF user %u rejected", m_slotNo, srcId); delete lc; - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; return false; } } @@ -834,20 +834,20 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) if (!CDMRAccessControl::validateSrcId(srcId)) { LogMessage("DMR Slot %u, RF user %u rejected", m_slotNo, srcId); delete lc; - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; return false; } - if (!CDMRAccessControl::validateTGId(m_slotNo, flco == FLCO_GROUP, dstId)) { + if (!CDMRAccessControl::validateTGId(m_slotNo, flco == FLCO::GROUP, dstId)) { LogMessage("DMR Slot %u, RF user %u rejected for using TG %u", m_slotNo, srcId, dstId); delete lc; - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; return false; } - if (m_ovcm == DMR_OVCM_TX_ON || m_ovcm == DMR_OVCM_ON) + if ((m_ovcm == DMR_OVCM::TX_ON) || (m_ovcm == DMR_OVCM::ON)) lc->setOVCM(true); - else if (m_ovcm == DMR_OVCM_FORCE_OFF) + else if (m_ovcm == DMR_OVCM::FORCE_OFF) lc->setOVCM(false); m_rfLC = lc; @@ -930,19 +930,19 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len) writeNetworkRF(data, DT_VOICE, errors); - m_rfState = RS_RF_AUDIO; + m_rfState = RPT_RF_STATE::AUDIO; std::string src = m_lookup->find(srcId); std::string dst = m_lookup->find(dstId); - if (m_netState == RS_NET_IDLE) { - setShortLC(m_slotNo, dstId, flco, ACTIVITY_VOICE); - m_display->writeDMR(m_slotNo, src, flco == FLCO_GROUP, dst, "R"); + if (m_netState == RPT_NET_STATE::IDLE) { + setShortLC(m_slotNo, dstId, flco, ACTIVITY_TYPE::VOICE); + m_display->writeDMR(m_slotNo, src, flco == FLCO::GROUP, dst, "R"); m_display->writeDMRRSSI(m_slotNo, m_rssi); m_display->writeDMRBER(m_slotNo, float(errors) / 1.41F); } - LogMessage("DMR Slot %u, received RF late entry from %s to %s%s", m_slotNo, src.c_str(), flco == FLCO_GROUP ? "TG " : "", dst.c_str()); + LogMessage("DMR Slot %u, received RF late entry from %s to %s%s", m_slotNo, src.c_str(), flco == FLCO::GROUP ? "TG " : "", dst.c_str()); return true; } @@ -969,15 +969,15 @@ unsigned int CDMRSlot::readModem(unsigned char* data) void CDMRSlot::writeEndRF(bool writeEnd) { - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; - if (m_netState == RS_NET_IDLE) { + if (m_netState == RPT_NET_STATE::IDLE) { setShortLC(m_slotNo, 0U); m_display->clearDMR(m_slotNo); } if (writeEnd) { - if (m_netState == RS_NET_IDLE && m_duplex && !m_rfTimeout) { + if ((m_netState == RPT_NET_STATE::IDLE) && m_duplex && !m_rfTimeout) { // Create a dummy start end frame unsigned char data[DMR_FRAME_LENGTH_BYTES + 2U]; @@ -1015,7 +1015,7 @@ void CDMRSlot::writeEndRF(bool writeEnd) void CDMRSlot::writeEndNet(bool writeEnd) { - m_netState = RS_NET_IDLE; + m_netState = RPT_NET_STATE::IDLE; setShortLC(m_slotNo, 0U); @@ -1075,7 +1075,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) if (!m_enabled) return; - if (m_rfState != RS_RF_LISTENING && m_netState == RS_NET_IDLE) + if ((m_rfState != RPT_RF_STATE::LISTENING) && (m_netState == RPT_NET_STATE::IDLE)) return; m_networkWatchdog.start(); @@ -1086,7 +1086,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) dmrData.getData(data + 2U); if (dataType == DT_VOICE_LC_HEADER) { - if (m_netState == RS_NET_AUDIO) + if (m_netState == RPT_NET_STATE::AUDIO) return; CDMRFullLC fullLC; @@ -1102,12 +1102,12 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) if (dstId != dmrData.getDstId() || srcId != dmrData.getSrcId() || flco != dmrData.getFLCO()) LogWarning("DMR Slot %u, DMRD header doesn't match the DMR RF header: %u->%s%u %u->%s%u", m_slotNo, - dmrData.getSrcId(), dmrData.getFLCO() == FLCO_GROUP ? "TG" : "", dmrData.getDstId(), - srcId, flco == FLCO_GROUP ? "TG" : "", dstId); + dmrData.getSrcId(), dmrData.getFLCO() == FLCO::GROUP ? "TG" : "", dmrData.getDstId(), + srcId, flco == FLCO::GROUP ? "TG" : "", dstId); - if (m_ovcm == DMR_OVCM_RX_ON || m_ovcm == DMR_OVCM_ON) + if ((m_ovcm == DMR_OVCM::RX_ON) || (m_ovcm == DMR_OVCM::ON)) lc->setOVCM(true); - else if (m_ovcm == DMR_OVCM_FORCE_OFF) + else if (m_ovcm == DMR_OVCM::FORCE_OFF) lc->setOVCM(false); m_netLC = lc; @@ -1162,31 +1162,31 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) writeQueueNet(data); } - m_netState = RS_NET_AUDIO; + m_netState = RPT_NET_STATE::AUDIO; - setShortLC(m_slotNo, dstId, flco, ACTIVITY_VOICE); + setShortLC(m_slotNo, dstId, flco, ACTIVITY_TYPE::VOICE); std::string src = m_lookup->find(srcId); std::string dst = m_lookup->find(dstId); class CUserDBentry cn; m_lookup->findWithName(srcId, &cn); - m_display->writeDMR(m_slotNo, cn, flco == FLCO_GROUP, dst, "N"); + m_display->writeDMR(m_slotNo, cn, flco == FLCO::GROUP, dst, "N"); #if defined(DUMP_DMR) openFile(); writeFile(data); #endif - LogMessage("DMR Slot %u, received network voice header from %s to %s%s", m_slotNo, src.c_str(), flco == FLCO_GROUP ? "TG " : "", dst.c_str()); + LogMessage("DMR Slot %u, received network voice header from %s to %s%s", m_slotNo, src.c_str(), flco == FLCO::GROUP ? "TG " : "", dst.c_str()); } else if (dataType == DT_VOICE_PI_HEADER) { - if (m_netState != RS_NET_AUDIO) { + if (m_netState != RPT_NET_STATE::AUDIO) { CDMRLC* lc = new CDMRLC(dmrData.getFLCO(), dmrData.getSrcId(), dmrData.getDstId()); unsigned int dstId = lc->getDstId(); unsigned int srcId = lc->getSrcId(); - if (m_ovcm == DMR_OVCM_RX_ON || m_ovcm == DMR_OVCM_ON) + if ((m_ovcm == DMR_OVCM::RX_ON) || (m_ovcm == DMR_OVCM::ON)) lc->setOVCM(true); - else if (m_ovcm == DMR_OVCM_FORCE_OFF) + else if (m_ovcm == DMR_OVCM::FORCE_OFF) lc->setOVCM(false); m_netLC = lc; @@ -1236,17 +1236,17 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) m_netBits = 1U; m_netErrs = 0U; - m_netState = RS_NET_AUDIO; + m_netState = RPT_NET_STATE::AUDIO; - setShortLC(m_slotNo, dstId, m_netLC->getFLCO(), ACTIVITY_VOICE); + setShortLC(m_slotNo, dstId, m_netLC->getFLCO(), ACTIVITY_TYPE::VOICE); std::string src = m_lookup->find(srcId); std::string dst = m_lookup->find(dstId); class CUserDBentry cn; m_lookup->findWithName(srcId, &cn); - m_display->writeDMR(m_slotNo, cn, m_netLC->getFLCO() == FLCO_GROUP, dst, "N"); + m_display->writeDMR(m_slotNo, cn, m_netLC->getFLCO() == FLCO::GROUP, dst, "N"); - LogMessage("DMR Slot %u, received network late entry from %s to %s%s", m_slotNo, src.c_str(), m_netLC->getFLCO() == FLCO_GROUP ? "TG " : "", dst.c_str()); + LogMessage("DMR Slot %u, received network late entry from %s to %s%s", m_slotNo, src.c_str(), m_netLC->getFLCO() == FLCO::GROUP ? "TG " : "", dst.c_str()); } // Regenerate the Slot Type @@ -1274,7 +1274,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) writeFile(data); #endif } else if (dataType == DT_TERMINATOR_WITH_LC) { - if (m_netState != RS_NET_AUDIO) + if (m_netState != RPT_NET_STATE::AUDIO) return; // Regenerate the LC data @@ -1313,11 +1313,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) // We've received the voice header and terminator haven't we? m_netFrames += 2U; - LogMessage("DMR Slot %u, received network end of voice transmission from %s to %s%s, %.1f seconds, %u%% packet loss, BER: %.1f%%", m_slotNo, src.c_str(), flco == FLCO_GROUP ? "TG " : "", dst.c_str(), float(m_netFrames) / 16.667F, (m_netLost * 100U) / m_netFrames, float(m_netErrs * 100U) / float(m_netBits)); + LogMessage("DMR Slot %u, received network end of voice transmission from %s to %s%s, %.1f seconds, %u%% packet loss, BER: %.1f%%", m_slotNo, src.c_str(), flco == FLCO::GROUP ? "TG " : "", dst.c_str(), float(m_netFrames) / 16.667F, (m_netLost * 100U) / m_netFrames, float(m_netErrs * 100U) / float(m_netBits)); m_display->writeDMRTA(m_slotNo, NULL, " "); writeEndNet(); } else if (dataType == DT_DATA_HEADER) { - if (m_netState == RS_NET_DATA) + if (m_netState == RPT_NET_STATE::DATA) return; CDMRDataHeader dataHeader; @@ -1354,9 +1354,9 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) writeQueueNet(data); - m_netState = RS_NET_DATA; + m_netState = RPT_NET_STATE::DATA; - setShortLC(m_slotNo, dstId, gi ? FLCO_GROUP : FLCO_USER_USER, ACTIVITY_DATA); + setShortLC(m_slotNo, dstId, gi ? FLCO::GROUP : FLCO::USER_USER, ACTIVITY_TYPE::DATA); std::string src = m_lookup->find(srcId); std::string dst = m_lookup->find(dstId); @@ -1370,15 +1370,15 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) writeEndNet(); } } else if (dataType == DT_VOICE_SYNC) { - if (m_netState == RS_NET_IDLE) { + if (m_netState == RPT_NET_STATE::IDLE) { CDMRLC* lc = new CDMRLC(dmrData.getFLCO(), dmrData.getSrcId(), dmrData.getDstId()); unsigned int dstId = lc->getDstId(); unsigned int srcId = lc->getSrcId(); - if (m_ovcm == DMR_OVCM_RX_ON || m_ovcm == DMR_OVCM_ON) + if ((m_ovcm == DMR_OVCM::RX_ON) || (m_ovcm == DMR_OVCM::ON)) lc->setOVCM(true); - else if (m_ovcm == DMR_OVCM_FORCE_OFF) + else if (m_ovcm == DMR_OVCM::FORCE_OFF) lc->setOVCM(false); m_netLC = lc; @@ -1437,21 +1437,21 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) m_netEmbeddedWriteN = 1U; m_netTalkerId = TALKER_ID_NONE; - m_netState = RS_NET_AUDIO; + m_netState = RPT_NET_STATE::AUDIO; - setShortLC(m_slotNo, dstId, m_netLC->getFLCO(), ACTIVITY_VOICE); + setShortLC(m_slotNo, dstId, m_netLC->getFLCO(), ACTIVITY_TYPE::VOICE); std::string src = m_lookup->find(srcId); std::string dst = m_lookup->find(dstId); class CUserDBentry cn; m_lookup->findWithName(srcId, &cn); - m_display->writeDMR(m_slotNo, cn, m_netLC->getFLCO() == FLCO_GROUP, dst, "N"); + m_display->writeDMR(m_slotNo, cn, m_netLC->getFLCO() == FLCO::GROUP, dst, "N"); - LogMessage("DMR Slot %u, received network late entry from %s to %s%s", m_slotNo, src.c_str(), m_netLC->getFLCO() == FLCO_GROUP ? "TG " : "", dst.c_str()); + LogMessage("DMR Slot %u, received network late entry from %s to %s%s", m_slotNo, src.c_str(), m_netLC->getFLCO() == FLCO::GROUP ? "TG " : "", dst.c_str()); } - if (m_netState == RS_NET_AUDIO) { + if (m_netState == RPT_NET_STATE::AUDIO) { unsigned char fid = m_netLC->getFID(); if (fid == FID_ETSI || fid == FID_DMRA) m_netErrs += m_fec.regenerateDMR(data + 2U); @@ -1494,7 +1494,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) #endif } } else if (dataType == DT_VOICE) { - if (m_netState != RS_NET_AUDIO) + if (m_netState != RPT_NET_STATE::AUDIO) return; unsigned char fid = m_netLC->getFID(); @@ -1517,19 +1517,19 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) char text[80U]; switch (flco) { - case FLCO_GROUP: - case FLCO_USER_USER: + case FLCO::GROUP: + case FLCO::USER_USER: // ::sprintf(text, "DMR Slot %u, Embedded LC", m_slotNo); // CUtils::dump(1U, text, data, 9U); break; - case FLCO_GPS_INFO: + case FLCO::GINFO: if (m_dumpTAData) { ::sprintf(text, "DMR Slot %u, Embedded GPS Info", m_slotNo); CUtils::dump(1U, text, data, 9U); logGPSPosition(data); } break; - case FLCO_TALKER_ALIAS_HEADER: + case FLCO::TALKER_ALIAS_HEADER: if (!(m_netTalkerId & TALKER_ID_HEADER)) { if (!m_netTalkerId) m_netTalkerAlias.reset(); @@ -1544,7 +1544,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) m_netTalkerId |= TALKER_ID_HEADER; } break; - case FLCO_TALKER_ALIAS_BLOCK1: + case FLCO::TALKER_ALIAS_BLOCK1: if (!(m_netTalkerId & TALKER_ID_BLOCK1)) { if (!m_netTalkerId) m_netTalkerAlias.reset(); @@ -1559,7 +1559,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) m_netTalkerId |= TALKER_ID_BLOCK1; } break; - case FLCO_TALKER_ALIAS_BLOCK2: + case FLCO::TALKER_ALIAS_BLOCK2: if (!(m_netTalkerId & TALKER_ID_BLOCK2)) { if (!m_netTalkerId) m_netTalkerAlias.reset(); @@ -1574,7 +1574,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) m_netTalkerId |= TALKER_ID_BLOCK2; } break; - case FLCO_TALKER_ALIAS_BLOCK3: + case FLCO::TALKER_ALIAS_BLOCK3: if (!(m_netTalkerId & TALKER_ID_BLOCK3)) { if (!m_netTalkerId) m_netTalkerAlias.reset(); @@ -1648,13 +1648,13 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) } CSBKO csbko = csbk.getCSBKO(); - if (csbko == CSBKO_BSDWNACT) + if (csbko == CSBKO::BSDWNACT) return; // set the OVCM bit for the supported csbk - if (m_ovcm == DMR_OVCM_RX_ON || m_ovcm == DMR_OVCM_ON) + if ((m_ovcm == DMR_OVCM::RX_ON) || (m_ovcm == DMR_OVCM::ON)) csbk.setOVCM(true); - else if (m_ovcm == DMR_OVCM_FORCE_OFF) + else if (m_ovcm == DMR_OVCM::FORCE_OFF) csbk.setOVCM(false); bool gi = csbk.getGI(); @@ -1676,7 +1676,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) data[0U] = TAG_DATA; data[1U] = 0x00U; - if (csbko == CSBKO_PRECCSBK && csbk.getDataContent()) { + if ((csbko == CSBKO::PRECCSBK) && csbk.getDataContent()) { unsigned int cbf = NO_PREAMBLE_CSBK + csbk.getCBF() - 1U; for (unsigned int i = 0U; i < NO_PREAMBLE_CSBK; i++, cbf--) { // Change blocks to follow @@ -1709,25 +1709,25 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) std::string dst = m_lookup->find(dstId); switch (csbko) { - case CSBKO_UUVREQ: + case CSBKO::UUVREQ: LogMessage("DMR Slot %u, received network Unit to Unit Voice Service Request CSBK from %s to %s%s", m_slotNo, src.c_str(), gi ? "TG ": "", dst.c_str()); break; - case CSBKO_UUANSRSP: + case CSBKO::UUANSRSP: LogMessage("DMR Slot %u, received network Unit to Unit Voice Service Answer Response CSBK from %s to %s%s", m_slotNo, src.c_str(), gi ? "TG ": "", dst.c_str()); break; - case CSBKO_NACKRSP: + case CSBKO::NACKRSP: LogMessage("DMR Slot %u, received network Negative Acknowledgment Response CSBK from %s to %s%s", m_slotNo, src.c_str(), gi ? "TG ": "", dst.c_str()); break; - case CSBKO_PRECCSBK: + case CSBKO::PRECCSBK: LogMessage("DMR Slot %u, received network %s Preamble CSBK (%u to follow) from %s to %s%s", m_slotNo, csbk.getDataContent() ? "Data" : "CSBK", csbk.getCBF(), src.c_str(), gi ? "TG " : "", dst.c_str()); break; - case CSBKO_CALL_ALERT: + case CSBKO::CALL_ALERT: LogMessage("DMR Slot %u, received network Call Alert CSBK from %s to %s%s", m_slotNo, src.c_str(), gi ? "TG " : "", dst.c_str()); break; - case CSBKO_CALL_ALERT_ACK: + case CSBKO::CALL_ALERT_ACK: LogMessage("DMR Slot %u, received network Call Alert Ack CSBK from %s to %s%s", m_slotNo, src.c_str(), gi ? "TG " : "", dst.c_str()); break; - case CSBKO_RADIO_CHECK: + case CSBKO::RADIO_CHECK: LogMessage("DMR Slot %u, received network Radio Check %s CSBK from %s to %s%s", m_slotNo, /* TBD */ 1 ? "Req" : "Ack", src.c_str(), gi ? "TG " : "", dst.c_str()); break; default: @@ -1736,12 +1736,12 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData) } // If data preamble, signal its existence - if (csbko == CSBKO_PRECCSBK && csbk.getDataContent()) { - setShortLC(m_slotNo, dstId, gi ? FLCO_GROUP : FLCO_USER_USER, ACTIVITY_DATA); + if ((csbko == CSBKO::PRECCSBK) && csbk.getDataContent()) { + setShortLC(m_slotNo, dstId, gi ? FLCO::GROUP : FLCO::USER_USER, ACTIVITY_TYPE::DATA); m_display->writeDMR(m_slotNo, src, gi, dst, "N"); } - } else if (dataType == DT_RATE_12_DATA || dataType == DT_RATE_34_DATA || dataType == DT_RATE_1_DATA) { - if (m_netState != RS_NET_DATA || m_netFrames == 0U) { + } else if ((dataType == DT_RATE_12_DATA) || (dataType == DT_RATE_34_DATA) || (dataType == DT_RATE_1_DATA)) { + if ((m_netState != RPT_NET_STATE::DATA) || (m_netFrames == 0U)) { writeEndNet(); return; } @@ -1870,11 +1870,11 @@ void CDMRSlot::clock() } } - if (m_netState == RS_NET_AUDIO || m_netState == RS_NET_DATA) { + if ((m_netState == RPT_NET_STATE::AUDIO) || (m_netState == RPT_NET_STATE::DATA)) { m_networkWatchdog.clock(ms); if (m_networkWatchdog.hasExpired()) { - if (m_netState == RS_NET_AUDIO) { + if (m_netState == RPT_NET_STATE::AUDIO) { // We've received the voice header haven't we? m_netFrames += 1U; LogMessage("DMR Slot %u, network watchdog has expired, %.1f seconds, %u%% packet loss, BER: %.1f%%", m_slotNo, float(m_netFrames) / 16.667F, (m_netLost * 100U) / m_netFrames, float(m_netErrs * 100U) / float(m_netBits)); @@ -1892,7 +1892,7 @@ void CDMRSlot::clock() } } - if (m_netState == RS_NET_AUDIO) { + if (m_netState == RPT_NET_STATE::AUDIO) { m_packetTimer.clock(ms); if (m_packetTimer.isRunning() && m_packetTimer.hasExpired()) { @@ -1912,7 +1912,7 @@ void CDMRSlot::writeQueueRF(const unsigned char *data) { assert(data != NULL); - if (m_netState != RS_NET_IDLE) + if (m_netState != RPT_NET_STATE::IDLE) return; unsigned char len = DMR_FRAME_LENGTH_BYTES + 2U; @@ -1931,7 +1931,7 @@ void CDMRSlot::writeNetworkRF(const unsigned char* data, unsigned char dataType, { assert(data != NULL); - if (m_netState != RS_NET_IDLE) + if (m_netState != RPT_NET_STATE::IDLE) return; if (m_network == NULL) @@ -1979,7 +1979,7 @@ void CDMRSlot::writeQueueNet(const unsigned char *data) m_queue.addData(data, len); } -void CDMRSlot::init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData, unsigned int callHang, CModem* modem, IDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssiMapper, unsigned int jitter, DMR_OVCM_TYPES ovcm, bool protect) +void CDMRSlot::init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData, unsigned int callHang, CModem* modem, IDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssiMapper, unsigned int jitter, DMR_OVCM ovcm, bool protect) { assert(modem != NULL); assert(display != NULL); @@ -2061,41 +2061,41 @@ void CDMRSlot::setShortLC(unsigned int slotNo, unsigned int id, FLCO flco, ACTIV if (m_id1 != 0U) { lc[2U] = m_id1; - if (m_activity1 == ACTIVITY_VOICE && m_flco1 == FLCO_GROUP) + if ((m_activity1 == ACTIVITY_TYPE::VOICE) && (m_flco1 == FLCO::GROUP)) lc[1U] |= 0x08U; - else if (m_activity1 == ACTIVITY_VOICE && m_flco1 == FLCO_USER_USER) + else if ((m_activity1 == ACTIVITY_TYPE::VOICE) && (m_flco1 == FLCO::USER_USER)) lc[1U] |= 0x09U; - else if (m_activity1 == ACTIVITY_DATA && m_flco1 == FLCO_GROUP) + else if ((m_activity1 == ACTIVITY_TYPE::DATA) && (m_flco1 == FLCO::GROUP)) lc[1U] |= 0x0BU; - else if (m_activity1 == ACTIVITY_DATA && m_flco1 == FLCO_USER_USER) + else if ((m_activity1 == ACTIVITY_TYPE::DATA) && (m_flco1 == FLCO::USER_USER)) lc[1U] |= 0x0AU; - else if (m_activity1 == ACTIVITY_CSBK && m_flco1 == FLCO_GROUP) + else if ((m_activity1 == ACTIVITY_TYPE::CSBK) && (m_flco1 == FLCO::GROUP)) lc[1U] |= 0x02U; - else if (m_activity1 == ACTIVITY_CSBK && m_flco1 == FLCO_USER_USER) + else if ((m_activity1 == ACTIVITY_TYPE::CSBK) && (m_flco1 == FLCO::USER_USER)) lc[1U] |= 0x03U; - else if (m_activity1 == ACTIVITY_EMERG && m_flco1 == FLCO_GROUP) + else if ((m_activity1 == ACTIVITY_TYPE::EMERG) && (m_flco1 == FLCO::GROUP)) lc[1U] |= 0x0CU; - else if (m_activity1 == ACTIVITY_EMERG && m_flco1 == FLCO_USER_USER) + else if ((m_activity1 == ACTIVITY_TYPE::EMERG) && (m_flco1 == FLCO::USER_USER)) lc[1U] |= 0x0DU; } if (m_id2 != 0U) { lc[3U] = m_id2; - if (m_activity2 == ACTIVITY_VOICE && m_flco2 == FLCO_GROUP) + if ((m_activity2 == ACTIVITY_TYPE::VOICE) && (m_flco2 == FLCO::GROUP)) lc[1U] |= 0x80U; - else if (m_activity2 == ACTIVITY_VOICE && m_flco2 == FLCO_USER_USER) + else if ((m_activity2 == ACTIVITY_TYPE::VOICE) && (m_flco2 == FLCO::USER_USER)) lc[1U] |= 0x90U; - else if (m_activity2 == ACTIVITY_DATA && m_flco2 == FLCO_GROUP) + else if ((m_activity2 == ACTIVITY_TYPE::DATA) && (m_flco2 == FLCO::GROUP)) lc[1U] |= 0xB0U; - else if (m_activity2 == ACTIVITY_DATA && m_flco2 == FLCO_USER_USER) + else if ((m_activity2 == ACTIVITY_TYPE::DATA) && (m_flco2 == FLCO::USER_USER)) lc[1U] |= 0xA0U; - else if (m_activity2 == ACTIVITY_CSBK && m_flco2 == FLCO_GROUP) + else if ((m_activity2 == ACTIVITY_TYPE::CSBK) && (m_flco2 == FLCO::GROUP)) lc[1U] |= 0x20U; - else if (m_activity2 == ACTIVITY_CSBK && m_flco2 == FLCO_USER_USER) + else if ((m_activity2 == ACTIVITY_TYPE::CSBK) && (m_flco2 == FLCO::USER_USER)) lc[1U] |= 0x30U; - else if (m_activity2 == ACTIVITY_EMERG && m_flco2 == FLCO_GROUP) + else if ((m_activity2 == ACTIVITY_TYPE::EMERG) && (m_flco2 == FLCO::GROUP)) lc[1U] |= 0xC0U; - else if (m_activity2 == ACTIVITY_EMERG && m_flco2 == FLCO_USER_USER) + else if ((m_activity2 == ACTIVITY_TYPE::EMERG) && (m_flco2 == FLCO::USER_USER)) lc[1U] |= 0xD0U; } @@ -2229,7 +2229,7 @@ void CDMRSlot::insertSilence(unsigned int count) bool CDMRSlot::isBusy() const { - return m_rfState != RS_RF_LISTENING || m_netState != RS_NET_IDLE; + return (m_rfState != RPT_RF_STATE::LISTENING) || (m_netState != RPT_NET_STATE::IDLE); } void CDMRSlot::enable(bool enabled) @@ -2238,7 +2238,7 @@ void CDMRSlot::enable(bool enabled) m_queue.clear(); // Reset the RF section - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; m_rfTimeoutTimer.stop(); m_rfTimeout = false; @@ -2254,7 +2254,7 @@ void CDMRSlot::enable(bool enabled) m_rfLC = NULL; // Reset the networking section - m_netState = RS_NET_IDLE; + m_netState = RPT_NET_STATE::IDLE; m_lastFrameValid = false; diff --git a/DMRSlot.h b/DMRSlot.h index 11756a4..a998a44 100644 --- a/DMRSlot.h +++ b/DMRSlot.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2021,2023 by Jonathan Naylor G4KLX + * Copyright (C) 2015-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 @@ -37,12 +37,12 @@ #include -enum ACTIVITY_TYPE { - ACTIVITY_NONE, - ACTIVITY_VOICE, - ACTIVITY_DATA, - ACTIVITY_CSBK, - ACTIVITY_EMERG +enum class ACTIVITY_TYPE { + NONE, + VOICE, + DATA, + CSBK, + EMERG }; class CDMRSlot { @@ -62,7 +62,7 @@ public: void enable(bool enabled); - static void init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData, unsigned int callHang, CModem* modem, IDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssiMapper, unsigned int jitter, DMR_OVCM_TYPES ovcm, bool protect); + static void init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData, unsigned int callHang, CModem* modem, IDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssiMapper, unsigned int jitter, DMR_OVCM ovcm, bool protect); private: unsigned int m_slotNo; @@ -124,7 +124,7 @@ private: static bool m_duplex; static CDMRLookup* m_lookup; static unsigned int m_hangCount; - static DMR_OVCM_TYPES m_ovcm; + static DMR_OVCM m_ovcm; static bool m_protect; static CRSSIInterpolator* m_rssiMapper; @@ -158,7 +158,7 @@ private: bool insertSilence(const unsigned char* data, unsigned char seqNo); void insertSilence(unsigned int count); - static void setShortLC(unsigned int slotNo, unsigned int id, FLCO flco = FLCO_GROUP, ACTIVITY_TYPE type = ACTIVITY_NONE); + static void setShortLC(unsigned int slotNo, unsigned int id, FLCO flco = FLCO::GROUP, ACTIVITY_TYPE type = ACTIVITY_TYPE::NONE); }; #endif diff --git a/DStarControl.cpp b/DStarControl.cpp index c7ba73b..240a75e 100644 --- a/DStarControl.cpp +++ b/DStarControl.cpp @@ -37,7 +37,7 @@ bool CallsignCompare(const std::string& arg, const unsigned char* my) // #define DUMP_DSTAR -CDStarControl::CDStarControl(const std::string& callsign, const std::string& module, bool selfOnly, bool ackReply, unsigned int ackTime, DSTAR_ACK_MESSAGE ackMessage, bool errorReply, const std::vector& blackList, const std::vector& whiteList, CDStarNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, bool remoteGateway, CRSSIInterpolator* rssiMapper) : +CDStarControl::CDStarControl(const std::string& callsign, const std::string& module, bool selfOnly, bool ackReply, unsigned int ackTime, DSTAR_ACK ackMessage, bool errorReply, const std::vector& blackList, const std::vector& whiteList, CDStarNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, bool remoteGateway, CRSSIInterpolator* rssiMapper) : m_callsign(NULL), m_gateway(NULL), m_selfOnly(selfOnly), @@ -53,8 +53,8 @@ m_duplex(duplex), m_queue(5000U, "D-Star Control"), m_rfHeader(), m_netHeader(), -m_rfState(RS_RF_LISTENING), -m_netState(RS_NET_IDLE), +m_rfState(RPT_RF_STATE::LISTENING), +m_netState(RPT_NET_STATE::IDLE), m_net(false), m_rfSlowData(), m_netSlowData(), @@ -129,7 +129,7 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) unsigned char type = data[0U]; - if (type == TAG_LOST && ((m_rfState == RS_RF_AUDIO) || (m_rfState == RS_RF_DATA))) { + if (type == TAG_LOST && ((m_rfState == RPT_RF_STATE::AUDIO) || (m_rfState == RPT_RF_STATE::DATA))) { unsigned char my1[DSTAR_LONG_CALLSIGN_LENGTH]; unsigned char my2[DSTAR_SHORT_CALLSIGN_LENGTH]; unsigned char your[DSTAR_LONG_CALLSIGN_LENGTH]; @@ -145,10 +145,10 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) return false; } - if (type == TAG_LOST && m_rfState == RS_RF_INVALID) { - m_rfState = RS_RF_LISTENING; + if ((type == TAG_LOST) && (m_rfState == RPT_RF_STATE::INVALID)) { + m_rfState = RPT_RF_STATE::LISTENING; - if (m_netState == RS_NET_IDLE) { + if (m_netState == RPT_NET_STATE::IDLE) { if (m_errorReply) m_errTimer.start(); @@ -160,7 +160,7 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) } if (type == TAG_LOST) { - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; return false; } @@ -220,7 +220,7 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) // Is this a transmission destined for a repeater? if (!header.isRepeater()) { LogMessage("D-Star, non repeater RF header received from %8.8s", my1); - m_rfState = RS_RF_INVALID; + m_rfState = RPT_RF_STATE::INVALID; return true; } @@ -230,19 +230,19 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) // Is it for us? if (::memcmp(callsign, m_callsign, DSTAR_LONG_CALLSIGN_LENGTH) != 0) { LogMessage("D-Star, received RF header for wrong repeater (%8.8s) from %8.8s", callsign, my1); - m_rfState = RS_RF_INVALID; + m_rfState = RPT_RF_STATE::INVALID; return true; } if (m_selfOnly && ::memcmp(my1, m_callsign, DSTAR_LONG_CALLSIGN_LENGTH - 1U) != 0 && !(std::find_if(m_whiteList.begin(), m_whiteList.end(), std::bind(CallsignCompare, std::placeholders::_1, my1)) != m_whiteList.end())) { LogMessage("D-Star, invalid access attempt from %8.8s", my1); - m_rfState = RS_RF_REJECTED; + m_rfState = RPT_RF_STATE::REJECTED; return true; } if (!m_selfOnly && std::find_if(m_blackList.begin(), m_blackList.end(), std::bind(CallsignCompare, std::placeholders::_1, my1)) != m_blackList.end()) { LogMessage("D-Star, invalid access attempt from %8.8s", my1); - m_rfState = RS_RF_REJECTED; + m_rfState = RPT_RF_STATE::REJECTED; return true; } @@ -297,21 +297,21 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) writeNetworkHeaderRF(data); } - m_rfState = RS_RF_AUDIO; + m_rfState = RPT_RF_STATE::AUDIO; - if (m_netState == RS_NET_IDLE) { + if (m_netState == RPT_NET_STATE::IDLE) { m_display->writeDStar((char*)my1, (char*)my2, (char*)your, "R", " "); m_display->writeDStarRSSI(m_rssi); } LogMessage("D-Star, received RF header from %8.8s/%4.4s to %8.8s", my1, my2, your); } else if (type == TAG_EOT) { - if (m_rfState == RS_RF_REJECTED) { - m_rfState = RS_RF_LISTENING; - } else if (m_rfState == RS_RF_INVALID) { - m_rfState = RS_RF_LISTENING; + if (m_rfState == RPT_RF_STATE::REJECTED) { + m_rfState = RPT_RF_STATE::LISTENING; + } else if (m_rfState == RPT_RF_STATE::INVALID) { + m_rfState = RPT_RF_STATE::LISTENING; - if (m_netState == RS_NET_IDLE) { + if (m_netState == RPT_NET_STATE::IDLE) { if (m_errorReply) m_errTimer.start(); @@ -320,7 +320,7 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) } return false; - } else if ((m_rfState == RS_RF_AUDIO) || (m_rfState == RS_RF_DATA)) { + } else if ((m_rfState == RPT_RF_STATE::AUDIO) || (m_rfState == RPT_RF_STATE::DATA)) { if (m_net) writeNetworkDataRF(DSTAR_END_PATTERN_BYTES, 0U, true); @@ -344,24 +344,24 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) return false; } else if (type == TAG_DATA) { - if (m_rfState == RS_RF_REJECTED) + if (m_rfState == RPT_RF_STATE::REJECTED) return true; - if (m_rfState == RS_RF_INVALID) + if (m_rfState == RPT_RF_STATE::INVALID) return true; - if (m_rfState == RS_RF_LISTENING) { + if (m_rfState == RPT_RF_STATE::LISTENING) { // The sync is regenerated by the modem so can do exact match if (::memcmp(data + 1U + DSTAR_VOICE_FRAME_LENGTH_BYTES, DSTAR_SYNC_BYTES, DSTAR_DATA_FRAME_LENGTH_BYTES) == 0) { m_rfSlowData.start(); m_rfN = 0U; - m_rfState = RS_RF_LATE_ENTRY; + m_rfState = RPT_RF_STATE::LATE_ENTRY; } return false; } - if ((m_rfState == RS_RF_AUDIO) || (m_rfState == RS_RF_DATA)) { + if ((m_rfState == RPT_RF_STATE::AUDIO) || (m_rfState == RPT_RF_STATE::DATA)) { // The sync is regenerated by the modem so can do exact match if (::memcmp(data + 1U + DSTAR_VOICE_FRAME_LENGTH_BYTES, DSTAR_SYNC_BYTES, DSTAR_DATA_FRAME_LENGTH_BYTES) == 0) { m_rfSlowData.start(); @@ -369,17 +369,17 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) } } - if (m_rfState == RS_RF_AUDIO) { + if (m_rfState == RPT_RF_STATE::AUDIO) { m_rfSlowData.peakSlowData(data + 1U, m_rfN); unsigned char type = m_rfSlowData.getType(); if (type == DSTAR_SLOW_DATA_TYPE_FASTDATA_BEGIN) { LogMessage("D-Star, starting fast data mode"); - m_rfState = RS_RF_DATA; + m_rfState = RPT_RF_STATE::DATA; } } - if (m_rfState == RS_RF_DATA) { + if (m_rfState == RPT_RF_STATE::DATA) { LogDebug("D-Star, fast data sequence no. %u", m_rfN); m_rfBits += 48U; @@ -398,12 +398,12 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) unsigned char type = m_rfSlowData.getType(); if (type == DSTAR_SLOW_DATA_TYPE_FASTDATA_END) { LogMessage("D-Star, leaving fast data mode"); - m_rfState = RS_RF_AUDIO; + m_rfState = RPT_RF_STATE::AUDIO; } } m_rfN = (m_rfN + 1U) % 21U; - } else if (m_rfState == RS_RF_AUDIO) { + } else if (m_rfState == RPT_RF_STATE::AUDIO) { // Send the RSSI data to the display if (m_rfN == 0U) m_display->writeDStarRSSI(m_rssi); @@ -438,7 +438,7 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) m_rfN = (m_rfN + 1U) % 21U; } - if (m_rfState == RS_RF_LATE_ENTRY) { + if (m_rfState == RPT_RF_STATE::LATE_ENTRY) { // The sync is regenerated by the modem so can do exact match if (::memcmp(data + 1U + DSTAR_VOICE_FRAME_LENGTH_BYTES, DSTAR_SYNC_BYTES, DSTAR_DATA_FRAME_LENGTH_BYTES) == 0) { m_rfSlowData.reset(); @@ -461,7 +461,7 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) // Is this a transmission destined for a repeater? if (!m_rfHeader.isRepeater()) { LogMessage("D-Star, non repeater RF header received from %8.8s", my1); - m_rfState = RS_RF_INVALID; + m_rfState = RPT_RF_STATE::INVALID; return true; } @@ -471,19 +471,19 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) // Is it for us? if (::memcmp(callsign, m_callsign, DSTAR_LONG_CALLSIGN_LENGTH) != 0) { LogMessage("D-Star, received RF header for wrong repeater (%8.8s) from %8.8s", callsign, my1); - m_rfState = RS_RF_INVALID; + m_rfState = RPT_RF_STATE::INVALID; return true; } if (m_selfOnly && ::memcmp(my1, m_callsign, DSTAR_LONG_CALLSIGN_LENGTH - 1U) != 0 && !(std::find_if(m_whiteList.begin(), m_whiteList.end(), std::bind(CallsignCompare, std::placeholders::_1, my1)) != m_whiteList.end())) { LogMessage("D-Star, invalid access attempt from %8.8s", my1); - m_rfState = RS_RF_REJECTED; + m_rfState = RPT_RF_STATE::REJECTED; return true; } if (!m_selfOnly && std::find_if(m_blackList.begin(), m_blackList.end(), std::bind(CallsignCompare, std::placeholders::_1, my1)) != m_blackList.end()) { LogMessage("D-Star, invalid access attempt from %8.8s", my1); - m_rfState = RS_RF_REJECTED; + m_rfState = RPT_RF_STATE::REJECTED; return true; } @@ -564,9 +564,9 @@ bool CDStarControl::writeModem(unsigned char *data, unsigned int len) writeQueueDataRF(data); } - m_rfState = RS_RF_AUDIO; + m_rfState = RPT_RF_STATE::AUDIO; - if (m_netState == RS_NET_IDLE) { + if (m_netState == RPT_NET_STATE::IDLE) { m_display->writeDStar((char*)my1, (char*)my2, (char*)your, "R", " "); m_display->writeDStarRSSI(m_rssi); m_display->writeDStarBER(float(errors) / 0.48F); @@ -600,11 +600,11 @@ unsigned int CDStarControl::readModem(unsigned char* data) void CDStarControl::writeEndRF() { - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; m_rfTimeoutTimer.stop(); - if (m_netState == RS_NET_IDLE) { + if (m_netState == RPT_NET_STATE::IDLE) { m_display->clearDStar(); m_ackTimer.start(); @@ -616,7 +616,7 @@ void CDStarControl::writeEndRF() void CDStarControl::writeEndNet() { - m_netState = RS_NET_IDLE; + m_netState = RPT_NET_STATE::IDLE; m_lastFrameValid = false; @@ -646,7 +646,7 @@ void CDStarControl::writeNetwork() if (!m_enabled) return; - if (((m_rfState == RS_RF_AUDIO) || (m_rfState == RS_RF_DATA)) && (m_netState == RS_NET_IDLE)) + if (((m_rfState == RPT_RF_STATE::AUDIO) || (m_rfState == RPT_RF_STATE::DATA)) && (m_netState == RPT_NET_STATE::IDLE)) return; m_networkWatchdog.start(); @@ -654,7 +654,7 @@ void CDStarControl::writeNetwork() unsigned char type = data[0U]; if (type == TAG_HEADER) { - if (m_netState != RS_NET_IDLE) + if (m_netState != RPT_NET_STATE::IDLE) return; CDStarHeader header(data + 1U); @@ -698,12 +698,12 @@ void CDStarControl::writeNetwork() openFile(); writeFile(data + 1U, length - 1U); #endif - m_netState = RS_NET_AUDIO; + m_netState = RPT_NET_STATE::AUDIO; - LINK_STATUS status = LS_NONE; + LINK_STATUS status = LINK_STATUS::NONE; unsigned char reflector[DSTAR_LONG_CALLSIGN_LENGTH]; m_network->getStatus(status, reflector); - if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK) { + if ((status == LINK_STATUS::LINKED_DEXTRA) || (status == LINK_STATUS::LINKED_DPLUS) || (status == LINK_STATUS::LINKED_DCS) || (status == LINK_STATUS::LINKED_CCS) || (status == LINK_STATUS::LINKED_LOOPBACK)) { m_display->writeDStar((char*)my1, (char*)my2, (char*)your, "N", (char*) reflector); LogMessage("D-Star, received network header from %8.8s/%4.4s to %8.8s via %8.8s", my1, my2, your, reflector); } else { @@ -713,7 +713,7 @@ void CDStarControl::writeNetwork() m_elapsed.start(); } else if (type == TAG_EOT) { - if ((m_netState != RS_NET_AUDIO) && (m_netState != RS_NET_DATA)) + if ((m_netState != RPT_NET_STATE::AUDIO) && (m_netState != RPT_NET_STATE::DATA)) return; writeQueueEOTNet(); @@ -737,7 +737,7 @@ void CDStarControl::writeNetwork() writeEndNet(); } else if (type == TAG_DATA) { - if ((m_netState == RS_NET_AUDIO) || (m_netState == RS_NET_DATA)) { + if ((m_netState == RPT_NET_STATE::AUDIO) || (m_netState == RPT_NET_STATE::DATA)) { unsigned char n = data[1U]; // The sync is regenerated by the modem so can do exact match @@ -746,17 +746,17 @@ void CDStarControl::writeNetwork() } else { m_netSlowData.peakSlowData(data + 1U, n); - if (m_netState == RS_NET_AUDIO) { + if (m_netState == RPT_NET_STATE::AUDIO) { unsigned char type = m_netSlowData.getType(); if (type == DSTAR_SLOW_DATA_TYPE_FASTDATA_BEGIN) { LogMessage("D-Star, starting fast data mode"); - m_netState = RS_NET_DATA; + m_netState = RPT_NET_STATE::DATA; } } } } - if (m_netState == RS_NET_AUDIO) { + if (m_netState == RPT_NET_STATE::AUDIO) { unsigned char n = data[1U]; unsigned int errors = 0U; @@ -796,7 +796,7 @@ void CDStarControl::writeNetwork() writeQueueDataNet(data + 1U); } - if (m_netState == RS_NET_DATA) { + if (m_netState == RPT_NET_STATE::DATA) { m_netN = data[1U]; data[1U] = TAG_DATA; @@ -814,7 +814,7 @@ void CDStarControl::writeNetwork() unsigned char type = m_netSlowData.getType(); if (type == DSTAR_SLOW_DATA_TYPE_FASTDATA_END) { LogMessage("D-Star, leaving fast data mode"); - m_netState = RS_NET_AUDIO; + m_netState = RPT_NET_STATE::AUDIO; } } } @@ -855,7 +855,7 @@ void CDStarControl::clock() m_rfTimeoutTimer.clock(ms); m_netTimeoutTimer.clock(ms); - if (m_netState == RS_NET_AUDIO) { + if (m_netState == RPT_NET_STATE::AUDIO) { m_networkWatchdog.clock(ms); if (m_networkWatchdog.hasExpired()) { @@ -870,7 +870,7 @@ void CDStarControl::clock() } // Only insert silence on audio data - if (m_netState == RS_NET_AUDIO) { + if (m_netState == RPT_NET_STATE::AUDIO) { m_packetTimer.clock(ms); if (m_packetTimer.isRunning() && m_packetTimer.hasExpired()) { @@ -894,7 +894,7 @@ void CDStarControl::writeQueueHeaderRF(const unsigned char *data) { assert(data != NULL); - if (m_netState != RS_NET_IDLE) + if (m_netState != RPT_NET_STATE::IDLE) return; if (m_rfTimeoutTimer.isRunning() && m_rfTimeoutTimer.hasExpired()) @@ -917,7 +917,7 @@ void CDStarControl::writeQueueDataRF(const unsigned char *data) { assert(data != NULL); - if (m_netState != RS_NET_IDLE) + if (m_netState != RPT_NET_STATE::IDLE) return; if (m_rfTimeoutTimer.isRunning() && m_rfTimeoutTimer.hasExpired()) @@ -938,7 +938,7 @@ void CDStarControl::writeQueueDataRF(const unsigned char *data) void CDStarControl::writeQueueEOTRF() { - if (m_netState != RS_NET_IDLE) + if (m_netState != RPT_NET_STATE::IDLE) return; if (m_rfTimeoutTimer.isRunning() && m_rfTimeoutTimer.hasExpired()) @@ -1028,7 +1028,7 @@ void CDStarControl::writeNetworkHeaderRF(const unsigned char* data) if (m_rfTimeoutTimer.isRunning() && m_rfTimeoutTimer.hasExpired()) return; - m_network->writeHeader(data + 1U, DSTAR_HEADER_LENGTH_BYTES, m_netState != RS_NET_IDLE); + m_network->writeHeader(data + 1U, DSTAR_HEADER_LENGTH_BYTES, m_netState != RPT_NET_STATE::IDLE); } void CDStarControl::writeNetworkDataRF(const unsigned char* data, unsigned int errors, bool end) @@ -1042,7 +1042,7 @@ void CDStarControl::writeNetworkDataRF(const unsigned char* data, unsigned int e if (m_rfTimeoutTimer.isRunning() && m_rfTimeoutTimer.hasExpired()) return; - m_network->writeData(data + 1U, DSTAR_FRAME_LENGTH_BYTES, errors, end, m_netState != RS_NET_IDLE); + m_network->writeData(data + 1U, DSTAR_FRAME_LENGTH_BYTES, errors, end, m_netState != RPT_NET_STATE::IDLE); } bool CDStarControl::openFile() @@ -1184,20 +1184,20 @@ void CDStarControl::sendAck() writeQueueDataRF(DSTAR_NULL_FRAME_SYNC_BYTES); - LINK_STATUS status = LS_NONE; + LINK_STATUS status = LINK_STATUS::NONE; unsigned char reflector[DSTAR_LONG_CALLSIGN_LENGTH]; if (m_network != NULL) m_network->getStatus(status, reflector); char text[40U]; - if (m_ackMessage == DSTAR_ACK_RSSI && m_rssi != 0) { - if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK) { + if ((m_ackMessage == DSTAR_ACK::RSSI) && (m_rssi != 0U)) { + if ((status == LINK_STATUS::LINKED_DEXTRA) || (status == LINK_STATUS::LINKED_DPLUS) || (status == LINK_STATUS::LINKED_DCS) || (status == LINK_STATUS::LINKED_CCS) || (status == LINK_STATUS::LINKED_LOOPBACK)) { CUtils::removeChar(reflector, ' ');//remove space from reflector so all nicely fits onto 20 chars in case rssi < 99dBm ::sprintf(text, "%-8.8s %.1f%% -%udBm ", reflector, float(m_rfErrs * 100U) / float(m_rfBits), m_aveRSSI / m_rssiCount); } else { ::sprintf(text, "BER:%.1f%% -%udBm ", float(m_rfErrs * 100U) / float(m_rfBits), m_aveRSSI / m_rssiCount); } - } else if (m_ackMessage == DSTAR_ACK_SMETER && m_rssi != 0) { + } else if ((m_ackMessage == DSTAR_ACK::SMETER) && (m_rssi != 0U)) { unsigned int signal, plus; char signalText[15U]; CSMeter::getSignal(m_aveRSSI / m_rssiCount, signal, plus); @@ -1206,12 +1206,12 @@ void CDStarControl::sendAck() else ::sprintf(signalText, "S%u", signal); - if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK) + if ((status == LINK_STATUS::LINKED_DEXTRA) || (status == LINK_STATUS::LINKED_DPLUS) || (status == LINK_STATUS::LINKED_DCS) || (status == LINK_STATUS::LINKED_CCS) || (status == LINK_STATUS::LINKED_LOOPBACK)) ::sprintf(text, "%-8.8s %.1f%% %s ", reflector, float(m_rfErrs * 100U) / float(m_rfBits), signalText); else ::sprintf(text, "BER:%.1f%% %s ", float(m_rfErrs * 100U) / float(m_rfBits), signalText); } else { - if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK) + if ((status == LINK_STATUS::LINKED_DEXTRA) || (status == LINK_STATUS::LINKED_DPLUS) || (status == LINK_STATUS::LINKED_DCS) || (status == LINK_STATUS::LINKED_CCS) || (status == LINK_STATUS::LINKED_LOOPBACK)) ::sprintf(text, "%-8.8s BER: %.1f%% ", reflector, float(m_rfErrs * 100U) / float(m_rfBits)); else ::sprintf(text, "BER: %.1f%% ", float(m_rfErrs * 100U) / float(m_rfBits)); @@ -1249,20 +1249,20 @@ void CDStarControl::sendError() writeQueueDataRF(DSTAR_NULL_FRAME_SYNC_BYTES); - LINK_STATUS status = LS_NONE; + LINK_STATUS status = LINK_STATUS::NONE; unsigned char reflector[DSTAR_LONG_CALLSIGN_LENGTH]; if (m_network != NULL) m_network->getStatus(status, reflector); char text[40U]; - if (m_ackMessage == DSTAR_ACK_RSSI && m_rssi != 0) { - if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK) { + if ((m_ackMessage == DSTAR_ACK::RSSI) && (m_rssi != 0U)) { + if ((status == LINK_STATUS::LINKED_DEXTRA) || (status == LINK_STATUS::LINKED_DPLUS) || (status == LINK_STATUS::LINKED_DCS) || (status == LINK_STATUS::LINKED_CCS) || (status == LINK_STATUS::LINKED_LOOPBACK)) { CUtils::removeChar(reflector, ' ');//remove space from reflector so all nicely fits onto 20 chars in case rssi < 99dBm ::sprintf(text, "%-8.8s %.1f%% -%udBm ", reflector, float(m_rfErrs * 100U) / float(m_rfBits), m_aveRSSI / m_rssiCount); } else { ::sprintf(text, "BER:%.1f%% -%udBm ", float(m_rfErrs * 100U) / float(m_rfBits), m_aveRSSI / m_rssiCount); } - } else if (m_ackMessage == DSTAR_ACK_SMETER && m_rssi != 0) { + } else if ((m_ackMessage == DSTAR_ACK::SMETER) && (m_rssi != 0U)) { unsigned int signal, plus; char signalText[15U]; CSMeter::getSignal(m_aveRSSI / m_rssiCount, signal, plus); @@ -1271,12 +1271,12 @@ void CDStarControl::sendError() else ::sprintf(signalText, "S%u", signal); - if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK) + if ((status == LINK_STATUS::LINKED_DEXTRA) || (status == LINK_STATUS::LINKED_DPLUS) || (status == LINK_STATUS::LINKED_DCS) || (status == LINK_STATUS::LINKED_CCS) || (status == LINK_STATUS::LINKED_LOOPBACK)) ::sprintf(text, "%-8.8s %.1f%% %s ", reflector, float(m_rfErrs * 100U) / float(m_rfBits), signalText); else ::sprintf(text, "BER:%.1f%% %s ", float(m_rfErrs * 100U) / float(m_rfBits), signalText); } else { - if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK) + if ((status == LINK_STATUS::LINKED_DEXTRA) || (status == LINK_STATUS::LINKED_DPLUS) || (status == LINK_STATUS::LINKED_DCS) || (status == LINK_STATUS::LINKED_CCS) || (status == LINK_STATUS::LINKED_LOOPBACK)) ::sprintf(text, "%-8.8s BER: %.1f%% ", reflector, float(m_rfErrs * 100U) / float(m_rfBits)); else ::sprintf(text, "BER: %.1f%% ", float(m_rfErrs * 100U) / float(m_rfBits)); @@ -1296,7 +1296,7 @@ void CDStarControl::sendError() bool CDStarControl::isBusy() const { - return m_rfState != RS_RF_LISTENING || m_netState != RS_NET_IDLE; + return (m_rfState != RPT_RF_STATE::LISTENING) || (m_netState != RPT_NET_STATE::IDLE); } void CDStarControl::enable(bool enabled) @@ -1305,12 +1305,12 @@ void CDStarControl::enable(bool enabled) m_queue.clear(); // Reset the RF section - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; m_rfTimeoutTimer.stop(); // Reset the networking section - m_netState = RS_NET_IDLE; + m_netState = RPT_NET_STATE::IDLE; m_lastFrameValid = false; diff --git a/DStarControl.h b/DStarControl.h index 35dbcda..1916e75 100644 --- a/DStarControl.h +++ b/DStarControl.h @@ -37,7 +37,7 @@ class CDStarControl { public: - CDStarControl(const std::string& callsign, const std::string& module, bool selfOnly, bool ackReply, unsigned int ackTime, DSTAR_ACK_MESSAGE ackMessage, bool errorReply, const std::vector& blackList, const std::vector& whiteList, CDStarNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, bool remoteGateway, CRSSIInterpolator* rssiMapper); + CDStarControl(const std::string& callsign, const std::string& module, bool selfOnly, bool ackReply, unsigned int ackTime, DSTAR_ACK ackMessage, bool errorReply, const std::vector& blackList, const std::vector& whiteList, CDStarNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, bool remoteGateway, CRSSIInterpolator* rssiMapper); ~CDStarControl(); bool writeModem(unsigned char* data, unsigned int len); @@ -55,7 +55,7 @@ private: unsigned char* m_gateway; bool m_selfOnly; bool m_ackReply; - DSTAR_ACK_MESSAGE m_ackMessage; + DSTAR_ACK m_ackMessage; bool m_errorReply; bool m_remoteGateway; std::vector m_blackList; diff --git a/DStarDefines.h b/DStarDefines.h index d7caeb0..0098f9e 100644 --- a/DStarDefines.h +++ b/DStarDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2018,2019,2021 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2018,2019,2021,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 @@ -66,7 +66,7 @@ const unsigned char DSTAR_URGENT_MASK = 0x08U; const unsigned char DSTAR_REPEATER_CONTROL = 0x07U; const unsigned char DSTAR_AUTO_REPLY = 0x06U; const unsigned char DSTAR_RESEND_REQUESTED = 0x04U; -const unsigned char DSTAR_ACK_FLAG = 0x03U; +const unsigned char FLAG = 0x03U; const unsigned char DSTAR_NO_RESPONSE = 0x02U; const unsigned char DSTAR_RELAY_UNAVAILABLE = 0x01U; @@ -77,19 +77,19 @@ const unsigned char DSTAR_DTMF_SIG[] = { 0x82U, 0x08U, 0x20U, 0x82U, 0x00U, 0x0 const unsigned int DSTAR_FRAME_TIME = 20U; -enum LINK_STATUS { - LS_NONE, - LS_PENDING_IRCDDB, - LS_LINKING_LOOPBACK, - LS_LINKING_DEXTRA, - LS_LINKING_DPLUS, - LS_LINKING_DCS, - LS_LINKING_CCS, - LS_LINKED_LOOPBACK, - LS_LINKED_DEXTRA, - LS_LINKED_DPLUS, - LS_LINKED_DCS, - LS_LINKED_CCS +enum class LINK_STATUS { + NONE, + PENDING_IRCDDB, + LINKING_LOOPBACK, + LINKING_DEXTRA, + LINKING_DPLUS, + LINKING_DCS, + LINKING_CCS, + LINKED_LOOPBACK, + LINKED_DEXTRA, + LINKED_DPLUS, + LINKED_DCS, + LINKED_CCS }; #endif diff --git a/DStarNetwork.cpp b/DStarNetwork.cpp index 67099d6..eb8d914 100644 --- a/DStarNetwork.cpp +++ b/DStarNetwork.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016,2019,2020,2021,2024 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2014,2016,2019,2020,2021,2024,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 @@ -43,7 +43,7 @@ m_outSeq(0U), m_inId(0U), m_buffer(1000U, "D-Star Network"), m_pollTimer(1000U, 60U), -m_linkStatus(LS_NONE), +m_linkStatus(LINK_STATUS::NONE), m_linkReflector(NULL), m_random() { @@ -166,7 +166,7 @@ bool CDStarNetwork::writePoll(const char* text) buffer[4] = 0x0AU; // Poll with text - unsigned int length = ::strlen(text); + unsigned int length = (unsigned int)::strlen(text); // Include the nul at the end also ::memcpy(buffer + 5U, text, length + 1U); diff --git a/Defines.h b/Defines.h index a7075b9..ebd2f2b 100644 --- a/Defines.h +++ b/Defines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2017,2018,2020,2021 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2017,2018,2020,2021,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 @@ -42,56 +42,56 @@ const unsigned char TAG_EOT = 0x03U; const unsigned int DSTAR_MODEM_DATA_LEN = 220U; -enum HW_TYPE { - HWT_MMDVM, - HWT_DVMEGA, - HWT_MMDVM_ZUMSPOT, - HWT_MMDVM_HS_HAT, - HWT_MMDVM_HS_DUAL_HAT, - HWT_NANO_HOTSPOT, - HWT_NANO_DV, - HWT_D2RG_MMDVM_HS, - HWT_MMDVM_HS, - HWT_OPENGD77_HS, - HWT_SKYBRIDGE, - HWT_UNKNOWN +enum class HW_TYPE { + MMDVM, + DVMEGA, + MMDVM_ZUMSPOT, + MMDVM_HS_HAT, + MMDVM_HS_DUAL_HAT, + NANO_HOTSPOT, + NANO_DV, + D2RG_MMDVM_HS, + MMDVM_HS, + OPENGD77_HS, + SKYBRIDGE, + UNKNOWN }; -enum RPT_RF_STATE { - RS_RF_LISTENING, - RS_RF_LATE_ENTRY, - RS_RF_AUDIO, - RS_RF_DATA_AUDIO, - RS_RF_DATA, - RS_RF_REJECTED, - RS_RF_INVALID +enum class RPT_RF_STATE { + LISTENING, + LATE_ENTRY, + AUDIO, + DATA_AUDIO, + DATA, + REJECTED, + INVALID }; -enum RPT_NET_STATE { - RS_NET_IDLE, - RS_NET_AUDIO, - RS_NET_DATA_AUDIO, - RS_NET_DATA +enum class RPT_NET_STATE { + IDLE, + AUDIO, + DATA_AUDIO, + DATA }; -enum DMR_BEACONS { - DMR_BEACONS_OFF, - DMR_BEACONS_NETWORK, - DMR_BEACONS_TIMED +enum class DMR_BEACONS { + OFF, + NETWORK, + TIMED }; -enum DMR_OVCM_TYPES { - DMR_OVCM_OFF, - DMR_OVCM_RX_ON, - DMR_OVCM_TX_ON, - DMR_OVCM_ON, - DMR_OVCM_FORCE_OFF +enum class DMR_OVCM { + OFF, + RX_ON, + TX_ON, + ON, + FORCE_OFF }; -enum DSTAR_ACK_MESSAGE { - DSTAR_ACK_BER, - DSTAR_ACK_RSSI, - DSTAR_ACK_SMETER +enum class DSTAR_ACK { + BER, + RSSI, + SMETER }; #endif diff --git a/FMNetwork.cpp b/FMNetwork.cpp index f649368..bd634ed 100644 --- a/FMNetwork.cpp +++ b/FMNetwork.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020,2021,2023,2024 by Jonathan Naylor G4KLX + * Copyright (C) 2020,2021,2023,2024,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 @@ -35,7 +35,7 @@ const unsigned int BUFFER_LENGTH = 1500U; CFMNetwork::CFMNetwork(const std::string& callsign, const std::string& protocol, const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, unsigned int sampleRate, const std::string& squelchFile, bool debug) : m_callsign(callsign), -m_protocol(FMNP_USRP), +m_protocol(FM_NETWORK_PROTOCOL::USRP), m_socket(localAddress, localPort), m_addr(), m_addrLen(0U), @@ -65,9 +65,9 @@ m_fp(NULL) m_callsign = callsign.substr(0U, pos); if (protocol == "RAW") - m_protocol = FMNP_RAW; + m_protocol = FM_NETWORK_PROTOCOL::RAW; else - m_protocol = FMNP_USRP; + m_protocol = FM_NETWORK_PROTOCOL::USRP; #if defined(HAS_SRC) m_resampler = ::src_new(SRC_SINC_FASTEST, 1, &m_error); @@ -90,7 +90,7 @@ bool CFMNetwork::open() LogMessage("Opening FM network connection"); - if (m_protocol == FMNP_RAW) { + if (m_protocol == FM_NETWORK_PROTOCOL::RAW) { if (!m_squelchFile.empty()) { m_fp = ::fopen(m_squelchFile.c_str(), "wb"); if (m_fp == NULL) { @@ -105,7 +105,7 @@ bool CFMNetwork::open() } #if !defined(HAS_SRC) - if ((m_protocol == FMNP_RAW) && (m_sampleRate != MMDVM_SAMPLERATE)) { + if ((m_protocol == FM_NETWORK_PROTOCOL::RAW) && (m_sampleRate != MMDVM_SAMPLERATE)) { LogError("The resampler needed for non-native sample rates has not been included"); return false; } @@ -119,9 +119,9 @@ bool CFMNetwork::writeData(const float* data, unsigned int nSamples) assert(data != NULL); assert(nSamples > 0U); - if (m_protocol == FMNP_USRP) + if (m_protocol == FM_NETWORK_PROTOCOL::USRP) return writeUSRPData(data, nSamples); - else if (m_protocol == FMNP_RAW) + else if (m_protocol == FM_NETWORK_PROTOCOL::RAW) return writeRawData(data, nSamples); else return false; @@ -264,7 +264,7 @@ bool CFMNetwork::writeRawData(const float* in, unsigned int nIn) bool CFMNetwork::writeEnd() { - if (m_protocol == FMNP_USRP) + if (m_protocol == FM_NETWORK_PROTOCOL::USRP) return writeUSRPEnd(); else return writeRawEnd(); @@ -366,13 +366,13 @@ void CFMNetwork::clock(unsigned int ms) return; // Check if the data is for us - if (m_protocol == FMNP_USRP) { - if (!CUDPSocket::match(addr, m_addr, IMT_ADDRESS_AND_PORT)) { + if (m_protocol == FM_NETWORK_PROTOCOL::USRP) { + if (!CUDPSocket::match(addr, m_addr, IPMATCHTYPE::IMT_ADDREAND_PORT)) { LogMessage("FM packet received from an invalid source"); return; } } else { - if (!CUDPSocket::match(addr, m_addr, IMT_ADDRESS_ONLY)) { + if (!CUDPSocket::match(addr, m_addr, IPMATCHTYPE::IMT_ADDREONLY)) { LogMessage("FM packet received from an invalid source"); return; } @@ -384,7 +384,7 @@ void CFMNetwork::clock(unsigned int ms) if (m_debug) CUtils::dump(1U, "FM Network Data Received", buffer, length); - if (m_protocol == FMNP_USRP) { + if (m_protocol == FM_NETWORK_PROTOCOL::USRP) { // Invalid packet type? if (::memcmp(buffer, "USRP", 4U) != 0) return; @@ -400,7 +400,7 @@ void CFMNetwork::clock(unsigned int ms) if (type == 0U) m_buffer.addData(buffer + 32U, length - 32U); - } else if (m_protocol == FMNP_RAW) { + } else if (m_protocol == FM_NETWORK_PROTOCOL::RAW) { m_buffer.addData(buffer, length); } } @@ -415,7 +415,7 @@ unsigned int CFMNetwork::readData(float* out, unsigned int nOut) return 0U; #if defined(HAS_SRC) - if ((m_protocol == FMNP_RAW) && (m_sampleRate != MMDVM_SAMPLERATE)) { + if ((m_protocol == RAW) && (m_sampleRate != MMDVM_SAMPLERATE)) { unsigned int nIn = (nOut * m_sampleRate) / MMDVM_SAMPLERATE; if (bytes < nIn) { diff --git a/FMNetwork.h b/FMNetwork.h index 60042cf..cd2cc4e 100644 --- a/FMNetwork.h +++ b/FMNetwork.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020,2021,2023,2024 by Jonathan Naylor G4KLX + * Copyright (C) 2020,2021,2023,2024,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 @@ -29,9 +29,9 @@ #include #include -enum FM_NETWORK_PROTOCOL { - FMNP_USRP, - FMNP_RAW +enum class FM_NETWORK_PROTOCOL { + USRP, + RAW }; class CFMNetwork { diff --git a/LCDproc.cpp b/LCDproc.cpp index 7167eed..f9a336b 100644 --- a/LCDproc.cpp +++ b/LCDproc.cpp @@ -1,6 +1,6 @@ /* * Copyright (C) 2016,2017,2018 by Tony Corbett G0WFV - * Copyright (C) 2018,2020,2024 by Jonathan Naylor G4KLX + * Copyright (C) 2018,2020,2024,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 @@ -78,7 +78,11 @@ #define BUFFER_MAX_LEN 128 +#if defined(_WIN32) || defined(_WIN64) +SOCKET m_socketfd; +#else int m_socketfd; +#endif char m_buffer[BUFFER_MAX_LEN]; fd_set m_readfds, m_writefds; struct timeval m_timeout; @@ -141,7 +145,7 @@ bool CLCDproc::open() LogError("LCDproc, cannot lookup server"); return false; } - memcpy(&serverAddress, res->ai_addr, addrlen = res->ai_addrlen); + memcpy(&serverAddress, res->ai_addr, addrlen = (unsigned int)res->ai_addrlen); freeaddrinfo(res); /* Lookup the client address (random port - need to specify manual port from ini file) */ @@ -671,7 +675,7 @@ void CLCDproc::clockInt(unsigned int ms) * exceptfds = we are not waiting for exception fds */ - if (select(m_socketfd + 1, &m_readfds, NULL, NULL, &m_timeout) == -1) { + if (select(int(m_socketfd) + 1, &m_readfds, NULL, NULL, &m_timeout) == -1) { LogError("LCDproc, error on select"); return; } @@ -767,7 +771,11 @@ void CLCDproc::close() { } +#if defined(_WIN32) || defined(_WIN64) +int CLCDproc::socketPrintf(SOCKET fd, const char* format, ...) +#else int CLCDproc::socketPrintf(int fd, const char *format, ...) +#endif { char buf[BUFFER_MAX_LEN]; va_list ap; @@ -790,7 +798,7 @@ int CLCDproc::socketPrintf(int fd, const char *format, ...) m_timeout.tv_sec = 0; m_timeout.tv_usec = 0; - if (select(m_socketfd + 1, NULL, &m_writefds, NULL, &m_timeout) == -1) + if (select(int(m_socketfd) + 1, NULL, &m_writefds, NULL, &m_timeout) == -1) LogError("LCDproc, error on select"); if (FD_ISSET(m_socketfd, &m_writefds)) { diff --git a/LCDproc.h b/LCDproc.h index b702493..38fb369 100644 --- a/LCDproc.h +++ b/LCDproc.h @@ -1,6 +1,6 @@ /* * Copyright (C) 2016,2017 by Tony Corbett G0WFV - * Copyright (C) 2018,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2018,2020,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 @@ -25,6 +25,11 @@ #include +#if defined(_WIN32) || defined(_WIN64) +#include +#include +#endif + class CLCDproc : public CDisplay { public: @@ -89,7 +94,11 @@ private: unsigned int m_rssiCount1; unsigned int m_rssiCount2; +#if defined(_WIN32) || defined(_WIN64) + int socketPrintf(SOCKET fd, const char* format, ...); +#else int socketPrintf(int fd, const char *format, ...); +#endif void defineScreens(); }; diff --git a/Log.cpp b/Log.cpp index 752601e..6a444d7 100644 --- a/Log.cpp +++ b/Log.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015,2016,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2020,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 @@ -167,7 +167,7 @@ void Log(unsigned int level, const char* fmt, ...) va_list vl; va_start(vl, fmt); - ::vsnprintf(buffer + ::strlen(buffer), 500, fmt, vl); + ::vsnprintf(buffer + ::strlen(buffer), 500 - ::strlen(buffer), fmt, vl); va_end(vl); diff --git a/M17Control.cpp b/M17Control.cpp index 070f5ba..5b86f1c 100644 --- a/M17Control.cpp +++ b/M17Control.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020,2021,2023 Jonathan Naylor, G4KLX + * Copyright (C) 2020,2021,2023,2025 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 @@ -68,8 +68,8 @@ m_duplex(duplex), m_queue(5000U, "M17 Control"), m_source(), m_dest(), -m_rfState(RS_RF_LISTENING), -m_netState(RS_NET_IDLE), +m_rfState(RPT_RF_STATE::LISTENING), +m_netState(RPT_NET_STATE::IDLE), m_rfTimeoutTimer(1000U, timeout), m_netTimeoutTimer(1000U, timeout), m_networkWatchdog(1000U, 0U, 1500U), @@ -121,7 +121,7 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len) unsigned char type = data[0U]; - if (type == TAG_LOST && (m_rfState == RS_RF_AUDIO || m_rfState == RS_RF_DATA_AUDIO)) { + if (type == TAG_LOST && (m_rfState == RPT_RF_STATE::AUDIO || m_rfState == RPT_RF_STATE::DATA_AUDIO)) { if (m_rssi != 0U) LogMessage("M17, transmission lost from %s to %s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_source.c_str(), m_dest.c_str(), float(m_rfFrames) / 25.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); else @@ -130,18 +130,18 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len) return false; } - if (type == TAG_LOST && m_rfState == RS_RF_DATA) { + if ((type == TAG_LOST) && (m_rfState == RPT_RF_STATE::DATA)) { writeEndRF(); return false; } - if (type == TAG_LOST && m_rfState == RS_RF_REJECTED) { + if ((type == TAG_LOST) && (m_rfState == RPT_RF_STATE::REJECTED)) { writeEndRF(); return false; } if (type == TAG_LOST) { - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; return false; } @@ -172,7 +172,7 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len) decorrelator(data + 2U, temp); interleaver(temp, data + 2U); - if (m_rfState == RS_RF_LISTENING && data[0U] == TAG_HEADER) { + if ((m_rfState == RPT_RF_STATE::LISTENING) && (data[0U] == TAG_HEADER)) { m_rfCurrentRFLSF.reset(); m_rfCurrentNetLSF.reset(); @@ -212,18 +212,18 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len) #endif return true; } else { - m_rfState = RS_RF_LATE_ENTRY; + m_rfState = RPT_RF_STATE::LATE_ENTRY; return false; } } - if (m_rfState == RS_RF_LISTENING && data[0U] == TAG_DATA) { - m_rfState = RS_RF_LATE_ENTRY; + if ((m_rfState == RPT_RF_STATE::LISTENING) && (data[0U] == TAG_DATA)) { + m_rfState = RPT_RF_STATE::LATE_ENTRY; m_rfCurrentRFLSF.reset(); m_rfCurrentNetLSF.reset(); } - if (m_rfState == RS_RF_LATE_ENTRY && data[0U] == TAG_DATA) { + if ((m_rfState == RPT_RF_STATE::LATE_ENTRY) && (data[0U] == TAG_DATA)) { unsigned int lich1, lich2, lich3, lich4; bool valid1 = CGolay24128::decode24128(data + 2U + M17_SYNC_LENGTH_BYTES + 0U, lich1); bool valid2 = CGolay24128::decode24128(data + 2U + M17_SYNC_LENGTH_BYTES + 3U, lich2); @@ -270,7 +270,7 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len) } } - if ((m_rfState == RS_RF_AUDIO || m_rfState == RS_RF_DATA_AUDIO) && data[0U] == TAG_DATA) { + if (((m_rfState == RPT_RF_STATE::AUDIO) || (m_rfState == RPT_RF_STATE::DATA_AUDIO)) && (data[0U] == TAG_DATA)) { #if defined(DUMP_M17) writeFile(data + 2U); #endif @@ -419,7 +419,7 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len) return true; } - if ((m_rfState == RS_RF_AUDIO || m_rfState == RS_RF_DATA_AUDIO) && data[0U] == TAG_EOT) { + if (((m_rfState == RPT_RF_STATE::AUDIO) || (m_rfState == RPT_RF_STATE::DATA_AUDIO)) && (data[0U] == TAG_EOT)) { #if defined(DUMP_M17) writeFile(data + 2U); #endif @@ -445,10 +445,10 @@ bool CM17Control::writeModem(unsigned char* data, unsigned int len) netData[M17_LSF_LENGTH_BYTES - M17_CRC_LENGTH_BYTES + 0U] = 0x80U; netData[M17_LSF_LENGTH_BYTES - M17_CRC_LENGTH_BYTES + 1U] = 0x00U; - if (m_rfState == RS_RF_AUDIO) { + if (m_rfState == RPT_RF_STATE::AUDIO) { ::memcpy(netData + M17_LSF_LENGTH_BYTES - M17_CRC_LENGTH_BYTES + M17_FN_LENGTH_BYTES + 0U, M17_3200_SILENCE, 8U); ::memcpy(netData + M17_LSF_LENGTH_BYTES - M17_CRC_LENGTH_BYTES + M17_FN_LENGTH_BYTES + 8U, M17_3200_SILENCE, 8U); - } else if (m_rfState == RS_RF_DATA_AUDIO) { + } else if (m_rfState == RPT_RF_STATE::DATA_AUDIO) { ::memcpy(netData + M17_LSF_LENGTH_BYTES - M17_CRC_LENGTH_BYTES + M17_FN_LENGTH_BYTES + 0U, M17_1600_SILENCE, 8U); ::memset(netData + M17_LSF_LENGTH_BYTES - M17_CRC_LENGTH_BYTES + M17_FN_LENGTH_BYTES + 8U, 0x00U, 8U); } else { @@ -490,7 +490,7 @@ unsigned int CM17Control::readModem(unsigned char* data) void CM17Control::writeEndRF() { - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; m_rfTimeoutTimer.stop(); @@ -502,7 +502,7 @@ void CM17Control::writeEndRF() m_rfCollectingLSF.reset(); m_rfCollectedLSF.reset(); - if (m_netState == RS_NET_IDLE) { + if (m_netState == RPT_NET_STATE::IDLE) { m_display->clearM17(); if (m_network != NULL) @@ -516,7 +516,7 @@ void CM17Control::writeEndRF() void CM17Control::writeEndNet() { - m_netState = RS_NET_IDLE; + m_netState = RPT_NET_STATE::IDLE; m_netTimeoutTimer.stop(); m_networkWatchdog.stop(); @@ -542,7 +542,7 @@ void CM17Control::writeNetwork() if (!m_enabled) return; - if (m_rfState != RS_RF_LISTENING && m_rfState != RS_RF_LATE_ENTRY && m_netState == RS_NET_IDLE) { + if ((m_rfState != RPT_RF_STATE::LISTENING) && (m_rfState != RPT_RF_STATE::LATE_ENTRY) && (m_netState == RPT_NET_STATE::IDLE)) { m_network->reset(); return; } @@ -560,7 +560,7 @@ void CM17Control::writeNetwork() } } - if (m_netState == RS_NET_IDLE) { + if (m_netState == RPT_NET_STATE::IDLE) { m_netLSF.setNetwork(netData); m_source = m_netLSF.getSource(); @@ -573,15 +573,15 @@ void CM17Control::writeNetwork() switch (dataType) { case M17_DATA_TYPE_DATA: LogMessage("M17, received network data transmission from %s to %s", m_source.c_str(), m_dest.c_str()); - m_netState = RS_NET_DATA; + m_netState = RPT_NET_STATE::DATA; break; case M17_DATA_TYPE_VOICE: LogMessage("M17, received network voice transmission from %s to %s", m_source.c_str(), m_dest.c_str()); - m_netState = RS_NET_AUDIO; + m_netState = RPT_NET_STATE::AUDIO; break; case M17_DATA_TYPE_VOICE_DATA: LogMessage("M17, received network voice + data transmission from %s to %s", m_source.c_str(), m_dest.c_str()); - m_netState = RS_NET_DATA_AUDIO; + m_netState = RPT_NET_STATE::DATA_AUDIO; break; default: LogMessage("M17, received network unknown transmission from %s to %s", m_source.c_str(), m_dest.c_str()); @@ -621,7 +621,7 @@ void CM17Control::writeNetwork() writeQueueNet(start); } - if (m_netState == RS_NET_AUDIO || m_netState == RS_NET_DATA_AUDIO) { + if ((m_netState == RPT_NET_STATE::AUDIO) || (m_netState == RPT_NET_STATE::DATA_AUDIO)) { // Refresh the LSF every six frames in case the META field changes if (m_netLSFn == 0U) { m_netLSF.setNetwork(netData); @@ -751,7 +751,7 @@ bool CM17Control::processRFHeader(bool lateEntry) unsigned char type = m_rfCurrentNetLSF.getEncryptionType(); if (type != M17_ENCRYPTION_TYPE_NONE) { LogMessage("M17, access attempt with encryption from %s to %s", m_source.c_str(), m_dest.c_str()); - m_rfState = RS_RF_REJECTED; + m_rfState = RPT_RF_STATE::REJECTED; return true; } } @@ -760,7 +760,7 @@ bool CM17Control::processRFHeader(bool lateEntry) bool ret = checkCallsign(m_source); if (!ret) { LogMessage("M17, invalid access attempt from %s to %s", m_source.c_str(), m_dest.c_str()); - m_rfState = RS_RF_REJECTED; + m_rfState = RPT_RF_STATE::REJECTED; return true; } } @@ -769,15 +769,15 @@ bool CM17Control::processRFHeader(bool lateEntry) switch (dataType) { case M17_DATA_TYPE_DATA: LogMessage("M17, received RF%sdata transmission from %s to %s", lateEntry ? " late entry " : " ", m_source.c_str(), m_dest.c_str()); - m_rfState = RS_RF_DATA; + m_rfState = RPT_RF_STATE::DATA; break; case M17_DATA_TYPE_VOICE: LogMessage("M17, received RF%svoice transmission from %s to %s", lateEntry ? " late entry " : " ", m_source.c_str(), m_dest.c_str()); - m_rfState = RS_RF_AUDIO; + m_rfState = RPT_RF_STATE::AUDIO; break; case M17_DATA_TYPE_VOICE_DATA: LogMessage("M17, received RF%svoice + data transmission from %s to %s", lateEntry ? " late entry " : " ", m_source.c_str(), m_dest.c_str()); - m_rfState = RS_RF_DATA_AUDIO; + m_rfState = RPT_RF_STATE::DATA_AUDIO; break; default: return false; @@ -841,7 +841,7 @@ void CM17Control::clock(unsigned int ms) m_rfTimeoutTimer.clock(ms); m_netTimeoutTimer.clock(ms); - if (m_netState == RS_NET_AUDIO || m_netState == RS_NET_DATA_AUDIO) { + if ((m_netState == RPT_NET_STATE::AUDIO) || (m_netState == RPT_NET_STATE::DATA_AUDIO)) { m_networkWatchdog.clock(ms); if (m_networkWatchdog.hasExpired()) { @@ -855,7 +855,7 @@ void CM17Control::writeQueueRF(const unsigned char *data) { assert(data != NULL); - if (m_netState != RS_NET_IDLE) + if (m_netState != RPT_NET_STATE::IDLE) return; if (m_rfTimeoutTimer.isRunning() && m_rfTimeoutTimer.hasExpired()) @@ -966,7 +966,7 @@ void CM17Control::closeFile() bool CM17Control::isBusy() const { - return m_rfState != RS_RF_LISTENING || m_netState != RS_NET_IDLE; + return (m_rfState != RPT_RF_STATE::LISTENING) || (m_netState != RPT_NET_STATE::IDLE); } void CM17Control::enable(bool enabled) @@ -975,12 +975,12 @@ void CM17Control::enable(bool enabled) m_queue.clear(); // Reset the RF section - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; m_rfTimeoutTimer.stop(); // Reset the networking section - m_netState = RS_NET_IDLE; + m_netState = RPT_NET_STATE::IDLE; m_netTimeoutTimer.stop(); m_networkWatchdog.stop(); diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index f420281..a952cfc 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2021,2023,2024 by Jonathan Naylor G4KLX + * Copyright (C) 2015-2021,2023,2024,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 @@ -70,7 +70,7 @@ static void sigHandler(int signum) const char* HEADER1 = "This software is for use on amateur radio networks only,"; const char* HEADER2 = "it is to be used for educational purposes only. Its use on"; const char* HEADER3 = "commercial networks is strictly prohibited."; -const char* HEADER4 = "Copyright(C) 2015-2024 by Jonathan Naylor, G4KLX and others"; +const char* HEADER4 = "Copyright(C) 2015-2025 by Jonathan Naylor, G4KLX and others"; int main(int argc, char** argv) { @@ -497,7 +497,7 @@ int CMMDVMHost::run() std::vector whiteList = m_conf.getDStarWhiteList(); bool ackReply = m_conf.getDStarAckReply(); unsigned int ackTime = m_conf.getDStarAckTime(); - DSTAR_ACK_MESSAGE ackMessage = m_conf.getDStarAckMessage(); + DSTAR_ACK ackMessage = m_conf.getDStarAckMessage(); bool errorReply = m_conf.getDStarErrorReply(); bool remoteGateway = m_conf.getDStarRemoteGateway(); m_dstarRFModeHang = m_conf.getDStarModeHang(); @@ -506,7 +506,7 @@ int CMMDVMHost::run() LogInfo(" Module: %s", module.c_str()); LogInfo(" Self Only: %s", selfOnly ? "yes" : "no"); LogInfo(" Ack Reply: %s", ackReply ? "yes" : "no"); - LogInfo(" Ack message: %s", ackMessage == DSTAR_ACK_RSSI? "RSSI" : (ackMessage == DSTAR_ACK_SMETER ? "SMETER" : "BER")); + LogInfo(" Ack message: %s", ackMessage == DSTAR_ACK::RSSI? "RSSI" : (ackMessage == DSTAR_ACK::SMETER ? "SMETER" : "BER")); LogInfo(" Ack Time: %ums", ackTime); LogInfo(" Error Reply: %s", errorReply ? "yes" : "no"); LogInfo(" Remote Gateway: %s", remoteGateway ? "yes" : "no"); @@ -520,7 +520,7 @@ int CMMDVMHost::run() m_dstar = new CDStarControl(m_callsign, module, selfOnly, ackReply, ackTime, ackMessage, errorReply, blackList, whiteList, m_dstarNetwork, m_display, m_timeout, m_duplex, remoteGateway, rssi); } - DMR_BEACONS dmrBeacons = DMR_BEACONS_OFF; + DMR_BEACONS dmrBeacons = DMR_BEACONS::OFF; CTimer dmrBeaconIntervalTimer(1000U); CTimer dmrBeaconDurationTimer(1000U); @@ -540,7 +540,7 @@ int CMMDVMHost::run() unsigned int jitter = m_conf.getDMRNetworkJitter(); m_dmrRFModeHang = m_conf.getDMRModeHang(); dmrBeacons = m_conf.getDMRBeacons(); - DMR_OVCM_TYPES ovcm = m_conf.getDMROVCM(); + DMR_OVCM ovcm = m_conf.getDMROVCM(); bool protect = m_conf.getDMRProtect(); if (txHang > m_dmrRFModeHang) @@ -574,22 +574,22 @@ int CMMDVMHost::run() LogInfo(" Call Hang: %us", callHang); LogInfo(" TX Hang: %us", txHang); LogInfo(" Mode Hang: %us", m_dmrRFModeHang); - if (ovcm == DMR_OVCM_OFF) + if (ovcm == DMR_OVCM::OFF) LogInfo(" OVCM: off"); - else if (ovcm == DMR_OVCM_RX_ON) + else if (ovcm == DMR_OVCM::RX_ON) LogInfo(" OVCM: on(rx only)"); - else if (ovcm == DMR_OVCM_TX_ON) + else if (ovcm == DMR_OVCM::TX_ON) LogInfo(" OVCM: on(tx only)"); - else if (ovcm == DMR_OVCM_ON) + else if (ovcm == DMR_OVCM::ON) LogInfo(" OVCM: on"); - else if (ovcm == DMR_OVCM_FORCE_OFF) + else if (ovcm == DMR_OVCM::FORCE_OFF) LogInfo(" OVCM: off (forced)"); if (protect) LogInfo(" Protect: yes"); switch (dmrBeacons) { - case DMR_BEACONS_NETWORK: { + case DMR_BEACONS::NETWORK: { unsigned int dmrBeaconDuration = m_conf.getDMRBeaconDuration(); LogInfo(" DMR Roaming Beacons Type: network"); @@ -598,7 +598,7 @@ int CMMDVMHost::run() dmrBeaconDurationTimer.setTimeout(dmrBeaconDuration); } break; - case DMR_BEACONS_TIMED: { + case DMR_BEACONS::TIMED: { unsigned int dmrBeaconInterval = m_conf.getDMRBeaconInterval(); unsigned int dmrBeaconDuration = m_conf.getDMRBeaconDuration(); @@ -1253,7 +1253,7 @@ int CMMDVMHost::run() } switch (dmrBeacons) { - case DMR_BEACONS_TIMED: + case DMR_BEACONS::TIMED: dmrBeaconIntervalTimer.clock(ms); if (dmrBeaconIntervalTimer.isRunning() && dmrBeaconIntervalTimer.hasExpired()) { if ((m_mode == MODE_IDLE || m_mode == MODE_DMR) && !m_modem->hasTX()) { @@ -1266,7 +1266,7 @@ int CMMDVMHost::run() } } break; - case DMR_BEACONS_NETWORK: + case DMR_BEACONS::NETWORK: if (m_dmrNetwork != NULL) { bool beacon = m_dmrNetwork->wantsBeacon(); if (beacon) { @@ -2544,131 +2544,131 @@ void CMMDVMHost::remoteControl() REMOTE_COMMAND command = m_remoteControl->getCommand(); switch (command) { - case RCD_MODE_IDLE: + case REMOTE_COMMAND::MODE_IDLE: m_fixedMode = false; setMode(MODE_IDLE); break; - case RCD_MODE_LOCKOUT: + case REMOTE_COMMAND::MODE_LOCKOUT: m_fixedMode = false; setMode(MODE_LOCKOUT); break; - case RCD_MODE_DSTAR: + case REMOTE_COMMAND::MODE_DSTAR: if (m_dstar != NULL) processModeCommand(MODE_DSTAR, m_dstarRFModeHang); break; - case RCD_MODE_DMR: + case REMOTE_COMMAND::MODE_DMR: if (m_dmr != NULL) processModeCommand(MODE_DMR, m_dmrRFModeHang); break; - case RCD_MODE_YSF: + case REMOTE_COMMAND::MODE_YSF: if (m_ysf != NULL) processModeCommand(MODE_YSF, m_ysfRFModeHang); break; - case RCD_MODE_P25: + case REMOTE_COMMAND::MODE_P25: if (m_p25 != NULL) processModeCommand(MODE_P25, m_p25RFModeHang); break; - case RCD_MODE_NXDN: + case REMOTE_COMMAND::MODE_NXDN: if (m_nxdn != NULL) processModeCommand(MODE_NXDN, m_nxdnRFModeHang); break; - case RCD_MODE_M17: + case REMOTE_COMMAND::MODE_M17: if (m_m17 != NULL) processModeCommand(MODE_M17, m_m17RFModeHang); break; - case RCD_MODE_FM: + case REMOTE_COMMAND::MODE_FM: if (m_fmEnabled) processModeCommand(MODE_FM, 0); break; - case RCD_ENABLE_DSTAR: + case REMOTE_COMMAND::ENABLE_DSTAR: if (m_dstar != NULL && !m_dstarEnabled) processEnableCommand(m_dstarEnabled, true); if (m_dstarNetwork != NULL) m_dstarNetwork->enable(true); break; - case RCD_ENABLE_DMR: + case REMOTE_COMMAND::ENABLE_DMR: if (m_dmr != NULL && !m_dmrEnabled) processEnableCommand(m_dmrEnabled, true); if (m_dmrNetwork != NULL) m_dmrNetwork->enable(true); break; - case RCD_ENABLE_YSF: + case REMOTE_COMMAND::ENABLE_YSF: if (m_ysf != NULL && !m_ysfEnabled) processEnableCommand(m_ysfEnabled, true); if (m_ysfNetwork != NULL) m_ysfNetwork->enable(true); break; - case RCD_ENABLE_P25: + case REMOTE_COMMAND::ENABLE_P25: if (m_p25 != NULL && !m_p25Enabled) processEnableCommand(m_p25Enabled, true); if (m_p25Network != NULL) m_p25Network->enable(true); break; - case RCD_ENABLE_NXDN: + case REMOTE_COMMAND::ENABLE_NXDN: if (m_nxdn != NULL && !m_nxdnEnabled) processEnableCommand(m_nxdnEnabled, true); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(true); break; - case RCD_ENABLE_M17: + case REMOTE_COMMAND::ENABLE_M17: if (m_m17 != NULL && !m_m17Enabled) processEnableCommand(m_m17Enabled, true); if (m_m17Network != NULL) m_m17Network->enable(true); break; - case RCD_ENABLE_FM: + case REMOTE_COMMAND::ENABLE_FM: if (!m_fmEnabled) processEnableCommand(m_fmEnabled, true); break; - case RCD_ENABLE_AX25: + case REMOTE_COMMAND::ENABLE_AX25: if (!m_ax25Enabled) processEnableCommand(m_ax25Enabled, true); break; - case RCD_DISABLE_DSTAR: + case REMOTE_COMMAND::DISABLE_DSTAR: if (m_dstar != NULL && m_dstarEnabled) processEnableCommand(m_dstarEnabled, false); if (m_dstarNetwork != NULL) m_dstarNetwork->enable(false); break; - case RCD_DISABLE_DMR: + case REMOTE_COMMAND::DISABLE_DMR: if (m_dmr != NULL && m_dmrEnabled) processEnableCommand(m_dmrEnabled, false); if (m_dmrNetwork != NULL) m_dmrNetwork->enable(false); break; - case RCD_DISABLE_YSF: + case REMOTE_COMMAND::DISABLE_YSF: if (m_ysf != NULL && m_ysfEnabled) processEnableCommand(m_ysfEnabled, false); if (m_ysfNetwork != NULL) m_ysfNetwork->enable(false); break; - case RCD_DISABLE_P25: + case REMOTE_COMMAND::DISABLE_P25: if (m_p25 != NULL && m_p25Enabled) processEnableCommand(m_p25Enabled, false); if (m_p25Network != NULL) m_p25Network->enable(false); break; - case RCD_DISABLE_NXDN: + case REMOTE_COMMAND::DISABLE_NXDN: if (m_nxdn != NULL && m_nxdnEnabled) processEnableCommand(m_nxdnEnabled, false); if (m_nxdnNetwork != NULL) m_nxdnNetwork->enable(false); break; - case RCD_DISABLE_M17: + case REMOTE_COMMAND::DISABLE_M17: if (m_m17 != NULL && m_m17Enabled) processEnableCommand(m_m17Enabled, false); if (m_m17Network != NULL) m_m17Network->enable(false); break; - case RCD_DISABLE_FM: + case REMOTE_COMMAND::DISABLE_FM: if (m_fmEnabled) processEnableCommand(m_fmEnabled, false); break; - case RCD_DISABLE_AX25: + case REMOTE_COMMAND::DISABLE_AX25: if (m_ax25Enabled == true) processEnableCommand(m_ax25Enabled, false); break; - case RCD_PAGE: + case REMOTE_COMMAND::PAGE: if (m_pocsag != NULL) { unsigned int ric = m_remoteControl->getArgUInt(0U); std::string text; @@ -2680,7 +2680,7 @@ void CMMDVMHost::remoteControl() m_pocsag->sendPage(ric, text); } break; - case RCD_PAGE_BCD: + case REMOTE_COMMAND::PAGE_BCD: if (m_pocsag != NULL) { unsigned int ric = m_remoteControl->getArgUInt(0U); std::string text; @@ -2692,13 +2692,13 @@ void CMMDVMHost::remoteControl() m_pocsag->sendPageBCD(ric, text); } break; - case RCD_PAGE_A1: + case REMOTE_COMMAND::PAGE_A1: if (m_pocsag != NULL) { unsigned int ric = m_remoteControl->getArgUInt(0U); m_pocsag->sendPageAlert1(ric); } break; - case RCD_PAGE_A2: + case REMOTE_COMMAND::PAGE_A2: if (m_pocsag != NULL) { unsigned int ric = m_remoteControl->getArgUInt(0U); std::string text; @@ -2710,7 +2710,7 @@ void CMMDVMHost::remoteControl() m_pocsag->sendPageAlert2(ric, text); } break; - case RCD_CW: + case REMOTE_COMMAND::CW: setMode(MODE_IDLE); // Force the modem to go idle so that we can send the CW text. if (!m_modem->hasTX()) { std::string cwtext; @@ -2723,7 +2723,7 @@ void CMMDVMHost::remoteControl() m_modem->sendCWId(cwtext); } break; - case RCD_RELOAD: + case REMOTE_COMMAND::RELOAD: m_reload = true; break; default: @@ -2785,11 +2785,11 @@ void CMMDVMHost::buildNetworkHostsString(std::string &str) m_dstarNetwork->getStatus(status, &ref[0]); switch (status) { - case LINK_STATUS::LS_LINKED_LOOPBACK: - case LINK_STATUS::LS_LINKED_DEXTRA: - case LINK_STATUS::LS_LINKED_DPLUS: - case LINK_STATUS::LS_LINKED_DCS: - case LINK_STATUS::LS_LINKED_CCS: + case LINK_STATUS::LINKED_LOOPBACK: + case LINK_STATUS::LINKED_DEXTRA: + case LINK_STATUS::LINKED_DPLUS: + case LINK_STATUS::LINKED_DCS: + case LINK_STATUS::LINKED_CCS: dstarReflector = std::string((char *)ref); break; diff --git a/Modem.cpp b/Modem.cpp index d88162e..e16054d 100644 --- a/Modem.cpp +++ b/Modem.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2018,2020,2021 by Jonathan Naylor G4KLX + * Copyright (C) 2011-2018,2020,2021,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 @@ -169,7 +169,7 @@ m_port(NULL), m_buffer(NULL), m_length(0U), m_offset(0U), -m_state(SS_START), +m_state(SERIAL_STATE::START), m_type(0U), m_rxDStarData(1000U, "Modem RX D-Star"), m_txDStarData(1000U, "Modem TX D-Star"), @@ -213,7 +213,7 @@ m_cd(false), m_lockout(false), m_error(false), m_mode(MODE_IDLE), -m_hwType(HWT_UNKNOWN), +m_hwType(HW_TYPE::UNKNOWN), m_ax25RXTwist(0), m_ax25TXDelay(300U), m_ax25SlotTime(30U), @@ -455,12 +455,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) { case MMDVM_DSTAR_HEADER: { if (m_trace) @@ -1996,31 +1996,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]; @@ -2210,18 +2210,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; } @@ -2336,18 +2336,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; } @@ -2368,7 +2368,7 @@ bool CModem::setFrequency() if (m_pocsagEnabled) pocsagFrequency = m_pocsagFrequency; - if (m_hwType == HWT_DVMEGA) + if (m_hwType == HW_TYPE::DVMEGA) len = 12U; else { buffer[12U] = (unsigned char)(m_rfLevel * 2.55F + 0.5F); @@ -2411,18 +2411,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; } @@ -2434,90 +2434,90 @@ RESP_TYPE_MMDVM CModem::getResponse() { assert(m_port != NULL); - 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; @@ -2527,9 +2527,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 @@ -2746,18 +2746,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; } @@ -2798,18 +2798,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; } @@ -2867,18 +2867,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; } @@ -2918,18 +2918,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; } diff --git a/Modem.h b/Modem.h index 0a69311..45809cc 100644 --- a/Modem.h +++ b/Modem.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2018,2020,2021 by Jonathan Naylor G4KLX + * Copyright (C) 2011-2018,2020,2021,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 @@ -26,18 +26,18 @@ #include -enum RESP_TYPE_MMDVM { - RTM_OK, - RTM_TIMEOUT, - RTM_ERROR +enum class RESP_TYPE_MMDVM { + OK, + TIMEOUT, + ERR }; -enum SERIAL_STATE { - SS_START, - SS_LENGTH1, - SS_LENGTH2, - SS_TYPE, - SS_DATA +enum class SERIAL_STATE { + START, + LENGTH1, + LENGTH2, + TYPE, + DATA }; class CModem { diff --git a/NXDNControl.cpp b/NXDNControl.cpp index a686091..0b01a6e 100644 --- a/NXDNControl.cpp +++ b/NXDNControl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2021 Jonathan Naylor, G4KLX + * Copyright (C) 2015-2021,2025 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 @@ -49,8 +49,8 @@ m_duplex(duplex), m_remoteGateway(remoteGateway), m_lookup(lookup), m_queue(5000U, "NXDN Control"), -m_rfState(RS_RF_LISTENING), -m_netState(RS_NET_IDLE), +m_rfState(RPT_RF_STATE::LISTENING), +m_netState(RPT_NET_STATE::IDLE), m_rfTimeoutTimer(1000U, timeout), m_netTimeoutTimer(1000U, timeout), m_packetTimer(1000U, 0U, 200U), @@ -92,7 +92,7 @@ bool CNXDNControl::writeModem(unsigned char *data, unsigned int len) unsigned char type = data[0U]; - if (type == TAG_LOST && m_rfState == RS_RF_AUDIO) { + if ((type == TAG_LOST) && (m_rfState == RPT_RF_STATE::AUDIO)) { unsigned short dstId = m_rfLayer3.getDestinationGroupId(); bool grp = m_rfLayer3.getIsGroup(); std::string source = m_lookup->find(m_rfLayer3.getSourceUnitId()); @@ -105,13 +105,13 @@ bool CNXDNControl::writeModem(unsigned char *data, unsigned int len) return false; } - if (type == TAG_LOST && m_rfState == RS_RF_DATA) { + if ((type == TAG_LOST) && (m_rfState == RPT_RF_STATE::DATA)) { writeEndRF(); return false; } if (type == TAG_LOST) { - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; m_rfMask = 0x00U; m_rfLayer3.reset(); return false; @@ -179,7 +179,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne unsigned char ran = sacch.getRAN(); if (ran != m_ran && ran != 0U) return false; - } else if (m_rfState == RS_RF_LISTENING) { + } else if (m_rfState == RPT_RF_STATE::LISTENING) { return false; } @@ -203,17 +203,17 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne unsigned char type = layer3.getMessageType(); if (type == NXDN_MESSAGE_TYPE_TX_REL) { - if (m_rfState != RS_RF_AUDIO) { - m_rfState = RS_RF_LISTENING; + if (m_rfState != RPT_RF_STATE::AUDIO) { + m_rfState = RPT_RF_STATE::LISTENING; m_rfMask = 0x00U; m_rfLayer3.reset(); return false; } } else if (type == NXDN_MESSAGE_TYPE_VCALL) { - if (m_rfState == RS_RF_LISTENING && m_selfOnly) { + if ((m_rfState == RPT_RF_STATE::LISTENING) && m_selfOnly) { unsigned short srcId = layer3.getSourceUnitId(); if (srcId != m_id) { - m_rfState = RS_RF_REJECTED; + m_rfState = RPT_RF_STATE::REJECTED; return true; } } @@ -254,7 +254,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne scrambler(data + 2U); - writeNetwork(netData, data[0U] == TAG_EOT ? NNMT_VOICE_TRAILER : NNMT_VOICE_HEADER); + writeNetwork(netData, data[0U] == TAG_EOT ? NXDN_NETWORK_MESSAGE_TYPE::VOICE_TRAILER : NXDN_NETWORK_MESSAGE_TYPE::VOICE_HEADER); #if defined(DUMP_NXDN) writeFile(data + 2U); @@ -278,7 +278,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne m_rfErrs = 0U; m_rfBits = 1U; m_rfTimeoutTimer.start(); - m_rfState = RS_RF_AUDIO; + m_rfState = RPT_RF_STATE::AUDIO; m_minRSSI = m_rssi; m_maxRSSI = m_rssi; m_aveRSSI = m_rssi; @@ -297,7 +297,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne return true; } else { - if (m_rfState == RS_RF_LISTENING) { + if (m_rfState == RPT_RF_STATE::LISTENING) { CNXDNFACCH1 facch; bool valid = false; switch (option) { @@ -374,7 +374,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne if (m_selfOnly) { if (srcId != m_id) { - m_rfState = RS_RF_REJECTED; + m_rfState = RPT_RF_STATE::REJECTED; return true; } } @@ -383,7 +383,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne m_rfErrs = 0U; m_rfBits = 1U; m_rfTimeoutTimer.start(); - m_rfState = RS_RF_AUDIO; + m_rfState = RPT_RF_STATE::AUDIO; m_minRSSI = m_rssi; m_maxRSSI = m_rssi; @@ -396,7 +396,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne LogMessage("NXDN, received RF late entry from %s to %s%u", source.c_str(), grp ? "TG " : "", dstId); m_display->writeNXDN(source.c_str(), grp, dstId, "R"); - m_rfState = RS_RF_AUDIO; + m_rfState = RPT_RF_STATE::AUDIO; // Create a dummy start message unsigned char start[NXDN_FRAME_LENGTH_BYTES + 2U]; @@ -438,7 +438,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne scrambler(start + 2U); - writeNetwork(netData, NNMT_VOICE_HEADER); + writeNetwork(netData, NXDN_NETWORK_MESSAGE_TYPE::VOICE_HEADER); #if defined(DUMP_NXDN) writeFile(start + 2U); @@ -448,7 +448,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne } } - if (m_rfState == RS_RF_AUDIO) { + if (m_rfState == RPT_RF_STATE::AUDIO) { // Regenerate the sync CSync::addNXDNSync(data + 2U); @@ -544,7 +544,7 @@ bool CNXDNControl::processVoice(unsigned char usc, unsigned char option, unsigne scrambler(data + 2U); - writeNetwork(netData, NNMT_VOICE_BODY); + writeNetwork(netData, NXDN_NETWORK_MESSAGE_TYPE::VOICE_BODY); #if defined(DUMP_NXDN) writeFile(data + 2U); @@ -565,7 +565,7 @@ bool CNXDNControl::processData(unsigned char option, unsigned char *data) { CNXDNUDCH udch; bool validUDCH = udch.decode(data + 2U); - if (m_rfState == RS_RF_LISTENING && !validUDCH) + if ((m_rfState == RPT_RF_STATE::LISTENING) && !validUDCH) return false; if (validUDCH) { @@ -584,7 +584,7 @@ bool CNXDNControl::processData(unsigned char option, unsigned char *data) CNXDNLayer3 layer3; layer3.decode(buffer, 184U); - if (m_rfState == RS_RF_LISTENING) { + if (m_rfState == RPT_RF_STATE::LISTENING) { unsigned char type = layer3.getMessageType(); if (type != NXDN_MESSAGE_TYPE_DCALL_HDR) return false; @@ -610,14 +610,14 @@ bool CNXDNControl::processData(unsigned char option, unsigned char *data) m_rfLayer3 = layer3; m_rfFrames = 0U; - m_rfState = RS_RF_DATA; + m_rfState = RPT_RF_STATE::DATA; #if defined(DUMP_NXDN) openFile(); #endif } - if (m_rfState != RS_RF_DATA) + if (m_rfState != RPT_RF_STATE::DATA) return false; CSync::addNXDNSync(data + 2U); @@ -651,13 +651,13 @@ bool CNXDNControl::processData(unsigned char option, unsigned char *data) switch (type) { case NXDN_MESSAGE_TYPE_DCALL_HDR: - writeNetwork(netData, NNMT_DATA_HEADER); + writeNetwork(netData, NXDN_NETWORK_MESSAGE_TYPE::DATA_HEADER); break; case NXDN_MESSAGE_TYPE_TX_REL: - writeNetwork(netData, NNMT_DATA_TRAILER); + writeNetwork(netData, NXDN_NETWORK_MESSAGE_TYPE::DATA_TRAILER); break; default: - writeNetwork(netData, NNMT_DATA_BODY); + writeNetwork(netData, NXDN_NETWORK_MESSAGE_TYPE::DATA_BODY); break; } @@ -699,14 +699,14 @@ unsigned int CNXDNControl::readModem(unsigned char* data) void CNXDNControl::writeEndRF() { - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; m_rfMask = 0x00U; m_rfLayer3.reset(); m_rfTimeoutTimer.stop(); - if (m_netState == RS_NET_IDLE) { + if (m_netState == RPT_NET_STATE::IDLE) { m_display->clearNXDN(); if (m_network != NULL) @@ -720,7 +720,7 @@ void CNXDNControl::writeEndRF() void CNXDNControl::writeEndNet() { - m_netState = RS_NET_IDLE; + m_netState = RPT_NET_STATE::IDLE; m_netMask = 0x00U; m_netLayer3.reset(); @@ -745,7 +745,7 @@ void CNXDNControl::writeNetwork() if (!m_enabled) return; - if (m_rfState != RS_RF_LISTENING && m_netState == RS_NET_IDLE) + if ((m_rfState != RPT_RF_STATE::LISTENING) && (m_netState == RPT_NET_STATE::IDLE)) return; m_networkWatchdog.start(); @@ -766,7 +766,7 @@ void CNXDNControl::writeNetwork() layer3.setData(netData + 2U, 23U); unsigned char type = layer3.getMessageType(); - if (m_netState == RS_NET_IDLE) { + if (m_netState == RPT_NET_STATE::IDLE) { if (type == NXDN_MESSAGE_TYPE_DCALL_HDR) { unsigned short srcId = layer3.getSourceUnitId(); unsigned short dstId = layer3.getDestinationGroupId(); @@ -778,13 +778,13 @@ void CNXDNControl::writeNetwork() m_display->writeNXDN(source.c_str(), grp, dstId, "N"); LogMessage("NXDN, received network data header from %s to %s%u, %u blocks", source.c_str(), grp ? "TG " : "", dstId, frames); - m_netState = RS_NET_DATA; + m_netState = RPT_NET_STATE::DATA; } else { return; } } - if (m_netState == RS_NET_DATA) { + if (m_netState == RPT_NET_STATE::DATA) { data[0U] = type == NXDN_MESSAGE_TYPE_TX_REL ? TAG_EOT : TAG_DATA; data[1U] = 0x00U; @@ -810,9 +810,9 @@ void CNXDNControl::writeNetwork() m_netLayer3.setData(netData + 5U + 0U, 10U); unsigned char type = m_netLayer3.getMessageType(); - if (type == NXDN_MESSAGE_TYPE_TX_REL && m_netState == RS_NET_IDLE) + if ((type == NXDN_MESSAGE_TYPE_TX_REL) && (m_netState == RPT_NET_STATE::IDLE)) return; - if (type == NXDN_MESSAGE_TYPE_VCALL && m_netState != RS_NET_IDLE) + if ((type == NXDN_MESSAGE_TYPE_VCALL) && (m_netState != RPT_NET_STATE::IDLE)) return; CNXDNSACCH sacch; @@ -849,14 +849,14 @@ void CNXDNControl::writeNetwork() m_netTimeoutTimer.start(); m_packetTimer.start(); m_elapsed.start(); - m_netState = RS_NET_AUDIO; + m_netState = RPT_NET_STATE::AUDIO; m_netFrames = 1U; } else { CUtils::dump(2U, "NXDN, interesting non superblock network frame", netData, 33U); return; } } else { - if (m_netState == RS_NET_IDLE) { + if (m_netState == RPT_NET_STATE::IDLE) { unsigned char structure = (netData[1U] >> 6) & 0x03U; switch (structure) { case NXDN_SR_1_4: @@ -901,7 +901,7 @@ void CNXDNControl::writeNetwork() m_netTimeoutTimer.start(); m_packetTimer.start(); m_elapsed.start(); - m_netState = RS_NET_AUDIO; + m_netState = RPT_NET_STATE::AUDIO; m_netFrames = 1U; // Create a dummy start message @@ -992,7 +992,7 @@ void CNXDNControl::clock(unsigned int ms) m_rfTimeoutTimer.clock(ms); m_netTimeoutTimer.clock(ms); - if (m_netState == RS_NET_AUDIO) { + if (m_netState == RPT_NET_STATE::AUDIO) { m_networkWatchdog.clock(ms); if (m_networkWatchdog.hasExpired()) { @@ -1006,7 +1006,7 @@ void CNXDNControl::writeQueueRF(const unsigned char *data) { assert(data != NULL); - if (m_netState != RS_NET_IDLE) + if (m_netState != RPT_NET_STATE::IDLE) return; if (m_rfTimeoutTimer.isRunning() && m_rfTimeoutTimer.hasExpired()) @@ -1108,7 +1108,7 @@ void CNXDNControl::closeFile() bool CNXDNControl::isBusy() const { - return m_rfState != RS_RF_LISTENING || m_netState != RS_NET_IDLE; + return (m_rfState != RPT_RF_STATE::LISTENING) || (m_netState != RPT_NET_STATE::IDLE); } void CNXDNControl::enable(bool enabled) @@ -1117,7 +1117,7 @@ void CNXDNControl::enable(bool enabled) m_queue.clear(); // Reset the RF section - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; m_rfMask = 0x00U; m_rfLayer3.reset(); @@ -1125,7 +1125,7 @@ void CNXDNControl::enable(bool enabled) m_rfTimeoutTimer.stop(); // Reset the networking section - m_netState = RS_NET_IDLE; + m_netState = RPT_NET_STATE::IDLE; m_netMask = 0x00U; m_netLayer3.reset(); diff --git a/NXDNDefines.h b/NXDNDefines.h index 31291c4..3a3076e 100644 --- a/NXDNDefines.h +++ b/NXDNDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016,2017,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2016,2017,2018,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 @@ -50,7 +50,7 @@ const unsigned char NXDN_LICH_RFCT_RTCH_C = 3U; const unsigned char NXDN_LICH_USC_SACCH_NS = 0U; const unsigned char NXDN_LICH_USC_UDCH = 1U; const unsigned char NXDN_LICH_USC_SACCH_SS = 2U; -const unsigned char NXDN_LICH_USC_SACCH_SS_IDLE = 3U; +const unsigned char NXDN_LICH_USC_SACCH_IDLE = 3U; const unsigned char NXDN_LICH_STEAL_NONE = 3U; const unsigned char NXDN_LICH_STEAL_FACCH1_2 = 2U; diff --git a/NXDNIcomNetwork.cpp b/NXDNIcomNetwork.cpp index adc4ec6..c86509b 100644 --- a/NXDNIcomNetwork.cpp +++ b/NXDNIcomNetwork.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016,2018-2020 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2014,2016,2018-2020,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 @@ -76,20 +76,20 @@ bool CNXDNIcomNetwork::write(const unsigned char* data, NXDN_NETWORK_MESSAGE_TYP buffer[7U] = 0xE0U; switch (type) { - case NNMT_VOICE_HEADER: - case NNMT_VOICE_TRAILER: + case NXDN_NETWORK_MESSAGE_TYPE::VOICE_HEADER: + case NXDN_NETWORK_MESSAGE_TYPE::VOICE_TRAILER: buffer[37U] = 0x23U; buffer[38U] = 0x1CU; buffer[39U] = 0x21U; break; - case NNMT_VOICE_BODY: + case NXDN_NETWORK_MESSAGE_TYPE::VOICE_BODY: buffer[37U] = 0x23U; buffer[38U] = 0x10U; buffer[39U] = 0x21U; break; - case NNMT_DATA_HEADER: - case NNMT_DATA_BODY: - case NNMT_DATA_TRAILER: + case NXDN_NETWORK_MESSAGE_TYPE::DATA_HEADER: + case NXDN_NETWORK_MESSAGE_TYPE::DATA_BODY: + case NXDN_NETWORK_MESSAGE_TYPE::DATA_TRAILER: buffer[37U] = 0x23U; buffer[38U] = 0x02U; buffer[39U] = 0x18U; diff --git a/NXDNKenwoodNetwork.cpp b/NXDNKenwoodNetwork.cpp index 1b7432b..88dc43b 100644 --- a/NXDNKenwoodNetwork.cpp +++ b/NXDNKenwoodNetwork.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2014,2016,2018,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2014,2016,2018,2020,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 @@ -110,15 +110,15 @@ bool CNXDNKenwoodNetwork::write(const unsigned char* data, NXDN_NETWORK_MESSAGE_ assert(data != NULL); switch (type) { - case NNMT_VOICE_HEADER: // Voice header or trailer - case NNMT_VOICE_TRAILER: + case NXDN_NETWORK_MESSAGE_TYPE::VOICE_HEADER: // Voice header or trailer + case NXDN_NETWORK_MESSAGE_TYPE::VOICE_TRAILER: return processIcomVoiceHeader(data); - case NNMT_VOICE_BODY: // Voice data + case NXDN_NETWORK_MESSAGE_TYPE::VOICE_BODY: // Voice data return processIcomVoiceData(data); - case NNMT_DATA_HEADER: // Data header or trailer - case NNMT_DATA_TRAILER: + case NXDN_NETWORK_MESSAGE_TYPE::DATA_HEADER: // Data header or trailer + case NXDN_NETWORK_MESSAGE_TYPE::DATA_TRAILER: return processIcomDataHeader(data); - case NNMT_DATA_BODY: // Data data + case NXDN_NETWORK_MESSAGE_TYPE::DATA_BODY: // Data data return processIcomDataData(data); default: return false; @@ -774,7 +774,7 @@ unsigned int CNXDNKenwoodNetwork::readRTP(unsigned char* data) if (length <= 0) return 0U; - if (!CUDPSocket::match(m_rtpAddr, address, IMT_ADDRESS_ONLY)) { + if (!CUDPSocket::match(m_rtpAddr, address, IPMATCHTYPE::IMT_ADDREONLY)) { LogMessage("NXDN, RTP packet received from an invalid source"); return 0U; } @@ -802,7 +802,7 @@ unsigned int CNXDNKenwoodNetwork::readRTCP(unsigned char* data) if (length <= 0) return 0U; - if (!CUDPSocket::match(m_rtpAddr, address, IMT_ADDRESS_ONLY)) { + if (!CUDPSocket::match(m_rtpAddr, address, IPMATCHTYPE::IMT_ADDREONLY)) { LogMessage("NXDN, RTCP packet received from an invalid source"); return 0U; } diff --git a/NXDNNetwork.h b/NXDNNetwork.h index 107e02f..62e8521 100644 --- a/NXDNNetwork.h +++ b/NXDNNetwork.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020 by Jonathan Naylor G4KLX + * Copyright (C) 2020,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 @@ -23,13 +23,13 @@ #include -enum NXDN_NETWORK_MESSAGE_TYPE { - NNMT_VOICE_HEADER, - NNMT_VOICE_BODY, - NNMT_VOICE_TRAILER, - NNMT_DATA_HEADER, - NNMT_DATA_BODY, - NNMT_DATA_TRAILER +enum class NXDN_NETWORK_MESSAGE_TYPE { + VOICE_HEADER, + VOICE_BODY, + VOICE_TRAILER, + DATA_HEADER, + DATA_BODY, + DATA_TRAILER }; class INXDNNetwork { diff --git a/NetworkInfo.cpp b/NetworkInfo.cpp index b85e8a6..b840530 100644 --- a/NetworkInfo.cpp +++ b/NetworkInfo.cpp @@ -1,4 +1,5 @@ /* + * Copyright (C) 2025 by Jonathan Naylor G4KLX * Copyright (C) 2017 by Lieven De Samblanx ON7LDS * * This program is free software; you can redistribute it and/or modify @@ -123,7 +124,7 @@ void CNetworkInfo::getNetworkInterface(unsigned char* info) struct rt_msghdr *rtm; for (char *p = buf; p < buf + size; p += rtm->rtm_msglen) { rtm = (struct rt_msghdr *)p; - if (rtm->rtm_version != RTM_VERSION) + if (rtm->rtm_version != VERSION) continue; #if defined(__OpenBSD__) struct sockaddr_in *sa = (struct sockaddr_in *)(p + rtm->rtm_hdrlen); diff --git a/P25Control.cpp b/P25Control.cpp index b7682cd..3968651 100644 --- a/P25Control.cpp +++ b/P25Control.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016-2019,2021,2024 by Jonathan Naylor G4KLX +* Copyright (C) 2016-2019,2021,2024,2025 by Jonathan Naylor G4KLX * Copyright (C) 2018 by Bryan Biedenkapp N2PLL * * This program is free software; you can redistribute it and/or modify @@ -49,8 +49,8 @@ m_display(display), m_duplex(duplex), m_lookup(lookup), m_queue(1000U, "P25 Control"), -m_rfState(RS_RF_LISTENING), -m_netState(RS_NET_IDLE), +m_rfState(RPT_RF_STATE::LISTENING), +m_netState(RPT_NET_STATE::IDLE), m_rfTimeout(1000U, timeout), m_netTimeout(1000U, timeout), m_networkWatchdog(1000U, 0U, 1500U), @@ -124,7 +124,7 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) bool sync = data[1U] == 0x01U; - if (data[0U] == TAG_LOST && m_rfState == RS_RF_AUDIO) { + if ((data[0U] == TAG_LOST) && (m_rfState == RPT_RF_STATE::AUDIO)) { bool grp = m_rfData.getLCF() == P25_LCF_GROUP; unsigned int dstId = m_rfData.getDstId(); std::string source = m_lookup->find(m_rfData.getSrcId()); @@ -136,12 +136,12 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) // LogMessage("P25, total frames: %d, bits: %d, undecodable LC: %d, errors: %d, BER: %.4f%%", m_rfFrames, m_rfBits, m_rfUndecodableLC, m_rfErrs, float(m_rfErrs * 100U) / float(m_rfBits)); - if (m_netState == RS_NET_IDLE) + if (m_netState == RPT_NET_STATE::IDLE) m_display->clearP25(); writeNetwork(m_rfLDU, m_lastDUID, true); writeNetwork(data + 2U, P25_DUID_TERM, true); - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; m_rfTimeout.stop(); m_rfData.reset(); #if defined(DUMP_P25) @@ -150,11 +150,11 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) return false; } - if (data[0U] == TAG_LOST && m_rfState == RS_RF_DATA) { - if (m_netState == RS_NET_IDLE) + if ((data[0U] == TAG_LOST) && (m_rfState == RPT_RF_STATE::DATA)) { + if (m_netState == RPT_NET_STATE::IDLE) m_display->clearP25(); - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; m_rfPDUCount = 0U; m_rfPDUBits = 0U; #if defined(DUMP_P25) @@ -164,17 +164,17 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) } if (data[0U] == TAG_LOST) { - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; return false; } - if (!sync && m_rfState == RS_RF_LISTENING) + if (!sync && (m_rfState == RPT_RF_STATE::LISTENING)) return false; // Decode the NID bool valid = m_nid.decode(data + 2U); - if (m_rfState == RS_RF_LISTENING && !valid) + if ((m_rfState == RPT_RF_STATE::LISTENING) && !valid) return false; unsigned char duid = m_nid.getDUID(); @@ -222,7 +222,7 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) } if (duid == P25_DUID_HEADER) { - if (m_rfState == RS_RF_LISTENING) { + if (m_rfState == RPT_RF_STATE::LISTENING) { m_rfData.reset(); bool ret = m_rfData.decodeHeader(data + 2U); if (!ret) { @@ -236,7 +236,7 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) return true; } } else if (duid == P25_DUID_LDU1) { - if (m_rfState == RS_RF_LISTENING) { + if (m_rfState == RPT_RF_STATE::LISTENING) { m_rfData.reset(); bool ret = m_rfData.decodeLDU1(data + 2U); if (!ret) { @@ -275,7 +275,7 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) LogMessage("P25, received RF voice transmission from %s to %s%u", source.c_str(), grp ? "TG " : "", dstId); m_display->writeP25(source.c_str(), grp, dstId, "R"); - m_rfState = RS_RF_AUDIO; + m_rfState = RPT_RF_STATE::AUDIO; m_minRSSI = m_rssi; m_maxRSSI = m_rssi; @@ -284,11 +284,11 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) createRFHeader(); writeNetwork(data + 2U, P25_DUID_HEADER, false); - } else if (m_rfState == RS_RF_AUDIO) { + } else if (m_rfState == RPT_RF_STATE::AUDIO) { writeNetwork(m_rfLDU, m_lastDUID, false); } - if (m_rfState == RS_RF_AUDIO) { + if (m_rfState == RPT_RF_STATE::AUDIO) { /* bool ret = m_rfData.decodeLDU1(data + 2U); if (!ret) { @@ -342,7 +342,7 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) return true; } } else if (duid == P25_DUID_LDU2) { - if (m_rfState == RS_RF_AUDIO) { + if (m_rfState == RPT_RF_STATE::AUDIO) { /* bool ret = m_rfData.decodeLDU2(data + 2U); if (!ret) { @@ -398,10 +398,10 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) return true; } } else if (duid == P25_DUID_TSDU) { - if (m_rfState != RS_RF_DATA) { + if (m_rfState != RPT_RF_STATE::DATA) { m_rfPDUCount = 0U; m_rfPDUBits = 0U; - m_rfState = RS_RF_DATA; + m_rfState = RPT_RF_STATE::DATA; m_rfDataFrames = 0U; } @@ -475,10 +475,10 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) break; } - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; return true; } else if (duid == P25_DUID_TERM || duid == P25_DUID_TERM_LC) { - if (m_rfState == RS_RF_AUDIO) { + if (m_rfState == RPT_RF_STATE::AUDIO) { writeNetwork(m_rfLDU, m_lastDUID, true); ::memset(data + 2U, 0x00U, P25_TERM_FRAME_LENGTH_BYTES); @@ -496,7 +496,7 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) unsigned int dstId = m_rfData.getDstId(); std::string source = m_lookup->find(m_rfData.getSrcId()); - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; m_rfTimeout.stop(); m_rfData.reset(); m_lastDUID = duid; @@ -523,10 +523,10 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) } } } else if (duid == P25_DUID_PDU) { - if (m_rfState != RS_RF_DATA) { + if (m_rfState != RPT_RF_STATE::DATA) { m_rfPDUCount = 0U; m_rfPDUBits = 0U; - m_rfState = RS_RF_DATA; + m_rfState = RPT_RF_STATE::DATA; m_rfDataFrames = 0U; } @@ -556,12 +556,12 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) } else { m_rfPDUCount = 0U; m_rfPDUBits = 0U; - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; m_rfDataFrames = 0U; } } - if (m_rfState == RS_RF_DATA) { + if (m_rfState == RPT_RF_STATE::DATA) { m_rfPDUCount++; unsigned int bitLength = ((m_rfDataFrames + 1U) * P25_PDU_FEC_LENGTH_BITS) + P25_SYNC_LENGTH_BITS + P25_NID_LENGTH_BITS; @@ -620,7 +620,7 @@ bool CP25Control::writeModem(unsigned char* data, unsigned int len) m_rfPDUCount = 0U; m_rfPDUBits = 0U; - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; m_rfDataFrames = 0U; } @@ -660,7 +660,7 @@ void CP25Control::writeNetwork() if (!m_enabled) return; - if (m_rfState != RS_RF_LISTENING && m_netState == RS_NET_IDLE) + if ((m_rfState != RPT_RF_STATE::LISTENING) && (m_netState == RPT_NET_STATE::IDLE)) return; m_networkWatchdog.start(); @@ -701,7 +701,7 @@ void CP25Control::writeNetwork() case 0x6AU: ::memcpy(m_netLDU1 + 200U, data, 16U); checkNetLDU2(); - if (m_netState != RS_NET_IDLE) + if (m_netState != RPT_NET_STATE::IDLE) createNetLDU1(); break; case 0x6BU: @@ -738,7 +738,7 @@ void CP25Control::writeNetwork() break; case 0x73U: ::memcpy(m_netLDU2 + 200U, data, 16U); - if (m_netState == RS_NET_IDLE) { + if (m_netState == RPT_NET_STATE::IDLE) { createNetHeader(); createNetLDU1(); } else { @@ -762,14 +762,14 @@ void CP25Control::clock(unsigned int ms) m_rfTimeout.clock(ms); m_netTimeout.clock(ms); - if (m_netState == RS_NET_AUDIO) { + if (m_netState == RPT_NET_STATE::AUDIO) { m_networkWatchdog.clock(ms); if (m_networkWatchdog.hasExpired()) { LogMessage("P25, network watchdog has expired, %.1f seconds, %u%% packet loss", float(m_netFrames) / 50.0F, (m_netLost * 100U) / m_netFrames); m_display->clearP25(); m_networkWatchdog.stop(); - m_netState = RS_NET_IDLE; + m_netState = RPT_NET_STATE::IDLE; m_netData.reset(); m_netTimeout.stop(); } @@ -849,7 +849,7 @@ void CP25Control::addBusyBits(unsigned char* data, unsigned int length, bool b1, { assert(data != NULL); - for (unsigned int ss0Pos = P25_SS0_START; ss0Pos < length; ss0Pos += P25_SS_INCREMENT) { + for (unsigned int ss0Pos = P25_SS0_START; ss0Pos < length; ss0Pos += P25_INCREMENT) { unsigned int ss1Pos = ss0Pos + 1U; WRITE_BIT(data, ss0Pos, b1); WRITE_BIT(data, ss1Pos, b2); @@ -858,7 +858,7 @@ void CP25Control::addBusyBits(unsigned char* data, unsigned int length, bool b1, void CP25Control::checkNetLDU1() { - if (m_netState == RS_NET_IDLE) + if (m_netState == RPT_NET_STATE::IDLE) return; // Check for an unflushed LDU1 @@ -870,7 +870,7 @@ void CP25Control::checkNetLDU1() void CP25Control::checkNetLDU2() { - if (m_netState == RS_NET_IDLE) + if (m_netState == RPT_NET_STATE::IDLE) return; // Check for an unflushed LDU1 @@ -1018,7 +1018,7 @@ void CP25Control::createNetHeader() m_display->writeP25(source.c_str(), lcf == P25_LCF_GROUP, dstId, "N"); - m_netState = RS_NET_AUDIO; + m_netState = RPT_NET_STATE::AUDIO; m_netTimeout.start(); m_netFrames = 0U; m_netLost = 0U; @@ -1193,7 +1193,7 @@ void CP25Control::createNetTerminator() m_netTimeout.stop(); m_networkWatchdog.stop(); m_netData.reset(); - m_netState = RS_NET_IDLE; + m_netState = RPT_NET_STATE::IDLE; } bool CP25Control::openFile() @@ -1240,7 +1240,7 @@ void CP25Control::closeFile() bool CP25Control::isBusy() const { - return m_rfState != RS_RF_LISTENING || m_netState != RS_NET_IDLE; + return (m_rfState != RPT_RF_STATE::LISTENING) || (m_netState != RPT_NET_STATE::IDLE); } void CP25Control::enable(bool enabled) @@ -1249,7 +1249,7 @@ void CP25Control::enable(bool enabled) m_queue.clear(); // Reset the RF section - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; m_rfTimeout.stop(); m_rfData.reset(); @@ -1257,7 +1257,7 @@ void CP25Control::enable(bool enabled) m_netTimeout.stop(); m_networkWatchdog.stop(); m_netData.reset(); - m_netState = RS_NET_IDLE; + m_netState = RPT_NET_STATE::IDLE; } m_enabled = enabled; diff --git a/P25Defines.h b/P25Defines.h index 815f75a..7824751 100644 --- a/P25Defines.h +++ b/P25Defines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 by Jonathan Naylor G4KLX + * Copyright (C) 2016,2025 by Jonathan Naylor G4KLX * Copyright (C) 2018 by Bryan Biedenkapp * * This program is free software; you can redistribute it and/or modify @@ -65,7 +65,7 @@ const unsigned char P25_LCF_TSBK_ACK_RSP_FNE = 0x20U; const unsigned int P25_SS0_START = 70U; const unsigned int P25_SS1_START = 71U; -const unsigned int P25_SS_INCREMENT = 72U; +const unsigned int P25_INCREMENT = 72U; const unsigned char P25_DUID_HEADER = 0x00U; const unsigned char P25_DUID_TERM = 0x03U; diff --git a/P25Utils.cpp b/P25Utils.cpp index 70f5c29..3c00410 100644 --- a/P25Utils.cpp +++ b/P25Utils.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2016,2018 by Jonathan Naylor G4KLX +* Copyright (C) 2016,2018,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 @@ -37,16 +37,16 @@ unsigned int CP25Utils::decode(const unsigned char* in, unsigned char* out, unsi unsigned int ss1Pos = P25_SS1_START; while (ss0Pos < start) { - ss0Pos += P25_SS_INCREMENT; - ss1Pos += P25_SS_INCREMENT; + ss0Pos += P25_INCREMENT; + ss1Pos += P25_INCREMENT; } unsigned int n = 0U; for (unsigned int i = start; i < stop; i++) { if (i == ss0Pos) { - ss0Pos += P25_SS_INCREMENT; + ss0Pos += P25_INCREMENT; } else if (i == ss1Pos) { - ss1Pos += P25_SS_INCREMENT; + ss1Pos += P25_INCREMENT; } else { bool b = READ_BIT(in, i); WRITE_BIT(out, n, b); @@ -67,16 +67,16 @@ unsigned int CP25Utils::encode(const unsigned char* in, unsigned char* out, unsi unsigned int ss1Pos = P25_SS1_START; while (ss0Pos < start) { - ss0Pos += P25_SS_INCREMENT; - ss1Pos += P25_SS_INCREMENT; + ss0Pos += P25_INCREMENT; + ss1Pos += P25_INCREMENT; } unsigned int n = 0U; for (unsigned int i = start; i < stop; i++) { if (i == ss0Pos) { - ss0Pos += P25_SS_INCREMENT; + ss0Pos += P25_INCREMENT; } else if (i == ss1Pos) { - ss1Pos += P25_SS_INCREMENT; + ss1Pos += P25_INCREMENT; } else { bool b = READ_BIT(in, n); WRITE_BIT(out, i, b); @@ -100,9 +100,9 @@ unsigned int CP25Utils::encode(const unsigned char* in, unsigned char* out, unsi unsigned int pos = 0U; while (n < length) { if (pos == ss0Pos) { - ss0Pos += P25_SS_INCREMENT; + ss0Pos += P25_INCREMENT; } else if (pos == ss1Pos) { - ss1Pos += P25_SS_INCREMENT; + ss1Pos += P25_INCREMENT; } else { bool b = READ_BIT(in, n); WRITE_BIT(out, pos, b); diff --git a/POCSAGControl.cpp b/POCSAGControl.cpp index 0568271..69e5df5 100644 --- a/POCSAGControl.cpp +++ b/POCSAGControl.cpp @@ -1,5 +1,5 @@ /* -* Copyright (C) 2018,2019,2020 Jonathan Naylor, G4KLX +* Copyright (C) 2018,2019,2020,2025 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 @@ -68,7 +68,7 @@ m_output(), m_buffer(), m_ric(0U), m_data(), -m_state(PS_NONE), +m_state(POCSAG_STATE::NONE), m_enabled(true), m_fp(NULL) { @@ -289,7 +289,7 @@ bool CPOCSAGControl::processData() void CPOCSAGControl::clock(unsigned int ms) { - if (m_state == PS_NONE) { + if (m_state == POCSAG_STATE::NONE) { bool ret = readNetwork(); if (!ret) return; @@ -298,7 +298,7 @@ void CPOCSAGControl::clock(unsigned int ms) if (!ret) return; - m_state = PS_WAITING; + m_state = POCSAG_STATE::WAITING; m_frames = 0U; m_count = 1U; @@ -311,7 +311,7 @@ void CPOCSAGControl::clock(unsigned int ms) m_output.push_back(POCSAG_SYNC_WORD); for (unsigned int i = 0U; i < POCSAG_FRAME_ADDRESSES; i++) { - if (m_state == PS_WAITING) { + if (m_state == POCSAG_STATE::WAITING) { if (i == (m_ric % POCSAG_FRAME_ADDRESSES)) { uint32_t w1 = m_buffer.front(); m_buffer.pop_front(); @@ -321,22 +321,22 @@ void CPOCSAGControl::clock(unsigned int ms) m_output.push_back(w1); m_output.push_back(w2); - m_state = PS_SENDING; + m_state = POCSAG_STATE::SENDING; } else { m_output.push_back(POCSAG_IDLE_WORD); m_output.push_back(POCSAG_IDLE_WORD); } - } else if (m_state == PS_SENDING) { + } else if (m_state == POCSAG_STATE::SENDING) { if (m_buffer.empty()) { m_output.push_back(POCSAG_IDLE_WORD); m_output.push_back(POCSAG_IDLE_WORD); bool ret = processData(); if (ret) { - m_state = PS_WAITING; + m_state = POCSAG_STATE::WAITING; m_count++; } else { - m_state = PS_ENDING; + m_state = POCSAG_STATE::ENDING; } } else { uint32_t w1 = m_buffer.front(); @@ -347,7 +347,7 @@ void CPOCSAGControl::clock(unsigned int ms) m_output.push_back(w1); m_output.push_back(w2); } - } else { // PS_ENDING + } else { // ENDING m_output.push_back(POCSAG_IDLE_WORD); m_output.push_back(POCSAG_IDLE_WORD); } @@ -356,10 +356,10 @@ void CPOCSAGControl::clock(unsigned int ms) writeQueue(); m_frames++; - if (m_state == PS_ENDING) { + if (m_state == POCSAG_STATE::ENDING) { LogMessage("POCSAG, transmitted %u frame(s) of data from %u message(s)", m_frames, m_count); m_display->clearPOCSAG(); - m_state = PS_NONE; + m_state = POCSAG_STATE::NONE; #if defined(DUMP_POCSAG) closeFile(); @@ -568,7 +568,7 @@ void CPOCSAGControl::enable(bool enabled) delete *it; m_data.clear(); - m_state = PS_NONE; + m_state = POCSAG_STATE::NONE; } m_enabled = enabled; diff --git a/POCSAGControl.h b/POCSAGControl.h index 42fed7e..0e24d12 100644 --- a/POCSAGControl.h +++ b/POCSAGControl.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2018,2019,2020 by Jonathan Naylor G4KLX +* Copyright (C) 2018,2019,2020,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 @@ -60,11 +60,11 @@ private: unsigned int m_frames; unsigned int m_count; - enum POCSAG_STATE { - PS_NONE, - PS_WAITING, - PS_SENDING, - PS_ENDING + enum class POCSAG_STATE { + NONE, + WAITING, + SENDING, + ENDING }; std::deque m_output; diff --git a/RemoteCommand.cpp b/RemoteCommand.cpp index 0e8918d..1bfea48 100644 --- a/RemoteCommand.cpp +++ b/RemoteCommand.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2019,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2019,2020,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 @@ -85,7 +85,7 @@ int CRemoteCommand::send(const std::string& command) if (!ret) return 1; - ret = socket.write((unsigned char*)command.c_str(), command.length(), addr, addrLen); + ret = socket.write((unsigned char*)command.c_str(), (unsigned int)command.length(), addr, addrLen); if (!ret) { socket.close(); return 1; diff --git a/RemoteControl.cpp b/RemoteControl.cpp index 3951693..8e23fbf 100644 --- a/RemoteControl.cpp +++ b/RemoteControl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2019,2020,2021,2024 by Jonathan Naylor G4KLX + * Copyright (C) 2019,2020,2021,2024,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 @@ -38,7 +38,7 @@ m_host(host), m_socket(address, port), m_addr(), m_addrLen(0U), -m_command(RCD_NONE), +m_command(REMOTE_COMMAND::NONE), m_args() { assert(port > 0U); @@ -63,7 +63,7 @@ bool CRemoteControl::open() REMOTE_COMMAND CRemoteControl::getCommand() { - m_command = RCD_NONE; + m_command = REMOTE_COMMAND::NONE; m_args.clear(); char command[BUFFER_LENGTH]; @@ -89,79 +89,79 @@ REMOTE_COMMAND CRemoteControl::getCommand() if (m_args.at(0U) == "mode" && m_args.size() >= SET_MODE_ARGS) { // Mode command is in the form of "mode [|fixed]" if (m_args.at(1U) == "idle") - m_command = RCD_MODE_IDLE; + m_command = REMOTE_COMMAND::MODE_IDLE; else if (m_args.at(1U) == "lockout") - m_command = RCD_MODE_LOCKOUT; + m_command = REMOTE_COMMAND::MODE_LOCKOUT; else if (m_args.at(1U) == "d-star") - m_command = RCD_MODE_DSTAR; + m_command = REMOTE_COMMAND::MODE_DSTAR; else if (m_args.at(1U) == "dmr") - m_command = RCD_MODE_DMR; + m_command = REMOTE_COMMAND::MODE_DMR; else if (m_args.at(1U) == "ysf") - m_command = RCD_MODE_YSF; + m_command = REMOTE_COMMAND::MODE_YSF; else if (m_args.at(1U) == "p25") - m_command = RCD_MODE_P25; + m_command = REMOTE_COMMAND::MODE_P25; else if (m_args.at(1U) == "nxdn") - m_command = RCD_MODE_NXDN; + m_command = REMOTE_COMMAND::MODE_NXDN; else if (m_args.at(1U) == "m17") - m_command = RCD_MODE_M17; + m_command = REMOTE_COMMAND::MODE_M17; else replyStr = "KO"; } else if (m_args.at(0U) == "enable" && m_args.size() >= ENABLE_ARGS) { if (m_args.at(1U) == "dstar") - m_command = RCD_ENABLE_DSTAR; + m_command = REMOTE_COMMAND::ENABLE_DSTAR; else if (m_args.at(1U) == "dmr") - m_command = RCD_ENABLE_DMR; + m_command = REMOTE_COMMAND::ENABLE_DMR; else if (m_args.at(1U) == "ysf") - m_command = RCD_ENABLE_YSF; + m_command = REMOTE_COMMAND::ENABLE_YSF; else if (m_args.at(1U) == "p25") - m_command = RCD_ENABLE_P25; + m_command = REMOTE_COMMAND::ENABLE_P25; else if (m_args.at(1U) == "nxdn") - m_command = RCD_ENABLE_NXDN; + m_command = REMOTE_COMMAND::ENABLE_NXDN; else if (m_args.at(1U) == "m17") - m_command = RCD_ENABLE_M17; + m_command = REMOTE_COMMAND::ENABLE_M17; else if (m_args.at(1U) == "fm") - m_command = RCD_ENABLE_FM; + m_command = REMOTE_COMMAND::ENABLE_FM; else if (m_args.at(1U) == "ax25") - m_command = RCD_ENABLE_AX25; + m_command = REMOTE_COMMAND::ENABLE_AX25; else replyStr = "KO"; } else if (m_args.at(0U) == "disable" && m_args.size() >= DISABLE_ARGS) { if (m_args.at(1U) == "dstar") - m_command = RCD_DISABLE_DSTAR; + m_command = REMOTE_COMMAND::DISABLE_DSTAR; else if (m_args.at(1U) == "dmr") - m_command = RCD_DISABLE_DMR; + m_command = REMOTE_COMMAND::DISABLE_DMR; else if (m_args.at(1U) == "ysf") - m_command = RCD_DISABLE_YSF; + m_command = REMOTE_COMMAND::DISABLE_YSF; else if (m_args.at(1U) == "p25") - m_command = RCD_DISABLE_P25; + m_command = REMOTE_COMMAND::DISABLE_P25; else if (m_args.at(1U) == "nxdn") - m_command = RCD_DISABLE_NXDN; + m_command = REMOTE_COMMAND::DISABLE_NXDN; else if (m_args.at(1U) == "m17") - m_command = RCD_DISABLE_M17; + m_command = REMOTE_COMMAND::DISABLE_M17; else if (m_args.at(1U) == "fm") - m_command = RCD_DISABLE_FM; + m_command = REMOTE_COMMAND::DISABLE_FM; else if (m_args.at(1U) == "ax25") - m_command = RCD_DISABLE_AX25; + m_command = REMOTE_COMMAND::DISABLE_AX25; else replyStr = "KO"; } else if (m_args.at(0U) == "page" && m_args.size() >= PAGE_ARGS) { // Page command is in the form of "page " - m_command = RCD_PAGE; + m_command = REMOTE_COMMAND::PAGE; } else if (m_args.at(0U) == "page_bcd" && m_args.size() >= PAGE_ARGS) { // BCD page command is in the form of "page_bcd " - m_command = RCD_PAGE_BCD; + m_command = REMOTE_COMMAND::PAGE_BCD; } else if (m_args.at(0U) == "page_a1" && m_args.size() == 2) { // Alert1 page command is in the form of "page_a1 " - m_command = RCD_PAGE_A1; + m_command = REMOTE_COMMAND::PAGE_A1; } else if (m_args.at(0U) == "page_a2" && m_args.size() >= PAGE_ARGS) { // Alert2 page command is in the form of "page_a2 " - m_command = RCD_PAGE_A2; + m_command = REMOTE_COMMAND::PAGE_A2; } else if (m_args.at(0U) == "cw" && m_args.size() >= CW_ARGS) { // CW command is in the form of "cw " - m_command = RCD_CW; + m_command = REMOTE_COMMAND::CW; } else if (m_args.at(0U) == "reload") { // Reload command is in the form of "reload" - m_command = RCD_RELOAD; + m_command = REMOTE_COMMAND::RELOAD; } else if (m_args.at(0U) == "status") { if (m_host != NULL) { m_host->buildNetworkStatusString(replyStr); @@ -169,7 +169,7 @@ REMOTE_COMMAND CRemoteControl::getCommand() replyStr = "KO"; } - m_command = RCD_CONNECTION_STATUS; + m_command = REMOTE_COMMAND::CONNECTION_STATUS; } else if (m_args.at(0U) == "hosts") { if (m_host != NULL) { m_host->buildNetworkHostsString(replyStr); @@ -177,13 +177,13 @@ REMOTE_COMMAND CRemoteControl::getCommand() replyStr = "KO"; } - m_command = RCD_CONFIG_HOSTS; + m_command = REMOTE_COMMAND::CONFIG_HOSTS; } else { replyStr = "KO"; } - ::snprintf(buffer, BUFFER_LENGTH * 2, "%s remote command of \"%s\" received", ((m_command == RCD_NONE) ? "Invalid" : "Valid"), command); - if (m_command == RCD_NONE) { + ::snprintf(buffer, BUFFER_LENGTH * 2, "%s remote command of \"%s\" received", ((m_command == REMOTE_COMMAND::NONE) ? "Invalid" : "Valid"), command); + if (m_command == REMOTE_COMMAND::NONE) { m_args.clear(); LogWarning(buffer); } else { @@ -201,21 +201,21 @@ REMOTE_COMMAND CRemoteControl::getCommand() unsigned int CRemoteControl::getArgCount() const { switch (m_command) { - case RCD_MODE_IDLE: - case RCD_MODE_LOCKOUT: - case RCD_MODE_DSTAR: - case RCD_MODE_DMR: - case RCD_MODE_YSF: - case RCD_MODE_P25: - case RCD_MODE_NXDN: - case RCD_MODE_M17: + case REMOTE_COMMAND::MODE_IDLE: + case REMOTE_COMMAND::MODE_LOCKOUT: + case REMOTE_COMMAND::MODE_DSTAR: + case REMOTE_COMMAND::MODE_DMR: + case REMOTE_COMMAND::MODE_YSF: + case REMOTE_COMMAND::MODE_P25: + case REMOTE_COMMAND::MODE_NXDN: + case REMOTE_COMMAND::MODE_M17: return (unsigned int)m_args.size() - SET_MODE_ARGS; - case RCD_PAGE: - case RCD_PAGE_BCD: - case RCD_PAGE_A1: - case RCD_PAGE_A2: + case REMOTE_COMMAND::PAGE: + case REMOTE_COMMAND::PAGE_BCD: + case REMOTE_COMMAND::PAGE_A1: + case REMOTE_COMMAND::PAGE_A2: return (unsigned int)m_args.size() - 1U; - case RCD_CW: + case REMOTE_COMMAND::CW: return (unsigned int)m_args.size() - 1U; default: return 0U; @@ -225,23 +225,23 @@ unsigned int CRemoteControl::getArgCount() const std::string CRemoteControl::getArgString(unsigned int n) const { switch (m_command) { - case RCD_MODE_IDLE: - case RCD_MODE_LOCKOUT: - case RCD_MODE_DSTAR: - case RCD_MODE_DMR: - case RCD_MODE_YSF: - case RCD_MODE_P25: - case RCD_MODE_NXDN: - case RCD_MODE_M17: + case REMOTE_COMMAND::MODE_IDLE: + case REMOTE_COMMAND::MODE_LOCKOUT: + case REMOTE_COMMAND::MODE_DSTAR: + case REMOTE_COMMAND::MODE_DMR: + case REMOTE_COMMAND::MODE_YSF: + case REMOTE_COMMAND::MODE_P25: + case REMOTE_COMMAND::MODE_NXDN: + case REMOTE_COMMAND::MODE_M17: n += SET_MODE_ARGS; break; - case RCD_PAGE: - case RCD_PAGE_BCD: - case RCD_PAGE_A1: - case RCD_PAGE_A2: + case REMOTE_COMMAND::PAGE: + case REMOTE_COMMAND::PAGE_BCD: + case REMOTE_COMMAND::PAGE_A1: + case REMOTE_COMMAND::PAGE_A2: n += 1U; break; - case RCD_CW: + case REMOTE_COMMAND::CW: n += 1U; break; default: diff --git a/RemoteControl.h b/RemoteControl.h index 61d0516..b5b0bd7 100644 --- a/RemoteControl.h +++ b/RemoteControl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2019,2020,2021,2024 by Jonathan Naylor G4KLX + * Copyright (C) 2019,2020,2021,2024,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 @@ -26,41 +26,41 @@ class CMMDVMHost; -enum REMOTE_COMMAND { - RCD_NONE, - RCD_MODE_IDLE, - RCD_MODE_LOCKOUT, - RCD_MODE_DSTAR, - RCD_MODE_DMR, - RCD_MODE_YSF, - RCD_MODE_P25, - RCD_MODE_NXDN, - RCD_MODE_M17, - RCD_MODE_FM, - RCD_ENABLE_DSTAR, - RCD_ENABLE_DMR, - RCD_ENABLE_YSF, - RCD_ENABLE_P25, - RCD_ENABLE_NXDN, - RCD_ENABLE_M17, - RCD_ENABLE_FM, - RCD_ENABLE_AX25, - RCD_DISABLE_DSTAR, - RCD_DISABLE_DMR, - RCD_DISABLE_YSF, - RCD_DISABLE_P25, - RCD_DISABLE_NXDN, - RCD_DISABLE_M17, - RCD_DISABLE_FM, - RCD_DISABLE_AX25, - RCD_PAGE, - RCD_PAGE_BCD, - RCD_PAGE_A1, - RCD_PAGE_A2, - RCD_CW, - RCD_RELOAD, - RCD_CONNECTION_STATUS, - RCD_CONFIG_HOSTS +enum class REMOTE_COMMAND { + NONE, + MODE_IDLE, + MODE_LOCKOUT, + MODE_DSTAR, + MODE_DMR, + MODE_YSF, + MODE_P25, + MODE_NXDN, + MODE_M17, + MODE_FM, + ENABLE_DSTAR, + ENABLE_DMR, + ENABLE_YSF, + ENABLE_P25, + ENABLE_NXDN, + ENABLE_M17, + ENABLE_FM, + ENABLE_AX25, + DISABLE_DSTAR, + DISABLE_DMR, + DISABLE_YSF, + DISABLE_P25, + DISABLE_NXDN, + DISABLE_M17, + DISABLE_FM, + DISABLE_AX25, + PAGE, + PAGE_BCD, + PAGE_A1, + PAGE_A2, + CW, + RELOAD, + CONNECTION_STATUS, + CONFIG_HOSTS }; class CRemoteControl { diff --git a/SHA256.h b/SHA256.h index 7c48f19..9174834 100644 --- a/SHA256.h +++ b/SHA256.h @@ -1,6 +1,6 @@ /* - * Copyright (C) 2005, 2006, 2008, 2009 Free Software Foundation, Inc. - * Copyright (C) 2011,2015,2016 by Jonathan Naylor G4KLX + * Copyright (C) 2005,2006,2008,2009 Free Software Foundation, Inc. + * Copyright (C) 2011,2015,2016,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 @@ -22,9 +22,7 @@ #include -enum { - SHA256_DIGEST_SIZE = 256 / 8 -}; +const unsigned int SHA256_DIGEST_SIZE = 256U / 8U; class CSHA256 { public: diff --git a/TFTSurenoo.cpp b/TFTSurenoo.cpp index 7d8f5f7..899eac3 100644 --- a/TFTSurenoo.cpp +++ b/TFTSurenoo.cpp @@ -1,6 +1,6 @@ /* * Copyright (C) 2019 by SASANO Takayoshi JG1UAA - * Copyright (C) 2015,2016,2018,2019,2020 by Jonathan Naylor G4KLX + * Copyright (C) 2015,2016,2018,2019,2020,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 @@ -56,18 +56,28 @@ static const struct layoutdef Layout[] = { #define Y_WIDTH Layout[m_screenLayout].y_width #define ROTATION Layout[m_screenLayout].rotation -enum LcdColour { - COLOUR_BLACK, COLOUR_RED, COLOUR_GREEN, COLOUR_BLUE, - COLOUR_YELLOW, COLOUR_CYAN, COLOUR_MAGENTA, COLOUR_GREY, - COLOUR_DARK_GREY, COLOUR_DARK_RED, COLOUR_DARK_GREEN, COLOUR_DARK_BLUE, - COLOUR_DARK_YELLOW, COLOUR_DARK_CYAN, COLOUR_DARK_MAGENTA, COLOUR_WHITE -}; +#define COLOUR_BLACK 0 +#define COLOUR_RED 1 +#define COLOUR_GREEN 2 +#define COLOUR_BLUE 3 +#define COLOUR_YELLOW 4 +#define COLOUR_CYAN 5 +#define COLOUR_MAGENTA 6 +#define COLOUR_GREY 7 +#define COLOUR_DARK_GREY 8 +#define COLOUR_DARK_RED 9 +#define COLOUR_DARK_GREEN 10 +#define COLOUR_DARK_BLUE 11 +#define COLOUR_DARK_YELLOW 12 +#define COLOUR_DARK_CYAN 13 +#define COLOUR_DARK_MAGENTA 14 +#define COLOUR_WHITE 15 -#define INFO_COLOUR COLOUR_CYAN -#define EXT_COLOUR COLOUR_DARK_GREEN -#define BG_COLOUR COLOUR_BLACK -#define ERROR_COLOUR COLOUR_DARK_RED -#define MODE_COLOUR COLOUR_YELLOW +#define INFO_COLOUR COLOUR_CYAN +#define EXT_COLOUR COLOUR_DARK_GREEN +#define BG_COLOUR COLOUR_BLACK +#define ERROR_COLOUR COLOUR_DARK_RED +#define MODE_COLOUR COLOUR_YELLOW // MODE_FONT_SIZE should be equal or larger than STATUS_FONT_SIZE #define MODE_FONT_SIZE Layout[m_screenLayout].mode_font_size @@ -107,6 +117,7 @@ m_duplex(duplex), m_refresh(false), m_refreshTimer(1000U, 0U, REFRESH_PERIOD), m_lineBuf(NULL), +m_temp(), m_screenLayout(screenLayout) { assert(serial != NULL); @@ -127,12 +138,6 @@ bool CTFTSurenoo::open() } m_lineBuf = new char[statusLineOffset(STATUS_LINES)]; - if (m_lineBuf == NULL) { - LogError("Cannot allocate line buffer"); - m_serial->close(); - delete m_serial; - return false; - } lcdReset(); clearScreen(BG_COLOUR); @@ -477,7 +482,7 @@ void CTFTSurenoo::refreshDisplay(void) // clear display ::snprintf(m_temp, sizeof(m_temp), "BOXF(%d,%d,%d,%d,%d);", 0, 0, X_WIDTH - 1, Y_WIDTH - 1, BG_COLOUR); - m_serial->write((unsigned char*)m_temp, ::strlen(m_temp)); + m_serial->write((unsigned char*)m_temp, (unsigned int)::strlen(m_temp)); // mode line ::snprintf(m_temp, sizeof(m_temp), "DCV%d(%d,%d,'%s',%d);", diff --git a/UDPSocket.cpp b/UDPSocket.cpp index c28c039..6697670 100644 --- a/UDPSocket.cpp +++ b/UDPSocket.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2016,2020,2024 by Jonathan Naylor G4KLX + * Copyright (C) 2006-2016,2020,2024,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 @@ -119,7 +119,7 @@ bool CUDPSocket::match(const sockaddr_storage& addr1, const sockaddr_storage& ad if (addr1.ss_family != addr2.ss_family) return false; - if (type == IMT_ADDRESS_AND_PORT) { + if (type == IPMATCHTYPE::IMT_ADDREAND_PORT) { switch (addr1.ss_family) { case AF_INET: struct sockaddr_in *in_1, *in_2; @@ -134,7 +134,7 @@ bool CUDPSocket::match(const sockaddr_storage& addr1, const sockaddr_storage& ad default: return false; } - } else if (type == IMT_ADDRESS_ONLY) { + } else if (type == IPMATCHTYPE::IMT_ADDREONLY) { switch (addr1.ss_family) { case AF_INET: struct sockaddr_in *in_1, *in_2; diff --git a/UDPSocket.h b/UDPSocket.h index 07bf274..fc0c422 100644 --- a/UDPSocket.h +++ b/UDPSocket.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2011,2013,2015,2016,2020,2024 by Jonathan Naylor G4KLX + * Copyright (C) 2009-2011,2013,2015,2016,2020,2024.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 @@ -36,9 +36,9 @@ #include #endif -enum IPMATCHTYPE { - IMT_ADDRESS_AND_PORT, - IMT_ADDRESS_ONLY +enum class IPMATCHTYPE { + IMT_ADDREAND_PORT, + IMT_ADDREONLY }; class CUDPSocket { @@ -61,7 +61,7 @@ public: static int lookup(const std::string& hostName, unsigned short port, sockaddr_storage& address, unsigned int& addressLength); static int lookup(const std::string& hostName, unsigned short port, sockaddr_storage& address, unsigned int& addressLength, struct addrinfo& hints); - static bool match(const sockaddr_storage& addr1, const sockaddr_storage& addr2, IPMATCHTYPE type = IMT_ADDRESS_AND_PORT); + static bool match(const sockaddr_storage& addr1, const sockaddr_storage& addr2, IPMATCHTYPE type = IPMATCHTYPE::IMT_ADDREAND_PORT); static bool isNone(const sockaddr_storage& addr); diff --git a/Version.h b/Version.h index bb8d3e3..382c3a4 100644 --- a/Version.h +++ b/Version.h @@ -19,6 +19,6 @@ #if !defined(VERSION_H) #define VERSION_H -const char* VERSION = "20250312"; +const char* VERSION = "20250313"; #endif diff --git a/YSFControl.cpp b/YSFControl.cpp index 6467a92..56773c0 100644 --- a/YSFControl.cpp +++ b/YSFControl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2021 Jonathan Naylor, G4KLX + * Copyright (C) 2015-2021,2025 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 @@ -33,8 +33,8 @@ m_duplex(duplex), m_lowDeviation(lowDeviation), m_remoteGateway(remoteGateway), m_queue(5000U, "YSF Control"), -m_rfState(RS_RF_LISTENING), -m_netState(RS_NET_IDLE), +m_rfState(RPT_RF_STATE::LISTENING), +m_netState(RPT_NET_STATE::IDLE), m_rfTimeoutTimer(1000U, timeout), m_netTimeoutTimer(1000U, timeout), m_packetTimer(1000U, 0U, 200U), @@ -107,7 +107,7 @@ bool CYSFControl::writeModem(unsigned char *data, unsigned int len) unsigned char type = data[0U]; - if (type == TAG_LOST && m_rfState == RS_RF_AUDIO) { + if ((type == TAG_LOST) && (m_rfState == RPT_RF_STATE::AUDIO)) { if (m_rssi != 0U) LogMessage("YSF, transmission lost from %10.10s to %10.10s, %.1f seconds, BER: %.1f%%, RSSI: -%u/-%u/-%u dBm", m_rfSource, m_rfDest, float(m_rfFrames) / 10.0F, float(m_rfErrs * 100U) / float(m_rfBits), m_minRSSI, m_maxRSSI, m_aveRSSI / m_rssiCount); else @@ -116,17 +116,17 @@ bool CYSFControl::writeModem(unsigned char *data, unsigned int len) return false; } - if (type == TAG_LOST && m_rfState == RS_RF_REJECTED) { + if ((type == TAG_LOST) && (m_rfState == RPT_RF_STATE::REJECTED)) { m_rfPayload.reset(); m_rfSource = NULL; m_rfDest = NULL; - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; return false; } if (type == TAG_LOST) { m_rfPayload.reset(); - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; return false; } @@ -221,7 +221,7 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data) unsigned char dgid = m_lastFICH.getDGId(); if (valid && fi == YSF_FI_HEADER) { - if (m_rfState == RS_RF_LISTENING) { + if (m_rfState == RPT_RF_STATE::LISTENING) { bool valid = m_rfPayload.processHeaderData(data + 2U); if (!valid) return false; @@ -232,7 +232,7 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data) bool ret = checkCallsign(m_rfSource); if (!ret) { LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid); - m_rfState = RS_RF_REJECTED; + m_rfState = RPT_RF_STATE::REJECTED; return true; } } @@ -247,7 +247,7 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data) m_rfErrs = 0U; m_rfBits = 1U; m_rfTimeoutTimer.start(); - m_rfState = RS_RF_AUDIO; + m_rfState = RPT_RF_STATE::AUDIO; m_minRSSI = m_rssi; m_maxRSSI = m_rssi; @@ -286,13 +286,13 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data) return true; } - } else if (valid && fi == YSF_FI_TERMINATOR) { - if (m_rfState == RS_RF_REJECTED) { + } else if (valid && (fi == YSF_FI_TERMINATOR)) { + if (m_rfState == RPT_RF_STATE::REJECTED) { m_rfPayload.reset(); m_rfSource = NULL; m_rfDest = NULL; - m_rfState = RS_RF_LISTENING; - } else if (m_rfState == RS_RF_AUDIO) { + m_rfState = RPT_RF_STATE::LISTENING; + } else if (m_rfState == RPT_RF_STATE::AUDIO) { m_rfPayload.processHeaderData(data + 2U); CSync::addYSFSync(data + 2U); @@ -325,7 +325,7 @@ bool CYSFControl::processVWData(bool valid, unsigned char *data) writeEndRF(); } } else { - if (m_rfState == RS_RF_AUDIO) { + if (m_rfState == RPT_RF_STATE::AUDIO) { // If valid is false, update the m_lastFICH for this transmission if (!valid) { // XXX Check these values @@ -390,7 +390,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data) unsigned char dgid = m_lastFICH.getDGId(); if (valid && fi == YSF_FI_HEADER) { - if (m_rfState == RS_RF_LISTENING) { + if (m_rfState == RPT_RF_STATE::LISTENING) { bool valid = m_rfPayload.processHeaderData(data + 2U); if (!valid) return false; @@ -401,7 +401,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data) bool ret = checkCallsign(m_rfSource); if (!ret) { LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid); - m_rfState = RS_RF_REJECTED; + m_rfState = RPT_RF_STATE::REJECTED; return true; } } @@ -416,7 +416,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data) m_rfErrs = 0U; m_rfBits = 1U; m_rfTimeoutTimer.start(); - m_rfState = RS_RF_AUDIO; + m_rfState = RPT_RF_STATE::AUDIO; m_minRSSI = m_rssi; m_maxRSSI = m_rssi; @@ -455,13 +455,13 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data) return true; } - } else if (valid && fi == YSF_FI_TERMINATOR) { - if (m_rfState == RS_RF_REJECTED) { + } else if (valid && (fi == YSF_FI_TERMINATOR)) { + if (m_rfState == RPT_RF_STATE::REJECTED) { m_rfPayload.reset(); m_rfSource = NULL; m_rfDest = NULL; - m_rfState = RS_RF_LISTENING; - } else if (m_rfState == RS_RF_AUDIO) { + m_rfState = RPT_RF_STATE::LISTENING; + } else if (m_rfState == RPT_RF_STATE::AUDIO) { m_rfPayload.processHeaderData(data + 2U); CSync::addYSFSync(data + 2U); @@ -494,7 +494,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data) writeEndRF(); } } else { - if (m_rfState == RS_RF_AUDIO) { + if (m_rfState == RPT_RF_STATE::AUDIO) { // If valid is false, update the m_lastFICH for this transmission if (!valid) { unsigned char ft = m_lastFICH.getFT(); @@ -560,7 +560,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data) m_display->writeFusionRSSI(m_rssi); return true; - } else if (valid && m_rfState == RS_RF_LISTENING) { + } else if (valid && (m_rfState == RPT_RF_STATE::LISTENING)) { // Only use clean frames for late entry. unsigned char fn = m_lastFICH.getFN(); unsigned char dt = m_lastFICH.getDT(); @@ -597,7 +597,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data) bool ret = checkCallsign(m_rfSource); if (!ret) { LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid); - m_rfState = RS_RF_REJECTED; + m_rfState = RPT_RF_STATE::REJECTED; return true; } } @@ -606,7 +606,7 @@ bool CYSFControl::processDNData(bool valid, unsigned char *data) m_rfErrs = 0U; m_rfBits = 1U; m_rfTimeoutTimer.start(); - m_rfState = RS_RF_AUDIO; + m_rfState = RPT_RF_STATE::AUDIO; m_minRSSI = m_rssi; m_maxRSSI = m_rssi; @@ -692,7 +692,7 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data) unsigned char dgid = m_lastFICH.getDGId(); if (valid && fi == YSF_FI_HEADER) { - if (m_rfState == RS_RF_LISTENING) { + if (m_rfState == RPT_RF_STATE::LISTENING) { valid = m_rfPayload.processHeaderData(data + 2U); if (!valid) return false; @@ -703,7 +703,7 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data) bool ret = checkCallsign(m_rfSource); if (!ret) { LogMessage("YSF, invalid access attempt from %10.10s to DG-ID %u", m_rfSource, dgid); - m_rfState = RS_RF_REJECTED; + m_rfState = RPT_RF_STATE::REJECTED; return true; } } @@ -715,7 +715,7 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data) m_rfDest = m_rfPayload.getDest(); m_rfFrames = 0U; - m_rfState = RS_RF_DATA; + m_rfState = RPT_RF_STATE::DATA; m_minRSSI = m_rssi; m_maxRSSI = m_rssi; @@ -754,12 +754,12 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data) return true; } } else if (valid && fi == YSF_FI_TERMINATOR) { - if (m_rfState == RS_RF_REJECTED) { + if (m_rfState == RPT_RF_STATE::REJECTED) { m_rfPayload.reset(); m_rfSource = NULL; m_rfDest = NULL; - m_rfState = RS_RF_LISTENING; - } else if (m_rfState == RS_RF_DATA) { + m_rfState = RPT_RF_STATE::LISTENING; + } else if (m_rfState == RPT_RF_STATE::DATA) { m_rfPayload.processHeaderData(data + 2U); CSync::addYSFSync(data + 2U); @@ -792,7 +792,7 @@ bool CYSFControl::processFRData(bool valid, unsigned char *data) writeEndRF(); } } else { - if (m_rfState == RS_RF_DATA) { + if (m_rfState == RPT_RF_STATE::DATA) { // If valid is false, update the m_lastFICH for this transmission if (!valid) { unsigned char ft = m_lastFICH.getFT(); @@ -857,7 +857,7 @@ unsigned int CYSFControl::readModem(unsigned char* data) void CYSFControl::writeEndRF() { - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; m_rfTimeoutTimer.stop(); m_rfPayload.reset(); @@ -866,7 +866,7 @@ void CYSFControl::writeEndRF() m_rfSource = NULL; m_rfDest = NULL; - if (m_netState == RS_NET_IDLE) { + if (m_netState == RPT_NET_STATE::IDLE) { m_display->clearFusion(); if (m_network != NULL) @@ -880,7 +880,7 @@ void CYSFControl::writeEndRF() void CYSFControl::writeEndNet() { - m_netState = RS_NET_IDLE; + m_netState = RPT_NET_STATE::IDLE; m_netTimeoutTimer.stop(); m_networkWatchdog.stop(); @@ -904,7 +904,7 @@ void CYSFControl::writeNetwork() if (!m_enabled) return; - if (m_rfState != RS_RF_LISTENING && m_netState == RS_NET_IDLE) + if ((m_rfState != RPT_RF_STATE::LISTENING) && (m_netState == RPT_NET_STATE::IDLE)) return; m_networkWatchdog.start(); @@ -937,7 +937,7 @@ void CYSFControl::writeNetwork() m_netPayload.reset(); m_packetTimer.start(); m_elapsed.start(); - m_netState = RS_NET_AUDIO; + m_netState = RPT_NET_STATE::AUDIO; m_netFrames = 0U; m_netLost = 0U; m_netErrs = 0U; @@ -1060,7 +1060,7 @@ void CYSFControl::clock(unsigned int ms) m_rfTimeoutTimer.clock(ms); m_netTimeoutTimer.clock(ms); - if (m_netState == RS_NET_AUDIO) { + if (m_netState == RPT_NET_STATE::AUDIO) { m_networkWatchdog.clock(ms); if (m_networkWatchdog.hasExpired()) { @@ -1074,7 +1074,7 @@ void CYSFControl::writeQueueRF(const unsigned char *data) { assert(data != NULL); - if (m_netState != RS_NET_IDLE) + if (m_netState != RPT_NET_STATE::IDLE) return; if (m_rfTimeoutTimer.isRunning() && m_rfTimeoutTimer.hasExpired()) @@ -1197,7 +1197,7 @@ void CYSFControl::processNetCallsigns(const unsigned char* data, unsigned char d bool CYSFControl::isBusy() const { - return m_rfState != RS_RF_LISTENING || m_netState != RS_NET_IDLE; + return (m_rfState != RPT_RF_STATE::LISTENING) || (m_netState != RPT_NET_STATE::IDLE); } void CYSFControl::enable(bool enabled) @@ -1206,7 +1206,7 @@ void CYSFControl::enable(bool enabled) m_queue.clear(); // Reset the RF section - m_rfState = RS_RF_LISTENING; + m_rfState = RPT_RF_STATE::LISTENING; m_rfTimeoutTimer.stop(); m_rfPayload.reset(); @@ -1216,7 +1216,7 @@ void CYSFControl::enable(bool enabled) m_rfDest = NULL; // Reset the networking section - m_netState = RS_NET_IDLE; + m_netState = RPT_NET_STATE::IDLE; m_netTimeoutTimer.stop(); m_networkWatchdog.stop();