예제 #1
0
        public AASettings(ISettings settings, IAltitudeAngelService altitudeAngelService, IMissionPlanner missionPlanner)
        {
            _settings             = settings;
            _altitudeAngelService = altitudeAngelService;
            _missionPlanner       = missionPlanner;
            InitializeComponent();

            ThemeManager.ApplyThemeTo(this);

            // load settings
            chk_grounddata.Checked             = _settings.GroundDataDisplay;
            chk_airdata.Checked                = _settings.AirDataDisplay;
            chk_FlightReportEnable.Checked     = _settings.FlightReportEnable;
            txt_FlightReportName.Text          = _settings.FlightReportName;
            chk_FlightReportCommercial.Checked = _settings.FlightReportCommercial;
            txt_FlightReportDuration.Text      =
                ((int)_settings.FlightReportTimeSpan.TotalMinutes).ToString();

            but_enable.Enabled  = !_altitudeAngelService.IsSignedIn;
            but_disable.Enabled = _altitudeAngelService.IsSignedIn;

            foreach (var item in AltitudeAngelWings.ApiClient.Client.Extensions.FiltersSeen)
            {
                if (_altitudeAngelService.FilteredOut.Contains(item))
                {
                    chklb_layers.Items.Add(item, false);
                }
                else
                {
                    chklb_layers.Items.Add(item, true);
                }
            }

            RefreshControlStates();
        }
        public AltitudeAngelService(
            IMessagesService messagesService,
            IMissionPlanner missionPlanner,
            FlightDataService flightDataService
            )
        {
            _messagesService   = messagesService;
            _missionPlanner    = missionPlanner;
            _flightDataService = flightDataService;
            IsSignedIn         = new ObservableProperty <bool>(false);
            WeatherReport      = new ObservableProperty <WeatherInfo>();
            SentTelemetry      = new ObservableProperty <Unit>();

            CreateClient((url, apiUrl, state) =>
                         new AltitudeAngelClient(url, apiUrl, state,
                                                 (authUrl, existingState) => new AltitudeAngelHttpHandlerFactory(authUrl, existingState)));

            _disposer.Add(_missionPlanner.FlightDataMap
                          .MapChanged
                          .Throttle(TimeSpan.FromSeconds(1))
                          .Subscribe(i => UpdateMapData(_missionPlanner.FlightDataMap)));

            try
            {
                var list = JsonConvert.DeserializeObject <List <string> >(_missionPlanner.LoadSetting("AAWings.Filters"));

                FilteredOut.AddRange(list.Distinct());
            } catch
            {
            }

            TryConnect();
        }
예제 #3
0
        public FlightService(
            IMessagesService messagesService,
            IMissionPlanner missionPlanner,
            ISettings settings,
            IFlightDataService flightDataService,
            IAltitudeAngelClient client,
            IOutboundNotifsService notificationsService)
        {
            _messagesService                = messagesService;
            _missionPlanner                 = missionPlanner;
            _settings                       = settings;
            _client                         = client;
            _notificationsService           = notificationsService;
            _settings.CurrentFlightReportId = null;
            _settings.CurrentFlightId       = null;

            if (_settings.SurveillanceMode)
            {
                _disposer.Add(flightDataService.FlightArmed
                              .SubscribeWithAsync(async(i, ct) => await StartSurveillanceFlight(await _missionPlanner.GetFlightPlan())));
            }
            else
            {
                _disposer.Add(flightDataService.FlightArmed
                              .SubscribeWithAsync(async(i, ct) => await StartTelemetryFlight(await _missionPlanner.GetFlightPlan())));
                _disposer.Add(flightDataService.FlightDisarmed
                              .SubscribeWithAsync((i, ct) => CompleteFlight()));
            }
        }
예제 #4
0
        public NavigationViewModel(IConnectedUasManager connectedUasManager, IMissionPlanner missionPlanner, INavigation navigation)
        {
            _missionPlanner      = missionPlanner;
            _connectedUasManager = connectedUasManager;

            RemovewWaypointCommand = new RelayCommand(RemoveWaypoint);
            EditWaypointCommand    = new RelayCommand(EditWaypoint);
            MoveUpCommand          = new RelayCommand(MoveUp);
            MoveDownCommand        = new RelayCommand(MoveDown);
        }
 public OutboundNotifsService(
     IMissionPlanner missionPlanner,
     ISettings settings,
     IMessagesService messagesService,
     IFlightClient flightServiceClient,
     IMissionPlannerState missionPlannerState)
 {
     _missionPlanner      = missionPlanner;
     _settings            = settings;
     _messagesService     = messagesService;
     _flightServiceClient = flightServiceClient;
     _missionPlannerState = missionPlannerState;
 }
