Simulating Android HID using the AOA2 USP interface

443 views
Skip to first unread message

Nadav R

unread,
Nov 12, 2014, 4:48:05 AM11/12/14
to android-...@googlegroups.com
Environment:
  • Windows OS
  • USB Connected Galaxy5 @ Android 4.4
  • adb.exe

Use case:
Control the SmartPhone device using the Desktop mouse

Implementation:
  • Interface the Device AOA2 interface using USB
  • Register a Touch pad HID report
  • Send HID reports to the device to simulate touch events

Problem description:
While being able to simulate a keyboard, I wasn't able to simulate touch events, when registering my remote touch pad "adb.exe shell getevent" reads the following:

/dev/input/event21: 0000 0000 00000001
remote device
: /dev/input/mouse2 not found
remove device
1: /dev/input/event21
could
not get driver version for /dev/input/mouse2, Not a typewriter
add device
22: /dev/input/event21
name
:     ""

Having in mind that the I am able to simulate a Keyboard ( providing a proper HID Report descriptor ) I believe that the problem is with the Report Descriptor used for the touch screen, I was trying two different Report Descriptors ( shown bellow ), one simulating a Digitizer and the other simulating a mouse with Absolute positioning.

What am I doing wrong? 
Why while being able to simulate a keyboard, I am not able to simulate a touch screen?


The Touch screen Report descriptor was implemented according to this link
 const UCHAR DESCRIPTOR[] = {
 
0x05, 0x0d,                    // USAGE_PAGE (Digitizers)
 
0x09, 0x04,                    // USAGE (Touch Screen)
 
0xa1, 0x01,                    // COLLECTION (Application)
 
0x85, 0x04,                    //   REPORT_ID (4)
 
0x09, 0x22,                    //   USAGE (Finger)
 
0xa1, 0x00,                    //   COLLECTION (Physical)
 
0x05, 0x09,                    //     USAGE_PAGE (Button)
 
0x19, 0x01,                    //     USAGE_MINIMUM (Button 1)
 
0x29, 0x01,                    //     USAGE_MAXIMUM (Button 1)
 
0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
 
0x25, 0x01,                    //     LOGICAL_MAXIMUM (1)
 
0x75, 0x08,                    //     REPORT_SIZE (8)
 
0x95, 0x01,                    //     REPORT_COUNT (1)
 
0x81, 0x02,                    //     INPUT (Data,Var,Abs)
 
0x05, 0x01,                    //     USAGE_PAGE (Generic Desktop)
 
0x09, 0x30,                    //     USAGE (X)
 
0x09, 0x31,                    //     USAGE (Y)
 
0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
 
0x26, 0xff, 0x7f,              //     LOGICAL_MAXIMUM (32767)
 
0x75, 0x10,                    //     REPORT_SIZE (16)
 
0x95, 0x02,                    //     REPORT_COUNT (2)
 
0x81, 0x02,                    //     INPUT (Data,Var,Abs)
 
0xc0,                          //   END_COLLECTION
 
0xc0                           // END_COLLECTION
 
};

 
struct Report {
    BYTE report_id
; // Must be set to 4
   
struct {
       BYTE b1
;
   
} buttons;
   
short x;
   
short y;
 
};

