comparison 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
comparison
equal deleted inserted replaced
20:c873e3dd73fe 21:dcfec2be27c9
1 using System;
2 using System.IO;
3
4 namespace UCIS.USBLib.Communication {
5 public class UsbPipeStream : Stream {
6 public IUsbInterface Device { get; private set; }
7 public Byte Endpoint { get; private set; }
8 public Boolean InterruptEndpoint { get; private set; }
9
10 public UsbPipeStream(IUsbInterface device, Byte endpoint, Boolean interrupt) {
11 this.Device = device;
12 this.Endpoint = endpoint;
13 this.InterruptEndpoint = interrupt;
14 }
15
16 public override bool CanRead {
17 get { return (Endpoint & 0x80) != 0; }
18 }
19
20 public override bool CanSeek {
21 get { return false; }
22 }
23
24 public override bool CanWrite {
25 get { return (Endpoint & 0x80) == 0; }
26 }
27
28 public override void Flush() {
29 }
30
31 public override long Length { get { return 0; } }
32
33 public override long Position {
34 get { return 0; }
35 set { throw new NotImplementedException(); }
36 }
37
38 public override int Read(byte[] buffer, int offset, int count) {
39 if (InterruptEndpoint) {
40 return Device.InterruptRead(Endpoint, buffer, offset, count);
41 } else {
42 return Device.BulkRead(Endpoint, buffer, offset, count);
43 }
44 }
45
46 public override long Seek(long offset, SeekOrigin origin) {
47 throw new NotImplementedException();
48 }
49
50 public override void SetLength(long value) {
51 throw new NotImplementedException();
52 }
53
54 public override void Write(byte[] buffer, int offset, int count) {
55 int written;
56 if (InterruptEndpoint) {
57 written = Device.InterruptWrite(Endpoint, buffer, offset, count);
58 } else {
59 written = Device.BulkWrite(Endpoint, buffer, offset, count);
60 }
61 if (written != count) throw new EndOfStreamException("Could not write all data");
62 }
63 }
64 }