예제 #6
0
        public Navigation(IConnectedUasManager connectUasManager, IMissionPlanner missionPlanner, IFlightRecorder flightRecorder)
        {
            _connectedUasManager = connectUasManager;
            _flightRecorder      = flightRecorder;
            MissionPlanner       = missionPlanner;


            ArmCommand    = new RelayCommand(Arm);
            DisarmCommand = new RelayCommand(Disarm);

            TakeoffCommand = new RelayCommand(Takeoff);
            LandCommand    = new RelayCommand(Land);
        }
예제 #7
0
        public MainViewModel(ISerialTelemetryLink telemeteryLink, IDroneAdapter droneAdapter, IMissionPlanner planner)
        {
            TelemetryLink = telemeteryLink;
            TelemetryLink.MessageParsed += _telemeteryLink_MessageParsed;
            OpenSerialPortCommand        = new RelayCommand(HandleConnectClick, CanPressConnect);
            GetWaypointsCommand          = new RelayCommand(GetWaypoints, CanDoConnectedStuff);

            Title = "Kevin";

            _apmDrone     = new LagoVista.Drone.Models.Drone();
            _droneAdapter = droneAdapter;
            _planner      = planner;
        }
예제 #8
0
        private AASettings(ISettings settings, IAltitudeAngelService altitudeAngelService, IMissionPlanner missionPlanner)
        {
            _settings             = settings;
            _altitudeAngelService = altitudeAngelService;
            _missionPlanner       = missionPlanner;
            InitializeComponent();
            _altitudeAngelService.IsSignedIn.ObserveOn(MainV2.instance).Subscribe(OnSignInChange);
            _missionPlanner.FlightDataMap.MapChanged.ObserveOn(MainV2.instance).Subscribe(OnMapChanged);
            _missionPlanner.FlightPlanningMap.MapChanged.ObserveOn(MainV2.instance).Subscribe(OnMapChanged);

            ThemeManager.ApplyThemeTo(this);
            pic_AboutLogo.Image = Image.FromStream(new MemoryStream(Resources.AALogo));

            // load settings
            chk_FlightReportEnable.Checked      = _settings.FlightReportEnable;
            chk_UseExistingFlightPlanId.Checked = _settings.UseExistingFlightPlanId;
            txt_ExistingFlightPlanId.Text       = _settings.ExistingFlightPlanId == Guid.Empty ? "" : _settings.ExistingFlightPlanId.ToString();
            txt_FlightReportName.Text           = _settings.FlightReportName;
            txt_FlightReportDescription.Text    = _settings.FlightReportDescription;
            chk_FlightReportCommercial.Checked  = _settings.FlightReportCommercial;
            chk_FlightReportLocalScope.Checked  = _settings.UseFlightPlanLocalScope;
            txt_FlightReportDuration.Text       = ((int)_settings.FlightReportTimeSpan.TotalMinutes).ToString();
            but_SignIn.Enabled  = !_altitudeAngelService.IsSignedIn;
            but_SignOut.Enabled = _altitudeAngelService.IsSignedIn;
            chk_OverrideClientSettings.Checked = _settings.OverrideClientUrlSettings;
            txt_OverrideClientId.Text          = _settings.OverrideClientId;
            txt_OverrideClientSecret.Text      = _settings.OverrideClientSecret;
            txt_OverrideUrlSuffix.Text         = _settings.OverrideUrlDomainSuffix;
            var opacityAdjust = (int)_settings.MapOpacityAdjust * 100;

            if (opacityAdjust >= trk_OpacityAdjust.Minimum && opacityAdjust <= trk_OpacityAdjust.Maximum)
            {
                trk_OpacityAdjust.Value = opacityAdjust;
            }
            chk_EnableDataMap.Checked = _settings.EnableDataMap;
            chk_EnablePlanMap.Checked = _settings.EnablePlanMap;
            txt_ContactPhone.Text     = _settings.FlightPhoneNumber;
            chk_AllowSms.Checked      = _settings.FlightAllowSms;
            chk_IcaoAddress.Checked   = _settings.FlightIdentifierIcao;
            txt_IcaoAddress.Text      = _settings.FlightIdentifierIcaoAddress;
            chk_SerialNumber.Checked  = _settings.FlightIdentifierSerial;
            txt_SerialNumber.Text     = _settings.FlightIdentifierSerialNumber;
            web_About.DocumentText    = Resources.About;

            RefreshControlStates();
        }
        public AltitudeAngelService(
            IMessagesService messagesService,
            IMissionPlanner missionPlanner,
            FlightDataService flightDataService,
            AltitudeAngelClient.Create aaClientFactory
            )
        {
            _messagesService   = messagesService;
            _missionPlanner    = missionPlanner;
            _flightDataService = flightDataService;
            IsSignedIn         = new ObservableProperty <bool>(false);
            WeatherReport      = new ObservableProperty <WeatherInfo>();
            SentTelemetry      = new ObservableProperty <Unit>();

            CreateClient(aaClientFactory);

            IObservable <Models.FlightData> armedAndSignedIn = _flightDataService
                                                               .FlightArmed
                                                               .Join(IsSignedIn,
                                                                     i => _flightDataService.FlightDisarmed,
                                                                     i => IsSignedIn.Where(s => !IsSignedIn),
                                                                     (flight, signedIn) => flight);

            IObservable <Models.FlightData> disarmedAndSignedIn = _flightDataService
                                                                  .FlightDisarmed
                                                                  .Join(IsSignedIn,
                                                                        i => _flightDataService.FlightArmed,
                                                                        i => IsSignedIn.Where(s => !IsSignedIn),
                                                                        (flight, signedIn) => flight);

            _disposer.Add(
                armedAndSignedIn.SubscribeAsync(ArmedAndSignedIn));

            _disposer.Add(
                disarmedAndSignedIn.Subscribe(DisarmedAndSignedIn));

            _disposer.Add(_missionPlanner.FlightDataMap
                          .MapChanged
                          .Throttle(TimeSpan.FromSeconds(1))
                          .SubscribeAsync(i => UpdateMapData(_missionPlanner.FlightDataMap)));

            TryConnect();
        }
        public AltitudeAngelService(
            IMessagesService messagesService,
            IMissionPlanner missionPlanner,
            ISettings settings,
            IAltitudeAngelClient client,
            ITelemetryService telemetryService,
            IFlightService flightService)
        {
            _messagesService  = messagesService;
            _missionPlanner   = missionPlanner;
            _settings         = settings;
            _client           = client;
            _telemetryService = telemetryService;
            _flightService    = flightService;

            IsSignedIn = new ObservableProperty <bool>(false);
            _disposer.Add(IsSignedIn);
            WeatherReport = new ObservableProperty <WeatherInfo>();
            _disposer.Add(WeatherReport);
            FilterInfoDisplay = _settings.MapFilters;

            _disposer.Add(_missionPlanner.FlightDataMap
                          .MapChanged
                          .SubscribeWithAsync((i, ct) => UpdateMapData(_missionPlanner.FlightDataMap, ct)));
            _disposer.Add(_missionPlanner.FlightPlanningMap
                          .MapChanged
                          .SubscribeWithAsync((i, ct) => UpdateMapData(_missionPlanner.FlightPlanningMap, ct)));

            _disposer.Add(_missionPlanner.FlightDataMap
                          .FeatureClicked
                          .Select(f => new { Feature = f, Properties = f.GetFeatureProperties() })
                          .Where(i => i.Properties.DetailedCategory == "user:flight_plan_report" && i.Properties.IsOwner)
                          .SubscribeWithAsync((i, ct) => OnFlightReportClicked(i.Feature)));
            _disposer.Add(_missionPlanner.FlightPlanningMap
                          .FeatureClicked
                          .Select(f => new { Feature = f, Properties = f.GetFeatureProperties() })
                          .Where(i => i.Properties.DetailedCategory == "user:flight_plan_report" && i.Properties.IsOwner)
                          .SubscribeWithAsync((i, ct) => OnFlightReportClicked(i.Feature)));
        }
        public AltitudeAngelService(
            IMessagesService messagesService,
            IMissionPlanner missionPlanner,
            FlightDataService flightDataService
            )
        {
            _messagesService = messagesService;
            _missionPlanner = missionPlanner;
            _flightDataService = flightDataService;
            IsSignedIn = new ObservableProperty<bool>(false);
            WeatherReport = new ObservableProperty<WeatherInfo>();
            SentTelemetry = new ObservableProperty<Unit>();

            CreateClient((url, apiUrl, state) =>
                new AltitudeAngelClient(url, apiUrl, state,
                    (authUrl, existingState) => new AltitudeAngelHttpHandlerFactory(authUrl, existingState)));

            _disposer.Add(_missionPlanner.FlightDataMap
                .MapChanged
                .Throttle(TimeSpan.FromSeconds(1))
                .Subscribe(i => UpdateMapData(_missionPlanner.FlightDataMap)));

            _disposer.Add(_missionPlanner.FlightPlanningMap
              .MapChanged
              .Throttle(TimeSpan.FromSeconds(1))
              .Subscribe(i => UpdateMapData(_missionPlanner.FlightPlanningMap)));

            try
            {
                var list = JsonConvert.DeserializeObject<List<string>>(_missionPlanner.LoadSetting("AAWings.Filters"));

                FilteredOut.AddRange(list.Distinct());
            } catch
            {

            }

            TryConnect();
        }
