コード例 #1
0
        public void SwitchCam()
        {
            DroneConfiguration configuration = _droneClient.Configuration;
            ATCommand          command       = configuration.Video.Channel.Set(VideoChannelType.Next).ToCommand();

            _droneClient.Send(command);
        }
コード例 #2
0
        public void SendChanges(DroneConfiguration configuration)
        {
            KeyValuePair <string, string> item;

            while (configuration.Changes.Count > 0)
            {
                lock (_SyncRoot)
                {
                    if (configuration.Changes.Count > 0)
                    {
                        item = configuration.Changes.Dequeue();
                    }
                }
                if (!string.IsNullOrEmpty(item.Key))
                {
                    if (string.IsNullOrEmpty(configuration.Custom.SessionId) == false &&
                        string.IsNullOrEmpty(configuration.Custom.ProfileId) == false &&
                        string.IsNullOrEmpty(configuration.Custom.ApplicationId) == false)
                    {
                        SendConfigCommand(Command.ConfigIds(configuration.Custom.SessionId, configuration.Custom.ProfileId, configuration.Custom.ApplicationId));
                    }

                    SendConfigCommand(Command.Config(item.Key, item.Value));
                }
            }
        }
コード例 #3
0
        private void btnSwitchCam_Click(object sender, EventArgs e)
        {
            DroneConfiguration configuration = _droneClient.Configuration;
            ATCommand          command       = configuration.Video.Channel.Set(VideoChannelType.Next).ToCommand();

            _droneClient.Send(command);
        }
コード例 #4
0
    public DroneEnvironmentKnowledge(Transform botTransform, List <EnemyControllerBase> enemiesInRange, EnemyControllerBase huntingEnemy, DroneConfiguration droneConfiguration)
    {
        BotTransform = botTransform;

        EnemiesInRange     = enemiesInRange;
        HuntingEnemy       = huntingEnemy;
        DroneConfiguration = droneConfiguration;
    }
コード例 #5
0
 private void OnConfigurationUpdated(DroneConfiguration configuration)
 {
     if (configuration.Video.Codec != VideoCodecType.H264_360P_SLRS || configuration.Video.MaxBitrate != 100 || configuration.Video.BitrateCtrlMode != VideoBitrateControlMode.Dynamic)
     {
         droneClient.Send(configuration.Video.Codec.Set(VideoCodecType.H264_360P_SLRS).ToCommand());
         droneClient.Send(configuration.Video.MaxBitrate.Set(100).ToCommand());
         droneClient.Send(configuration.Video.BitrateCtrlMode.Set(VideoBitrateControlMode.Dynamic).ToCommand());
     }
 }
コード例 #6
0
 private void OnConfigurationUpdated(DroneConfiguration configuration)
 {
     if (configuration.Video.Codec != VideoCodecType.H264_360P ||
         configuration.Video.BitrateCtrlMode != VideoBitrateControlMode.Dynamic)
     {
         _droneClient.Send(configuration.Video.Codec.Set(VideoCodecType.H264_360P).ToCommand());
         _droneClient.Send(configuration.Video.BitrateCtrlMode.Set(VideoBitrateControlMode.Dynamic).ToCommand());
     }
 }
コード例 #7
0
        public DroneClient()
        {
            _configuration = new DroneConfiguration();
            _commandQueue  = new ConcurrentQueue <ATCommand>();

            _commandSender            = new CommandSender(_configuration, _commandQueue);
            _navdataAcquisition       = new NavdataAcquisition(_configuration, OnNavdataPacketAcquired, OnNavdataAcquisitionStopped);
            _videoAcquisition         = new VideoAcquisition(_configuration, OnVideoPacketAcquired);
            _configurationAcquisition = new ConfigurationAcquisition(_configuration, OnConfigurationPacketAcquired);
            _watchdog = new Watchdog(_navdataAcquisition, _commandSender, _videoAcquisition);
        }
