Merge change 21102

* changes:
  Fix the way the simulator reports the capabilities of the input device. This makes it no longer pretend it has as a multitouch display, trackball, etc.
This commit is contained in:
Android (Google) Code Review
2009-08-13 09:47:00 -07:00

View File

@@ -31,14 +31,34 @@ typedef struct EventState {
* (For now, just pretend to be a "goldfish" like the emulator.)
*/
static const unsigned char gKeyBitMask[64] = {
// These bits indicate which keys the device has
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
// These bits indicate other capabilities, such
// as whether it's a trackball or a touchscreen
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // touchscreen
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/*
* Abs bit mask, for EVIOCGBIT(EV_ABS).
*
* Pretend to be a normal single touch panel
*/
static const unsigned char gAbsBitMask[64] = {
// these bits indicate the capabilities of the touch screen
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ABS_X, ABS_Y
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
/*
@@ -193,7 +213,9 @@ static int ioctlEvent(FakeDev* dev, int fd, int request, void* argp)
} else if (!getenv("NOTOUCH") && _IOC_NR(urequest) == _IOC_NR(EVIOCGBIT(EV_ABS,0))) {
// absolute controllers (touch screen)
int maxLen = _IOC_SIZE(urequest);
memset(argp, 0xff, maxLen);
if (maxLen > (int) sizeof(gAbsBitMask))
maxLen = sizeof(gAbsBitMask);
memcpy(argp, gAbsBitMask, maxLen);
} else if (_IOC_NR(urequest) >= _IOC_NR(EVIOCGABS(ABS_X)) &&
_IOC_NR(urequest) <= _IOC_NR(EVIOCGABS(ABS_MAX)))