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