Пример #1
0
        public async void TakeOff(bool automated = true)
        {
            _RequestedState = RequestedState.TakeOff;
            await Log.Instance.WriteLineAsync("DroneClient:TakeOff");

            SendMessageToUI("The Drone is taking off");
        }
Пример #2
0
        public async void Land()
        {
            _RequestedState = RequestedState.Land;
            await Log.Instance.WriteLineAsync("DroneClient:Land");

            SendMessageToUI("The Drone is landing");
        }
Пример #3
0
 public void Takeoff()
 {
     if (_navigationData.State.HasFlag(NavigationState.Landed))
     {
         _requestedState = RequestedState.Fly;
     }
 }
Пример #4
0
 internal static void RequestStateChange(ManagementObject virtualMachine, RequestedState requestedState)
 {
     using (ManagementBaseObject inputParameters = virtualMachine.GetMethodParameters("RequestStateChange"))
     {
         inputParameters["RequestedState"] = requestedState;
         using (ManagementBaseObject outputParameters = virtualMachine.InvokeMethod("RequestStateChange", inputParameters, null))
             ValidateOutput(outputParameters);
     }
 }
Пример #5
0
        public void ChangeState(RequestedState requestedState)
        {
            ManagementBaseObject inParams = _managementObject.GetMethodParameters("RequestStateChange");

            inParams["RequestedState"] = requestedState;

            _managementObject.InvokeMethod("RequestStateChange",
                inParams,
                null);
        }
Пример #6
0
        public async Task <bool> ConnectAsync()
        {
            try
            {
                if (IsActive)
                {
                    return(true);
                }
                SendMessageToUI("Starting Connection process");
                await Log.Instance.WriteLineAsync("DroneClient:Connecting");

                _RequestedState = RequestedState.Initialize;
                _ConfigurationWorker.Start();
                _NavDataWorker.Start();
                //TODO revoir InitState
                _CommandWorker.Start();
                _WatchdogWorker.Start();

                // We Check if the differents workers have been well initialized
                int attempt = 0;
                while (!IsActive && attempt < 10)
                {
                    await Task.Delay(100);

                    attempt++;
                }
                if (attempt == 10)
                {
                    return(false);
                }
                SendMessageToUI("All workers have been activated");
                attempt = 0;
                while (_RequestedState != RequestedState.None && attempt < 10)
                {
                    await Task.Delay(100); attempt++;
                }
                if (attempt == 10)
                {
                    Close();
                    DisposeOverride();
                    return(false);
                }
                SendMessageToUI("Connected with the Drone successfully");
                InitConfiguration();
                //SetIndoorConfiguration();
                RequestConfiguration();
                SendMessageToUI("Configuration sent to the Drone successfully");
                return(true);
            }
            catch (Exception ex)
            {
                SendMessageToUI(ex.Message);
                return(false);
            }
        }
Пример #7
0
        private void OnNavigationPacketAcquired(NavigationPacket packet)
        {
            if (_navigationData.State == NavigationState.Unknown)
            {
                _requestedState = RequestedState.Initialize;
            }

            if (NavigationPacketAcquired != null)
            {
                NavigationPacketAcquired(packet);
            }

            UpdateNavigationData(packet);
        }
Пример #8
0
        public override async Task <int> Run()
        {
            try {
                await YAPI.RegisterHub(HubURL);

                YRelay relay;
                if (Target.ToLower() == "any")
                {
                    relay = YRelay.FirstRelay();
                    if (relay == null)
                    {
                        WriteLine("No module connected (check USB cable) ");
                        return(-1);
                    }

                    Target = await(await relay.get_module()).get_serialNumber();
                }

                WriteLine("using " + Target + ".relay" + Channel);
                relay = YRelay.FindRelay(Target + ".relay" + Channel);

                if (await relay.isOnline())
                {
                    if (RequestedState.ToUpper() == "ON")
                    {
                        await relay.set_output(YRelay.OUTPUT_ON);
                    }
                    else
                    {
                        await relay.set_output(YRelay.OUTPUT_OFF);
                    }
                }
                else
                {
                    WriteLine("Module not connected (check identification and USB cable)");
                }
            } catch (YAPI_Exception ex) {
                WriteLine("error: " + ex.Message);
            }

            YAPI.FreeAPI();
            return(0);
        }
