am 6f5a837c: Merge "Fix getSwitchState according to device capabilities."
* commit '6f5a837c9c4a55c82111c6cd5af6055b63fcb5a9': Fix getSwitchState according to device capabilities.
This commit is contained in:
commit
38b77d4373
@ -239,6 +239,7 @@ private:
|
|||||||
String8 name;
|
String8 name;
|
||||||
uint32_t classes;
|
uint32_t classes;
|
||||||
uint8_t* keyBitmask;
|
uint8_t* keyBitmask;
|
||||||
|
uint8_t* switchBitmask;
|
||||||
KeyLayoutMap* layoutMap;
|
KeyLayoutMap* layoutMap;
|
||||||
String8 keylayoutFilename;
|
String8 keylayoutFilename;
|
||||||
int fd;
|
int fd;
|
||||||
|
@ -94,11 +94,13 @@ static inline const char* toString(bool value) {
|
|||||||
|
|
||||||
EventHub::device_t::device_t(int32_t _id, const char* _path, const char* name)
|
EventHub::device_t::device_t(int32_t _id, const char* _path, const char* name)
|
||||||
: id(_id), path(_path), name(name), classes(0)
|
: id(_id), path(_path), name(name), classes(0)
|
||||||
, keyBitmask(NULL), layoutMap(new KeyLayoutMap()), fd(-1), next(NULL) {
|
, keyBitmask(NULL), switchBitmask(NULL)
|
||||||
|
, layoutMap(new KeyLayoutMap()), fd(-1), next(NULL) {
|
||||||
}
|
}
|
||||||
|
|
||||||
EventHub::device_t::~device_t() {
|
EventHub::device_t::~device_t() {
|
||||||
delete [] keyBitmask;
|
delete [] keyBitmask;
|
||||||
|
delete [] switchBitmask;
|
||||||
delete layoutMap;
|
delete layoutMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -243,11 +245,14 @@ int32_t EventHub::getSwitchState(int32_t deviceId, int32_t sw) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int32_t EventHub::getSwitchStateLocked(device_t* device, int32_t sw) const {
|
int32_t EventHub::getSwitchStateLocked(device_t* device, int32_t sw) const {
|
||||||
uint8_t sw_bitmask[sizeof_bit_array(SW_MAX + 1)];
|
if (device->switchBitmask != NULL
|
||||||
memset(sw_bitmask, 0, sizeof(sw_bitmask));
|
&& test_bit(sw, device->switchBitmask)) {
|
||||||
if (ioctl(device->fd,
|
uint8_t sw_bitmask[sizeof_bit_array(SW_MAX + 1)];
|
||||||
EVIOCGSW(sizeof(sw_bitmask)), sw_bitmask) >= 0) {
|
memset(sw_bitmask, 0, sizeof(sw_bitmask));
|
||||||
return test_bit(sw, sw_bitmask) ? AKEY_STATE_DOWN : AKEY_STATE_UP;
|
if (ioctl(device->fd,
|
||||||
|
EVIOCGSW(sizeof(sw_bitmask)), sw_bitmask) >= 0) {
|
||||||
|
return test_bit(sw, sw_bitmask) ? AKEY_STATE_DOWN : AKEY_STATE_UP;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return AKEY_STATE_UNKNOWN;
|
return AKEY_STATE_UNKNOWN;
|
||||||
}
|
}
|
||||||
@ -759,6 +764,14 @@ int EventHub::openDevice(const char *deviceName) {
|
|||||||
}
|
}
|
||||||
if (hasSwitches) {
|
if (hasSwitches) {
|
||||||
device->classes |= INPUT_DEVICE_CLASS_SWITCH;
|
device->classes |= INPUT_DEVICE_CLASS_SWITCH;
|
||||||
|
device->switchBitmask = new uint8_t[sizeof(sw_bitmask)];
|
||||||
|
if (device->switchBitmask != NULL) {
|
||||||
|
memcpy(device->switchBitmask, sw_bitmask, sizeof(sw_bitmask));
|
||||||
|
} else {
|
||||||
|
delete device;
|
||||||
|
LOGE("out of memory allocating switch bitmask");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user