Example #1
0
        public void Start()
        {
            if (_mavint.doCommandInt(_mavint.MAV.sysid, _mavint.MAV.compid, MAVLink.MAV_CMD.SCRIPTING, 0, 0, 0, 0, 0, 0, 0))
            {
                _active = true;

                if (!_mavftp.kCmdListDirectory("/", new CancellationTokenSource())
                    .Any(a => a.Name == "repl"))
                {
                    if (_mavftp.kCmdListDirectory("/APM/", new CancellationTokenSource())
                        .Any(a => a.Name == "repl"))
                    {
                        NewResponse?.Invoke(this, "Base dir changed to " + "/APM/repl/");
                        basepath = "/APM/repl/";
                    }
                }

                _timer = new Timer(state =>
                {
                    _semaphore.Wait();
                    try
                    {
                        if (!_active)
                        {
                            return;
                        }

                        if (!_mavint.BaseStream.IsOpen)
                        {
                            return;
                        }

                        if (_mavftp.kCmdOpenFileRO(basepath + "out", out _outsize, new CancellationTokenSource()))
                        {
                            var stream = _mavftp.kCmdReadFile(basepath + "out", _outsize, _cancellation);

                            _mavftp.kCmdTerminateSession();

                            NewResponse?.Invoke(this,
                                                ASCIIEncoding.ASCII.GetString(stream.GetBuffer().Skip(_outskip).ToArray()));

                            _outskip = (int)stream.Length;
                        }

                        _mavftp.kCmdTerminateSession();
                    }
                    finally
                    {
                        _semaphore.Release();
                    }
                }, this, 0, 1000);

                SendLine(@"""Hello World!!""" + "\n");
            }
            else
            {
                NewResponse?.Invoke(this, "Failed to start REPL");
            }
        }
Example #2
0
        public void Start()
        {
            if (_mavint.doCommandInt(_mavint.MAV.sysid, _mavint.MAV.compid, (MAVLink.MAV_CMD) 42701, 0, 0, 0, 0, 0, 0, 0))
            {
                _active = true;
                _timer  = new Timer(state =>
                {
                    _semaphore.Wait();
                    try
                    {
                        if (!_active)
                        {
                            return;
                        }

                        if (!_mavint.BaseStream.IsOpen)
                        {
                            return;
                        }

                        if (_mavftp.kCmdOpenFileRO("repl/out", out _outsize))
                        {
                            var stream = _mavftp.kCmdReadFile("repl/out", _outsize, _cancellation);

                            _mavftp.kCmdTerminateSession();

                            NewResponse?.Invoke(this,
                                                ASCIIEncoding.ASCII.GetString(stream.ToArray().Skip(_outskip).ToArray()));

                            _outskip = (int)stream.Length;
                        }

                        _mavftp.kCmdTerminateSession();
                    }
                    finally
                    {
                        _semaphore.Release();
                    }
                }, this, 0, 1000);

                SendLine(@"""Hello World!!""" + "\n");
            }
            else
            {
                NewResponse?.Invoke(this, "Failed to start REPL");
            }
        }