correct issue with call drop not setting the stream ID resulting in badness; add timestamp to the call history window; add settings option to snap the call history window to the right side of the console;

pull/1/head
Bryan Biedenkapp 11 months ago
parent ef991bac72
commit 52ea75bd78

@ -5,7 +5,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:dvmconsole"
mc:Ignorable="d" Icon="/dvmconsole;component/Assets/history.png"
Title="Call History" Height="450" Width="351" WindowStartupLocation="CenterOwner">
Title="Call History" Height="450" Width="551" WindowStartupLocation="CenterOwner">
<Grid>
<DataGrid ItemsSource="{Binding CallHistory}" AutoGenerateColumns="False" IsReadOnly="True" Margin="10">
<DataGrid.RowStyle>
@ -17,6 +17,7 @@
<DataGridTextColumn Header="Channel" Binding="{Binding Channel}" Width="*" />
<DataGridTextColumn Header="Radio ID" Binding="{Binding SrcId}" Width="*" />
<DataGridTextColumn Header="Talkgroup" Binding="{Binding DstId}" Width="*" />
<DataGridTextColumn Header="Timestamp" Binding="{Binding Timestamp}" Width="*" />
</DataGrid.Columns>
</DataGrid>
</Grid>

@ -42,6 +42,11 @@ namespace dvmconsole
/// </summary>
public int DstId { get; set; }
/// <summary>
/// Timestamp for entry.
/// </summary>
public string Timestamp { get; set; }
/// <summary>
/// Background color for call entry.
/// </summary>
@ -123,7 +128,7 @@ namespace dvmconsole
/// <param name="channel"></param>
/// <param name="srcId"></param>
/// <param name="dstId"></param>
public void AddCall(string channel, int srcId, int dstId)
public void AddCall(string channel, int srcId, int dstId, string timestamp)
{
Dispatcher.Invoke(() =>
{
@ -132,6 +137,7 @@ namespace dvmconsole
Channel = channel,
SrcId = srcId,
DstId = dstId,
Timestamp = timestamp,
BackgroundColor = Brushes.Transparent
});
});

@ -282,7 +282,7 @@ namespace dvmconsole
systemStatuses[cpgChannel.Name + e.Slot].DMR_RxPILC = new PrivacyLC();
Log.WriteLine($"({system.Name}) TS {e.Slot + 1} [STREAM ID {e.StreamId}] RX_LC {FneUtils.HexDump(systemStatuses[cpgChannel.Name + e.Slot].DMR_RxLC.GetBytes())}");
callHistoryWindow.AddCall(cpgChannel.Name, (int)e.SrcId, (int)e.DstId);
callHistoryWindow.AddCall(cpgChannel.Name, (int)e.SrcId, (int)e.DstId, DateTime.Now.ToString());
callHistoryWindow.ChannelKeyed(cpgChannel.Name, (int)e.SrcId, false); // TODO: Encrypted state
string alias = string.Empty;

@ -458,6 +458,9 @@ namespace dvmconsole
if (cpgChannel.Tgid != e.DstId.ToString())
continue;
if (e.DUID == P25DUID.TSDU || e.DUID == P25DUID.PDU)
continue;
if (!systemStatuses.ContainsKey(cpgChannel.Name))
systemStatuses[cpgChannel.Name] = new SlotStatus();
@ -494,7 +497,7 @@ namespace dvmconsole
FneUtils.Memset(channel.mi, 0x00, P25Defines.P25_MI_LENGTH);
callHistoryWindow.AddCall(cpgChannel.Name, (int)e.SrcId, (int)e.DstId);
callHistoryWindow.AddCall(cpgChannel.Name, (int)e.SrcId, (int)e.DstId, DateTime.Now.ToString());
callHistoryWindow.ChannelKeyed(cpgChannel.Name, (int)e.SrcId, encrypted);
string alias = string.Empty;
@ -533,6 +536,7 @@ namespace dvmconsole
if ((channel.algId != cpgChannel.GetAlgoId() || channel.kId != cpgChannel.GetKeyId()) && channel.algId != P25Defines.P25_ALGO_UNENCRYPT)
{
slot.RxStreamId = e.StreamId;
channel.Background = ChannelBox.RED_GRADIENT;
Log.WriteLine($"({system.Name}) P25D: Traffic *CALL DROPPED * PEER {e.PeerId} SRC_ID {e.SrcId} TGID {e.DstId} [STREAM ID {e.StreamId}]");
continue;

@ -58,6 +58,7 @@
<Separator />
<MenuItem Header="_Lock Widgets" IsCheckable="True" Checked="ToggleLockWidgets_Click" Unchecked="ToggleLockWidgets_Click" x:Name="menuToggleLockWidgets" />
<MenuItem Header="_Fit Channel Display to Window Size" Click="ResizeCanvasToWindow_Click" x:Name="menuFitToWindow" />
<MenuItem Header="_Snap Call History To Window" IsCheckable="True" Checked="ToggleSnapCallHistory_Click" Unchecked="ToggleSnapCallHistory_Click" x:Name="menuSnapCallHistory" />
</MenuItem>
</Menu>

@ -169,10 +169,15 @@ namespace dvmconsole
selectedChannelsManager.SelectedChannelsChanged += SelectedChannelsChanged;
selectedChannelsManager.PrimaryChannelChanged += PrimaryChannelChanged;
LocationChanged += MainWindow_LocationChanged;
SizeChanged += MainWindow_SizeChanged;
Loaded += MainWindow_Loaded;
}
/// <summary>
///
/// </summary>
private void PrimaryChannelChanged()
{
var primaryChannel = selectedChannelsManager.PrimaryChannel;
@ -249,6 +254,11 @@ namespace dvmconsole
{
DisableControls();
channelsCanvas.Children.Clear();
systemStatuses.Clear();
fneSystemManager.ClearAll();
try
{
var deserializer = new DeserializerBuilder()
@ -914,7 +924,11 @@ namespace dvmconsole
if (!noSaveSettingsOnClose)
{
if (WindowState == WindowState.Maximized)
{
settingsManager.Maximized = true;
if (settingsManager.SnapCallHistoryToWindow)
menuSnapCallHistory.IsChecked = false;
}
settingsManager.SaveSettings();
}
@ -1007,6 +1021,22 @@ namespace dvmconsole
/** WPF Window Events */
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <exception cref="NotImplementedException"></exception>
private void MainWindow_LocationChanged(object sender, EventArgs e)
{
if (settingsManager.SnapCallHistoryToWindow && callHistoryWindow.Visibility == Visibility.Visible &&
WindowState != WindowState.Maximized)
{
callHistoryWindow.Left = Left + ActualWidth + 5;
callHistoryWindow.Top = Top;
}
}
/// <summary>
///
/// </summary>
@ -1042,6 +1072,14 @@ namespace dvmconsole
else
settingsManager.Maximized = false;
if (settingsManager.SnapCallHistoryToWindow && callHistoryWindow.Visibility == Visibility.Visible &&
WindowState != WindowState.Maximized)
{
callHistoryWindow.Height = ActualHeight;
callHistoryWindow.Left = Left + ActualWidth + 5;
callHistoryWindow.Top = Top;
}
settingsManager.CanvasWidth = channelsCanvas.ActualWidth;
settingsManager.CanvasHeight = channelsCanvas.ActualHeight;
@ -1061,6 +1099,7 @@ namespace dvmconsole
// set PTT toggle mode (this must be done before channel widgets are defined)
menuToggleLockWidgets.IsChecked = settingsManager.LockWidgets;
menuSnapCallHistory.IsChecked = settingsManager.SnapCallHistoryToWindow;
menuTogglePTTMode.IsChecked = settingsManager.TogglePTTMode;
if (!string.IsNullOrEmpty(settingsManager.LastCodeplugPath) && File.Exists(settingsManager.LastCodeplugPath))
@ -1515,6 +1554,19 @@ namespace dvmconsole
settingsManager.LockWidgets = !settingsManager.LockWidgets;
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ToggleSnapCallHistory_Click(object sender, RoutedEventArgs e)
{
if (!windowLoaded)
return;
settingsManager.SnapCallHistoryToWindow = !settingsManager.SnapCallHistoryToWindow;
}
/// <summary>
///
/// </summary>
@ -2176,7 +2228,21 @@ namespace dvmconsole
private void CallHist_Click(object sender, RoutedEventArgs e)
{
callHistoryWindow.Owner = this;
if (callHistoryWindow.Visibility == Visibility.Visible)
callHistoryWindow.Hide();
else
{
callHistoryWindow.Show();
if (settingsManager.SnapCallHistoryToWindow && WindowState != WindowState.Maximized)
{
if (ActualHeight > callHistoryWindow.Height)
callHistoryWindow.Height = ActualHeight;
callHistoryWindow.Left = Left + ActualWidth + 5;
callHistoryWindow.Top = Top;
}
}
}
/** fnecore Hooks / Helpers */

@ -90,6 +90,10 @@ namespace dvmconsole
/// Flag indicating channel and other widgets are locked in place.
/// </summary>
public bool LockWidgets { get; set; } = true;
/// <summary>
/// Flag indicating whether or not the call history window should be snapped to the right of the main window.
/// </summary>
public bool SnapCallHistoryToWindow { get; set; } = false;
/// <summary>
/// Flag indicating window maximized state.
@ -159,6 +163,7 @@ namespace dvmconsole
ChannelOutputDevices = loadedSettings.ChannelOutputDevices ?? new Dictionary<string, int>();
TogglePTTMode = loadedSettings.TogglePTTMode;
LockWidgets = loadedSettings.LockWidgets;
SnapCallHistoryToWindow = loadedSettings.SnapCallHistoryToWindow;
Maximized = loadedSettings.Maximized;
DarkMode = loadedSettings.DarkMode;
WindowWidth = loadedSettings.WindowWidth;

Loading…
Cancel
Save

Powered by TurnKey Linux.