Ejemplo n.º 1
0
 public GroundControlStation()
 {
     MavlinkV2 = new MavlinkV2Connection(Ports, _ =>
     {
         _.RegisterCommonDialect();
         _.RegisterArdupilotmegaDialect();
         _.RegisterIcarousDialect();
         _.RegisterUavionixDialect();
     });
     _cancel.Token.Register(() => _foundDeviceSubject.Dispose());
     _cancel.Token.Register(() => _lostDeviceSubject.Dispose());
     MavlinkV2.Where(_ => _.MessageId == HeartbeatPacket.PacketMessageId).Cast <HeartbeatPacket>().Subscribe(DeviceFounder, _cancel.Token);
     Observable.Timer(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)).Subscribe(_ => RemoveOldDevice(), _cancel.Token);
 }
        public GroundControlStation(GroundControlStationIdentity config, IPacketSequenceCalculator sequenceCalculator = null, int sendHeartBeatMs = 0)
        {
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }
            _seq    = sequenceCalculator ?? new PacketSequenceCalculator();
            _config = config;

            MavlinkV2 = new MavlinkV2Connection(Ports, _ =>
            {
                _.RegisterMinimalDialect();
                _.RegisterCommonDialect();
                _.RegisterArdupilotmegaDialect();
                _.RegisterIcarousDialect();
                _.RegisterUavionixDialect();
            });
            _cancel.Token.Register(() =>
            {
                _foundDeviceSubject.OnCompleted();
                _foundDeviceSubject.Dispose();
            });
            _cancel.Token.Register(() =>
            {
                _lostDeviceSubject.OnCompleted();
                _lostDeviceSubject.Dispose();
            });
            MavlinkV2.Where(_ => _.MessageId == HeartbeatPacket.PacketMessageId).Cast <HeartbeatPacket>().Subscribe(DeviceFounder, _cancel.Token);
            Observable.Timer(TimeSpan.FromSeconds(3), TimeSpan.FromSeconds(3)).Subscribe(_ => RemoveOldDevice(), _cancel.Token);

            if (sendHeartBeatMs != 0)
            {
                _transponder = new MavlinkPacketTransponder <HeartbeatPacket, HeartbeatPayload>(MavlinkV2, new MavlinkPayloadIdentity {
                    ComponenId = _config.ComponentId, SystemId = _config.SystemId
                }, _seq);
                _transponder.Set(_ =>
                {
                    _.Autopilot      = MavAutopilot.MavAutopilotInvalid;
                    _.BaseMode       = 0;
                    _.CustomMode     = 0;
                    _.MavlinkVersion = 3;
                    _.SystemStatus   = MavState.MavStateActive;
                    _.Type           = MavType.MavTypeGcs;
                });
                _transponder.Start(TimeSpan.FromMilliseconds(sendHeartBeatMs));
            }
        }