[fpc-pascal] USB Human Interface Devices

Stefan V. Pantazi svpantazi at gmail.com
Fri Aug 16 03:15:20 CEST 2019


Well, I am sure you can find some devices lying around.

For once your USB mouse and keyboard are HID devices - but one usually 
avoids messing with them for obvious reasons, in case an USB interface 
claimed by a test program is not released.

Out of curiosity, just now I opened my keyboard device (046d:c517 
Logitech, Inc. LX710 Cordless Desktop Laser) and interrupt data reports 
came right in as I pressed keys (looks like my keyboard generates 16 
bytes of data for every key press). Decoding the data though is another 
problem altogether. Can't test if this also works in Windows but in 
Linux appears to work ok.


But you should be safer testing with a USB game controller or Wii remote 
as they are also HID devices. I was amazed that the Wii (being wireless 
and all actually worked.) I also just checked and realized that my APC 
UPS is also a HID device (ID 051d:0002 American Power Conversion 
Uninterruptible Power Supply). In sum, plenty of devices to play around 
with. Have fun!



On 8/15/19 8:28 PM, James Richters wrote:
> Thanks for posting the examples and the information. I'll have a look... I am thinking maybe I should buy some of those USB relays  or something simpler just to get SOMETHNG to work so I can figure out what's supposed to even be happening.
> 
> James
> 
> -----Original Message-----
> From: fpc-pascal <fpc-pascal-bounces at lists.freepascal.org> On Behalf Of Stefan V. Pantazi
> Sent: Thursday, August 15, 2019 5:31 PM
> To: fpc-pascal at lists.freepascal.org
> Subject: Re: [fpc-pascal] USB Human Interface Devices
> 
> Hi James,
> 
> I remember going through many similar difficulties with HID. A few years ago I was trying to connect to much simpler devices than yours (game controllers, weather station base, graphic tablet, etc). USB programming is confusing and many abstraction layers have been created aiming at simplifying it. Unfortunately this introduces dependencies. I remember trying to port hidapi headers to Pascal and tried to use the hidraw backend (in linux) with mixed results. Also tried the libhid cross-platform library. In the end I went with libusb 1.0 for which a Pascal header already existed
> (https://forum.lazarus.freepascal.org/index.php?topic=11435.0) and used it to implement on top of it a subset of the HID API calls that suited my needs and kept things simple. I just posted an example on github:
> https://github.com/svpantazi/libusbxhid
> Hope it helps.
> 
> In theory you could use the Windows HID API but, as others have suggested, the solution would not be cross platform, or, to put it another way, Windows HID API would become your dependency. My suggestion is also to go the libusb 1.0 route and use a Pascal HID library that depends only on libusb 1.0. Your device appears to be HID-compliant so no additional drivers should be needed for it. As far as I know, the Zadig generic driver is necessary only for non-HID devices. I remember using it for a rtl-sdr USB device on Windows.
> 
> Hope you find your solution. Good luck.
> 
> On 8/15/19 9:11 AM, James Richters wrote:
>> Yes, in device manager I see it listed as "HID-compliant
>> vendor-defined device"  also Zadig identifies it as "USB Input Device"
>> and it shows Driver: HidUsb (v10.1.17763.1)
>>
>> Is there a way to use the windows system HID interface with FPC already in place as there is for other windows APIs?
>>
>> James
>>
>> -----Original Message-----
>> From: fpc-pascal <fpc-pascal-bounces at lists.freepascal.org> On Behalf
>> Of José Mejuto
>> Sent: Thursday, August 15, 2019 8:34 AM
>> To: fpc-pascal at lists.freepascal.org
>> Subject: Re: [fpc-pascal] USB Human Interface Devices
>>
>> El 14/08/2019 a las 16:29, James Richters escribió:
>>
>>> I'll have a look at your project.. maybe it will give me some clues.
>>> Can you tell me how to get hid.dll?  I  find it all very confusing, can I just download the dll somewhere or do I have to get this huge confusing package and built it myself?  The sample code that is able to access my device with python on Linux uses hid.dll  I would like to at least be able to try the hid.dll... if I can get hid.dll somewhere.
>>
>> Hello,
>>
>> hid.dll is the windows system HID interface, the API provided by Windows.
>>
>>>> In the other hand, the hardware you are trying to manage is 10CE:EB93 ?
>>> Yes, I got a listing of all devices, then I plugged in the new one, and that is the ID that was not there before.
>>>> If the answer is yes, that device is *not* HID compatible so you can
>>>> not use hid.dll for native access, you must use WinUSB API set, or
>>>> the
>>>> libusb-1.0 abstraction layer.
>>> I'm curious how you can tell that by looking at the number of it?
>>
>> No, I just look for the product and try to find its drivers, no one name the HID interface. Do you see the device in windows device manager under the HID section "Human Interface Devices (HID)" ?
>>
>>
> 
> --
> _______________________________________________________
> _______________________________________________
> 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