The mouse descriptor implemented in according to this link
const UCHAR DESCRIPTOR[] = {
 
0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
 
0x09, 0x02,                    // USAGE (Mouse)
 
0xa1, 0x01,                    // COLLECTION (Application)
 
0x85, 0x04,                    //   REPORT_ID (4)
 
0x09, 0x01,                    //   USAGE (Pointer)
 
0xa1, 0x00,                    //   COLLECTION (Physical)
 
0x05, 0x09,                    //     USAGE_PAGE (Button)
 
0x19, 0x01,                    //     USAGE_MINIMUM (Button 1)
 
0x29, 0x03,                    //     USAGE_MAXIMUM (Button 3)
 
0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
 
0x25, 0x01,                    //     LOGICAL_MAXIMUM (1)
 
0x95, 0x03,                    //     REPORT_COUNT (3)
 
0x75, 0x01,                    //     REPORT_SIZE (1)
 
0x81, 0x02,                    //     INPUT (Data,Var,Abs)
 
0x95, 0x01,                    //     REPORT_COUNT (1)
 
0x75, 0x05,                    //     REPORT_SIZE (5)
 
0x81, 0x03,                    //  INPUT (Cnst,Var,Abs)
 
0x05, 0x01,                    //     USAGE_PAGE (Generic Desktop)
 
0x09, 0x30,                    //     USAGE (X)
 
0x09, 0x31,                    //     USAGE (Y)
 
0x09, 0x00,                    //  USAGE (Undefined)
 
0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
 
0x26, 0xff, 0x7f,              //     LOGICAL_MAXIMUM (32767)
 
0x35, 0x00,                    //  PHYSICAL_MINIMUM(0)
 
0x47, 0xFF, 0xFF, 0x00, 0x00,  //  PHYSICAL_MAXIMUM(65535)
 
0x75, 0x10,                    //     REPORT_SIZE (16)
 
0x95, 0x03,                    //     REPORT_COUNT (3)
 
0x81, 0x02,                    //     INPUT (Data,Var,Abs)
 
0xc0,                          //   END_COLLECTION
 
0xa1, 0x01,                    //   COLLECTION (Application)
 
0x05, 0x09,                                  //     USAGE_PAGE (Button)
 0x19, 0x01,                                  //     USAGE_MINIMUM (Button 1)
 0x29, 0x03,                                  //     USAGE_MAXIMUM (Button 3)
 0x15, 0x00,                                  //     LOGICAL_MINIMUM (0)
 0x25, 0x01,                                  //     LOGICAL_MAXIMUM (1)
 0x95, 0x03,                                  //     REPORT_COUNT (3)
 0x75, 0x01,                                  //     REPORT_SIZE (1)
 0xb1, 0x02,                                  //     FEATURE (Data,Var,Abs)
 0x95, 0x01,                                  //     REPORT_COUNT (1)
 0x75, 0x05,                                  //     REPORT_SIZE (5)
 0xb1, 0x03,                                  //     FEATURE (Cnst,Var,Abs)
 0xc0,                                             //   END_COLLECTION
 0xc0                           // END_COLLECTION
 
};


 
struct Report {
    BYTE report_id
; // Must be set to 4
   
struct {
       BYTE b1
: 1;
       BYTE b2
: 1;
       BYTE b3
: 1;
       BYTE reserved
: 5;
   
} buttons;
   
short x;
   
short y;
   
short pressure;
 
};

chinlin@tw-roc

unread,
Feb 8, 2017, 12:56:31 AM2/8/17
to android-platform
Hi Nadav,

are you success finally?
you can try this descriptor on your phone to test if it works or not:

0x05, 0x0D,        // Usage Page (Digitizer)

0x09, 0x04,        // Usage (Touch Screen)

0xA1, 0x01,        // Collection (Application)

0x85, 1,            //   Report ID (2)

0x09, 0x20,        //   Usage (Stylus)

0xA1, 0x00,        //   Collection (Physical)

0x09, 0x42,        //     Usage (Tip Switch)

0x09, 0x32,        //     Usage (In Range)

0x15, 0x00,        //     Logical Minimum (0)

0x25, 0x01,        //     Logical Maximum (1)

0x95, 0x02,        //     Report Count (2)

0x75, 0x01,        //     Report Size (1)

0x81, 0x02,        //     Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)

0x95, 0x06,        //     Report Count (6)

0x75, 0x01,        //     Report Size (1)

0x81, 0x03,        //     Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)

0x05, 0x01,        //     Usage Page (Generic Desktop Ctrls)

0x09, 0x30,        //     Usage (X)

0x09, 0x31,        //     Usage (Y)

0x75, 0x10,        //     Report Size (16)

0x95, 0x01,        //     Report Count (2)

0x55, 0x00,        //       Unit Exponent (0)

0x65, 0x00,        //       Unit (None)

0x36, 0x00, 0x00,  //       Physical Minimum (0)

0x46, 0xff, 0x00     //Physical Max (1024)

0x16, 0x00, 0x00,  //       Logical Minimum (0)

0x26, 0xff, 0x00,    //Local Max (1024)

0x81, 0x02,        //       Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)

0xC0,              //   End Collection

0xC0,              // End Collection




Nadav R於 2014年11月12日星期三 UTC+8下午5時48分05秒寫道:
Reply all
Reply to author
Forward
0 new messages