Skip to content

Commit

Permalink
Add OVCM support.
Browse files Browse the repository at this point in the history
  • Loading branch information
g4klx committed Oct 11, 2019
1 parent 16a8bfd commit 6bababe
Show file tree
Hide file tree
Showing 10 changed files with 45 additions and 8 deletions.
8 changes: 8 additions & 0 deletions Conf.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ m_dmrSlot2TGWhiteList(),
m_dmrCallHang(10U),
m_dmrTXHang(4U),
m_dmrModeHang(10U),
m_dmrOVCM(true),
m_fusionEnabled(false),
m_fusionLowDeviation(false),
m_fusionRemoteGateway(false),
Expand Down Expand Up @@ -590,6 +591,8 @@ bool CConf::read()
m_dmrCallHang = (unsigned int)::atoi(value);
else if (::strcmp(key, "ModeHang") == 0)
m_dmrModeHang = (unsigned int)::atoi(value);
else if (::strcmp(key, "OVCM") == 0)
m_dmrOVCM = ::atoi(value) == 1;
} else if (section == SECTION_FUSION) {
if (::strcmp(key, "Enable") == 0)
m_fusionEnabled = ::atoi(value) == 1;
Expand Down Expand Up @@ -1251,6 +1254,11 @@ unsigned int CConf::getDMRModeHang() const
return m_dmrModeHang;
}

bool CConf::getDMROVCM() const
{
return m_dmrOVCM;
}

bool CConf::getFusionEnabled() const
{
return m_fusionEnabled;
Expand Down
2 changes: 2 additions & 0 deletions Conf.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ class CConf
unsigned int getDMRCallHang() const;
unsigned int getDMRTXHang() const;
unsigned int getDMRModeHang() const;
bool getDMROVCM() const;

// The System Fusion section
bool getFusionEnabled() const;
Expand Down Expand Up @@ -373,6 +374,7 @@ class CConf
unsigned int m_dmrCallHang;
unsigned int m_dmrTXHang;
unsigned int m_dmrModeHang;
bool m_dmrOVCM;

bool m_fusionEnabled;
bool m_fusionLowDeviation;
Expand Down
4 changes: 2 additions & 2 deletions DMRControl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
#include <cassert>
#include <algorithm>

CDMRControl::CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, bool embeddedLCOnly, bool dumpTAData, const std::vector<unsigned int>& prefixes, const std::vector<unsigned int>& blacklist, const std::vector<unsigned int>& whitelist, const std::vector<unsigned int>& slot1TGWhitelist, const std::vector<unsigned int>& slot2TGWhitelist, unsigned int timeout, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssi, unsigned int jitter) :
CDMRControl::CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, bool embeddedLCOnly, bool dumpTAData, const std::vector<unsigned int>& prefixes, const std::vector<unsigned int>& blacklist, const std::vector<unsigned int>& whitelist, const std::vector<unsigned int>& slot1TGWhitelist, const std::vector<unsigned int>& slot2TGWhitelist, unsigned int timeout, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssi, unsigned int jitter, bool ovcm) :
m_colorCode(colorCode),
m_modem(modem),
m_network(network),
Expand All @@ -38,7 +38,7 @@ m_lookup(lookup)
// Load black and white lists to DMRAccessControl
CDMRAccessControl::init(blacklist, whitelist, slot1TGWhitelist, slot2TGWhitelist, selfOnly, prefixes, id);

CDMRSlot::init(colorCode, embeddedLCOnly, dumpTAData, callHang, modem, network, display, duplex, m_lookup, rssi, jitter);
CDMRSlot::init(colorCode, embeddedLCOnly, dumpTAData, callHang, modem, network, display, duplex, m_lookup, rssi, jitter, ovcm);
}

CDMRControl::~CDMRControl()
Expand Down
2 changes: 1 addition & 1 deletion DMRControl.h
Original file line number Diff line number Diff line change
Expand Up @@ -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<unsigned int>& prefixes, const std::vector<unsigned int>& blacklist, const std::vector<unsigned int>& whitelist, const std::vector<unsigned int>& slot1TGWhitelist, const std::vector<unsigned int>& slot2TGWhitelist, unsigned int timeout, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssi, unsigned int jitter);
CDMRControl(unsigned int id, unsigned int colorCode, unsigned int callHang, bool selfOnly, bool embeddedLCOnly, bool dumpTAData, const std::vector<unsigned int>& prefixes, const std::vector<unsigned int>& blacklist, const std::vector<unsigned int>& whitelist, const std::vector<unsigned int>& slot1TGWhitelist, const std::vector<unsigned int>& slot2TGWhitelist, unsigned int timeout, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssi, unsigned int jitter, bool ovcm);
~CDMRControl();

bool processWakeup(const unsigned char* data);
Expand Down
15 changes: 14 additions & 1 deletion DMRLC.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2015,2016 by Jonathan Naylor G4KLX
* Copyright (C) 2015,2016,2019 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
Expand Down Expand Up @@ -184,6 +184,19 @@ void CDMRLC::setFID(unsigned char fid)
m_FID = fid;
}

bool CDMRLC::getOVCM() const
{
return (m_options & 0x20U) == 0x20U;
}

void CDMRLC::setOVCM(bool ovcm)
{
if (ovcm)
m_options |= 0x20U;
else
m_options &= 0xDFU;
}

