Allow a DG-Id of zero for accessing YSF Gateway from DG-Id Gateway.
This commit is contained in:
parent
db2c9f46fb
commit
7320bb44b2
3 changed files with 42 additions and 13 deletions
|
@ -53,6 +53,8 @@ const char* DEFAULT_INI_FILE = "/etc/DGIdGateway.ini";
|
|||
#include <clocale>
|
||||
#include <cmath>
|
||||
|
||||
const unsigned int UNSET_DGID = 999U;
|
||||
|
||||
const unsigned char DT_VD_MODE1 = 0x01U;
|
||||
const unsigned char DT_VD_MODE2 = 0x02U;
|
||||
const unsigned char DT_VOICE_FR_MODE = 0x04U;
|
||||
|
@ -218,7 +220,7 @@ int CDGIdGateway::run()
|
|||
imrs = NULL;
|
||||
}
|
||||
|
||||
unsigned int currentDGId = 0U;
|
||||
unsigned int currentDGId = UNSET_DGID;
|
||||
bool fromRF = false;
|
||||
|
||||
CDGIdNetwork* dgIdNetwork[100U];
|
||||
|
@ -298,6 +300,22 @@ int CDGIdGateway::run()
|
|||
|
||||
LogMessage("Added IMRS:%s to DG-ID %u%s", name.c_str(), dgid, statc ? " (Static)" : "");
|
||||
}
|
||||
} else if (type == "Gateway") {
|
||||
unsigned int local = (*it)->m_local;
|
||||
|
||||
sockaddr_storage addr;
|
||||
unsigned int addrLen;
|
||||
if (CUDPSocket::lookup((*it)->m_address, (*it)->m_port, addr, addrLen) == 0) {
|
||||
dgIdNetwork[dgid] = new CYSFNetwork(local, "YSFGateway", addr, addrLen, m_callsign, statc, debug);
|
||||
dgIdNetwork[dgid]->m_modes = DT_VD_MODE1 | DT_VD_MODE2 | DT_VOICE_FR_MODE | DT_DATA_FR_MODE;
|
||||
dgIdNetwork[dgid]->m_static = statc;
|
||||
dgIdNetwork[dgid]->m_rfHangTime = rfHangTime;
|
||||
dgIdNetwork[dgid]->m_netHangTime = netHangTime;
|
||||
|
||||
LogMessage("Added YSF Gateway to DG-ID %u%s", dgid, statc ? " (Static)" : "");
|
||||
} else {
|
||||
LogWarning("Unable to resolve the address for the YSF Gateway");
|
||||
}
|
||||
} else if (type == "Parrot") {
|
||||
unsigned int local = (*it)->m_local;
|
||||
|
||||
|
@ -406,8 +424,8 @@ int CDGIdGateway::run()
|
|||
unsigned char ft = fich.getFT();
|
||||
unsigned char dgId = fich.getDGId();
|
||||
|
||||
if (dgId != 0U && dgId != currentDGId) {
|
||||
if (dgIdNetwork[currentDGId] != NULL && !dgIdNetwork[currentDGId]->m_static) {
|
||||
if (dgId != currentDGId) {
|
||||
if (currentDGId != UNSET_DGID && dgIdNetwork[currentDGId] != NULL && !dgIdNetwork[currentDGId]->m_static) {
|
||||
dgIdNetwork[currentDGId]->unlink();
|
||||
dgIdNetwork[currentDGId]->unlink();
|
||||
dgIdNetwork[currentDGId]->unlink();
|
||||
|
@ -435,7 +453,7 @@ int CDGIdGateway::run()
|
|||
if (m_gps != NULL)
|
||||
m_gps->data(buffer + 14U, buffer + 35U, fi, dt, fn, ft);
|
||||
|
||||
if (currentDGId != 0U && dgIdNetwork[currentDGId] != NULL) {
|
||||
if (currentDGId != UNSET_DGID && dgIdNetwork[currentDGId] != NULL) {
|
||||
// Only allow the wanted modes through
|
||||
if ((dt == YSF_DT_VD_MODE1 && (dgIdNetwork[currentDGId]->m_modes & DT_VD_MODE1) != 0U) ||
|
||||
(dt == YSF_DT_DATA_FR_MODE && (dgIdNetwork[currentDGId]->m_modes & DT_DATA_FR_MODE) != 0U) ||
|
||||
|
@ -461,10 +479,10 @@ int CDGIdGateway::run()
|
|||
}
|
||||
}
|
||||
|
||||
for (unsigned int i = 1U; i < 100U; i++) {
|
||||
for (unsigned int i = 0U; i < 100U; i++) {
|
||||
if (dgIdNetwork[i] != NULL) {
|
||||
unsigned int len = dgIdNetwork[i]->read(i, buffer);
|
||||
if (len > 0U && (i == currentDGId || currentDGId == 0U)) {
|
||||
if (len > 0U && (i == currentDGId || currentDGId == UNSET_DGID)) {
|
||||
CYSFFICH fich;
|
||||
bool valid = fich.decode(buffer + 35U);
|
||||
if (valid) {
|
||||
|
@ -476,7 +494,7 @@ int CDGIdGateway::run()
|
|||
inactivityTimer.setTimeout(dgIdNetwork[i]->m_netHangTime);
|
||||
inactivityTimer.start();
|
||||
|
||||
if (currentDGId == 0U) {
|
||||
if (currentDGId == UNSET_DGID) {
|
||||
std::string desc = dgIdNetwork[i]->getDesc(i);
|
||||
LogMessage("DG-ID set to %u (%s) via Network", i, desc.c_str());
|
||||
currentDGId = i;
|
||||
|
@ -493,7 +511,7 @@ int CDGIdGateway::run()
|
|||
|
||||
rptNetwork.clock(ms);
|
||||
|
||||
for (unsigned int i = 1U; i < 100U; i++) {
|
||||
for (unsigned int i = 0U; i < 100U; i++) {
|
||||
if (dgIdNetwork[i] != NULL)
|
||||
dgIdNetwork[i]->clock(ms);
|
||||
}
|
||||
|
@ -509,10 +527,10 @@ int CDGIdGateway::run()
|
|||
dgIdNetwork[currentDGId]->unlink();
|
||||
}
|
||||
|
||||
LogMessage("DG-ID set to 0 (None) via timeout");
|
||||
LogMessage("DG-ID set to None via timeout");
|
||||
|
||||
state = DS_NOTLINKED;
|
||||
currentDGId = 0U;
|
||||
currentDGId = UNSET_DGID;
|
||||
inactivityTimer.stop();
|
||||
|
||||
if (fromRF) {
|
||||
|
@ -557,7 +575,7 @@ int CDGIdGateway::run()
|
|||
delete m_gps;
|
||||
}
|
||||
|
||||
for (unsigned int i = 1U; i < 100U; i++) {
|
||||
for (unsigned int i = 0U; i < 100U; i++) {
|
||||
if (dgIdNetwork[i] != NULL && dgIdNetwork[i] != imrs) {
|
||||
dgIdNetwork[i]->unlink();
|
||||
dgIdNetwork[i]->unlink();
|
||||
|
|
|
@ -52,6 +52,17 @@ RFHangTime=240
|
|||
NetHangTime=240
|
||||
Debug=0
|
||||
|
||||
[DGId=0]
|
||||
# Local YSF Gateway, this must be DGId=0 for Wires-X to work.
|
||||
Type=Gateway
|
||||
Static=1
|
||||
Address=127.0.0.1
|
||||
Port=42025
|
||||
Local=42026
|
||||
#RFHangTime=120
|
||||
#NetHangTime=60
|
||||
Debug=0
|
||||
|
||||
[DGId=1]
|
||||
# YSF Local Parrot
|
||||
Type=Parrot
|
||||
|
@ -120,7 +131,7 @@ Debug=0
|
|||
[DGId=45]
|
||||
# YSF Reflector Alabama-Link
|
||||
Type=YSF
|
||||
Static=0
|
||||
Static=1
|
||||
Name=Alabama-Link
|
||||
Local=42023
|
||||
#RFHangTime=120
|
||||
|
|
|
@ -19,6 +19,6 @@
|
|||
#if !defined(VERSION_H)
|
||||
#define VERSION_H
|
||||
|
||||
const char* VERSION = "20201005";
|
||||
const char* VERSION = "20201029";
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue