private void recvTable_SelectionChanged(object sender, SelectionChangedEventArgs e) { RecvMsgViewHolder item = (RecvMsgViewHolder)recvTable.SelectedItem; if (item == null || item.Message == null) { recvMsgProperties.Items.Clear(); } else { var parser = item.Message.BuildParser(); if (parser != null) { recvMsgProperties.Items.Clear(); foreach (var pair in parser.ToStringMap()) { var viewmodel = new PropViewModel(pair.Key, pair.Value); recvMsgProperties.Items.Add(viewmodel); } } else { recvMsgProperties.Items.Clear(); } } }
private async void LoadDump_OnClick(object?sender, RoutedEventArgs e) { OpenFileDialog dlg = new OpenFileDialog { Filters = _filters, AllowMultiple = false }; string[]? paths = await dlg.ShowAsync(this); if (paths == null || paths.Length < 1) { return; } ArrayList data; try { data = new ArrayList(await File.ReadAllBytesAsync(paths[0])); _cache.Clear(); _cache.AddRange((byte[])data.ToArray(typeof(byte))); _hexDump.Text = HexUtils.Dump(_cache.ToArray()); } catch (Exception ex) { await new MessageBox { Title = "Error while reading file", Description = ex.Message }.ShowDialog(this); return; } do { try { SPPMessage msg = SPPMessage.DecodeMessage((byte[])data.ToArray(typeof(byte))); RecvMsgViewHolder holder = new RecvMsgViewHolder(msg); _vm.MsgTableDataSource?.Add(holder); if (msg.TotalPacketSize >= data.Count) { break; } data.RemoveRange(0, msg.TotalPacketSize); } catch (InvalidPacketException ex) { await new MessageBox { Title = "Error while parsing file", Description = ex.Message }.ShowDialog(this); _vm.MsgTableDataView.Refresh(); return; } } while (data.Count > 0); _vm.MsgTableDataView.Refresh(); }
private void BluetoothServiceMessageReceived(object sender, SPPMessage e) { Dispatcher.BeginInvoke((Action)(() => { RecvMsgViewHolder holder = new RecvMsgViewHolder(e); recvTable.Items.Add(holder); })); }
private void CopySelectedCell_OnExecuted(object sender, ExecutedRoutedEventArgs e) { RecvMsgViewHolder item = (RecvMsgViewHolder)recvTable.SelectedItem; if (item != null) { Clipboard.SetText(item.Payload); } }
private void MenuParseDump_Click(object sender, RoutedEventArgs e) { Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog { DefaultExt = ".hex", Filter = "Hex dump|*.hex|All files|*.*" }; bool?result = dlg.ShowDialog(); // Process file dialog box results if (result == true) { try { ArrayList data = new ArrayList(File.ReadAllBytes(dlg.FileName)); Dispatcher.BeginInvoke((Action)(() => { _cache.Clear(); _cache.AddRange((byte[])data.ToArray(typeof(byte))); hexDump.Text = Hex.Dump(_cache.ToArray()); do { try { SPPMessage msg = SPPMessage.DecodeMessage((byte[])data.ToArray(typeof(byte))); RecvMsgViewHolder holder = new RecvMsgViewHolder(msg); recvTable.Items.Add(holder); if (msg.TotalPacketSize >= data.Count) { break; } data.RemoveRange(0, msg.TotalPacketSize); } catch (InvalidDataException ex) { Console.WriteLine("Error while parsing dump: " + ex.Message); } } while (data.Count > 0); })); } catch (Exception ex) { MessageBox.Show(this, "Error", ex.Message, MessageBoxButton.OK, MessageBoxImage.Error); } } }
private void OnNewDataReceived(object?sender, byte[] raw) { Dispatcher.UIThread.Post(() => { try { _cache.AddRange(raw); _hexDump.Text = HexUtils.Dump(_cache.ToArray()); RecvMsgViewHolder holder = new RecvMsgViewHolder(SPPMessage.DecodeMessage(raw)); _vm.MsgTableDataSource?.Add(holder); _vm.MsgTableDataView.Refresh(); } catch (InvalidPacketException) {} }); }