コード例 #1
0
        public MavlinkPayloadServer(MavlinkPayloadServerConfig cfg, bool sendHeartBeatMessages = true)
        {
            _logger.Info($"Create mavlink payload server: cs:{cfg.ConnectionString}, comId:{cfg.Identity.ComponenId}, sysId:{cfg.Identity.SystemId}, netId:{cfg.Identity.NetworkId}");
            _conn = new MavlinkV2Connection(cfg.ConnectionString, _ =>
            {
                _.RegisterMinimalDialect();
                _.RegisterCommonDialect();
                _.RegisterArdupilotmegaDialect();
                _.RegisterIcarousDialect();
                _.RegisterUavionixDialect();
            });
            _srv = new MavlinkServerBase(_conn, cfg.Identity);

            _identity = cfg.Identity;
            _srv.Heartbeat.Set(_ =>
            {
                _.Autopilot      = MavAutopilot.MavAutopilotGeneric;
                _.Type           = MavType.MavTypeGeneric;
                _.SystemStatus   = MavState.MavStateActive;
                _.MavlinkVersion = 3;
                _.CustomMode     = PayloadHelper.HeartbeatMagicDigit;
            });

            if (sendHeartBeatMessages)
            {
                _srv.Heartbeat.Start();
            }

            _srv.V2Extension.OnData.Where(CheckPacketTarget).Subscribe(OnData, _disposeCancel.Token);
        }
コード例 #2
0
        public Pv2ServerDeviceBase(IMavlinkV2Connection connection, IConfiguration cfgSvc,
                                   IEnumerable <Pv2ParamType> paramList, Pv2DeviceClass @class, IEnumerable <IWorkModeFactory> workModes,
                                   IChunkStore rttStore,
                                   IEnumerable <Pv2RttRecordDesc> rttRecords,
                                   IEnumerable <Pv2RttFieldDesc> rttFields, string configSuffix = "PV2")
        {
            var systemId    = (byte)Pv2DeviceParams.SystemId.ReadFromConfigValue(cfgSvc, configSuffix);
            var componentId = (byte)Pv2DeviceParams.ComponentId.ReadFromConfigValue(cfgSvc, configSuffix);
            var networkId   = (byte)Pv2DeviceParams.NetworkId.ReadFromConfigValue(cfgSvc, configSuffix);

            Seq = new PacketSequenceCalculator();
            var mavlinkServer = new MavlinkServerBase(connection, new MavlinkServerIdentity
            {
                ComponentId = componentId,
                SystemId    = systemId
            }, Seq).DisposeItWith(Disposable);

            _payloadServer = new PayloadV2Server(mavlinkServer, networkId).DisposeItWith(Disposable);

            var defaultParamsList =
                Pv2DeviceParams.Params.Concat(paramList)
                .Concat(Pv2BaseInterface.Params)
                .Concat(Pv2PowerInterface.Params)
                .Concat(Pv2RttInterface.Params)
                .Concat(Pv2MissionInterface.Params);

            _params = new Pv2ServerParamsInterface(_payloadServer, cfgSvc, defaultParamsList, configSuffix)
                      .DisposeItWith(Disposable);

            _base = new Pv2ServerBaseInterface(_payloadServer, @class, workModes).DisposeItWith(Disposable);

            _power = new Pv2ServerPowerInterface(_payloadServer, _params).DisposeItWith(Disposable);

            _rtt = new Pv2ServerRttInterface(_payloadServer, _base, _params, rttStore, rttRecords, rttFields)
                   .DisposeItWith(Disposable);

            _mission = new Pv2ServerMissionInterface(_payloadServer, _rtt, _base).DisposeItWith(Disposable);

            _base.OnLogMessage.Merge(_params.OnLogMessage).Merge(_power.OnLogMessage).Merge(_mission.OnLogMessage)
            .Subscribe(_ => Server.Server.StatusText.Log(_)).DisposeItWith(Disposable);
        }
コード例 #3
0
        public static IPayloadV2Server CreateServer(out int port, byte compId = 1, byte sysId = 1)
        {
            port = GetAvailablePort();
            var serverPort = PortFactory.Create($"tcp://127.0.0.1:{port}?srv=true");

            serverPort.Enable();

            var serverConnection = new MavlinkV2Connection(serverPort, _ =>
            {
                _.RegisterMinimalDialect();
                _.RegisterCommonDialect();
                _.RegisterArdupilotmegaDialect();
                _.RegisterIcarousDialect();
                _.RegisterUavionixDialect();
            });
            var mavlinkServer = new MavlinkServerBase(serverConnection,
                                                      new MavlinkServerIdentity {
                ComponentId = compId, SystemId = sysId
            });

            mavlinkServer.Heartbeat.Set(_ => _.Autopilot = MavAutopilot.MavAutopilotGeneric);
            mavlinkServer.Heartbeat.Start();
            return(new PayloadV2Server(mavlinkServer));
        }