handle 24 byte packets from DStarRepeater

dev
Tom Early 5 years ago
parent 77470c58a2
commit 50c0795533

@ -1522,7 +1522,7 @@ void CQnetLink::ProcessXRF(unsigned char *buf, const int length)
memcpy(rdsvt.dsvt.title, dsvt.title, 27); memcpy(rdsvt.dsvt.title, dsvt.title, 27);
if (32U == rdsvt.head[0]) if (32U == rdsvt.head[0])
memcpy(rdsvt.dsvt.vend.end, endbytes, 6); memcpy(rdsvt.dsvt.vend.textend, endbytes, 6);
REFWrite(rdsvt.head, rdsvt.head[0], inbound->addr); REFWrite(rdsvt.head, rdsvt.head[0], inbound->addr);
} }
@ -1571,7 +1571,7 @@ void CQnetLink::ProcessXRF(unsigned char *buf, const int length)
memcpy(rdsvt.dsvt.title, dsvt.title, 27); memcpy(rdsvt.dsvt.title, dsvt.title, 27);
if (32U == rdsvt.head[0]) if (32U == rdsvt.head[0])
memcpy(rdsvt.dsvt.vend.end, endbytes, 6); memcpy(rdsvt.dsvt.vend.textend, endbytes, 6);
REFWrite(rdsvt.head, rdsvt.head[0], to_remote_g2[i].addr); REFWrite(rdsvt.head, rdsvt.head[0], to_remote_g2[i].addr);
} }
else if (to_remote_g2[i].addr.GetPort() == rmt_dcs_port) else if (to_remote_g2[i].addr.GetPort() == rmt_dcs_port)
@ -1749,7 +1749,7 @@ void CQnetLink::ProcessDCS(unsigned char *dcs_buf, const int length)
rdsvt.dsvt.ctrl = dcs_buf[45]; rdsvt.dsvt.ctrl = dcs_buf[45];
memcpy(rdsvt.dsvt.vasd.voice, dcs_buf+46, 12); memcpy(rdsvt.dsvt.vasd.voice, dcs_buf+46, 12);
if (dcs_buf[45] & 0x40U) if (dcs_buf[45] & 0x40U)
memcpy(rdsvt.dsvt.vend.end, endbytes, 6); memcpy(rdsvt.dsvt.vend.textend, endbytes, 6);
/* send the data to the local gateway/repeater */ /* send the data to the local gateway/repeater */
ToGate.Write(rdsvt.dsvt.title, 27); ToGate.Write(rdsvt.dsvt.title, 27);
@ -3223,7 +3223,7 @@ void CQnetLink::Process()
memcpy(rdsvt.dsvt.title, dsvt.title, 27); memcpy(rdsvt.dsvt.title, dsvt.title, 27);
if (dsvt.ctrl & 0x40U) if (dsvt.ctrl & 0x40U)
memcpy(rdsvt.dsvt.vend.end, endbytes, 6); memcpy(rdsvt.dsvt.vend.textend, endbytes, 6);
if (inbound_list.size() > 0) if (inbound_list.size() > 0)
{ {

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2018,2020 by Thomas A. Early N7TAE * Copyright (C) 2018-2021 by Thomas A. Early N7TAE
* *
* 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
@ -36,7 +36,7 @@
#include "QnetTypeDefs.h" #include "QnetTypeDefs.h"
#include "QnetConfigure.h" #include "QnetConfigure.h"
#define RELAY_VERSION "QnetRelay-526" #define RELAY_VERSION "210408"
CQnetRelay::CQnetRelay(int mod) : CQnetRelay::CQnetRelay(int mod) :
assigned_module(mod), assigned_module(mod),
@ -293,7 +293,7 @@ bool CQnetRelay::ProcessMMDVM(const int len, const unsigned char *raw)
if (len < 65) if (len < 65)
::memcpy(dsrp.title, raw, len); // transfer raw data to SDSRP struct ::memcpy(dsrp.title, raw, len); // transfer raw data to SDSRP struct
if (49==len || 21==len) if (49==len || 21==len || len==24)
{ {
// grab the stream id if this is a header // grab the stream id if this is a header
if (49 == len) if (49 == len)
@ -338,10 +338,10 @@ bool CQnetRelay::ProcessMMDVM(const int len, const unsigned char *raw)
if (log_qso) if (log_qso)
printf("Sent DSVT streamid=%04x ur=%.8s r1=%.8s r2=%.8s my=%.8s/%.4s\n", ntohs(dsvt.streamid), dsvt.hdr.urcall, dsvt.hdr.rpt1, dsvt.hdr.rpt2, dsvt.hdr.mycall, dsvt.hdr.sfx); printf("Sent DSVT streamid=%04x ur=%.8s r1=%.8s r2=%.8s my=%.8s/%.4s\n", ntohs(dsvt.streamid), dsvt.hdr.urcall, dsvt.hdr.rpt1, dsvt.hdr.rpt2, dsvt.hdr.mycall, dsvt.hdr.sfx);
} }
else if (21 == len) // ambe else // ambe
{ {
dsvt.ctrl = dsrp.header.seq; dsvt.ctrl = dsrp.header.seq;
memcpy(dsvt.vasd.voice, dsrp.voice.ambe, 12); memcpy(dsvt.vasd.voice, dsrp.voice.ambe, (21==len)?12:15);
if (ToGate.Write(dsvt.title, 27)) if (ToGate.Write(dsvt.title, 27))
{ {
@ -442,7 +442,7 @@ int main(int argc, const char **argv)
if ('-' == argv[1][0]) if ('-' == argv[1][0])
{ {
printf("\nQnetRelay Version #%s Copyright (C) 2018-2019 by Thomas A. Early N7TAE\n", RELAY_VERSION); printf("\nQnetRelay Version #%s Copyright (C) 2018-2021 by Thomas A. Early N7TAE\n", RELAY_VERSION);
printf("QnetRelay comes with ABSOLUTELY NO WARRANTY; see the LICENSE for details.\n"); printf("QnetRelay comes with ABSOLUTELY NO WARRANTY; see the LICENSE for details.\n");
printf("This is free software, and you are welcome to distribute it\nunder certain conditions that are discussed in the LICENSE file.\n\n"); printf("This is free software, and you are welcome to distribute it\nunder certain conditions that are discussed in the LICENSE file.\n\n");
return 0; return 0;

@ -1,6 +1,6 @@
#pragma once #pragma once
/* /*
* Copyright 2017-2020 by Thomas Early, N7TAE * Copyright 2017-2021 by Thomas Early, N7TAE
* *
* 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
@ -103,7 +103,7 @@ using SDSVT = struct dsvt_tag
struct struct
{ {
unsigned char voice[9]; // 15 unsigned char voice[9]; // 15
unsigned char end[6]; // 24 unsigned char textend[6]; // 24
} vend; // voice and end seq total 32 (for DPlus) } vend; // voice and end seq total 32 (for DPlus)
}; };
}; };
@ -142,6 +142,14 @@ using SDSRP = struct dsrp_tag // offset size
unsigned char err; // # of errors? 8 unsigned char err; // # of errors? 8
unsigned char ambe[12]; // voice + slow data 9 21 unsigned char ambe[12]; // voice + slow data 9 21
} voice; } voice;
struct
{
unsigned short id; // random id number 5
unsigned char seq; // sequence from 0 to 0x14 7
// if end then sequence |= 0x40
unsigned char err; // # of errors? 8
unsigned char ambe[15]; // voice + slow data 9 24
} endvoice;
}; };
}; };
#pragma pack(pop) #pragma pack(pop)

Loading…
Cancel
Save

Powered by TurnKey Linux.