single modem2gate

pull/12/head
Tom Early 7 years ago
parent 8c93b0de15
commit 1fafb6e616

@ -202,8 +202,8 @@ static bool read_config(const char *cfgFile)
}
}
RPTR_MOD = 'A' + assigned_module;
cfg.GetValue(dvap_path+"_gate2modem"+std::string(1, 'a'+assigned_module), type, gate2modem, 1, FILENAME_MAX);
cfg.GetValue(dvap_path+"_modem2gate"+std::string(1, 'a'+assigned_module), type, modem2gate, 1, FILENAME_MAX);
cfg.GetValue("gateway_gate2modem"+std::string(1, 'a'+assigned_module), estr, gate2modem, 1, FILENAME_MAX);
cfg.GetValue("gateway_modem2gate", estr, modem2gate, 1, FILENAME_MAX);
if (cfg.KeyExists(dvap_path+"_callsign")) {
if (cfg.GetValue(dvap_path+"_callsign", type, RPTR, 3, 6))
return true;

@ -1855,8 +1855,8 @@ static bool read_config(const char *cfgFile)
}
}
DVRPTR_MOD = 'A' + assigned_module;
cfg.GetValue(path+"_gate2modem"+std::string(1, 'a'+assigned_module), type, gate2modem, 1, FILENAME_MAX);
cfg.GetValue(path+"_modem2gate"+std::string(1, 'a'+assigned_module), type, modem2gate, 1, FILENAME_MAX);
cfg.GetValue("gateway_gate2modem"+std::string(1, 'a'+assigned_module), estr, gate2modem, 1, FILENAME_MAX);
cfg.GetValue("gateway_modem2gate", estr, modem2gate, 1, FILENAME_MAX);
std::string call;
if (cfg.GetValue("ircddb_login", type, call, 3, 6))