Пример #9
0
 public async void ResetEmergency()
 {
     _RequestedState = RequestedState.ResetEmergency;
     await Log.Instance.WriteLineAsync("DroneClient:ResetEmergency");
 }
Пример #10
0
 public void Hover()
 {
     //No command means hovering
     _RequestedState = RequestedState.None;
 }
Пример #11
0
 public void Land()
 {
     _requestedState = RequestedState.Land;
 }
Пример #12
0
 public void ResetEmergency()
 {
     _requestedState = RequestedState.ResetEmergency;
 }
Пример #13
0
        private void ProcessRequestedState()
        {
            switch (_requestedState)
            {
            case RequestedState.None:
                return;

            case RequestedState.Initialize:
                ATCommand cmdNavdataDemo = _configuration.General.NavdataDemo.Set(false).ToCommand();
                _commandQueue.Enqueue(cmdNavdataDemo);
                _commandQueue.Enqueue(new ControlCommand(ControlMode.NoControlMode));
                _requestedState = RequestedState.GetConfiguration;
                return;

            case RequestedState.GetConfiguration:
                _configurationAcquisitionWorker.Start();
                if (_navigationData.State.HasFlag(NavigationState.Command))
                {
                    _commandQueue.Enqueue(new ControlCommand(ControlMode.AckControlMode));
                }
                else
                {
                    _commandQueue.Enqueue(new ControlCommand(ControlMode.CfgGetControlMode));
                    _requestedState = RequestedState.None;
                }
                break;

            case RequestedState.Emergency:
                if (_navigationData.State.HasFlag(NavigationState.Flying))
                {
                    _commandQueue.Enqueue(new RefCommand(RefMode.Emergency));
                }
                else
                {
                    _requestedState = RequestedState.None;
                }
                break;

            case RequestedState.ResetEmergency:
                _commandQueue.Enqueue(new RefCommand(RefMode.Emergency));
                _requestedState = RequestedState.None;
                break;

            case RequestedState.Land:
                if (_navigationData.State.HasFlag(NavigationState.Flying) &&
                    _navigationData.State.HasFlag(NavigationState.Landing) == false)
                {
                    _commandQueue.Enqueue(new RefCommand(RefMode.Land));
                }
                else
                {
                    _requestedState = RequestedState.None;
                }
                break;

            case RequestedState.Fly:
                if (_navigationData.State.HasFlag(NavigationState.Landed) &&
                    _navigationData.State.HasFlag(NavigationState.Takeoff) == false &&
                    _navigationData.State.HasFlag(NavigationState.Emergency) == false &&
                    _navigationData.Battery.Low == false)
                {
                    _commandQueue.Enqueue(new RefCommand(RefMode.Takeoff));
                }
                else
                {
                    _requestedState = RequestedState.None;
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Пример #14
0
 public async void TakeOff(bool automated = true)
 {
     _RequestedState = RequestedState.TakeOff;
     await Log.Instance.WriteLineAsync("DroneClient:TakeOff");
     SendMessageToUI("The Drone is taking off");
 }
Пример #15
0
 public void Emergency()
 {
     _requestedState = RequestedState.Emergency;
 }
Пример #16
0
 private void ProcessRequestedState()
 {
     switch (_requestedState)
     {
         case RequestedState.None:
             return;
         case RequestedState.Initialize:
             ATCommand cmdNavdataDemo = _configuration.General.NavdataDemo.Set(false).ToCommand();
             _commandQueue.Enqueue(cmdNavdataDemo);
             _commandQueue.Enqueue(new ControlCommand(ControlMode.NoControlMode));
             _requestedState = RequestedState.GetConfiguration;
             return;
         case RequestedState.GetConfiguration:
             _configurationAcquisitionWorker.Start();
             if (_navigationData.State.HasFlag(NavigationState.Command))
             {
                 _commandQueue.Enqueue(new ControlCommand(ControlMode.AckControlMode));
             }
             else
             {
                 _commandQueue.Enqueue(new ControlCommand(ControlMode.CfgGetControlMode));
                 _requestedState = RequestedState.None;
             }
             break;
         case RequestedState.Emergency:
             if (_navigationData.State.HasFlag(NavigationState.Flying))
                 _commandQueue.Enqueue(new RefCommand(RefMode.Emergency));
             else
                 _requestedState = RequestedState.None;
             break;
         case RequestedState.ResetEmergency:
             _commandQueue.Enqueue(new RefCommand(RefMode.Emergency));
             _requestedState = RequestedState.None;
             break;
         case RequestedState.Land:
             if (_navigationData.State.HasFlag(NavigationState.Flying) &&
                 _navigationData.State.HasFlag(NavigationState.Landing) == false)
             {
                 _commandQueue.Enqueue(new RefCommand(RefMode.Land));
             }
             else
                 _requestedState = RequestedState.None;
             break;
         case RequestedState.Fly:
             if (_navigationData.State.HasFlag(NavigationState.Landed) &&
                 _navigationData.State.HasFlag(NavigationState.Takeoff) == false &&
                 _navigationData.State.HasFlag(NavigationState.Emergency) == false &&
                 _navigationData.Battery.Low == false)
             {
                 _commandQueue.Enqueue(new RefCommand(RefMode.Takeoff));
             }
             else
                 _requestedState = RequestedState.None;
             break;
         default:
             throw new ArgumentOutOfRangeException();
     }
 }
Пример #17
0
        public async Task<bool> ConnectAsync()
        {
            try
            {
                if (IsActive)
                    return true;
                SendMessageToUI("Starting Connection process");
                _RequestedState = RequestedState.Initialize;
                _ConfigurationWorker.Start();
                _NavDataWorker.Start();
                //TODO revoir InitState
                _CommandWorker.Start();
                _WatchdogWorker.Start();

                // We Check if the differents workers have been well initialized
                int attempt = 0;
                while (!IsActive && attempt < 10)
                {
                    await Task.Delay(100);
                    attempt++;
                }
                if (attempt == 10)
                    return false;
                SendMessageToUI("All workers have been activated");
                attempt = 0;
                while (_RequestedState != RequestedState.None && attempt < 10) { await Task.Delay(100); attempt++; }
                if (attempt == 10)
                {
                    Close();
                    DisposeOverride();
                    return false;
                }
                SendMessageToUI("Connected with the Drone successfully");
                InitConfiguration();
                SetIndoorConfiguration();
                RequestConfiguration();
                SendMessageToUI("Configuration sent to the Drone successfully");
                return true;
            }
            catch (Exception ex)
            {
                SendMessageToUI(ex.Message);
                return false;
            }
        }
Пример #18
0
 public void Land()
 {
     _RequestedState = RequestedState.Land;
     SendMessageToUI("The Drone is landing");
 }
Пример #19
0
 public async void RequestConfiguration()
 {
     _RequestedState = RequestedState.GetConfiguration;
     await Log.Instance.WriteLineAsync("DroneClient:RequestConfiguration");
 }
Пример #20
0
 public async void ResetEmergency()
 {
     _RequestedState = RequestedState.ResetEmergency;
     await Log.Instance.WriteLineAsync("DroneClient:ResetEmergency");
 }
Пример #21
0
        public async Task <bool> ConnectAsync()
        {
            bool isConnected = false;

            try
            {
                if (IsActive)
                {
                    return(true);
                }
                else
                {
                    //We close the workers previously started.
                    Close();
                }

                SendMessageToUI("Starting Connection process");
                await Log.Instance.WriteLineAsync("DroneClient:Connecting");

                _RequestedState = RequestedState.Initialize;

                _ConfigurationWorker.Start();
                _NavDataWorker.Start();
                _CommandWorker.Start();
                _WatchdogWorker.Start();

                // We Check if the differents workers have been well initialized
                int attempt = 0;
                while (!IsActive && attempt < 10)
                {
                    await Task.Delay(100);

                    attempt++;
                }
                if (attempt < 10)
                {
                    SendMessageToUI("All workers have been activated");

                    attempt = 0;
                    // We Check if the AR.Drone is well initialized
                    while (_RequestedState != RequestedState.None && attempt < 10)
                    {
                        await Task.Delay(100);

                        attempt++;
                    }

                    if (attempt < 10)
                    {
                        SendMessageToUI("Connected with the Drone successfully");

                        await InitMultiConfiguration();

                        SetDefaultConfiguration();
                        RequestConfiguration();

                        SendMessageToUI("Configuration sent to the Drone successfully");
                        isConnected = true;
                    }
                }
            }
            catch (Exception ex)
            {
                SendMessageToUI(ex.Message);
                return(false);
            }

            if (!isConnected)
            {
                Close();
                DisposeOverride();
            }

            return(isConnected);
        }
Пример #22
0
 public async void RequestConfiguration()
 {
     _RequestedState = RequestedState.GetConfiguration;
     await Log.Instance.WriteLineAsync("DroneClient:RequestConfiguration");
 }
Пример #23
0
 public async void Land()
 {
     _RequestedState = RequestedState.Land;
     await Log.Instance.WriteLineAsync("DroneClient:Land");
     SendMessageToUI("The Drone is landing");
 }
Пример #24
0
 public void ResetEmergency()
 {
     _requestedState = RequestedState.ResetEmergency;
 }
Пример #25
0
 public void RequestConfiguration()
 {
     _requestedState = RequestedState.GetConfiguration;
 }
Пример #26
0
 public async void Hover()
 {
     //No command means hovering
     _RequestedState = RequestedState.None;
     await Log.Instance.WriteLineAsync("DroneClient:Hover");
 }
Пример #27
0
 public void Emergency()
 {
     _requestedState = RequestedState.Emergency;
 }
Пример #28
0
 public void Takeoff()
 {
     if (_navigationData.State.HasFlag(NavigationState.Landed))
         _requestedState = RequestedState.Fly;
 }
Пример #29
0
 public void RequestConfiguration()
 {
     _requestedState = RequestedState.GetConfiguration;
 }
Пример #30
0
        private void OnNavigationPacketAcquired(NavigationPacket packet)
        {
            if (_navigationData.State == NavigationState.Unknown)
                _requestedState = RequestedState.Initialize;

            if (NavigationPacketAcquired != null)
                NavigationPacketAcquired(packet);

            UpdateNavigationData(packet);
        }
Пример #31
0
 public async void Hover()
 {
     //No command means hovering
     _RequestedState = RequestedState.None;
     await Log.Instance.WriteLineAsync("DroneClient:Hover");
 }
Пример #32
0
        public async Task<bool> ConnectAsync()
        {
            bool isConnected = false;

            try
            {
                if (IsActive)
                    return true;
                else
                    //We close the workers previously started.
                    Close();

                SendMessageToUI("Starting Connection process");
                await Log.Instance.WriteLineAsync("DroneClient:Connecting");
                _RequestedState = RequestedState.Initialize;

                _ConfigurationWorker.Start();
                _NavDataWorker.Start();
                _CommandWorker.Start();
                _WatchdogWorker.Start();

                // We Check if the differents workers have been well initialized
                int attempt = 0;
                while (!IsActive && attempt < 10)
                {
                    await Task.Delay(100);
                    attempt++;
                }
                if (attempt < 10)
                {
                    
                    SendMessageToUI("All workers have been activated");
                    
                    attempt = 0;
                    // We Check if the AR.Drone is well initialized
                    while (_RequestedState != RequestedState.None && attempt < 10)
                    { 
                        await Task.Delay(100); 
                        attempt++; 
                    }

                    if (attempt < 10)
                    {
                        SendMessageToUI("Connected with the Drone successfully");

                        await InitMultiConfiguration();
                        SetDefaultConfiguration();
                        RequestConfiguration();
                        
                        SendMessageToUI("Configuration sent to the Drone successfully");
                        isConnected = true;
                    }
                }
            }
            catch (Exception ex)
            {
                SendMessageToUI(ex.Message);
                return false;
            }

            if (!isConnected)
            {
                Close();
                DisposeOverride();
            }

            return isConnected;
        }
Пример #33
0
 public void Land()
 {
     _requestedState = RequestedState.Land;
 }
Пример #34
0
 public void TakeOff(bool automated = true)
 {
     _RequestedState = RequestedState.TakeOff;
     SendMessageToUI("The Drone is taking off");
 }