Merge pull request #460 from lucamarche-iz1mlt/master

Add select ack message dstar
This commit is contained in:
Jonathan Naylor 2018-09-14 13:04:49 +01:00 committed by GitHub
commit f149cc48f9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 44 additions and 13 deletions

View file

@ -123,6 +123,7 @@ m_dstarSelfOnly(false),
m_dstarBlackList(), m_dstarBlackList(),
m_dstarAckReply(true), m_dstarAckReply(true),
m_dstarAckTime(750U), m_dstarAckTime(750U),
m_dstarAckMessage(false),
m_dstarErrorReply(true), m_dstarErrorReply(true),
m_dstarRemoteGateway(false), m_dstarRemoteGateway(false),
m_dstarModeHang(10U), m_dstarModeHang(10U),
@ -495,10 +496,12 @@ bool CConf::read()
} }
p = ::strtok(NULL, ",\r\n"); p = ::strtok(NULL, ",\r\n");
} }
} else if (::strcmp(key, "AckReply") == 0) }else if (::strcmp(key, "AckReply") == 0)
m_dstarAckReply = ::atoi(value) == 1; m_dstarAckReply = ::atoi(value) == 1;
else if (::strcmp(key, "AckTime") == 0) else if (::strcmp(key, "AckTime") == 0)
m_dstarAckTime = (unsigned int)::atoi(value); m_dstarAckTime = (unsigned int)::atoi(value);
else if (::strcmp(key, "AckMessage") == 0)
m_dstarAckMessage = ::atoi(value) == 1;
else if (::strcmp(key, "ErrorReply") == 0) else if (::strcmp(key, "ErrorReply") == 0)
m_dstarErrorReply = ::atoi(value) == 1; m_dstarErrorReply = ::atoi(value) == 1;
else if (::strcmp(key, "RemoteGateway") == 0) else if (::strcmp(key, "RemoteGateway") == 0)
@ -1105,6 +1108,11 @@ unsigned int CConf::getDStarAckTime() const
return m_dstarAckTime; return m_dstarAckTime;
} }
bool CConf::getDStarAckMessage() const
{
return m_dstarAckMessage;
}
bool CConf::getDStarErrorReply() const bool CConf::getDStarErrorReply() const
{ {
return m_dstarErrorReply; return m_dstarErrorReply;

2
Conf.h
View file

@ -112,6 +112,7 @@ public:
std::vector<std::string> getDStarBlackList() const; std::vector<std::string> getDStarBlackList() const;
bool getDStarAckReply() const; bool getDStarAckReply() const;
unsigned int getDStarAckTime() const; unsigned int getDStarAckTime() const;
bool getDStarAckMessage() const;
bool getDStarErrorReply() const; bool getDStarErrorReply() const;
bool getDStarRemoteGateway() const; bool getDStarRemoteGateway() const;
unsigned int getDStarModeHang() const; unsigned int getDStarModeHang() const;
@ -335,6 +336,7 @@ private:
std::vector<std::string> m_dstarBlackList; std::vector<std::string> m_dstarBlackList;
bool m_dstarAckReply; bool m_dstarAckReply;
unsigned int m_dstarAckTime; unsigned int m_dstarAckTime;
bool m_dstarAckMessage;
bool m_dstarErrorReply; bool m_dstarErrorReply;
bool m_dstarRemoteGateway; bool m_dstarRemoteGateway;
unsigned int m_dstarModeHang; unsigned int m_dstarModeHang;

View file

@ -36,11 +36,12 @@ bool CallsignCompare(const std::string& arg, const unsigned char* my)
// #define DUMP_DSTAR // #define DUMP_DSTAR
CDStarControl::CDStarControl(const std::string& callsign, const std::string& module, bool selfOnly, bool ackReply, unsigned int ackTime, bool errorReply, const std::vector<std::string>& blackList, 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, bool ackMessage, bool errorReply, const std::vector<std::string>& blackList, CDStarNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, bool remoteGateway, CRSSIInterpolator* rssiMapper) :
m_callsign(NULL), m_callsign(NULL),
m_gateway(NULL), m_gateway(NULL),
m_selfOnly(selfOnly), m_selfOnly(selfOnly),
m_ackReply(ackReply), m_ackReply(ackReply),
m_ackMessage(ackMessage),
m_errorReply(errorReply), m_errorReply(errorReply),
m_remoteGateway(remoteGateway), m_remoteGateway(remoteGateway),
m_blackList(blackList), m_blackList(blackList),
@ -1049,10 +1050,18 @@ void CDStarControl::sendAck()
m_network->getStatus(status, reflector); m_network->getStatus(status, reflector);
char text[40U]; char text[40U];
if (m_ackMessage && m_rssi != 0) {
if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK)
::sprintf(text, "%-8.8s -%udBm ", reflector, m_aveRSSI / m_rssiCount);
else
::sprintf(text, "BER:%.1f%% -%udBm ", float(m_rfErrs * 100U) / float(m_rfBits), m_aveRSSI / m_rssiCount);
}
else {
if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK) if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK)
::sprintf(text, "%-8.8s BER: %.1f%% ", reflector, float(m_rfErrs * 100U) / float(m_rfBits)); ::sprintf(text, "%-8.8s BER: %.1f%% ", reflector, float(m_rfErrs * 100U) / float(m_rfBits));
else else
::sprintf(text, "BER: %.1f%% ", float(m_rfErrs * 100U) / float(m_rfBits)); ::sprintf(text, "BER: %.1f%% ", float(m_rfErrs * 100U) / float(m_rfBits));
}
m_slowData.setText(text); m_slowData.setText(text);
::memcpy(data, DSTAR_NULL_FRAME_DATA_BYTES, DSTAR_FRAME_LENGTH_BYTES + 1U); ::memcpy(data, DSTAR_NULL_FRAME_DATA_BYTES, DSTAR_FRAME_LENGTH_BYTES + 1U);
@ -1091,10 +1100,18 @@ void CDStarControl::sendError()
m_network->getStatus(status, reflector); m_network->getStatus(status, reflector);
char text[40U]; char text[40U];
if (m_ackMessage && m_rssi != 0) {
if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK)
::sprintf(text, "%-8.8s -%udBm ", reflector, m_aveRSSI / m_rssiCount);
else
::sprintf(text, "BER:%.1f%% -%udBm ", float(m_rfErrs * 100U) / float(m_rfBits), m_aveRSSI / m_rssiCount);
}
else {
if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK) if (status == LS_LINKED_DEXTRA || status == LS_LINKED_DPLUS || status == LS_LINKED_DCS || status == LS_LINKED_CCS || status == LS_LINKED_LOOPBACK)
::sprintf(text, "%-8.8s BER: %.1f%% ", reflector, float(m_rfErrs * 100U) / float(m_rfBits)); ::sprintf(text, "%-8.8s BER: %.1f%% ", reflector, float(m_rfErrs * 100U) / float(m_rfBits));
else else
::sprintf(text, "BER: %.1f%% ", float(m_rfErrs * 100U) / float(m_rfBits)); ::sprintf(text, "BER: %.1f%% ", float(m_rfErrs * 100U) / float(m_rfBits));
}
m_slowData.setText(text); m_slowData.setText(text);
::memcpy(data, DSTAR_NULL_FRAME_DATA_BYTES, DSTAR_FRAME_LENGTH_BYTES + 1U); ::memcpy(data, DSTAR_NULL_FRAME_DATA_BYTES, DSTAR_FRAME_LENGTH_BYTES + 1U);

