Пример #1
0
        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);
            });
        }
Пример #2
0
        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);
        }
Пример #3
0
        public static byte[] Serialize <T>(this DsdlSerializer serializer, T data)
        {
            var buffer = new byte[serializer.GetMaxBufferLength <T>()];

            serializer.Serialize <T>(data, buffer);
            return(buffer);
        }
Пример #4
0
        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);
                }
Пример #5
0
 public UavcanInstance(IUavcanTypeResolver typeResolver)
 {
     TypeResolver     = typeResolver;
     Serializer       = new DsdlSerializer(typeResolver);
     _framesProcessor = new CanFramesProcessor(ShouldAcceptTransfer);
 }