diff USBLib/Communication/UsbPipeStream.cs @ 21:dcfec2be27c9

Added USBLib
author Ivo Smits <Ivo@UCIS.nl>
date Mon, 15 Apr 2013 01:04:59 +0200
parents
children 2d16447eff12
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/USBLib/Communication/UsbPipeStream.cs	Mon Apr 15 01:04:59 2013 +0200
@@ -0,0 +1,64 @@
+using System;
+using System.IO;
+
+namespace UCIS.USBLib.Communication {
+	public class UsbPipeStream : Stream {
+		public IUsbInterface Device { get; private set; }
+		public Byte Endpoint { get; private set; }
+		public Boolean InterruptEndpoint { get; private set; }
+
+		public UsbPipeStream(IUsbInterface device, Byte endpoint, Boolean interrupt) {
+			this.Device = device;
+			this.Endpoint = endpoint;
+			this.InterruptEndpoint = interrupt;
+		}
+
+		public override bool CanRead {
+			get { return (Endpoint & 0x80) != 0; }
+		}
+
+		public override bool CanSeek {
+			get { return false; }
+		}
+
+		public override bool CanWrite {
+			get { return (Endpoint & 0x80) == 0; }
+		}
+
+		public override void Flush() {
+		}
+
+		public override long Length { get { return 0; } }
+
+		public override long Position {
+			get { return 0; }
+			set { throw new NotImplementedException(); }
+		}
+
+		public override int Read(byte[] buffer, int offset, int count) {
+			if (InterruptEndpoint) {
+				return Device.InterruptRead(Endpoint, buffer, offset, count);
+			} else {
+				return Device.BulkRead(Endpoint, buffer, offset, count);
+			}
+		}
+
+		public override long Seek(long offset, SeekOrigin origin) {
+			throw new NotImplementedException();
+		}
+
+		public override void SetLength(long value) {
+			throw new NotImplementedException();
+		}
+
+		public override void Write(byte[] buffer, int offset, int count) {
+			int written;
+			if (InterruptEndpoint) {
+				written = Device.InterruptWrite(Endpoint, buffer, offset, count);
+			} else {
+				written = Device.BulkWrite(Endpoint, buffer, offset, count);
+			}
+			if (written != count) throw new EndOfStreamException("Could not write all data");
+		}
+	}
+}