From c862ae82abc33fc3b113c401b1e6d507f5242cee Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Fri, 2 Jan 2026 10:49:58 -0500 Subject: [PATCH] update fnecore submodule; properly add support for SendP25TDU to send DVM's internal LC_CALL_TERM (this should hopefully fix events where the console can cause a DVM CC to hold a channel open longer then it should); --- dvmconsole/FneSystemBase.P25.cs | 9 ++++++++- dvmconsole/MainWindow.xaml.cs | 12 ++++++------ fnecore | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/dvmconsole/FneSystemBase.P25.cs b/dvmconsole/FneSystemBase.P25.cs index 5f932d7..a1026a9 100644 --- a/dvmconsole/FneSystemBase.P25.cs +++ b/dvmconsole/FneSystemBase.P25.cs @@ -60,9 +60,16 @@ namespace dvmconsole /// /// Helper to send a P25 TDU message. /// + /// + /// /// - public void SendP25TDU(uint srcId, uint dstId, bool grantDemand = false) + /// + public void SendP25TDU(uint srcId, uint dstId, bool grantDemand = false, bool callTerm = false) { + // if this is a call terminator -- also send the internal DVM call termination + if (callTerm) + SendDVMCallTermination(srcId, dstId); + RemoteCallData callData = new RemoteCallData() { SrcId = srcId, diff --git a/dvmconsole/MainWindow.xaml.cs b/dvmconsole/MainWindow.xaml.cs index 2af34a0..52bd3f7 100644 --- a/dvmconsole/MainWindow.xaml.cs +++ b/dvmconsole/MainWindow.xaml.cs @@ -1332,7 +1332,7 @@ namespace dvmconsole double totalDurationMs = ((double)pcmData.Length / 16000) + 250; await Task.Delay((int)totalDurationMs + 3000); - fne.SendP25TDU(uint.Parse(system.Rid), uint.Parse(cpgChannel.Tgid), false); + fne.SendP25TDU(uint.Parse(system.Rid), uint.Parse(cpgChannel.Tgid), false, true); ResetChannel(channel); @@ -2174,7 +2174,7 @@ namespace dvmconsole double totalDurationMs = (toneADuration + toneBDuration) * 1000 + 750; await Task.Delay((int)totalDurationMs + 4000); - fne.SendP25TDU(uint.Parse(system.Rid), uint.Parse(cpgChannel.Tgid), false); + fne.SendP25TDU(uint.Parse(system.Rid), uint.Parse(cpgChannel.Tgid), false, true); Dispatcher.Invoke(() => { @@ -2499,7 +2499,7 @@ namespace dvmconsole if (e.PageState) fne.SendP25TDU(uint.Parse(system.Rid), uint.Parse(cpgChannel.Tgid), true); else - fne.SendP25TDU(uint.Parse(system.Rid), uint.Parse(cpgChannel.Tgid), false); + fne.SendP25TDU(uint.Parse(system.Rid), uint.Parse(cpgChannel.Tgid), false, true); } /// @@ -2564,7 +2564,7 @@ namespace dvmconsole e.VolumeMeterLevel = 0; Log.WriteLine($"({system.Name}) {e.ChannelMode.ToUpperInvariant()} Traffic *CALL END * SRC_ID {srcId} TGID {dstId} [STREAM ID {e.TxStreamId}]"); if (cpgChannel.GetChannelMode() == Codeplug.ChannelMode.P25) - fne.SendP25TDU(srcId, dstId, false); + fne.SendP25TDU(srcId, dstId, false, true); else if (cpgChannel.GetChannelMode() == Codeplug.ChannelMode.DMR) fne.SendDMRTerminator(srcId, dstId, 1, e.dmrSeqNo, e.dmrN, e.embeddedData); @@ -2683,7 +2683,7 @@ namespace dvmconsole Log.WriteLine($"({system.Name}) {e.ChannelMode.ToUpperInvariant()} Traffic *CALL END * SRC_ID {srcId} TGID {dstId} [STREAM ID {e.TxStreamId}]"); e.VolumeMeterLevel = 0; if (cpgChannel.GetChannelMode() == Codeplug.ChannelMode.P25) - fne.SendP25TDU(srcId, dstId, false); + fne.SendP25TDU(srcId, dstId, false, true); else if (cpgChannel.GetChannelMode() == Codeplug.ChannelMode.DMR) fne.SendDMRTerminator(srcId, dstId, 1, e.dmrSeqNo, e.dmrN, e.embeddedData); @@ -2972,7 +2972,7 @@ namespace dvmconsole channel.PttState = false; }); - fne.SendP25TDU(uint.Parse(system.Rid), uint.Parse(cpgChannel.Tgid), false); + fne.SendP25TDU(uint.Parse(system.Rid), uint.Parse(cpgChannel.Tgid), false, true); } } } diff --git a/fnecore b/fnecore index f5c240d..11206a3 160000 --- a/fnecore +++ b/fnecore @@ -1 +1 @@ -Subproject commit f5c240d55d75b594c44d912a411d005130a0800b +Subproject commit 11206a353ff36aa503cc5955432838a14214b626