public MissionClient(IMavlinkV2Connection mavlink, MavlinkClientIdentity identity, IPacketSequenceCalculator seq, MissionClientConfig config) : base(mavlink, identity, seq, "MISSION") { _config = config; _missionCurrent = new RxValue <ushort>().DisposeItWith(Disposable); _missionReached = new RxValue <ushort>().DisposeItWith(Disposable); mavlink.FilterVehicle(identity).Filter <MissionCurrentPacket>().Select(_ => _.Payload.Seq).Subscribe(_missionCurrent) .DisposeItWith(Disposable); mavlink.FilterVehicle(identity).Filter <MissionItemReachedPacket>().Select(_ => _.Payload.Seq).Subscribe(_missionReached) .DisposeItWith(Disposable); }
public HeartbeatClient(IMavlinkV2Connection connection, MavlinkClientIdentity config, int heartBeatTimeoutMs = 2000) { _heartBeatTimeoutMs = heartBeatTimeoutMs; connection .FilterVehicle(config) .Select(_ => _.Sequence) .Subscribe(_ => { Interlocked.Exchange(ref _lastPacketId, _); Interlocked.Increment(ref _packetCounter); }, _disposeCancel.Token); connection .FilterVehicle(config) .Where(_ => _.MessageId == HeartbeatPacket.PacketMessageId) .Cast <HeartbeatPacket>() .Select(_ => _.Payload) .Subscribe(_heartBeat); _disposeCancel.Token.Register(() => _heartBeat.Dispose()); connection .FilterVehicle(config) .Select(_ => 1) .Buffer(TimeSpan.FromSeconds(1)) .Select(_ => _.Sum()).Subscribe(_packetRate, _disposeCancel.Token); _disposeCancel.Token.Register(() => _packetRate.Dispose()); Observable.Timer(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)).Subscribe(CheckConnection, _disposeCancel.Token); RawHeartbeat.Subscribe(_ => { if (_disposeCancel.IsCancellationRequested) { return; } _lastHeartbeat = DateTime.Now; _link.Upgrade(); CalculateLinqQuality(); }, _disposeCancel.Token); _disposeCancel.Token.Register(() => _link.Dispose()); }
public MavlinkTelemetry(IMavlinkV2Connection connection, MavlinkClientIdentity config) { _config = config; _connection = connection; _inputPackets = connection.FilterVehicle(config); HandleSystemStatus(); HandleGps(); HandleHighresImu(); HandleVfrHud(); HandleAttitude(); HandleBatteryStatus(); HandleAltitude(); HandleExtendedSysState(); HandleHome(); HandleGlobalPositionInt(); HandleRadioStatus(); }
public LoggingClient(IMavlinkV2Connection connection, MavlinkClientIdentity identity) { if (connection == null) { throw new ArgumentNullException(nameof(connection)); } if (identity == null) { throw new ArgumentNullException(nameof(identity)); } connection .FilterVehicle(identity) .Where(_ => _.MessageId == LoggingDataPacket.PacketMessageId) .Cast <LoggingDataPacket>() .Where(_ => _.Payload.TargetSystem == identity.SystemId && _.Payload.TargetComponent == identity.ComponentId) .Select(_ => _.Payload) .Subscribe(_loggingData, _disposeCancel.Token); _disposeCancel.Token.Register(() => _loggingData.Dispose()); }
public DebugClient(IMavlinkV2Connection connection, MavlinkClientIdentity identity) { _identity = identity; var inputPackets = connection.FilterVehicle(identity); inputPackets .Where(_ => _.MessageId == NamedValueFloatPacket.PacketMessageId) .Cast <NamedValueFloatPacket>() .Select(_ => new KeyValuePair <string, float>(ConvertToKey(_.Payload.Name), _.Payload.Value)) .Subscribe(_onFloatSubject, _disposeCancel.Token); _disposeCancel.Token.Register(() => { _onFloatSubject.OnCompleted(); _onFloatSubject.Dispose(); }); inputPackets .Where(_ => _.MessageId == NamedValueIntPacket.PacketMessageId) .Cast <NamedValueIntPacket>() .Select(_ => new KeyValuePair <string, int>(ConvertToKey(_.Payload.Name), _.Payload.Value)) .Subscribe(_onIntSubject, _disposeCancel.Token); _disposeCancel.Token.Register(() => { _onIntSubject.OnCompleted(); _onIntSubject.Dispose(); }); inputPackets .Where(_ => _.MessageId == DebugFloatArrayPacket.PacketMessageId) .Cast <DebugFloatArrayPacket>() .Select(_ => _.Payload) .Subscribe(_debugFloatArray, _disposeCancel.Token); _disposeCancel.Token.Register(() => _debugFloatArray.Dispose()); }