Mercurial > hg > ucis.core
comparison USBLib/Communication/LibUsb0/LibUsbDevice.cs @ 93:d467cd38b34e
USBLib: fix for large transfers with libusb0 on Windows, added driver uninstall function
author | Ivo Smits <Ivo@UCIS.nl> |
---|---|
date | Tue, 22 Apr 2014 16:40:35 +0200 |
parents | 2d16447eff12 |
children |
comparison
equal
deleted
inserted
replaced
92:ac0a29c05d03 | 93:d467cd38b34e |
---|---|
202 if (write) { | 202 if (write) { |
203 int cltCode = isochronous ? LibUsbIoCtl.ISOCHRONOUS_WRITE : LibUsbIoCtl.INTERRUPT_OR_BULK_WRITE; | 203 int cltCode = isochronous ? LibUsbIoCtl.ISOCHRONOUS_WRITE : LibUsbIoCtl.INTERRUPT_OR_BULK_WRITE; |
204 int transfered = 0; | 204 int transfered = 0; |
205 while (length > 0) { | 205 while (length > 0) { |
206 int ret; | 206 int ret; |
207 DeviceIoControl(DeviceHandle, cltCode, ref req, LibUsbRequest.Size, (IntPtr)(b + offset), Math.Min(Int16.MaxValue, length), out ret); | 207 DeviceIoControl(DeviceHandle, cltCode, ref req, LibUsbRequest.Size, (IntPtr)(b + offset), length, out ret); |
208 if (ret <= 0) throw new System.IO.EndOfStreamException(); | 208 if (ret <= 0) throw new System.IO.EndOfStreamException(); |
209 length -= ret; | 209 length -= ret; |
210 offset += ret; | 210 offset += ret; |
211 transfered += ret; | 211 transfered += ret; |
212 } | 212 } |
213 return transfered; | 213 return transfered; |
214 } else { | 214 } else { |
215 int cltCode = isochronous ? LibUsbIoCtl.ISOCHRONOUS_READ : LibUsbIoCtl.INTERRUPT_OR_BULK_READ; | 215 int cltCode = isochronous ? LibUsbIoCtl.ISOCHRONOUS_READ : LibUsbIoCtl.INTERRUPT_OR_BULK_READ; |
216 int ret; | 216 int ret; |
217 DeviceIoControl(DeviceHandle, cltCode, ref req, LibUsbRequest.Size, (IntPtr)(b + offset), Math.Min(UInt16.MaxValue, length), out ret); | 217 DeviceIoControl(DeviceHandle, cltCode, ref req, LibUsbRequest.Size, (IntPtr)(b + offset), length, out ret); |
218 return ret; | 218 return ret; |
219 } | 219 } |
220 } | 220 } |
221 } | 221 } |
222 public override void PipeReset(byte pipeID) { | 222 public override void PipeReset(byte pipeID) { |