kernelnewbies.kernelnewbies.org archive mirror
 help / color / mirror / Atom feed
From: Matt Silva <msilva-dev@protonmail.com>
To: Greg KH <greg@kroah.com>
Cc: "kernelnewbies@kernelnewbies.org" <kernelnewbies@kernelnewbies.org>
Subject: Re: Supporting a USB HID device interface that is missing a interrupt input endpoint
Date: Wed, 18 May 2022 22:04:14 +0000	[thread overview]
Message-ID: <vu8STBurL5SbEdlkJg0_YTRyy2c0SbglHzFbvYLW7C4N_Ui0pglwNwSS-300k7vuixyJKhNvmBaNJeo0qhJQRInsBwazfGPnV2XSMoERWeU=@protonmail.com> (raw)
In-Reply-To: <YoM+SiZrPAIIGE/0@kroah.com>

Hi, Greg. Thanks for the response, I really appreciate it! Awesome to get a reply from the man himself.

Probably wasn't the best from me to refer to the Windows software as a driver. As far as I can tell it
is just a userspace application using the Windows interface to communicate, as you described below.

From my understanding, the device intends to operate as a HID device (unless your comment below about
all devices claiming to be HID when they're not on Windows applies here), it even provides a HID descriptor
with usages to Windows. It's also my understanding that for certain devices with "quirks" that don't
operate normally, the Linux kernel has quirks that allow these edge case devices to operate as intended.

So while your feedback about using libusb for OpenRGB in userspace definitely doable, I was curious if this device
would benifit from having support for its quirk added to the kernel so that it can be exposed in userspace
as it intends, rather than just solving my specific problem for OpenRGB. As far as I can tell, the
interface never communicated to directly through its single OUT endpoint. The communication is through
the control endpoint via a SET REPORT request. I did some reading and you are correct, HID class
interfaces require a interrupt in endpoint. But like I said, the fact that it only communicates via the
control endpoint made me think that maybe this requirement may not be necessary for the interface
to function as intended.

Please let me know if I'm off the mark at all on this (I feel there is a solid chance I am haha).

I really appreciate the response. Thanks.

------- Original Message -------
On Tuesday, May 17th, 2022 at 2:18 AM, Greg KH <greg@kroah.com> wrote:


> On Mon, May 16, 2022 at 11:40:09PM +0000, Matt Silva wrote:
>
> > Hi, first time emailing here, so if there are any issues with my question, let me know and I'll fix it.
> >
> > Basically, I'm working with a USB HID microphone that also supports RGB features. I'm working to reverse engineer the RGB features provided by a proprietary Windows driver and add support to OpenRGB.
>
>
> If this is a custom windows kernel driver, perhaps you don't need to
> talk HID to the device at all?
>
> Or is this just a device that is using the userspace Windows HID
> interface to talk to the device directly without any kernel code needed
> (that used to be the only way userspace programs could talk to USB
> devices on Windows for vendor-specific devices, so they all claim to be
> HID when they really are not.)
>
> > The issue is that the interface that handles the RGB packets only has an OUT interrupt endpoint (rather than an IN interrupt) and as such doesn't get picked up by the usbhid driver (and therefore can't be picked up by the HIDAPI library that OpenRGB uses). However, on Windows this interface is detected as a HID device. I've narrowed down where this happens to "drivers/hid/usbhid/hid-core.c:1350", and making some testing changes there to check when the device idVendor, idProd, and interface number match and then only check for endpoint being interrupt rather than input interrupt, I can get the kernel to properly associate the interface with the usbhid driver.
>
>
> A USB HID device has to have an interrupt IN endpoint to be HID
> compliant from what I remember in the specification, so the kernel is
> correct here. But you should double check this with the specification
> to be sure (they are free to download from usb.org).
>
> > My main question is regarding how this change should be implemented.
>
>
> Why not just talk directly to the device using libusb from userspace?
> I don't know how openrgb works, but odds are there are other devices
> that do not register as HID devices that it supports?
>
> Hope this helps,
>
> greg k-h

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

  reply	other threads:[~2022-05-18 22:04 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-16 23:40 Supporting a USB HID device interface that is missing a interrupt input endpoint Matt Silva
2022-05-17  6:18 ` Greg KH
2022-05-18 22:04   ` Matt Silva [this message]
2022-05-19  7:38     ` Greg KH
2022-05-26 20:06       ` Matt Silva
2022-05-27  6:13         ` Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='vu8STBurL5SbEdlkJg0_YTRyy2c0SbglHzFbvYLW7C4N_Ui0pglwNwSS-300k7vuixyJKhNvmBaNJeo0qhJQRInsBwazfGPnV2XSMoERWeU=@protonmail.com' \
    --to=msilva-dev@protonmail.com \
    --cc=greg@kroah.com \
    --cc=kernelnewbies@kernelnewbies.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).