예제 #12
0
        public AltitudeAngelService(
            IMessagesService messagesService,
            IMissionPlanner missionPlanner,
            FlightDataService flightDataService
            )
        {
            _messagesService   = messagesService;
            _missionPlanner    = missionPlanner;
            _flightDataService = flightDataService;
            IsSignedIn         = new ObservableProperty <bool>(false);
            WeatherReport      = new ObservableProperty <WeatherInfo>();
            SentTelemetry      = new ObservableProperty <Unit>();

            CreateClient((url, apiUrl, state) =>
                         new AltitudeAngelClient(url, apiUrl, state,
                                                 (authUrl, existingState) => new AltitudeAngelHttpHandlerFactory(authUrl, existingState)));

            _disposer.Add(_missionPlanner.FlightDataMap
                          .MapChanged
                          .Throttle(TimeSpan.FromSeconds(1))
                          .Subscribe(i => UpdateMapData(_missionPlanner.FlightDataMap)));

            TryConnect();
        }
예제 #13
0
        public AltitudeAngelService(
            IMessagesService messagesService,
            IMissionPlanner missionPlanner,
            FlightDataService flightDataService
            )
        {
            _messagesService = messagesService;
            _missionPlanner = missionPlanner;
            _flightDataService = flightDataService;
            IsSignedIn = new ObservableProperty<bool>(false);
            WeatherReport = new ObservableProperty<WeatherInfo>();
            SentTelemetry = new ObservableProperty<Unit>();

            CreateClient((url, apiUrl, state) =>
                new AltitudeAngelClient(url, apiUrl, state,
                    (authUrl, existingState) => new AltitudeAngelHttpHandlerFactory(authUrl, existingState)));

            _disposer.Add(_missionPlanner.FlightDataMap
                .MapChanged
                .Throttle(TimeSpan.FromSeconds(1))
                .Subscribe(i => UpdateMapData(_missionPlanner.FlightDataMap)));

            TryConnect();
        }
