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"); } }
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"); } }