@ -220,17 +220,10 @@ bool CQnetGateway::read_config(char *cfgFile)
rptr.mod[m].defined = true;
path.append(1, '_');
cfg.GetValue(path+"modem2gate"+std::string(1, 'a'+m), type, modem2gate[m], 1, FILENAME_MAX);
cfg.GetValue(path+"gate2modem"+std::string(1, 'a'+m), type, gate2modem[m], 1, FILENAME_MAX);
cfg.GetValue(path+"frequency", type, rptr.mod[m].frequency, 0.0, 1.0e12);
cfg.GetValue(path+"offset", type, rptr.mod[m].offset, -1.0e12, 1.0e12);
cfg.GetValue(path+"range", type, rptr.mod[m].range, 0.0, 1609344.0);
cfg.GetValue(path+"agl", type, rptr.mod[m].agl, 0.0, 1000.0);
cfg.GetValue("gateway_latitude", estr, rptr.mod[m].latitude, -90.0, 90.0);
cfg.GetValue("gateway_longitude", estr, rptr.mod[m].longitude, -180.0, 180.0);
cfg.GetValue("gateway_desc1", estr, rptr.mod[m].desc1, 0, 20);
cfg.GetValue("gateway_desc2", estr, rptr.mod[m].desc2, 0, 20);
cfg.GetValue("gateway_url", estr, rptr.mod[m].url, 0, 80);
// make the long description for the log
if (rptr.mod[m].desc1.length())
@ -250,8 +243,19 @@ bool CQnetGateway::read_config(char *cfgFile)
cfg.GetValue(path+"port", estr, g2_external.port, 1024, 65535);
cfg.GetValue(path+"header_regen", estr, bool_regen_header);
cfg.GetValue(path+"send_qrgs_maps", estr, bool_send_qrgs);
cfg.GetValue(path+"tolink", estr, gate2link, 1, FILENAME_MAX);
cfg.GetValue(path+"fromlink", estr, link2gate, 1, FILENAME_MAX);
cfg.GetValue(path+"gate2link", estr, gate2link, 1, FILENAME_MAX);
cfg.GetValue(path+"link2gate", estr, link2gate, 1, FILENAME_MAX);
cfg.GetValue(path+"modem2gate", estr, modem2gate, 1, FILENAME_MAX);
for (int m=0; m<3; m++) {
if (rptr.mod[m].defined) {
cfg.GetValue(path+"gate2modem"+std::string(1, 'a'+m), estr, gate2modem[m], 1, FILENAME_MAX);
cfg.GetValue(path+"latitude", estr, rptr.mod[m].latitude, -90.0, 90.0);
cfg.GetValue(path+"longitude", estr, rptr.mod[m].longitude, -180.0, 180.0);
cfg.GetValue(path+"desc1", estr, rptr.mod[m].desc1, 0, 20);
cfg.GetValue(path+"desc2", estr, rptr.mod[m].desc2, 0, 20);
cfg.GetValue(path+"url", estr, rptr.mod[m].url, 0, 80);
}
}
// APRS
path.assign("aprs_");
@ -1131,7 +1135,7 @@ void CQnetGateway::ProcessG2(ssize_t g2buflen, SDSVT &g2buf)
}
}
void CQnetGateway::ProcessModem(int mod)
void CQnetGateway::ProcessModem()
{
char temp_radio_user[CALL_SIZE + 1];
char temp_mod;
@ -1142,7 +1146,7 @@ void CQnetGateway::ProcessModem(int mod)
char tempfile[FILENAME_MAX + 1];
SDSVT g2buf;
int recvlen = Modem2Gate[mod].Read(rptrbuf.pkt_id, 58);
int recvlen = Modem2Gate.Read(rptrbuf.pkt_id, 58);
if (0 == memcmp(rptrbuf.pkt_id, "DSTR", 4)) {
if ( (recvlen==58 || recvlen==29 || recvlen==32) && rptrbuf.flag[0]==0x73 && rptrbuf.flag[1]==0x12 && rptrbuf.flag[2]==0x0 && rptrbuf.vpkt.icm_id==0x20 && (rptrbuf.remaining==0x30 || rptrbuf.remaining==0x13 || rptrbuf.remaining==0x16) ) {
@ -1885,9 +1889,7 @@ void CQnetGateway::Process()
FD_ZERO(&fdset);
AddFDSet(max_nfds, g2_sock, &fdset);
AddFDSet(max_nfds, Link2Gate.GetFD(), &fdset);
for (int i=0; i<3; i++)
if (rptr.mod[i].defined)
AddFDSet(max_nfds, Modem2Gate[i].GetFD(), &fdset);
AddFDSet(max_nfds, Modem2Gate.GetFD(), &fdset);
struct timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 20000; // 20 ms
@ -1921,11 +1923,9 @@ void CQnetGateway::Process()
}
// process packets coming from local repeater modules
for (int mod=0; mod<3; mod++) {
if (keep_running && rptr.mod[mod].defined && FD_ISSET(Modem2Gate[mod].GetFD(), &fdset)) {
ProcessModem(mod);
FD_CLR (Modem2Gate[mod].GetFD(), &fdset);
}
if (keep_running && FD_ISSET(Modem2Gate.GetFD(), &fdset)) {
ProcessModem();
FD_CLR(Modem2Gate.GetFD(), &fdset);
}
}
@ -2454,12 +2454,12 @@ int CQnetGateway::Init(char *cfgfile)
Gate2Link.SetUp(gate2link.c_str());
if (Link2Gate.Open(link2gate.c_str()))
return 1;
if (Modem2Gate.Open(modem2gate.c_str()))
return 1;
for (i=0; i<3; i++) {
if (rptr.mod[i].defined) { // open unix sockets between qngateway and each defined modem
Gate2Modem[i].SetUp(gate2modem[i].c_str());
if (Modem2Gate[i].Open(modem2gate[i].c_str()))
return 1;
}
// recording for echotest on local repeater modules
recd[i].last_time = 0;
@ -2537,9 +2537,7 @@ CQnetGateway::CQnetGateway()
CQnetGateway::~CQnetGateway()
{
Link2Gate.Close();
for (int i=0; i<3; i++) {
Modem2Gate[i].Close();
}
Modem2Gate.Close();
if (g2_sock != -1) {
close(g2_sock);

@ -90,10 +90,10 @@ private:
SPORTIP g2_external, ircddb;
CUnixDgramReader Link2Gate, Modem2Gate[3];
CUnixDgramReader Link2Gate, Modem2Gate;
CUnixDgramWriter Gate2Link, Gate2Modem[3];
std::string gate2link, link2gate, gate2modem[3], modem2gate[3];
std::string gate2link, link2gate, gate2modem[3], modem2gate;
std::string OWNER, owner, local_irc_ip, status_file, dtmf_dir, dtmf_file, echotest_dir, irc_pass, qnvoicefile;
@ -170,7 +170,7 @@ private:
void ProcessTimeouts();
void ProcessSlowData(unsigned char *data, unsigned short sid);
void ProcessG2(ssize_t g2buflen, SDSVT &g2buf);
void ProcessModem(int mod);
void ProcessModem();
bool Flag_is_ok(unsigned char flag);
// read configuration file

@ -500,8 +500,8 @@ bool CQnetITAP::ReadConfig(const char *cfgFile)
RPTR_MOD = 'A' + assigned_module;
cfg.GetValue(itap_path+"_device", type, ITAP_DEVICE, 7, FILENAME_MAX);
cfg.GetValue(itap_path+"_gate2modem"+std::string(1, 'a'+assigned_module), type, gate2modem, 1, FILENAME_MAX);
cfg.GetValue(itap_path+"_modem2gate"+std::string(1, 'a'+assigned_module), type, modem2gate, 1, FILENAME_MAX);
cfg.GetValue("gateway_gate2modem"+std::string(1, 'a'+assigned_module), estr, gate2modem, 1, FILENAME_MAX);
cfg.GetValue("gateway_modem2gate", estr, modem2gate, 1, FILENAME_MAX);
itap_path.append("_callsign");
if (cfg.KeyExists(itap_path)) {

@ -212,7 +212,7 @@ void CQnetLink::RptrAckThread(char *arg)
memcpy(dsvt.hdr.sfx, "RPTR", 4);
calcPFCS(dsvt.title,56);
Link2Gate.Write(dsvt.title, 56);
std::this_thread::sleep_for(std::chrono::milliseconds(delay_between));
//std::this_thread::sleep_for(std::chrono::milliseconds(delay_between))
dsvt.config = 0x20;
memcpy(dsvt.vasd.voice, silence, 9);
@ -575,8 +575,8 @@ bool CQnetLink::read_config(const char *cfgFile)
saved_max_dongles = max_dongles = (unsigned int)maxdongle;
key.assign("gateway_");
cfg.GetValue(key+"tolink", estr, gate2link, 1, FILENAME_MAX);
cfg.GetValue(key+"fromlink", estr, link2gate, 1, FILENAME_MAX);
cfg.GetValue(key+"gate2link", estr, gate2link, 1, FILENAME_MAX);
cfg.GetValue(key+"link2gate", estr, link2gate, 1, FILENAME_MAX);
cfg.GetValue("log_qso", estr, qso_details);
@ -3287,7 +3287,6 @@ void CQnetLink::AudioNotifyThread(SECHO &edata)
const unsigned char sdsync[3] = { 0x55U, 0x2DU, 0x16U };
const unsigned char sdsilence[3] = { 0x16U, 0x29U, 0xF5U };
for (count=0; count<ambeblocks && keep_running; count++) {
std::this_thread::sleep_for(std::chrono::milliseconds(delay_between));
int nread = fread(edata.header.vasd.voice, 9, 1, fp);
if (nread == 1) {
edata.header.ctrl = (unsigned char)(count % 21);
@ -3343,6 +3342,7 @@ void CQnetLink::AudioNotifyThread(SECHO &edata)
if (count+1 == ambeblocks && ! edata.is_linked)
edata.header.ctrl |= 0x40U;
Link2Gate.Write(edata.header.title, 27);
std::this_thread::sleep_for(std::chrono::milliseconds(delay_between));
}
}
fclose(fp);
@ -3395,8 +3395,8 @@ void CQnetLink::AudioNotifyThread(SECHO &edata)
if (i+1==size && lastch)
edata.header.ctrl |= 0x40U; // signal the last voiceframe (of the last character)
Link2Gate.Write(edata.header.title, 27);
std::this_thread::sleep_for(std::chrono::milliseconds(delay_between));
}
std::this_thread::sleep_for(std::chrono::milliseconds(delay_between));
}
}
fclose(fp);

@ -394,8 +394,8 @@ bool CQnetRelay::ReadConfig(const char *cfgFile)
}
RPTR_MOD = 'A' + assigned_module;
cfg.GetValue(mmdvm_path+"_gate2modem"+std::string(1, 'a'+assigned_module), type, gate2modem, 1, FILENAME_MAX);
cfg.GetValue(mmdvm_path+"_modem2gate"+std::string(1, 'a'+assigned_module), type, modem2gate, 1, FILENAME_MAX);
cfg.GetValue("gateway_gate2modem"+std::string(1, 'a'+assigned_module), estr, gate2modem, 1, FILENAME_MAX);
cfg.GetValue("gateway_modem2gate", estr, modem2gate, 1, FILENAME_MAX);
cfg.GetValue(mmdvm_path+"_internal_ip", type, MMDVM_IP, 7, IP_SIZE);
int i;
cfg.GetValue(mmdvm_path+"_local_port", type, i, 10000, 65535);

@ -40,7 +40,7 @@ bool CUnixDgramReader::Open(const char *path) // returns true on failure
fprintf(stderr, "CUnixDgramReader::Open: socket() failed: %s\n", strerror(errno));
return true;
}
fcntl(fd, F_SETFL, O_NONBLOCK);
//fcntl(fd, F_SETFL, O_NONBLOCK);
struct sockaddr_un addr;
memset(&addr, 0, sizeof(addr));
@ -104,7 +104,12 @@ ssize_t CUnixDgramWriter::Write(void *buf, size_t size)
return -1;
}
ssize_t written = write(fd, buf, size);
ssize_t written = -1;
while (written < 0) {
written = write(fd, buf, size);
if (written != (ssize_t)size)
fprintf(stderr, "ERROR: only wrote %ld bytes of %ld to %s\n", written, size, addr.sun_path+1);
}
close(fd);
return written;

