示例#1
0
        public async Task <PipeReadResult> ReadAsync(PipeReadParameters parameters, CancellationToken cancellation)
        {
            await ThreadingUtils.ContinueAtThreadPull();

            var buffer = new byte[parameters.BytesExpected];

            for (int i = 0; i < buffer.Length; i++)
            {
                var data = _port.ReadByte();
                if (data == -1)
                {
                    await Task.Delay(1, cancellation);

                    i--;
                }
                else
                {
                    buffer[i] = data.ToByte();
                }

                cancellation.ThrowIfCancellationRequested();
            }

            return(new PipeReadResult(ReadStatus.DONE, buffer.Length, buffer));
        }
示例#2
0
        public async Task <PipeReadResult> ReadAsync(PipeReadParameters parameters, CancellationToken cancellation)
        {
            await ThreadingUtils.ContinueAtThreadPull(cancellation);

            var  buffer    = new byte[parameters.BytesExpected];
            uint bytesRead = 0;
            var  status    = _ftdi.Read(buffer, parameters.BytesExpected.ToUInt32(), ref bytesRead);

            if (status == FT_STATUS.FT_OK)
            {
                if (bytesRead < parameters.BytesExpected)
                {
                    return(new PipeReadResult(ReadStatus.PATIALLY_DONE, bytesRead.ToInt32(), buffer.Take(bytesRead.ToInt32())));
                }
                else if (bytesRead == parameters.BytesExpected)
                {
                    return(new PipeReadResult(ReadStatus.DONE, bytesRead.ToInt32(), buffer));
                }
                else
                {
                    throw new InvalidOperationException();
                }
            }
            else
            {
                return(new PipeReadResult(ReadStatus.UNKNOWN_ERROR));
            }
        }
示例#3
0
        public async Task <PipeReadResult> ReadAsync(PipeReadParameters parameters, CancellationToken cancellation)
        {
            var buffer    = new byte[parameters.BytesExpected];
            var bytesRead = Read(buffer, 0, buffer.Length);
            var status    = bytesRead == buffer.Length
                ? IOBase.ReadStatus.DONE
                : IOBase.ReadStatus.PATIALLY_DONE;

            return(new PipeReadResult(status, bytesRead, buffer.Take(bytesRead)));
        }