Beispiel #1
0
        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}");
        }
Beispiel #2
0
 public MeadowDeviceHelper(IMeadowDevice meadow, ILogger logger)
 {
     _meadowDevice = meadow;
     DeviceInfo    = meadow.DeviceInfo ?? throw new ArgumentException(
                               "Device is not initialized, missing DeviceInfo",
                               nameof(meadow));
     Logger = logger;
 }
Beispiel #3
0
 // 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;
        }
Beispiel #5
0
 // 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}");
            }
        }