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) {