@ -47,8 +47,12 @@ gateway_send_qrgs_maps_d=true # send frequency, offset, coordinates and url
gateway_local_irc_ip_d='0.0.0.0' # the local port on the gateway for the IRC TCP socket
gateway_ip_d='0.0.0.0' # the g2 port
gateway_port_d=40000 # don't change
gateway_tolink_d='gate2link' # Unix sockets between qngateway and QnetLink
gateway_fromlink_d='link2gate' # all Unix sockets are on the file system, but hidden from view
gateway_gate2link_d='gate2link' # Unix sockets between qngateway and QnetLink
gateway_link2gate_d='link2gate' # all Unix sockets are on the file system, but hidden from view
gateway_modem2gate_d='modem2gate' # Unix Sockets between the modem(s) and the gateway (1 in, 3 out)
gateway_gate2modema_d='gate2modema'
gateway_gate2modemb_d='gate2modemb'
gateway_gate2modemc_d='gate2modemc'
gateway_latitude_d=0 # you can leave this unspecified for a mobile rig
gateway_longitude_d=0 # like the latitude
gateway_desc1_d='' # maximum of 20 characters, most special symbols are not allowed
@ -95,12 +99,6 @@ module_x_frequency=0 # if you specify here, this frequency will show up on
module_x_offset=0 # usually the duplex tx-rx offset, but for dvap, it's a frequency tweak
module_x_range=0 # the range of this repeater, in meters 1609.344 meters is 1.0 miles
module_x_agl=0 # the height above ground level for this repeater's antenna
module_x_gate2modema='gate2modema' # Unix Sockets between a modem and the gateway
module_x_gate2modemb='gate2modemb'
module_x_gate2modemc='gate2modemc'
module_x_modem2gatea='modem2gatea'
module_x_modem2gateb='modem2gateb'
module_x_modem2gatec='modem2gatec'
##########################################################################################################################
#

