PORTS Forum
Ports and Interfaces => USB => Topic started by: tallman on March 08, 2014, 10:55:35 pm
-
Hello,
I've been trying to pass consumer device AC Zoom per the HID Usage tables, and I can't seem to get it to work in Windows. I've tried both the LC (linear control) absolute, as well as the relative, and neither do anything. Is this supported in Windows standard HID drivers? I can't find any questions on this, nor info in the MSDN docs specifically for this function.
I appreciate any feedback.
Thanks.
Brent
Here is my descriptor: I added with the AC PAN under a mouse since that is working fine.
0x05, 0x01, /* Usage Page (Generic Desktop), 8 */
0x09, 0x02, /* Usage (Mouse), */
0xA1, 0x01, /* Collection (Application), */
0x09, 0x01, /* Usage (Pointer), */
0xA1, 0x00, /* Collection (Physical), 20 */
0x85, 0x01, /* Report Id (1) */
0x05, 0x09, /* Usage Page (Buttons), */
0x19, 0x01, /* Usage Minimum (01), */
0x29, 0x03, /* Usage Maximum (03), */
0x15, 0x00, /* Logical Minimum (0), */
0x25, 0x01, /* Logical Maximum (1), */
0x75, 0x01, /* Report Size (1), */
0x95, 0x03, /* Report Count (3), 3 bits for buttons */
0x81, 0x02, /* Input (Data, Variable, Absolute) */
0x75, 0x05, /* Report Size (5), 24 5 useless bits to make up even bytes */
0x95, 0x01, /* Report Count (1), */
0x81, 0x01, /* Input (Constant), */
0x05, 0x01, /* Usage Page (Generic Desktop), */
0x09, 0x30, /* Usage (X), */
0x09, 0x31, /* Usage (Y), */
0x09, 0x38, /* Usage (Scroll), */
0x15, 0x81, /* Logical Minimum (-127), */
0x25, 0x7F, /* Logical Maximum (127), */
0x75, 0x08, /* Report Size (8), */
0x95, 0x03, /* Report Count (3), each is a byte so its 3 separate bytes */
0x81, 0x06, /* Input (Data, Variable, Relative) */
0x05, 0x0c, // USAGE_PAGE (Consumer Devices) 15
0x0a, 0x2F, 0x02, // USAGE (AC Zoom)
0x0a, 0x38, 0x02, // USAGE (AC Pan)
0x15, 0x81, // LOGICAL_MINIMUM (-127)
0x25, 0x7f, // LOGICAL_MAXIMUM (127)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x02, // Report Count (2)
0x81, 0x06, // INPUT (Data,Var,Rel)
0xC0, /* End Collection, 2 */
0xC0, /* End Collection */
-
It's possible that you would need to provide a filter driver to support these.
-
Thanks for response. I have been able to in past two days get it to work on Win 7 with following descriptor, but win 8, the Zoom doesn't work so far. The volume does, but not the zoom. Not sure where to go next.
Brent
0x05, 0x0C, // Usage Page (Consumer Devices)
0x09, 0x01, // Usage (Consumer Control)
0xA1, 0x01, // Collection (Application)
0x85, 0x04, /* Report Id (4) */
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x0a, 0x2D,0x02, // Usage (Zoom In) Bit 0
0x0a, 0x2E,0x02, // Usage (Zoom Out) Bit 1
0x75, 0x01, // Report Size (1)
0x95, 0x02, // Report Count (2)
0x81, 0x02, // Input (Data, Variable, Absolute)
0x15, 0x00, // Logical Minimum (0)
0x25, 0x01, // Logical Maximum (1)
0x09, 0xE9, // Usage (Volume Up) Bit 2
0x09, 0xEA, // Usage (Volume Down) Bit 3
0x75, 0x01, // Report Size (1)
0x95, 0x02, // Report Count (2)
0x81, 0x02, // Input (Data, Variable, Absolute)
0x95, 0x04, // Report Count (4)
0x81, 0x07, // Input (Constant)
0xC0, // End Collection
-
Why the 0x0a (ordinal?) preceding the zoom items?
-
Good question. I can't say I know for sure. The absolutely only example I found googling had it, and I'm currently using an AC PAN in my mouse and it has 0x0a, 0x38, 0x02 and it works.
If I remove it, the device is no longer recognized and I receive an error from windows device driver, properties when it's installing it.
THe actual Usage ID for zoom in according to usage table is 22D. Since that's more than 2 bytes can hold, I figured it was just how the descriptor passes this value. The usb info says the 16 bits store usage page and usage id.
How can I tell why it's there and what it should be?
Thanks for your assistance and reading this.
Brent
-
The first report descriptor you posted has Pan and Zoom under Consumer Devices. Pan is working here but Zoom isn't working?
The second descriptor doesn't have Zoom but instead has Zoom In and Zoom Out under Consumer Device > Consumer Control. Why the change? Are the logical min and max values correct? Did you try changing them or commenting them out?
-
In the first descriptor I had tried Zoom with Pan as a consumer device. I could never get this zoom to work here, nor the zoom in or zoom out which are for incrementing up and down. After a lot of reading in MSDN, they described using a Top Level Collection, so I moved it out and made it a top level collection all by itself outside the mouse.
When I did this I now see in the windows device drivers a new device called "HID-Compliant consumer control device". Then the scroll began to work, so I concluded it loads a different driver that may have more functionality programmed than the mouse. I could be completely wrong.
I've tried removing the min and max just to try, and same result. Works in Win 7, not in Win 8. The min and max are correct as it's only 1 bit value report size (1).
Thanks again for reviewing.
Brent