예제 #14
0
 public Settings(IMissionPlanner missionPlanner)
 {
     _missionPlanner = missionPlanner;
 }
예제 #15
0
        public AltitudeAngelService(
            IMessagesService messagesService,
            IMissionPlanner missionPlanner,
            ISettings settings,
            IFlightDataService flightDataService,
            IAltitudeAngelClient client)
        {
            _messagesService = messagesService;
            _missionPlanner  = missionPlanner;
            _settings        = settings;
            _client          = client;

            IsSignedIn = new ObservableProperty <bool>(false);
            _disposer.Add(IsSignedIn);
            WeatherReport = new ObservableProperty <WeatherInfo>();
            _disposer.Add(WeatherReport);
            SentTelemetry = new ObservableProperty <Unit>();
            _disposer.Add(SentTelemetry);

            try
            {
                _disposer.Add(_missionPlanner.FlightDataMap
                              .MapChanged
                              .Throttle(TimeSpan.FromSeconds(10))
                              .RepeatLastValue(TimeSpan.FromSeconds(60))
                              .Subscribe(async i => await UpdateMapData(_missionPlanner.FlightDataMap)));
            }
            catch
            {
            }

            try
            {
                _disposer.Add(_missionPlanner.FlightPlanningMap
                              .MapChanged
                              .Throttle(TimeSpan.FromSeconds(1))
                              .RepeatLastValue(TimeSpan.FromSeconds(60))
                              .Subscribe(async i => await UpdateMapData(_missionPlanner.FlightPlanningMap)));
            }
            catch
            {
            }

            try
            {
                _disposer.Add(flightDataService.FlightArmed
                              .Subscribe(async i => await SubmitFlightReport(i)));
                _disposer.Add(flightDataService.FlightDisarmed
                              .Subscribe(async i => await CompleteFlightReport(i)));
            }
            catch
            {
            }

            try
            {
                FilteredOut = _settings.MapFilters;
            }
            catch
            {
            }
        }
        public MainViewModel(IMissionPlanner planner, IHeartBeatManager heartBeatManager, ITelemetryService telemetryService, IConnectedUasManager connectedUasManager)
        {
            _telemetryService = telemetryService;
            _heartBeatManager = heartBeatManager;

            Connections = connectedUasManager;

            Connections.ActiveDroneChanged += Connections_ActiveDroneChanged;

            var transport = new SerialPortTransport(DispatcherServices);

            //Connections.Active = new ConnectedUas(new APM(null), transport);
            //Connections.All.Add(Connections.Active);
            //Connections.Active.Transport.OnMessageReceived += _telemeteryLink_MessageParsed;

            //TelemetryLink.MessageParsed += _telemeteryLink_MessageParsed;
            OpenSerialPortCommand     = new RelayCommand(HandleConnectClick, CanPressConnect);
            ShowMissionPlannerCommand = new RelayCommand(() => ViewModelNavigation.NavigateAsync <Missions.MissionPlannerViewModel>(this), CanDoConnectedStuff);
            StartDataStreamsCommand   = new RelayCommand(() => _telemetryService.Start(Connections.Active.Uas, Connections.Active.Transport), CanDoConnectedStuff);
            StopDataStreamsCommand    = new RelayCommand(() => _telemetryService.Stop(Connections.Active.Transport), CanDoConnectedStuff);
            BeginCalibrationCommand   = new RelayCommand(() => ViewModelNavigation.NavigateAsync <Calibration.AccCalibrationViewModel>(this), CanDoConnectedStuff);
            FlyNowCommand             = new RelayCommand(() => ViewModelNavigation.NavigateAsync <HudViewModel>(this), CanDoConnectedStuff);
            MotorTestCommand          = new RelayCommand(() => ViewModelNavigation.NavigateAsync <Testing.MotorsTestViewModel>(this), CanDoConnectedStuff);

            Title = "UAS NuvIoT Connector";

            _planner = planner;

            MenuItems = new List <MenuItem>()
            {
                new MenuItem()
                {
                    Command     = new RelayCommand(() => ViewModelNavigation.NavigateAsync <UasTypeManagerViewModel>(this)),
                    Name        = "Settings",
                    FontIconKey = "fa-users"
                },
                new MenuItem()
                {
                    Command     = new RelayCommand(() => ViewModelNavigation.NavigateAsync <UserOrgsViewModel>(this)),
                    Name        = ClientResources.MainMenu_SwitchOrgs,
                    FontIconKey = "fa-users"
                },
                new MenuItem()
                {
                    Command     = new RelayCommand(() => ViewModelNavigation.NavigateAsync <ChangePasswordViewModel>(this)),
                    Name        = ClientResources.MainMenu_ChangePassword,
                    FontIconKey = "fa-key"
                },
                new MenuItem()
                {
                    Command     = new RelayCommand(() => ViewModelNavigation.NavigateAsync <InviteUserViewModel>(this)),
                    Name        = ClientResources.MainMenu_InviteUser,
                    FontIconKey = "fa-user"
                },
                new MenuItem()
                {
                    Command     = new RelayCommand(() => ViewModelNavigation.NavigateAsync <AboutViewModel>(this)),
                    Name        = "About",
                    FontIconKey = "fa-info"
                },
                new MenuItem()
                {
                    Command     = new RelayCommand(() => Logout()),
                    Name        = ClientResources.Common_Logout,
                    FontIconKey = "fa-sign-out"
                }
            };

            this.RefreshUI();
        }