public async Task ReInitializeMeadowAsync(CancellationToken cancellationToken = default) { var serialNumber = DeviceInfo.SerialNumber; string? serialPort = null; IMeadowDevice?meadow = null; if (_meadowDevice is MeadowSerialDevice device) { serialPort = device.SerialPort?.PortName; } _meadowDevice?.Dispose(); await Task.Delay(1000, cancellationToken) .ConfigureAwait(false); //try the old port first, if we still have it if (string.IsNullOrWhiteSpace(serialPort) == false) { meadow = await MeadowDeviceManager.GetMeadowForSerialPort(serialPort !, false, Logger); } meadow ??= await MeadowDeviceManager.FindMeadowBySerialNumber( serialNumber, Logger, cancellationToken : cancellationToken) .ConfigureAwait(false); await Task.Delay(1000, cancellationToken) .ConfigureAwait(false); _meadowDevice = meadow ?? throw new Exception($"Meadow not found. Serial Number {serialNumber}"); }
public MeadowDeviceHelper(IMeadowDevice meadow, ILogger logger) { _meadowDevice = meadow; DeviceInfo = meadow.DeviceInfo ?? throw new ArgumentException( "Device is not initialized, missing DeviceInfo", nameof(meadow)); Logger = logger; }
// Constructor internal ActiveClient(IMeadowDevice meadow, TcpClient tcpClient, ILogger logger, CancellationToken cancellationToken) { _cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); _logger = logger; _meadow = meadow; _tcpClient = tcpClient; _networkStream = tcpClient.GetStream(); _logger.LogDebug("Starting receive task"); _receiveVsDebugDataTask = Task.Factory.StartNew(SendToMeadowAsync, TaskCreationOptions.LongRunning); _receiveMeadowDebugDataTask = Task.Factory.StartNew(SendToVisualStudio, TaskCreationOptions.LongRunning); }
public void Initialize(IMeadowDevice device, IPin PwmPin) { if (initialized) { return; } servo = new Servo(device, PwmPin, NamedServoConfigs.SG90); servo.RotateTo(NamedServoConfigs.SG90.MinimumAngle); initialized = true; }
// Constructor /// <summary> /// Create a new DebuggingServer for proxying debug data between VS and Meadow /// </summary> /// <param name="meadow">The <see cref="IMeadowDevice"/> to debug</param> /// <param name="localEndpoint">The <see cref="IPEndPoint"/> to listen for incoming debugger connections</param> /// <param name="logger">The <see cref="ILogger"/> to logging state information</param> public DebuggingServer(IMeadowDevice meadow, IPEndPoint localEndpoint, ILogger logger) { LocalEndpoint = localEndpoint; _meadow = meadow; _logger = logger; }
public static async Task Deploy() { var cts = new CancellationTokenSource(); logger = new OutputLogger(); try { meadow = await MeadowDeviceManager.GetMeadowForSerialPort(SerialPortName, logger : logger).ConfigureAwait(false); var meadowDH = new MeadowDeviceHelper(meadow, logger); await meadowDH.MonoDisableAsync(false, cts.Token); //meadowDH.DeployAppAsync(); var items = await meadowDH.GetFilesAndFoldersAsync(new TimeSpan(0, 0, 10), cts.Token); bool isRoot = false; bool isFolder = false; string folderName = string.Empty; var filesToDelete = new List <string>(); for (int i = 0; i < items.Count; i++) { //start of folders in root if (isRoot == false && items[i].Contains("meadow0/")) { isRoot = true; } //next root folder - break out else if (isRoot && items[i].Contains(" ") == false) { break; } //item under meadow0 else if (isRoot && items[i].Contains("/") && items[i].Contains("./") == false) { folderName = items[i].Substring(1); isFolder = true; } else if (isFolder == true && items[i].Contains(" ") && items[i].Contains("[file]")) { var end = items[i].IndexOf(" [file]"); filesToDelete.Add(Path.Combine(folderName, items[i].Substring(2, end - 2))); } else { continue; } } foreach (var item in filesToDelete) { if (item.Contains("Data/") || item.Contains("Documents/")) { continue; } Console.WriteLine($"Deleting {item}"); await meadow.DeleteFileAsync(item, 0, cts.Token); } /* * await meadowDH.DeployAppAsync("//Users//adrianstevens//Projects//Blink51Standard//Blink51Standard//bin//Debug//netstandard2.1//App.exe", * true, cts.Token); * * await meadowDH.MonoEnableAsync(cts.Token); * * meadow = meadowDH.MeadowDevice; //reference to keep alive */ } catch (Exception ex) { Console.WriteLine($"Exception: {ex.Message}"); } }