[fpc-pascal] USB Human Interface Devices

Stefan V. Pantazi svpantazi at gmail.com
Wed Aug 28 04:35:25 CEST 2019


> 
> libusbhid_interrupt_read. failed! return code: -1
> 0libusb: error [winusbx_submit_bulk_transfer] ReadPipe/WritePipe failed: [2] The system cannot find the file specified.
> 
> But I don't really know how I can detect this and exit the process and signal my other program that the device is no longer present.   My read command:
>        hidReportData[reportIdx].dataLen:=libusbhid_interrupt_read(device_context,$81{endpoint},{out}hidReportData[reportIdx].hid_data,64{report length, varies by device}, {timeout=}50);
> only reports the number of bytes read, and when the device is removed, the result of the libusbhid_interrupt_read seems to be 64.   I’m wondering what the proper way to gracefully detect the device has been disconnected is so I can just exit out of the mode the uses the device and return to normal processing without generating any errors.

You can try to handle the error return code by checking that a device 
that was present before has actually disappeared for the libusb device list.

It also appears that in newer versions of libusb, there are provisions 
for registering and unregistering a hotplug callback.

http://libusb.sourceforge.net/api-1.0/hotplug.html

It it easy to add the calls to libusbx but they need to be tested that 
they actually work as expected.

> 
> Any ideas?
> 
> James
> 
> 
> -----Original Message-----
> From: fpc-pascal <fpc-pascal-bounces at lists.freepascal.org> On Behalf Of Stefan V. Pantazi
> Sent: Friday, August 23, 2019 10:54 AM
> To: fpc-pascal at lists.freepascal.org
> Subject: Re: [fpc-pascal] USB Human Interface Devices
> 
> Thanks for pushing on this. I think any pending timeout/transfer must be explicitly canceled before closing the USB device, so that the thread can end gracefully.
> 
> The only way I see is to use something like
> 
> libusb_handle_events_timeout_completed	
> 
> http://libusb.sourceforge.net/api-1.0/group__poll.html#ga43e52b912a760b41a0cf8a4a472fbd5b
> 
> 
> before closing the USB device context.
> 
> That function is not currently part of the libusbx and has a time_t parameter that appears C-specific but for some reason is not included in ctypes unit. But I am sure Pascal equivalents can be defined. I will do some tests to include the libusb_handle_events_timeout_completed in libusbx and libusbhid and let you know.
> 
> 
> 
> On 8/23/19 7:07 AM, James Richters wrote:
>> Stefan ,
>> Do you get the following errors when you exit your program?   Is there some way I should shut down the read thread so I don't get this error?  I've been using a timeout of 0
>>
>>
>> libusb: error [do_close] Device handle closed while transfer was still
>> being processed, but the device is still connected as far as we know
>> libusb: error [do_close] A cancellation hasn't even been scheduled on
>> the transfer for which the device is closing
>> libusb: warning [libusb_exit] some libusb_devices were leaked
>> Assertion failed!
>>
>> Program: i:\programming\gcode\libusbxhid\whb04b-4_test.exe
>> File: os/poll_windows.c, Line 145
>>
>> Expression: fd != NULL
>> Heap dump by heaptrc unit of
>> i:\programming\gcode\libusbxhid\whb04b-4_test.exe
>> 50 memory blocks allocated : 1782/1968
>> 50 memory blocks freed     : 1782/1968
>> 0 unfreed memory blocks : 0
>> True heap size : 131072 (160 used in System startup) True free heap :
>> 130912 _______________________________________________
>> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
>> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>>
> 
> --
> _______________________________________________________
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
> 

-- 
_______________________________________________________


More information about the fpc-pascal mailing list