@ -224,8 +224,12 @@ GateMenu () {
echo -n "s : Send IRC network Module Info = "; EvaluateVar gateway_send_qrgs_maps{,_d}
echo -n "i : IRC TCP local network address = "; EvaluateVar gateway_local_irc_ip{,_d}
echo -n "p : IRC TCP port number = "; EvaluateVar gateway_port{,_d}
echo -n "t : UNIX socket to QnetLink = "; EvaluateVar gateway_tolink{,_d}
echo -n "f : UNIX socket from QnetLink = "; EvaluateVar gateway_fromlink{,_d}
echo -n "tl : UNIX socket to QnetLink = "; EvaluateVar gateway_gate2link{,_d}
echo -n "fl : UNIX socket from QnetLink = "; EvaluateVar gateway_link2gate{,_d}
echo -n "ta : UNIX socket to Modem A = "; EvaluateVar gateway_gate2modema{,_d}
echo -n "tb : UNIX socket to Modem B = "; EvaluateVar gateway_gate2modemb{,_d}
echo -n "tc : UNIX socket to Modem C = "; EvaluateVar gateway_gate2modemc{,_d}
echo -n "fm : UNIX socket from Modem(s) = "; EvaluateVar gateway_modem2gate{,_d}
echo -n "la : Latitude (-90.0 to 90.0) = "; EvaluateVar gateway_latitude{,_d}
echo -n "lo : Longitude (-180.0 to 180.0) = "; EvaluateVar gateway_longitude{,_d}
echo -n "d1 : Description #1 (20 chars max) = "; EvaluateVar gateway_desc1{,_d}
@ -244,8 +248,12 @@ GateMenu () {
elif [[ "$key" == s* ]]; then SetBooleanValue gateway_send_qrgs_maps "$value"
elif [[ "$key" == i* ]]; then gateway_local_irc_ip="$value"
elif [[ "$key" == p* ]]; then gateway_port="$value"
elif [[ "$key" == t* ]]; then gateway_tolink="$value"
elif [[ "$key" == f* ]]; then gateway_fromlink="$value"
elif [[ "$key" == tl* ]]; then gateway_gate2link="$value"
elif [[ "$key" == fl* ]]; then gateway_link2gate="$value"
elif [[ "$key" == ta* ]]; then gateway_gate2modema="$value"
elif [[ "$key" == tb* ]]; then gateway_gate2modemb="$value"
elif [[ "$key" == tc* ]]; then gateway_gate2modemc="$value"
elif [[ "$key" == fm* ]]; then gateway_modem2gate="$value"
elif [[ "$key" == la* ]]; then gateway_latitude="$value"
elif [[ "$key" == lo* ]]; then gateway_longitude="$value"
elif [[ "$key" == d1* ]]; then gateway_desc1="${value:0:20}"
@ -262,8 +270,11 @@ GateMenu () {
elif [[ "$value" == l* ]]; then unset gateway_local_irc_ip
elif [[ "$value" == i* ]]; then unset gateway_ip
elif [[ "$value" == p* ]]; then unset gateway_port
elif [[ "$value" == t* ]]; then unset gateway_tolink
elif [[ "$value" == f* ]]; then unset gateway_fromlink
elif [[ "$value" == tl* ]]; then unset gateway_gate2link
elif [[ "$value" == ta* ]]; then unset gateway_gate2modema
elif [[ "$value" == tb* ]]; then unset gateway_gate2modemb
elif [[ "$value" == tc* ]]; then unset gateway_gate2modemc
elif [[ "$value" == fm* ]]; then unset gateway_modem2gate
elif [[ "$value" == la* ]]; then unset gateway_latitude
elif [[ "$value" == lo* ]]; then unset gateway_longitude
elif [[ "$value" == d1* ]]; then unset gateway_desc1
@ -321,8 +332,6 @@ ModuleMenu () {
echo -n "of : Offset in Hz = "; EvaluateVar {${mod},module_x}_offset
echo -n "ra : Range (in meters, 1 mile=1609.344 meters) = "; EvaluateVar {${mod},module_x}_range
echo -n "ag : Above ground level (in meters) = "; EvaluateVar {${mod},module_x}_agl
echo -n "uf : UNIX Socket from gateway = "; EvaluateVar {${mod},module_x}_gate2modem$nmod
echo -n "ut : UNIX Socket to gateway = "; EvaluateVar {${mod},module_x}_modem2gate$nmod
echo -n "in : Inactivity for this many minutes unlinks = "; EvaluateVar {${mod},module_x}_inactivity
echo -n "wa : Wait this many msec for the next packet = "; EvaluateVar {${mod},module_x}_packet_wait
echo -n "ac : Send acknowledgment on each transmission = "; EvaluateVar {${mod},module_x}_acknowledge
@ -359,8 +368,6 @@ ModuleMenu () {
elif [[ "$key" == of* ]]; then eval ${mod}_offset="$value"
elif [[ "$key" == ra* ]]; then eval ${mod}_range="$value"
elif [[ "$key" == ag* ]]; then eval ${mod}_agl="$value"
elif [[ "$key" == uf* ]]; then eval ${mod}_gate2modem${nmod}="$value"
elif [[ "$key" == ut* ]]; then eval ${mod}_modem2gate${nmod}="$value"
elif [[ "$key" == in* ]]; then eval ${mod}_inactivity="$value"
elif [[ "$key" == wa* ]]; then eval ${mod}_packet_wait="$value"
elif [[ "$key" == ac* ]]; then SetBooleanValue ${mod}_acknowledge "$value"
@ -381,7 +388,7 @@ ModuleMenu () {
elif [[ "$key" == gp* ]]; then eval ${mod}_gateway_port="$value"
elif [[ "$key" == lp* ]]; then eval ${mod}_local_port="$value"
elif [[ "$key" == xx* ]]; then
unset ${mod}_{link_at_start,callsign,frequency,offset,range,agl,{gate2modem,modem2gate}${nmod}}
unset ${mod}_{link_at_start,callsign,frequency,offset,range,agl}
unset ${mod}_{inactivity,packet_wait,acknowledge,ack_delay,power,squelch,serial_number,rf_o{n,ff},rx_level}
unset ${mod}_{duplex,tx_delay,rqst_count,inverse_{t,r}x,device,internal_ip,{gateway,local}_port}
unset ${mod}
@ -393,8 +400,6 @@ ModuleMenu () {
elif [[ "$value" == of* ]]; then unset ${mod}_offset
elif [[ "$value" == ra* ]]; then unset ${mod}_range
elif [[ "$value" == ag* ]]; then unset ${mod}_agl
elif [[ "$value" == uf* ]]; then unset ${mod}_gate2modem${nmod}
elif [[ "$value" == ut* ]]; then unset ${mod}_modem2gate${nmod}
elif [[ "$value" == in* ]]; then unset ${mod}_inactivity
elif [[ "$value" == wa* ]]; then unset ${mod}_packet_wait
elif [[ "$value" == ac* ]]; then unset ${mod}_acknowledge

Loading…
Cancel
Save

Powered by TurnKey Linux.