View file

@ -37,7 +37,7 @@
class CDStarControl { class CDStarControl {
public: public:
CDStarControl(const std::string& callsign, const std::string& module, bool selfOnly, bool ackReply, unsigned int ackTime, bool errorReply, const std::vector<std::string>& blackList, 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, bool ackMessage, bool errorReply, const std::vector<std::string>& blackList, CDStarNetwork* network, CDisplay* display, unsigned int timeout, bool duplex, bool remoteGateway, CRSSIInterpolator* rssiMapper);
~CDStarControl(); ~CDStarControl();
bool writeModem(unsigned char* data, unsigned int len); bool writeModem(unsigned char* data, unsigned int len);
@ -52,6 +52,7 @@ private:
bool m_selfOnly; bool m_selfOnly;
bool m_ackReply; bool m_ackReply;
bool m_errorReply; bool m_errorReply;
bool m_ackMessage;
bool m_remoteGateway; bool m_remoteGateway;
std::vector<std::string> m_blackList; std::vector<std::string> m_blackList;
CDStarNetwork* m_network; CDStarNetwork* m_network;

View file

@ -87,6 +87,7 @@ Module=C
SelfOnly=0 SelfOnly=0
AckReply=1 AckReply=1
AckTime=750 AckTime=750
AckMessage=0
ErrorReply=1 ErrorReply=1
RemoteGateway=0 RemoteGateway=0
# ModeHang=10 # ModeHang=10

View file

@ -390,6 +390,7 @@ int CMMDVMHost::run()
std::vector<std::string> blackList = m_conf.getDStarBlackList(); std::vector<std::string> blackList = m_conf.getDStarBlackList();
bool ackReply = m_conf.getDStarAckReply(); bool ackReply = m_conf.getDStarAckReply();
unsigned int ackTime = m_conf.getDStarAckTime(); unsigned int ackTime = m_conf.getDStarAckTime();
bool ackMessage = m_conf.getDStarAckMessage();
bool errorReply = m_conf.getDStarErrorReply(); bool errorReply = m_conf.getDStarErrorReply();
bool remoteGateway = m_conf.getDStarRemoteGateway(); bool remoteGateway = m_conf.getDStarRemoteGateway();
m_dstarRFModeHang = m_conf.getDStarModeHang(); m_dstarRFModeHang = m_conf.getDStarModeHang();
@ -398,6 +399,7 @@ int CMMDVMHost::run()
LogInfo(" Module: %s", module.c_str()); LogInfo(" Module: %s", module.c_str());
LogInfo(" Self Only: %s", selfOnly ? "yes" : "no"); LogInfo(" Self Only: %s", selfOnly ? "yes" : "no");
LogInfo(" Ack Reply: %s", ackReply ? "yes" : "no"); LogInfo(" Ack Reply: %s", ackReply ? "yes" : "no");
LogInfo(" Ack message: %s", ackMessage ? "RSSI" : "BER");
LogInfo(" Ack Time: %ums", ackTime); LogInfo(" Ack Time: %ums", ackTime);
LogInfo(" Error Reply: %s", errorReply ? "yes" : "no"); LogInfo(" Error Reply: %s", errorReply ? "yes" : "no");
LogInfo(" Remote Gateway: %s", remoteGateway ? "yes" : "no"); LogInfo(" Remote Gateway: %s", remoteGateway ? "yes" : "no");
@ -406,7 +408,7 @@ int CMMDVMHost::run()
if (blackList.size() > 0U) if (blackList.size() > 0U)
LogInfo(" Black List: %u", blackList.size()); LogInfo(" Black List: %u", blackList.size());
dstar = new CDStarControl(m_callsign, module, selfOnly, ackReply, ackTime, errorReply, blackList, m_dstarNetwork, m_display, m_timeout, m_duplex, remoteGateway, rssi); dstar = new CDStarControl(m_callsign, module, selfOnly, ackReply, ackTime, ackMessage, errorReply, blackList, m_dstarNetwork, m_display, m_timeout, m_duplex, remoteGateway, rssi);
} }
CTimer dmrBeaconIntervalTimer(1000U); CTimer dmrBeaconIntervalTimer(1000U);