コード例 #8
0
        public DroneClient()
        {
            _configuration = new DroneConfiguration();
            _commandQueue  = new ConcurrentQueue <ATCommand>();

            _networkWorker                  = new NetworkWorker(_configuration, OnConnectionChanged);
            _commandQueueWorker             = new CommandQueueWorker(_configuration, _commandQueue);
            _navdataAcquisitionWorker       = new NavdataAcquisitionWorker(_configuration, OnNavigationPacketAcquired);
            _videoAcquisitionWorker         = new VideoAcquisitionWorker(_configuration, OnVideoPacketAcquired);
            _configurationAcquisitionWorker = new ConfigurationAcquisitionWorker(_configuration, OnConfigurationPacketAcquired);
            _watchdogWorker                 = new WatchdogWorker(_networkWorker, _navdataAcquisitionWorker, _commandQueueWorker, _videoAcquisitionWorker);
        }
コード例 #9
0
        public DroneClient()
        {
            _NavigationDataViewModel = new ViewModel.NavigationDataViewModel();
            _configuration           = new DroneConfiguration();

            _CommandWorker       = new CommandWorker(this);
            _NavDataWorker       = new NavDataWorker(this);
            _ConfigurationWorker = new ConfigurationWorker(this);
            //TODO ajouter le _configurationAcquisitionWorker
            _WatchdogWorker = new WatchdogWorker(this, new WorkerBase[] { _NavDataWorker, _CommandWorker });
            _InputTimer     = ThreadPoolTimer.CreatePeriodicTimer(new TimerElapsedHandler(InputTimerElapsedHandler), TimeSpan.FromMilliseconds(1000 / 12));
        }
コード例 #10
0
        public async Task SendConfiguration()
        {
            DroneConfiguration configuration = _configuration;

            if (string.IsNullOrEmpty(configuration.Custom.SessionId) ||
                configuration.Custom.SessionId == "00000000")
            {
                await InitMultiConfiguration();
            }

            //send all changes in one pice
            SendChanges(configuration);
        }
コード例 #11
0
        private static List <IConfigurationItem> GetItems(DroneConfiguration configuration, object section, Type type)
        {
            List <IConfigurationItem> configurationItems = new List <IConfigurationItem>();

            var configItems = type.GetRuntimeFields()
                              .Where(field => field.GetValue(section) is IConfigurationItem);

            foreach (var configItem in configItems)
            {
                configurationItems.Add((IConfigurationItem)configItem.GetValue(section));
            }

            return(configurationItems);
        }
コード例 #12
0
        public IContainer Bootstrap(DroneConfiguration droneConfiguration)
        {
            var droneClient = new DroneClient(droneConfiguration.HostName);
            var logger      = ConfigureLogger();
            var container   = new Container(x =>
            {
                x.For <ILog>().Use(logger);
                x.For <DroneClient>().Use(droneClient);
                x.For <IDrone>().UseSpecial(y => y.ConstructedBy(_ => new ParrotDrone.ParrotDrone(droneClient)));
                x.For <ICommandFactory>().Use <CommandFactory>();
                x.For <ICommunicator>().Use <CommandInvoker>();
                x.For <IInputProviderAdapter>().Singleton().Use <Drone>();
            });

            return(container);
        }
コード例 #13
0
        private async Task InitMultiConfiguration()
        {
            // set new session, application and profile
            await AckControlAndWaitForConfirmation(); // wait for the control confirmation

            _configuration.Custom.SessionId = DroneConfiguration.NewId();
            SendChanges(_configuration);

            await AckControlAndWaitForConfirmation();

            _configuration.Custom.ProfileId = DroneConfiguration.NewId();
            SendChanges(_configuration);

            await AckControlAndWaitForConfirmation();

            _configuration.Custom.ApplicationId = DroneConfiguration.NewId();
            SendChanges(_configuration);

            await AckControlAndWaitForConfirmation();
        }
コード例 #14
0
 public GeneralSection(DroneConfiguration configuration)
     : base(configuration, "general")
 {
 }
