public void SwitchCam() { DroneConfiguration configuration = _droneClient.Configuration; ATCommand command = configuration.Video.Channel.Set(VideoChannelType.Next).ToCommand(); _droneClient.Send(command); }
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)); } } }
private void btnSwitchCam_Click(object sender, EventArgs e) { DroneConfiguration configuration = _droneClient.Configuration; ATCommand command = configuration.Video.Channel.Set(VideoChannelType.Next).ToCommand(); _droneClient.Send(command); }
public DroneEnvironmentKnowledge(Transform botTransform, List <EnemyControllerBase> enemiesInRange, EnemyControllerBase huntingEnemy, DroneConfiguration droneConfiguration) { BotTransform = botTransform; EnemiesInRange = enemiesInRange; HuntingEnemy = huntingEnemy; DroneConfiguration = droneConfiguration; }
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()); } }
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()); } }
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); }
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); }
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)); }
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); }
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); }
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); }
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(); }
public GeneralSection(DroneConfiguration configuration) : base(configuration, "general") { }
public UserboxSection(DroneConfiguration configuration) : base(configuration, "userbox") { }
public DetectSection(DroneConfiguration configuration) : base(configuration, "detect") { }
public VideoSection(DroneConfiguration configuration) : base(configuration, "video") { }
public ControlSection(DroneConfiguration configuration) : base(configuration, "control") { }
public NetworkSection(DroneConfiguration configuration) : base(configuration, "network") { }
public CustomSection(DroneConfiguration configuration) : base(configuration, "custom") { }
public LedsSection(DroneConfiguration configuration) : base(configuration, "leds") { }
public SectionBase(DroneConfiguration configuration, string name) { _configuration = configuration; _name = name; }
public PicSection(DroneConfiguration configuration) : base(configuration, "pic") { }
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(); }
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); }
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))); }
public GpsSection(DroneConfiguration configuration) : base(configuration, "gps") { }
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(); } }
public SyslogSection(DroneConfiguration configuration) : base(configuration, "syslog") { }