public BusMonitorControl(UavcanInstance uavcan) { _serializer = uavcan.Serializer; InitializeComponent(); var filter = TableFilterSet.ViewModel; ViewModel = new BusMonitorViewModel(uavcan, filter); this.WhenActivated(disposableRegistration => { this.OneWayBind(ViewModel, vm => vm.Items, v => v.dgFrames.ItemsSource) .DisposeWith(disposableRegistration); this.BindCommand(ViewModel, vm => vm.AddFilter, v => v.AddFilterButton) .DisposeWith(disposableRegistration); this.BindCommand(ViewModel, vm => vm.ClearItems, v => v.ClearButton) .DisposeWith(disposableRegistration); this.Bind(ViewModel, vm => vm.Enabled, v => v.EnabledButton.IsChecked) .DisposeWith(disposableRegistration); }); }
internal LogViewerViewModel(UavcanInstance uavcan, TableFilterSetViewModel filter) { _serializer = uavcan.Serializer; ResolveTypes(uavcan.TypeResolver); var messageReceived = Observable.FromEventPattern <EventHandler <TransferReceivedArgs>, TransferReceivedArgs>( handler => uavcan.MessageReceived += handler, handler => uavcan.MessageReceived -= handler); var logItemsFiller = messageReceived .Select(x => GetLogMessage(x)) .Where(x => x != null) .Subscribe(m => _logItemsSource.Add(m)); var filterObservable = filter.WhenValueChanged(t => t.Filter) .Select(BuildFilter); var sourceBuilder = _logItemsSource .Connect() .Filter(filterObservable) .ObserveOn(RxApp.MainThreadScheduler) .Bind(out _logItems) .Subscribe(); AddFilter = ReactiveCommand.Create(() => filter.AddFilter()); _cleanUp = new CompositeDisposable(logItemsFiller, sourceBuilder, filter); }
public static byte[] Serialize <T>(this DsdlSerializer serializer, T data) { var buffer = new byte[serializer.GetMaxBufferLength <T>()]; serializer.Serialize <T>(data, buffer); return(buffer); }
public static void Test(object data, string expectedSerializedContent, bool doRoundtripTest) { var expectedBytes = Hex.Decode(expectedSerializedContent); var serializer = new DsdlSerializer(_uavcanTypeResolver); var bufferLength = serializer.GetMaxBufferLength(data.GetType()); var buffer = new byte[bufferLength]; var size = serializer.Serialize(data, buffer); buffer = buffer.Take(size).ToArray(); Assert.True(expectedBytes.SequenceEqual(buffer), "Serialized payload mismatch."); var deserialized = serializer.Deserialize(data.GetType(), buffer); if (doRoundtripTest) { var comparisonResult = _compareLogic.Compare(data, deserialized); if (!comparisonResult.AreEqual) { bool ignoreInequality = true; foreach (var diff in comparisonResult.Differences) { if (!ignoreInequality) { break; } if (diff.Object1 is float f1 && diff.Object2 is float f2) { var fdiff = Math.Abs(f1 - f2); if (fdiff > 0.0001) { ignoreInequality = false; } } else { ignoreInequality = false; } } Assert.True(ignoreInequality, comparisonResult.DifferencesString); }
public UavcanInstance(IUavcanTypeResolver typeResolver) { TypeResolver = typeResolver; Serializer = new DsdlSerializer(typeResolver); _framesProcessor = new CanFramesProcessor(ShouldAcceptTransfer); }