<div dir="ltr"><div><div><div><div><div><div><div>I have a graphics tablet that I&#39;m working with a driver developer to get working.<br></div>We have a driver that works for reporting the x, y, and z ( pressure ) <br></div>but doesn&#39;t work with the buttons.<br></div><br></div>I&#39;ve traced the device and have documented the usb stream as follows:<br>07 E0 01 01 80 ......  Button 1 (nearest the logo)<br>07 E0 01 01 40 ......  Button 2<br>07 E0 01 01 20 ......  Button 3<br>07 E0 01 01 10 ......  Button 4<br>07 E0 01 01 08 ......  Button 5<br>07 E0 01 01 04 ......  Button 6<br>07 E0 01 01 02 ......  Button 7<br>07 E0 01 01 01 ......  Button 8<br>07 E0 01 01 00         Button up <br><br>when the stylus is used the output is then<br><br>07 01 xx xx yy yy zz zz  ( where xx is the axis and yy is y axis and zz is the preasure and the 01 means the tip is in contact<br><br>07 02 .....  means barrel switch 1 is on<br>07 40 ...... means barrel switch 2 is on<br>07 80  ..... stylus is in proximity<br>07 C0 ...... stylus left the area<br><br></div>it appears I need to write a new version of the report descrptor<br></div>to support the buttons.<br></div>The existing driver has the following:<br><br>static const __u8 huion_tablet_rdesc_template[] = {<br><div><div><div>        0x05, 0x0D,             /*  Usage Page (Digitizer),                 */<br>        0x09, 0x02,             /*  Usage (Pen),                            */<br>        0xA1, 0x01,             /*  Collection (Application),               */<br>        0x85, 0x07,             /*      Report ID (7),                      */<br>        0x09, 0x20,             /*      Usage (Stylus),                     */<br>        0xA0,                   /*      Collection (Physical),              */<br>        0x14,                   /*          Logical Minimum (0),            */<br>        0x25, 0x01,             /*          Logical Maximum (1),            */<br>        0x75, 0x01,             /*          Report Size (1),                */<br>        0x09, 0x42,             /*          Usage (Tip Switch),             */<br>        0x09, 0x44,             /*          Usage (Barrel Switch),          */<br>        0x09, 0x46,             /*          Usage (Tablet Pick),            */<br>        0x95, 0x03,             /*          Report Count (3),               */<br>        0x81, 0x02,             /*          Input (Variable),               */<br>        0x95, 0x03,             /*          Report Count (3),               */<br>        0x81, 0x03,             /*          Input (Constant, Variable),     */<br>        0x09, 0x32,             /*          Usage (In Range),               */<br>        0x95, 0x01,             /*          Report Count (1),               */<br>        0x81, 0x02,             /*          Input (Variable),               */<br>        0x95, 0x01,             /*          Report Count (1),               */<br>        0x81, 0x03,             /*          Input (Constant, Variable),     */<br>        0x75, 0x10,             /*          Report Size (16),               */<br>        0x95, 0x01,             /*          Report Count (1),               */<br>        0xA4,                   /*          Push,                           */<br>        0x05, 0x01,             /*          Usage Page (Desktop),           */<br>        0x65, 0x13,             /*          Unit (Inch),                    */<br>        0x55, 0xFD,             /*          Unit Exponent (-3), 0x55,0x0d ? */<br>        0x34,                   /*          Physical Minimum (0),           */<br>        0x09, 0x30,             /*          Usage (X),                      */<br>        0x27, HUION_PH(X_LM),   /*          Logical Maximum (PLACEHOLDER),  */<br>        0x47, HUION_PH(X_PM),   /*          Physical Maximum (PLACEHOLDER), */<br>        0x81, 0x02,             /*          Input (Variable),               */<br>        0x09, 0x31,             /*          Usage (Y),                      */<br>        0x27, HUION_PH(Y_LM),   /*          Logical Maximum (PLACEHOLDER),  */<br>        0x47, HUION_PH(Y_PM),   /*          Physical Maximum (PLACEHOLDER), */<br>        0x81, 0x02,             /*          Input (Variable),               */<br>        0xB4,                   /*          Pop,                            */<br>        0x09, 0x30,             /*          Usage (Tip Pressure),           */<br>        0x27,<br>        HUION_PH(PRESSURE_LM),  /*          Logical Maximum (PLACEHOLDER),  */<br>        0x81, 0x02,             /*          Input (Variable),               */<br>        0xC0,                   /*      End Collection,                     */<br>        0xC0                    /*  End Collection                          */<br>};<br><br><br></div><div>Any one know how to wedge the button information into this thigy?<br></div><div>My first foray into USB cracking.<br></div><div><br>----------<br></div><div>Vince<br><br></div></div></div></div>