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)); }
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)); } }
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))); }