For instance, my mouse has a wheel which is also the middle button. To press the middle mouse button, you click the wheel as if it were a button.
It also has another little middle button right in line with the wheel. That other button does not generate any scan codes or hid events.
All that button does is toggle the detent on/off for the wheel. It's effects are entirely within the mouse and does not talk to the host. Does not generate any mouse events or xev events or hid or scancodes etc.
The wheel detent toogle thing is, the wheel has some mass to it, and if the detent is off ,then the wheel can be flicked and it will spin freely for some time by inertia. This is great for zipping up or down in a long document.
But it also means that in free-wheeling mode, the wheel is always generating wheel movement events, since it's always moving. If you so much as look at it funny it moves a little, let alone actually intentionally handling and moving the mouse.
So mormally you want the detent mode on so that the wheel does not spin freely.
Having the middle mouse button be the wheel is extremely agrevating to me, because even in detent mode I can't press the middle button without also scrolling the wheel at least a little at the same time, except with annoying great care. It reeeeely screws up cad work.
Luckily, the mouse allows you to swap those two functions around. You can make it so that you click the wheel to toggle the wheel between detent and freewheel, and use the button as the middle mouse button.
Like I said, whichever button is acting as the detent-toggle, that button does not generate HID events. So you can't do this button remapping the normal way like you might swap left & right buttons for instance.
The official Windows software talks to the mouse and reconfigures something inside the mouse, via some special protocol of it's own.
Solaar does the same thing.
That is just one tiny example that isn't "control the rgb lights", there are others.
Actually even controlling the rgb lights is a real issue too.
I also have a keyboard that I wanted because it is mechanical and low profile and TKL layout (ten-key-less, full keyboard and edit/arrow blocks, but just no 10-key to the right of that.), and wireless including bluetooth so I don't need a dongle with my laptop normally, but still able to be used in bios/uefi because it comes with a usb receiver as well as supporting bluetooth.
That thing is pretty good in all those aspects, but it also has ^%$%#%% rgb lights, and the firmware in the keyboard defaults to a continuous disco show of changing colors. It's completely ridiculous.
You need to use the software to shut the damned lights off, or really not merely off but make them function just as normal backlights.
I'm not a gamer and do not want rgb lights, but I do want everything else about that keyboard, so a non-gamer needs an rgb gamer keyboard light control.
It has to do it's thing on every power cycle too. The setting isn't saved in the keyboard, the software has to perform the action over and over, either everytime the pc boots or every time the keyboard loses power or every time the keyboard goes to sleep and wake, I don't remember exactly which. I don't use that keyboard any more. And that api is not exposed through normal HID. The special software has to talk via it's special interface.
So that's another example.