From b16aaa653c213ea6371ad98805d3af162ab8b664 Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Fri, 18 Jan 2019 15:57:05 +0000 Subject: [PATCH] Add the concept of fixed modes. --- MMDVMHost.cpp | 62 +++++++++++++++++++++++++++++++++++++++++---------- MMDVMHost.h | 1 + 2 files changed, 51 insertions(+), 12 deletions(-) diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index 735ec4f39..40c07b3ab 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -159,7 +159,8 @@ m_cwCallsign(), m_lockFileEnabled(false), m_lockFileName(), m_mobileGPS(NULL), -m_remoteControl(NULL) +m_remoteControl(NULL), +m_fixedMode(false) { } @@ -593,7 +594,26 @@ int CMMDVMHost::run() } } - setMode(MODE_IDLE); + // If only one voice mode is enabled, fix to that mode. + if (m_dstar != NULL && m_dmr == NULL && m_ysf == NULL && m_p25 == NULL && m_nxdn == NULL && m_pocsag == NULL) { + m_fixedMode = true; + setMode(MODE_DSTAR); + } else if (m_dstar == NULL && m_dmr != NULL && m_ysf == NULL && m_p25 == NULL && m_nxdn == NULL && m_pocsag == NULL) { + m_fixedMode = true; + setMode(MODE_DMR); + } else if (m_dstar == NULL && m_dmr == NULL && m_ysf != NULL && m_p25 == NULL && m_nxdn == NULL && m_pocsag == NULL) { + m_fixedMode = true; + setMode(MODE_YSF); + } else if (m_dstar == NULL && m_dmr == NULL && m_ysf == NULL && m_p25 != NULL && m_nxdn == NULL && m_pocsag == NULL) { + m_fixedMode = true; + setMode(MODE_P25); + } else if (m_dstar == NULL && m_dmr == NULL && m_ysf == NULL && m_p25 == NULL && m_nxdn != NULL && m_pocsag == NULL) { + m_fixedMode = true; + setMode(MODE_NXDN); + } else { + m_fixedMode = false; + setMode(MODE_IDLE); + } LogMessage("MMDVMHost-%s is running", VERSION); @@ -767,8 +787,10 @@ int CMMDVMHost::run() if (transparentSocket != NULL && len > 0U) transparentSocket->write(data, len, transparentAddress, transparentPort); - if (m_modeTimer.isRunning() && m_modeTimer.hasExpired()) - setMode(MODE_IDLE); + if (!m_fixedMode) { + if (m_modeTimer.isRunning() && m_modeTimer.hasExpired()) + setMode(MODE_IDLE); + } if (m_dstar != NULL) { ret = m_modem->hasDStarSpace(); @@ -927,7 +949,9 @@ int CMMDVMHost::run() m_display->clock(ms); m_modem->clock(ms); - m_modeTimer.clock(ms); + + if (!m_fixedMode) + m_modeTimer.clock(ms); if (m_dstar != NULL) m_dstar->clock(); @@ -1684,32 +1708,46 @@ void CMMDVMHost::remoteControl() REMOTE_COMMAND command = m_remoteControl->getCommand(); switch(command) { case RCD_MODE_IDLE: - if (m_mode != MODE_IDLE) + if (m_mode != MODE_IDLE) { + m_fixedMode = false; setMode(MODE_IDLE); + } break; case RCD_MODE_LOCKOUT: - if (m_mode != MODE_LOCKOUT) + if (m_mode != MODE_LOCKOUT) { + m_fixedMode = false; setMode(MODE_LOCKOUT); + } break; case RCD_MODE_DSTAR: - if (m_dstar != NULL && m_mode != MODE_DSTAR) + if (m_dstar != NULL && m_mode != MODE_DSTAR) { + m_fixedMode = true; setMode(MODE_DSTAR); + } break; case RCD_MODE_DMR: - if (m_dmr != NULL && m_mode != MODE_DMR) + if (m_dmr != NULL && m_mode != MODE_DMR) { + m_fixedMode = true; setMode(MODE_DMR); + } break; case RCD_MODE_YSF: - if (m_ysf != NULL && m_mode != MODE_YSF) + if (m_ysf != NULL && m_mode != MODE_YSF) { + m_fixedMode = true; setMode(MODE_YSF); + } break; case RCD_MODE_P25: - if (m_p25 != NULL && m_mode != MODE_P25) + if (m_p25 != NULL && m_mode != MODE_P25) { + m_fixedMode = true; setMode(MODE_P25); + } break; case RCD_MODE_NXDN: - if (m_nxdn != NULL && m_mode != MODE_NXDN) + if (m_nxdn != NULL && m_mode != MODE_NXDN) { + m_fixedMode = true; setMode(MODE_NXDN); + } break; default: break; diff --git a/MMDVMHost.h b/MMDVMHost.h index b7d0806de..cc5736ff8 100644 --- a/MMDVMHost.h +++ b/MMDVMHost.h @@ -103,6 +103,7 @@ class CMMDVMHost std::string m_lockFileName; CMobileGPS* m_mobileGPS; CRemoteControl* m_remoteControl; + bool m_fixedMode; void readParams(); bool createModem();