Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6f5a837c authored by Jeff Brown's avatar Jeff Brown Committed by Android Code Review
Browse files

Merge "Fix getSwitchState according to device capabilities."

parents dbff9107 42305c54
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -239,6 +239,7 @@ private:
        String8         name;
        uint32_t        classes;
        uint8_t*        keyBitmask;
        uint8_t*        switchBitmask;
        KeyLayoutMap*   layoutMap;
        String8         keylayoutFilename;
        int             fd;
+19 −6
Original line number Diff line number Diff line
@@ -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)
    : 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() {
    delete [] keyBitmask;
    delete [] switchBitmask;
    delete layoutMap;
}

@@ -243,12 +245,15 @@ int32_t EventHub::getSwitchState(int32_t deviceId, int32_t sw) const {
}

int32_t EventHub::getSwitchStateLocked(device_t* device, int32_t sw) const {
    if (device->switchBitmask != NULL
            && test_bit(sw, device->switchBitmask)) {
        uint8_t sw_bitmask[sizeof_bit_array(SW_MAX + 1)];
        memset(sw_bitmask, 0, sizeof(sw_bitmask));
        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;
}

@@ -759,6 +764,14 @@ int EventHub::openDevice(const char *deviceName) {
    }
    if (hasSwitches) {
        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