Author Topic: HID Zoom  (Read 13674 times)

tallman

  • Member
  • ***
  • Posts: 25
HID Zoom
« 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.
Code: [Select]
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                      */

Jan Axelson

  • Administrator
  • Frequent Contributor
  • *****
  • Posts: 3033
    • Lakeview Research
Re: HID Zoom
« Reply #1 on: March 11, 2014, 09:33:10 pm »
It's possible that you would need to provide a filter driver to support these.

tallman

  • Member
  • ***
  • Posts: 25
Re: HID Zoom
« Reply #2 on: March 12, 2014, 03:06:23 pm »
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
Code: [Select]
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


Jan Axelson

  • Administrator
  • Frequent Contributor
  • *****
  • Posts: 3033
    • Lakeview Research
Re: HID Zoom
« Reply #3 on: March 13, 2014, 12:37:56 pm »
Why the 0x0a (ordinal?) preceding the zoom items?

tallman

  • Member
  • ***
  • Posts: 25
Re: HID Zoom
« Reply #4 on: March 13, 2014, 01:57:25 pm »
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


Jan Axelson

  • Administrator
  • Frequent Contributor
  • *****
  • Posts: 3033
    • Lakeview Research
Re: HID Zoom
« Reply #5 on: March 13, 2014, 03:42:32 pm »
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?



tallman

  • Member
  • ***
  • Posts: 25
Re: HID Zoom
« Reply #6 on: March 13, 2014, 09:54:26 pm »
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