Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
        public async Task <IDictionary <string, uint> > GetFilesAndCrcsAsync(
            TimeSpan timeout,
            int partition = 0,
            CancellationToken cancellationToken = default)
        {
            var started = false;

            EventHandler <MeadowMessageEventArgs> handler = (s, e) =>
            {
                if (e.MessageType == MeadowMessageType.FileListTitle)
                {
                    FilesOnDevice.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);
                }
            };

            var command = new SimpleCommandBuilder(HcomMeadowRequestType.HCOM_MDOW_REQUEST_LIST_PART_FILES_AND_CRC)
                          .WithResponseHandler(handler)
                          .WithUserData((uint)partition)
                          .Build();

            await SendCommandAsync(command, cancellationToken)
            .ConfigureAwait(false);

            return(FilesOnDevice);
        }