コード例 #15
0
 public UserboxSection(DroneConfiguration configuration)
     : base(configuration, "userbox")
 {
 }
コード例 #16
0
ファイル: DetectSection.cs プロジェクト: Eggies/SDK
 public DetectSection(DroneConfiguration configuration)
     : base(configuration, "detect")
 {
 }
コード例 #17
0
 public VideoSection(DroneConfiguration configuration)
     : base(configuration, "video")
 {
 }
コード例 #18
0
ファイル: ControlSection.cs プロジェクト: Eggies/SDK
 public ControlSection(DroneConfiguration configuration)
     : base(configuration, "control")
 {
 }
コード例 #19
0
ファイル: NetworkSection.cs プロジェクト: jayfleming/SDK
 public NetworkSection(DroneConfiguration configuration)
     : base(configuration, "network")
 {
 }
コード例 #20
0
 public CustomSection(DroneConfiguration configuration)
     : base(configuration, "custom")
 {
 }
コード例 #21
0
ファイル: GeneralSection.cs プロジェクト: Eggies/SDK
 public GeneralSection(DroneConfiguration configuration)
     : base(configuration, "general")
 {
 }
コード例 #22
0
 public LedsSection(DroneConfiguration configuration)
     : base(configuration, "leds")
 {
 }
コード例 #23
0
ファイル: SectionBase.cs プロジェクト: sschoeb/TetherDrone
 public SectionBase(DroneConfiguration configuration, string name)
 {
     _configuration = configuration;
     _name = name;
 }
コード例 #24
0
ファイル: UserboxSection.cs プロジェクト: Eggies/SDK
 public UserboxSection(DroneConfiguration configuration)
     : base(configuration, "userbox")
 {
 }
コード例 #25
0
 public PicSection(DroneConfiguration configuration)
     : base(configuration, "pic")
 {
 }
コード例 #26
0
ファイル: ParrotDrone.cs プロジェクト: 4ndreij/icarus
        public void Configure(DroneConfiguration droneConfiguration)
        {
            Task <Settings> configurationTask = droneClient.GetConfigurationTask();

            configurationTask.ContinueWith(
                delegate(Task <Settings> task)
            {
                if (task.Exception != null)
                {
                    Trace.TraceWarning("Get configuration task is faulted with exception: {0}",
                                       task.Exception.InnerException.Message);
                    return;
                }

                settings = task.Result;
            });
            configurationTask.Start();

            var sendConfigTask = new Task(() =>
            {
                if (settings == null)
                {
                    settings = new Settings();
                }

                if (string.IsNullOrEmpty(settings.Custom.SessionId) ||
                    settings.Custom.SessionId == "00000000")
                {
                    // set new session, application and profile
                    droneClient.AckControlAndWaitForConfirmation(); // wait for the control confirmation

                    settings.Custom.SessionId = Settings.NewId();
                    droneClient.Send(settings);

                    droneClient.AckControlAndWaitForConfirmation();

                    settings.Custom.ProfileId = Settings.NewId();
                    droneClient.Send(settings);

                    droneClient.AckControlAndWaitForConfirmation();

                    settings.Custom.ApplicationId = Settings.NewId();
                    droneClient.Send(settings);

                    droneClient.AckControlAndWaitForConfirmation();
                }

                settings.General.NavdataDemo    = false;
                settings.General.NavdataOptions = NavdataOptions.All;

                //settings.Video.BitrateCtrlMode = VideoBitrateControlMode.Dynamic;
                settings.Video.Bitrate    = 1000;
                settings.Video.MaxBitrate = 2000;

                settings.Leds.LedAnimation       = new LedAnimation(LedAnimationType.BlinkGreenRed, 2.0f, 2);
                settings.Control.FlightAnimation = new FlightAnimation(FlightAnimationType.Wave);


                //start
                settings.Userbox.Command = new UserboxCommand(UserboxCommandType.Start);
                //stop
                settings.Userbox.Command = new UserboxCommand(UserboxCommandType.Stop);

                //send all changes in one pice
                droneClient.Send(settings);

                droneClient.FlatTrim(); // calibrates the drone on flat surface
            });

            sendConfigTask.Start();
        }
