Merge branch 'master' into M17_AX25_FM
This commit is contained in:
commit
46b8ea56d3
10 changed files with 63 additions and 12 deletions
3
Conf.cpp
3
Conf.cpp
|
@ -718,6 +718,9 @@ bool CConf::read()
|
||||||
case 3:
|
case 3:
|
||||||
m_dmrOVCM = DMR_OVCM_ON;
|
m_dmrOVCM = DMR_OVCM_ON;
|
||||||
break;
|
break;
|
||||||
|
case 4:
|
||||||
|
m_dmrOVCM = DMR_OVCM_FORCE_OFF;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
m_dmrOVCM = DMR_OVCM_OFF;
|
m_dmrOVCM = DMR_OVCM_OFF;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2015,2016,2020 by Jonathan Naylor G4KLX
|
* Copyright (C) 2015,2016,2020,2021 by Jonathan Naylor G4KLX
|
||||||
* Copyright (C) 2019 by Patrick Maier DK5MP
|
* Copyright (C) 2019 by Patrick Maier DK5MP
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
@ -189,6 +189,12 @@ void CDMRCSBK::setOVCM(bool ovcm)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CDMRCSBK::clearOVCM()
|
||||||
|
{
|
||||||
|
if (getOVCM())
|
||||||
|
m_data[2U] ^= 0x04U;
|
||||||
|
}
|
||||||
|
|
||||||
bool CDMRCSBK::getGI() const
|
bool CDMRCSBK::getGI() const
|
||||||
{
|
{
|
||||||
return m_GI;
|
return m_GI;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2015,2016,2020 by Jonathan Naylor G4KLX
|
* Copyright (C) 2015,2016,2020,2021 by Jonathan Naylor G4KLX
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -50,6 +50,7 @@ public:
|
||||||
// Set/Get the OVCM bit in the supported CSBKs
|
// Set/Get the OVCM bit in the supported CSBKs
|
||||||
bool getOVCM() const;
|
bool getOVCM() const;
|
||||||
void setOVCM(bool ovcm);
|
void setOVCM(bool ovcm);
|
||||||
|
void clearOVCM();
|
||||||
|
|
||||||
// For BS Dwn Act
|
// For BS Dwn Act
|
||||||
unsigned int getBSId() const;
|
unsigned int getBSId() const;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2015,2016,2019 by Jonathan Naylor G4KLX
|
* Copyright (C) 2015,2016,2019,2021 by Jonathan Naylor G4KLX
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -195,6 +195,12 @@ void CDMRLC::setOVCM(bool ovcm)
|
||||||
m_options |= 0x04U;
|
m_options |= 0x04U;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CDMRLC::clearOVCM()
|
||||||
|
{
|
||||||
|
if (getOVCM())
|
||||||
|
m_options ^= 0x04U;
|
||||||
|
}
|
||||||
|
|
||||||
unsigned int CDMRLC::getSrcId() const
|
unsigned int CDMRLC::getSrcId() const
|
||||||
{
|
{
|
||||||
return m_srcId;
|
return m_srcId;
|
||||||
|
|
3
DMRLC.h
3
DMRLC.h
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2015,2016,2019 by Jonathan Naylor G4KLX
|
* Copyright (C) 2015,2016,2019,2021 by Jonathan Naylor G4KLX
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -41,6 +41,7 @@ public:
|
||||||
|
|
||||||
bool getOVCM() const;
|
bool getOVCM() const;
|
||||||
void setOVCM(bool ovcm);
|
void setOVCM(bool ovcm);
|
||||||
|
void clearOVCM();
|
||||||
|
|
||||||
unsigned char getFID() const;
|
unsigned char getFID() const;
|
||||||
void setFID(unsigned char fid);
|
void setFID(unsigned char fid);
|
||||||
|
|
39
DMRSlot.cpp
39
DMRSlot.cpp
|
@ -236,6 +236,11 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
||||||
lc->setOVCM(m_ovcm == DMR_OVCM_TX_ON || m_ovcm == DMR_OVCM_ON);
|
lc->setOVCM(m_ovcm == DMR_OVCM_TX_ON || m_ovcm == DMR_OVCM_ON);
|
||||||
m_rfLC = lc;
|
m_rfLC = lc;
|
||||||
|
|
||||||
|
if (m_ovcm == DMR_OVCM_FORCE_OFF) {
|
||||||
|
lc->clearOVCM();
|
||||||
|
m_rfLC = lc;
|
||||||
|
}
|
||||||
|
|
||||||
// The standby LC data
|
// The standby LC data
|
||||||
m_rfEmbeddedLC.setLC(*m_rfLC);
|
m_rfEmbeddedLC.setLC(*m_rfLC);
|
||||||
m_rfEmbeddedData[0U].setLC(*m_rfLC);
|
m_rfEmbeddedData[0U].setLC(*m_rfLC);
|
||||||
|
@ -439,6 +444,9 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
||||||
// set the OVCM bit for the supported csbk
|
// set the OVCM bit for the supported csbk
|
||||||
csbk.setOVCM(m_ovcm == DMR_OVCM_TX_ON || m_ovcm == DMR_OVCM_ON);
|
csbk.setOVCM(m_ovcm == DMR_OVCM_TX_ON || m_ovcm == DMR_OVCM_ON);
|
||||||
|
|
||||||
|
if (m_ovcm == DMR_OVCM_FORCE_OFF)
|
||||||
|
csbk.clearOVCM();
|
||||||
|
|
||||||
bool gi = csbk.getGI();
|
bool gi = csbk.getGI();
|
||||||
unsigned int srcId = csbk.getSrcId();
|
unsigned int srcId = csbk.getSrcId();
|
||||||
unsigned int dstId = csbk.getDstId();
|
unsigned int dstId = csbk.getDstId();
|
||||||
|
@ -656,7 +664,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
||||||
if (!(m_rfTalkerId & TALKER_ID_HEADER)) {
|
if (!(m_rfTalkerId & TALKER_ID_HEADER)) {
|
||||||
if (m_rfTalkerId == TALKER_ID_NONE)
|
if (m_rfTalkerId == TALKER_ID_NONE)
|
||||||
m_rfTalkerAlias.reset();
|
m_rfTalkerAlias.reset();
|
||||||
m_rfTalkerAlias.add(0, data, 7U);
|
m_rfTalkerAlias.add(0, data + 2U, 7U);
|
||||||
m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "R");
|
m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "R");
|
||||||
|
|
||||||
if (m_dumpTAData) {
|
if (m_dumpTAData) {
|
||||||
|
@ -675,7 +683,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
||||||
if (!(m_rfTalkerId & TALKER_ID_BLOCK1)) {
|
if (!(m_rfTalkerId & TALKER_ID_BLOCK1)) {
|
||||||
if (m_rfTalkerId == TALKER_ID_NONE)
|
if (m_rfTalkerId == TALKER_ID_NONE)
|
||||||
m_rfTalkerAlias.reset();
|
m_rfTalkerAlias.reset();
|
||||||
m_rfTalkerAlias.add(1, data, 7U);
|
m_rfTalkerAlias.add(1, data + 2U, 7U);
|
||||||
m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "R");
|
m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "R");
|
||||||
|
|
||||||
if (m_dumpTAData) {
|
if (m_dumpTAData) {
|
||||||
|
@ -694,7 +702,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
||||||
if (!(m_rfTalkerId & TALKER_ID_BLOCK2)) {
|
if (!(m_rfTalkerId & TALKER_ID_BLOCK2)) {
|
||||||
if (m_rfTalkerId == TALKER_ID_NONE)
|
if (m_rfTalkerId == TALKER_ID_NONE)
|
||||||
m_rfTalkerAlias.reset();
|
m_rfTalkerAlias.reset();
|
||||||
m_rfTalkerAlias.add(2, data, 7U);
|
m_rfTalkerAlias.add(2, data + 2U, 7U);
|
||||||
m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "R");
|
m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "R");
|
||||||
|
|
||||||
if (m_dumpTAData) {
|
if (m_dumpTAData) {
|
||||||
|
@ -713,7 +721,7 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
||||||
if (!(m_rfTalkerId & TALKER_ID_BLOCK3)) {
|
if (!(m_rfTalkerId & TALKER_ID_BLOCK3)) {
|
||||||
if (m_rfTalkerId == TALKER_ID_NONE)
|
if (m_rfTalkerId == TALKER_ID_NONE)
|
||||||
m_rfTalkerAlias.reset();
|
m_rfTalkerAlias.reset();
|
||||||
m_rfTalkerAlias.add(3, data, 7U);
|
m_rfTalkerAlias.add(3, data + 2U, 7U);
|
||||||
m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "R");
|
m_display->writeDMRTA(m_slotNo, (unsigned char*)m_rfTalkerAlias.get(), "R");
|
||||||
|
|
||||||
if (m_dumpTAData) {
|
if (m_dumpTAData) {
|
||||||
|
@ -797,6 +805,11 @@ bool CDMRSlot::writeModem(unsigned char *data, unsigned int len)
|
||||||
lc->setOVCM(m_ovcm == DMR_OVCM_TX_ON || m_ovcm == DMR_OVCM_ON);
|
lc->setOVCM(m_ovcm == DMR_OVCM_TX_ON || m_ovcm == DMR_OVCM_ON);
|
||||||
m_rfLC = lc;
|
m_rfLC = lc;
|
||||||
|
|
||||||
|
if (m_ovcm == DMR_OVCM_FORCE_OFF) {
|
||||||
|
lc->clearOVCM();
|
||||||
|
m_rfLC = lc;
|
||||||
|
}
|
||||||
|
|
||||||
// The standby LC data
|
// The standby LC data
|
||||||
m_rfEmbeddedLC.setLC(*m_rfLC);
|
m_rfEmbeddedLC.setLC(*m_rfLC);
|
||||||
m_rfEmbeddedData[0U].setLC(*m_rfLC);
|
m_rfEmbeddedData[0U].setLC(*m_rfLC);
|
||||||
|
@ -1053,6 +1066,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
lc->setOVCM(m_ovcm == DMR_OVCM_RX_ON || m_ovcm == DMR_OVCM_ON);
|
lc->setOVCM(m_ovcm == DMR_OVCM_RX_ON || m_ovcm == DMR_OVCM_ON);
|
||||||
m_netLC = lc;
|
m_netLC = lc;
|
||||||
|
|
||||||
|
if (m_ovcm == DMR_OVCM_FORCE_OFF) {
|
||||||
|
lc->clearOVCM();
|
||||||
|
m_netLC = lc;
|
||||||
|
}
|
||||||
|
|
||||||
// The standby LC data
|
// The standby LC data
|
||||||
m_netEmbeddedLC.setLC(*m_netLC);
|
m_netEmbeddedLC.setLC(*m_netLC);
|
||||||
m_netEmbeddedData[0U].setLC(*m_netLC);
|
m_netEmbeddedData[0U].setLC(*m_netLC);
|
||||||
|
@ -1128,6 +1146,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
lc->setOVCM(m_ovcm == DMR_OVCM_RX_ON || m_ovcm == DMR_OVCM_ON);
|
lc->setOVCM(m_ovcm == DMR_OVCM_RX_ON || m_ovcm == DMR_OVCM_ON);
|
||||||
m_netLC = lc;
|
m_netLC = lc;
|
||||||
|
|
||||||
|
if (m_ovcm == DMR_OVCM_FORCE_OFF) {
|
||||||
|
lc->clearOVCM();
|
||||||
|
m_netLC = lc;
|
||||||
|
}
|
||||||
|
|
||||||
m_lastFrameValid = false;
|
m_lastFrameValid = false;
|
||||||
|
|
||||||
m_netTimeoutTimer.start();
|
m_netTimeoutTimer.start();
|
||||||
|
@ -1315,6 +1338,11 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
lc->setOVCM(m_ovcm == DMR_OVCM_RX_ON || m_ovcm == DMR_OVCM_ON);
|
lc->setOVCM(m_ovcm == DMR_OVCM_RX_ON || m_ovcm == DMR_OVCM_ON);
|
||||||
m_netLC = lc;
|
m_netLC = lc;
|
||||||
|
|
||||||
|
if (m_ovcm == DMR_OVCM_FORCE_OFF) {
|
||||||
|
lc->clearOVCM();
|
||||||
|
m_netLC = lc;
|
||||||
|
}
|
||||||
|
|
||||||
// The standby LC data
|
// The standby LC data
|
||||||
m_netEmbeddedLC.setLC(*m_netLC);
|
m_netEmbeddedLC.setLC(*m_netLC);
|
||||||
m_netEmbeddedData[0U].setLC(*m_netLC);
|
m_netEmbeddedData[0U].setLC(*m_netLC);
|
||||||
|
@ -1586,6 +1614,9 @@ void CDMRSlot::writeNetwork(const CDMRData& dmrData)
|
||||||
// set the OVCM bit for the supported csbk
|
// set the OVCM bit for the supported csbk
|
||||||
csbk.setOVCM(m_ovcm == DMR_OVCM_RX_ON || m_ovcm == DMR_OVCM_ON);
|
csbk.setOVCM(m_ovcm == DMR_OVCM_RX_ON || m_ovcm == DMR_OVCM_ON);
|
||||||
|
|
||||||
|
if (m_ovcm == DMR_OVCM_FORCE_OFF)
|
||||||
|
csbk.clearOVCM();
|
||||||
|
|
||||||
bool gi = csbk.getGI();
|
bool gi = csbk.getGI();
|
||||||
unsigned int srcId = csbk.getSrcId();
|
unsigned int srcId = csbk.getSrcId();
|
||||||
unsigned int dstId = csbk.getDstId();
|
unsigned int dstId = csbk.getDstId();
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2015,2016,2017,2018,2020 by Jonathan Naylor G4KLX
|
* Copyright (C) 2015,2016,2017,2018,2020,2021 by Jonathan Naylor G4KLX
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -82,7 +82,8 @@ enum DMR_OVCM_TYPES {
|
||||||
DMR_OVCM_OFF,
|
DMR_OVCM_OFF,
|
||||||
DMR_OVCM_RX_ON,
|
DMR_OVCM_RX_ON,
|
||||||
DMR_OVCM_TX_ON,
|
DMR_OVCM_TX_ON,
|
||||||
DMR_OVCM_ON
|
DMR_OVCM_ON,
|
||||||
|
DMR_OVCM_FORCE_OFF
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -119,7 +119,7 @@ DumpTAData=1
|
||||||
CallHang=3
|
CallHang=3
|
||||||
TXHang=4
|
TXHang=4
|
||||||
# ModeHang=10
|
# ModeHang=10
|
||||||
# OVCM Values, 0=off, 1=rx_on, 2=tx_on, 3=both_on
|
# OVCM Values, 0=off, 1=rx_on, 2=tx_on, 3=both_on, 4=force off
|
||||||
# OVCM=0
|
# OVCM=0
|
||||||
|
|
||||||
[System Fusion]
|
[System Fusion]
|
||||||
|
|
|
@ -527,6 +527,8 @@ int CMMDVMHost::run()
|
||||||
LogInfo(" OVCM: on(tx only)");
|
LogInfo(" OVCM: on(tx only)");
|
||||||
else if (ovcm == DMR_OVCM_ON)
|
else if (ovcm == DMR_OVCM_ON)
|
||||||
LogInfo(" OVCM: on");
|
LogInfo(" OVCM: on");
|
||||||
|
else if (ovcm == DMR_OVCM_FORCE_OFF)
|
||||||
|
LogInfo(" OVCM: off (forced)");
|
||||||
|
|
||||||
switch (dmrBeacons) {
|
switch (dmrBeacons) {
|
||||||
case DMR_BEACONS_NETWORK: {
|
case DMR_BEACONS_NETWORK: {
|
||||||
|
|
|
@ -19,6 +19,6 @@
|
||||||
#if !defined(VERSION_H)
|
#if !defined(VERSION_H)
|
||||||
#define VERSION_H
|
#define VERSION_H
|
||||||
|
|
||||||
const char* VERSION = "20210218";
|
const char* VERSION = "20210307";
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue