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); }
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); }
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)); }