コード例 #27
0
 public ControlSection(DroneConfiguration configuration)
     : base(configuration, "control")
 {
 }
コード例 #28
0
        public static List <ConfigurationSectionViewModel> InitializeConfigurationSections(DroneConfiguration configuration)
        {
            List <ConfigurationSectionViewModel> configurationSections = new List <ConfigurationSectionViewModel>();

            configurationSections.Add(new ConfigurationSectionViewModel("control", GetItems(configuration, configuration.Control, typeof(ControlSection))));
            configurationSections.Add(new ConfigurationSectionViewModel("custom", GetItems(configuration, configuration.Custom, typeof(CustomSection))));
            configurationSections.Add(new ConfigurationSectionViewModel("detect", GetItems(configuration, configuration.Detect, typeof(DetectSection))));
            configurationSections.Add(new ConfigurationSectionViewModel("general", GetItems(configuration, configuration.General, typeof(GeneralSection))));
            configurationSections.Add(new ConfigurationSectionViewModel("gps", GetItems(configuration, configuration.Gps, typeof(GpsSection))));
            configurationSections.Add(new ConfigurationSectionViewModel("leds", GetItems(configuration, configuration.Leds, typeof(LedsSection))));
            configurationSections.Add(new ConfigurationSectionViewModel("network", GetItems(configuration, configuration.Network, typeof(NetworkSection))));
            configurationSections.Add(new ConfigurationSectionViewModel("pic", GetItems(configuration, configuration.Pic, typeof(PicSection))));
            configurationSections.Add(new ConfigurationSectionViewModel("syslog", GetItems(configuration, configuration.Syslog, typeof(SyslogSection))));
            configurationSections.Add(new ConfigurationSectionViewModel("userbox", GetItems(configuration, configuration.Userbox, typeof(UserboxSection))));
            configurationSections.Add(new ConfigurationSectionViewModel("video", GetItems(configuration, configuration.Video, typeof(VideoSection))));

            return(configurationSections);
        }
コード例 #29
0
ファイル: LedsSection.cs プロジェクト: jayfleming/SDK
 public LedsSection(DroneConfiguration configuration)
     : base(configuration, "leds")
 {
 }
コード例 #30
0
 public static void UpdateConfigurationSections(List <ConfigurationSectionViewModel> sections, DroneConfiguration configuration)
 {
     sections.First <ConfigurationSectionViewModel>(section => section.SectionName.Equals("control"))
     .UpdateItems(GetItems(configuration, configuration.Control, typeof(ControlSection)));
     sections.First <ConfigurationSectionViewModel>(section => section.SectionName.Equals("custom"))
     .UpdateItems(GetItems(configuration, configuration.Custom, typeof(CustomSection)));
     sections.First <ConfigurationSectionViewModel>(section => section.SectionName.Equals("detect"))
     .UpdateItems(GetItems(configuration, configuration.Detect, typeof(DetectSection)));
     sections.First <ConfigurationSectionViewModel>(section => section.SectionName.Equals("general"))
     .UpdateItems(GetItems(configuration, configuration.General, typeof(GeneralSection)));
     sections.First <ConfigurationSectionViewModel>(section => section.SectionName.Equals("gps"))
     .UpdateItems(GetItems(configuration, configuration.Gps, typeof(GpsSection)));
     sections.First <ConfigurationSectionViewModel>(section => section.SectionName.Equals("leds"))
     .UpdateItems(GetItems(configuration, configuration.Leds, typeof(LedsSection)));
     sections.First <ConfigurationSectionViewModel>(section => section.SectionName.Equals("network"))
     .UpdateItems(GetItems(configuration, configuration.Network, typeof(NetworkSection)));
     sections.First <ConfigurationSectionViewModel>(section => section.SectionName.Equals("pic"))
     .UpdateItems(GetItems(configuration, configuration.Pic, typeof(PicSection)));
     sections.First <ConfigurationSectionViewModel>(section => section.SectionName.Equals("syslog"))
     .UpdateItems(GetItems(configuration, configuration.Syslog, typeof(SyslogSection)));
     sections.First <ConfigurationSectionViewModel>(section => section.SectionName.Equals("userbox"))
     .UpdateItems(GetItems(configuration, configuration.Userbox, typeof(UserboxSection)));
     sections.First <ConfigurationSectionViewModel>(section => section.SectionName.Equals("video"))
     .UpdateItems(GetItems(configuration, configuration.Video, typeof(VideoSection)));
 }
