[fpc-pascal] USB Human Interface Devices

Johann Glaser Johann.Glaser at gmx.at
Sun Aug 11 22:15:40 CEST 2019


Hi!

Am Samstag, den 10.08.2019, 17:50 -0400 schrieb James Richters:
> I'm making an attempt to copy TUSBPseudoHIDInterface into
> libusboop.pas.  I've made the recomended name changes and then tried
> to compile it.  Some things I found like the names changing from
> things like
>
> PUSBInterfaceDescriptop to Plibusb_interface_descriptor

OK, there are two things. Names directly from libusb-1.0 (as used in
libusb.pas) should be identical to the original C code, i.e.,
Plibusb_interface_descriptor as you've written.

The second thing are the classes in the OOP wrapper in libusboop.pas.
Please use CamelCase for them, e.g., TLibusbPseudoHIDInterface.

> are pretty obvious, but just taking a guess on other things like:
>
>  changing:
>       if (EP.bmAttributes and USB_ENDPOINT_TYPE_MASK =
> USB_ENDPOINT_TYPE_INTERRUPT) and
>          (EP.bEndpointAddress and USB_ENDPOINT_DIR_MASK <> 0) then
>
> To:
>       if (EP^.bmAttributes and LIBUSB_TRANSFER_TYPE_MASK =
> LIBUSB_TRANSFER_TYPE_INTERRUPT) and
>          (EP^.bEndpointAddress and LIBUSB_ENDPOINT_DIR_MASK <> 0)
> then

Yes, very good, thanks!

Whether EP is a pointer (--> EP^.bmAttributes) or a record
(EP.bmAttributs) just depends on the usage in the code. As I see in
usb.pas in line 846, in TUSBPseudoHIDInterface.Create, it is actually
the record, so you should stay without the '^'.

> Based on looking at something similar in libusbutil... but I'm not
> sure it's right at all.... I'm not sure if USB_ENDPOINT_TYPE_MASK was
> really changed to LIBUSB_TRANSFER_TYPE_MASK or if something else
> happened.  But at least it compiles...

You translated it correctly.

> but now I've hit a few items that I just don't know what to do
> with.    I can't find anything similar to get a reference from:
>
> libusboop.pas(1198,28) Error: Identifier not found "USB_TYPE_CLASS"

Use LIBUSB_REQUEST_TYPE_CLASS.

> libusboop.pas(1199,5) Error: Identifier not found
> "USB_REQ_HID_SET_REPORT"
> libusboop.pas(1216,27) Error: Identifier not found "USB_TYPE_CLASS"
> libusboop.pas(1217,5) Error: Identifier not found
> "USB_REQ_HID_GET_REPORT"
> libusboop.pas(1227,23) Error: Identifier not found
> "HID_REPORT_TYPE_OUTPUT"

Please copy the constants USB_REQ_HID_* and HID_REPORT_* from
libusb.pas (branch master) lines 248-257 to the interface section of
libusboop.pas (branch libusb-1.0) directly above the class declaration
of TLibusbPseudoHIDInterface. Then please rename USB_REQ_HID_* to
LIBUSB_REQUEST_HID_* and HID_REPORT_* to LIBUSB_HID_REPORT_*.

> I've tried things that seem to be in line with other changes, like
> changing USB_Type_Class to LIBUSB_TYPE_CLASS or spelling out REQUEST
> instead of REQ which also seems to be done in other places, but still
> the identifiers are not found... the problem is I have no idea where
> these identifiers were/are defined.
>
> I made a fork in github and a branch called "test"  here:
> https://github.com/Zaaphod/pas-libusb/tree/Test

Great approach, thanks, then we can use pull requests.

Thanks
  Hansi

> > Actually you could copy the class TUSBPseudoHIDInterface (plus the
> > types THIDReport and TIntrReportFunc) from usb.pas to libusboop.pas
> > and change everything necessary.
> > At least one difference is that all names change from TUSB* to
> > TLibUsb*. I'm sure there are more, but I don't know by heart.
>
> _______________________________________________
> 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