public override async Task <bool> WriteFile(string filename, string path, int timeoutInMs = 200000) //200s
        {
            if (SerialPort == null)
            {
                throw new Exception("SerialPort not intialized");
            }

            bool result = false;

            var timeOutTask = Task.Delay(timeoutInMs);

            EventHandler <MeadowMessageEventArgs> handler = null;

            var tcs = new TaskCompletionSource <bool>();

            handler = (s, e) =>
            {
                if (e.MessageType == MeadowMessageType.Concluded)
                {
                    result = true;
                    tcs.SetResult(true);
                }
            };
            DataProcessor.OnReceiveData += handler;

            await MeadowFileManager.WriteFileToFlash(this, Path.Combine(path, filename), filename);

            await Task.WhenAny(new Task[] { timeOutTask, tcs.Task });

            DataProcessor.OnReceiveData -= handler;

            return(result);
        }
        public async Task <bool> DeleteFile(string filename, int timeoutInMs = 10000)
        {
            if (SerialPort == null)
            {
                throw new Exception("SerialPort not intialized");
            }

            bool result = false;

            var timeOutTask = Task.Delay(timeoutInMs);

            EventHandler <MeadowMessageEventArgs> handler = null;

            var tcs = new TaskCompletionSource <bool>();

            handler = (s, e) =>
            {
                if (e.Message.StartsWith("Delete success"))
                {
                    result = true;
                    tcs.SetResult(true);
                }
            };
            DataProcessor.OnReceiveData += handler;

            await MeadowFileManager.DeleteFile(this, filename);

            await Task.WhenAny(new Task[] { timeOutTask, tcs.Task });

            DataProcessor.OnReceiveData -= handler;

            return(result);
        }
        public override async Task <List <string> > GetFilesOnDevice(bool refresh = true, int timeoutInMs = 30000)
        {
            if (SerialPort == null)
            {
                throw new Exception("SerialPort not intialized");
            }

            if (FilesOnDevice.Count == 0 || refresh == true)
            {
                var timeOutTask = Task.Delay(timeoutInMs);

                EventHandler <MeadowMessageEventArgs> handler = null;

                var  tcs     = new TaskCompletionSource <bool>();
                bool started = false;

                handler = (s, e) =>
                {
                    if (e.MessageType == MeadowMessageType.FileListTitle)
                    {
                        FilesOnDevice.Clear();
                        FileCrcs.Clear();

                        started = true;
                    }
                    else if (started == false)
                    {   //ignore everything until we've started a new file list request
                        return;
                    }

                    if (e.MessageType == MeadowMessageType.FileListMember)
                    {
                        SetFileNameFromMessage(e.Message);
                    }

                    if (e.MessageType == MeadowMessageType.Concluded)
                    {
                        tcs.SetResult(true);
                    }
                };
                DataProcessor.OnReceiveData += handler;

                await MeadowFileManager.ListFiles(this);

                await Task.WhenAny(new Task[] { timeOutTask, tcs.Task });

                DataProcessor.OnReceiveData -= handler;
            }

            return(FilesOnDevice);
        }
        public override async Task <(List <string> files, List <UInt32> crcs)> GetFilesAndCrcs(int timeoutInMs = 60000)
        {
            if (SerialPort == null)
            {
                throw new Exception("SerialPort not intialized");
            }

            var timeOutTask = Task.Delay(timeoutInMs);

            EventHandler <MeadowMessageEventArgs> handler = null;

            var tcs     = new TaskCompletionSource <bool>();
            var started = false;

            handler = (s, e) =>
            {
                Console.WriteLine($"Msg: {e.MessageType}");

                if (e.MessageType == MeadowMessageType.FileListTitle)
                {
                    FilesOnDevice.Clear();
                    FileCrcs.Clear();
                    started = true;
                }
                else if (started == false)
                {   //ignore everything until we've started a new file list request
                    return;
                }

                if (e.MessageType == MeadowMessageType.FileListCrcMember)
                {
                    SetFileAndCrcsFromMessage(e.Message);
                }

                if (e.MessageType == MeadowMessageType.Concluded)
                {
                    tcs.TrySetResult(true);
                }
            };
            DataProcessor.OnReceiveData += handler;

            await MeadowFileManager.ListFilesAndCrcs(this).ConfigureAwait(false);

            await Task.WhenAny(new Task[] { timeOutTask, tcs.Task });

            DataProcessor.OnReceiveData -= handler;

            return(FilesOnDevice, FileCrcs);
        }
Example #5
0
        public static async Task FlashEsp(MeadowSerialDevice device, string sourcePath)
        {
            Console.WriteLine($"Transferring {DownloadManager.NetworkMeadowCommsFilename}");
            await MeadowFileManager.WriteFileToEspFlash(device,
                                                        Path.Combine(sourcePath, DownloadManager.NetworkMeadowCommsFilename), mcuDestAddr : "0x10000");

            await Task.Delay(1000);

            Console.WriteLine($"Transferring {DownloadManager.NetworkBootloaderFilename}");
            await MeadowFileManager.WriteFileToEspFlash(device,
                                                        Path.Combine(sourcePath, DownloadManager.NetworkBootloaderFilename), mcuDestAddr : "0x1000");

            await Task.Delay(1000);

            Console.WriteLine($"Transferring {DownloadManager.NetworkPartitionTableFilename}");
            await MeadowFileManager.WriteFileToEspFlash(device,
                                                        Path.Combine(sourcePath, DownloadManager.NetworkPartitionTableFilename), mcuDestAddr : "0x8000");

            await Task.Delay(1000);
        }