コード例 #31
0
ファイル: CustomSection.cs プロジェクト: Eggies/SDK
 public CustomSection(DroneConfiguration configuration)
     : base(configuration, "custom")
 {
 }
コード例 #32
0
ファイル: VideoSection.cs プロジェクト: Eggies/SDK
 public VideoSection(DroneConfiguration configuration)
     : base(configuration, "video")
 {
 }
コード例 #33
0
ファイル: PicSection.cs プロジェクト: jayfleming/SDK
 public PicSection(DroneConfiguration configuration)
     : base(configuration, "pic")
 {
 }
コード例 #34
0
 public DetectSection(DroneConfiguration configuration)
     : base(configuration, "detect")
 {
 }
コード例 #35
0
 public SectionBase(DroneConfiguration configuration, string name)
 {
     _configuration = configuration;
     _name          = name;
 }
コード例 #36
0
ファイル: GpsSection.cs プロジェクト: Eggies/SDK
 public GpsSection(DroneConfiguration configuration)
     : base(configuration, "gps")
 {
 }
コード例 #37
0
ファイル: DroneClient.cs プロジェクト: sschoeb/TetherDrone
        private void ProcessStateTransitions(NavigationState state)
        {
            if (state.HasFlag(NavigationState.Bootstrap))
            {
                _commandQueue.Flush();
                var configuration = new DroneConfiguration();
                configuration.General.NavdataDemo.ChangeTo(false);
                configuration.SendTo(this);
                Send(new ControlCommand(ControlMode.NoControlMode));
            }

            if (state.HasFlag(NavigationState.Watchdog))
            {
                Trace.TraceWarning("Communication Watchdog!");
            }

            switch (_stateRequest)
            {
            case StateRequest.None:
                return;

            case StateRequest.Emergency:
                if (state.HasFlag(NavigationState.Flying))
                {
                    Send(new RefCommand(RefMode.Emergency));
                }
                else
                {
                    _stateRequest = StateRequest.None;
                }
                break;

            case StateRequest.ResetEmergency:
                Send(new RefCommand(RefMode.Emergency));
                _stateRequest = StateRequest.None;
                break;

            case StateRequest.Land:
                if (state.HasFlag(NavigationState.Flying) &&
                    state.HasFlag(NavigationState.Landing) == false)
                {
                    Send(new RefCommand(RefMode.Land));
                }
                else
                {
                    _stateRequest = StateRequest.None;
                }
                break;

            case StateRequest.Fly:
                if (state.HasFlag(NavigationState.Landed) &&
                    state.HasFlag(NavigationState.Takeoff) == false &&
                    state.HasFlag(NavigationState.Emergency) == false)
                {
                    Send(new RefCommand(RefMode.Takeoff));
                }
                else
                {
                    _stateRequest = StateRequest.None;
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
コード例 #38
0
 public NetworkSection(DroneConfiguration configuration)
     : base(configuration, "network")
 {
 }
コード例 #39
0
ファイル: SyslogSection.cs プロジェクト: jayfleming/SDK
 public SyslogSection(DroneConfiguration configuration)
     : base(configuration, "syslog")
 {
 }
コード例 #40
0
 public SyslogSection(DroneConfiguration configuration)
     : base(configuration, "syslog")
 {
 }
コード例 #41
0
 public GpsSection(DroneConfiguration configuration)
     : base(configuration, "gps")
 {
 }