unsigned int CDMRLC::getSrcId() const
{
return m_srcId;
Expand Down
5 changes: 4 additions & 1 deletion DMRLC.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2015,2016 by Jonathan Naylor G4KLX
* Copyright (C) 2015,2016,2019 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
Expand Down Expand Up @@ -39,6 +39,9 @@ class CDMRLC
FLCO getFLCO() const;
void setFLCO(FLCO flco);

bool getOVCM() const;
void setOVCM(bool ovcm);

unsigned char getFID() const;
void setFID(unsigned char fid);

Expand Down
9 changes: 8 additions & 1 deletion DMRSlot.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ CDisplay* CDMRSlot::m_display = NULL;
bool CDMRSlot::m_duplex = true;
CDMRLookup* CDMRSlot::m_lookup = NULL;
unsigned int CDMRSlot::m_hangCount = 3U * 17U;
bool CDMRSlot::m_ovcm = true;

CRSSIInterpolator* CDMRSlot::m_rssiMapper = NULL;

Expand Down Expand Up @@ -232,6 +233,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
return false;
}

lc->setOVCM(m_ovcm);
m_rfLC = lc;

// The standby LC data
Expand Down Expand Up @@ -784,6 +786,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
return false;
}

lc->setOVCM(m_ovcm);
m_rfLC = lc;

// The standby LC data
Expand Down Expand Up @@ -1039,6 +1042,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
dmrData.getSrcId(), dmrData.getFLCO() == FLCO_GROUP ? "TG" : "", dmrData.getDstId(),
srcId, flco == FLCO_GROUP ? "TG" : "", dstId);

lc->setOVCM(m_ovcm);
m_netLC = lc;

// The standby LC data
Expand Down Expand Up @@ -1112,6 +1116,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
unsigned int dstId = lc->getDstId();
unsigned int srcId = lc->getSrcId();

lc->setOVCM(m_ovcm);
m_netLC = lc;

m_lastFrameValid = false;
Expand Down Expand Up @@ -1297,6 +1302,7 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
unsigned int dstId = lc->getDstId();
unsigned int srcId = lc->getSrcId();

lc->setOVCM(m_ovcm);
m_netLC = lc;

// The standby LC data
Expand Down Expand Up @@ -1869,7 +1875,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, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssiMapper, unsigned int jitter)
void CDMRSlot::init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData, unsigned int callHang, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssiMapper, unsigned int jitter, bool ovcm)
{
assert(modem != NULL);
assert(display != NULL);
Expand All @@ -1885,6 +1891,7 @@ void CDMRSlot::init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData
m_duplex = duplex;
m_lookup = lookup;
m_hangCount = callHang * 17U;
m_ovcm = ovcm;

m_rssiMapper = rssiMapper;

Expand Down
3 changes: 2 additions & 1 deletion DMRSlot.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class CDMRSlot {

void enable(bool enabled);

static void init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData, unsigned int callHang, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssiMapper, unsigned int jitter);
static void init(unsigned int colorCode, bool embeddedLCOnly, bool dumpTAData, unsigned int callHang, CModem* modem, CDMRNetwork* network, CDisplay* display, bool duplex, CDMRLookup* lookup, CRSSIInterpolator* rssiMapper, unsigned int jitter, bool ovcm);

private:
unsigned int m_slotNo;
Expand Down Expand Up @@ -123,6 +123,7 @@ class CDMRSlot {
static bool m_duplex;
static CDMRLookup* m_lookup;
static unsigned int m_hangCount;
static bool m_ovcm;

static CRSSIInterpolator* m_rssiMapper;

Expand Down
1 change: 1 addition & 0 deletions MMDVM.ini
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ DumpTAData=1
CallHang=3
TXHang=4
# ModeHang=10
OVCM=1

[System Fusion]
Enable=1
Expand Down
4 changes: 3 additions & 1 deletion MMDVMHost.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -444,6 +444,7 @@ int CMMDVMHost::run()
unsigned int jitter = m_conf.getDMRNetworkJitter();
m_dmrRFModeHang = m_conf.getDMRModeHang();
bool dmrBeacons = m_conf.getDMRBeacons();
bool ovcm = m_conf.getDMROVCM();

if (txHang > m_dmrRFModeHang)
txHang = m_dmrRFModeHang;
Expand Down Expand Up @@ -476,6 +477,7 @@ int CMMDVMHost::run()
LogInfo(" Call Hang: %us", callHang);
LogInfo(" TX Hang: %us", txHang);
LogInfo(" Mode Hang: %us", m_dmrRFModeHang);
LogInfo(" OVCM: %s", ovcm ? "on" : "off");

if (dmrBeacons) {
unsigned int dmrBeaconInterval = m_conf.getDMRBeaconInterval();
Expand All @@ -490,7 +492,7 @@ int CMMDVMHost::run()
dmrBeaconIntervalTimer.start();
}

m_dmr = new CDMRControl(id, colorCode, callHang, selfOnly, embeddedLCOnly, dumpTAData, prefixes, blackList, whiteList, slot1TGWhiteList, slot2TGWhiteList, m_timeout, m_modem, m_dmrNetwork, m_display, m_duplex, m_dmrLookup, rssi, jitter);
m_dmr = new CDMRControl(id, colorCode, callHang, selfOnly, embeddedLCOnly, dumpTAData, prefixes, blackList, whiteList, slot1TGWhiteList, slot2TGWhiteList, m_timeout, m_modem, m_dmrNetwork, m_display, m_duplex, m_dmrLookup, rssi, jitter, ovcm);

m_dmrTXTimer.setTimeout(txHang);
}
Expand Down

0 comments on commit 6bababe

Please sign in to comment.