| /* |
| * Copyright (C) 2015 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #include "InputMocks.h" |
| |
| namespace android { |
| |
| bool MockInputDeviceNode::hasKeyInRange(int32_t startKey, int32_t endKey) const { |
| auto iter = mKeys.lower_bound(startKey); |
| if (iter == mKeys.end()) return false; |
| return *iter < endKey; |
| } |
| |
| namespace MockNexus7v2 { |
| |
| MockInputDeviceNode* getElanTouchscreen() { |
| auto node = new MockInputDeviceNode(); |
| node->setPath("/dev/input/event0"); |
| node->setName("elan-touchscreen"); |
| // Location not set |
| // UniqueId not set |
| node->setBusType(0); |
| node->setVendorId(0); |
| node->setProductId(0); |
| node->setVersion(0); |
| // No keys |
| // No relative axes |
| // TODO: set the AbsoluteAxisInfo pointers |
| node->addAbsAxis(ABS_MT_SLOT, nullptr); |
| node->addAbsAxis(ABS_MT_TOUCH_MAJOR, nullptr); |
| node->addAbsAxis(ABS_MT_POSITION_X, nullptr); |
| node->addAbsAxis(ABS_MT_POSITION_Y, nullptr); |
| node->addAbsAxis(ABS_MT_TRACKING_ID, nullptr); |
| node->addAbsAxis(ABS_MT_PRESSURE, nullptr); |
| // No switches |
| // No forcefeedback |
| node->addInputProperty(INPUT_PROP_DIRECT); |
| return node; |
| } |
| |
| MockInputDeviceNode* getLidInput() { |
| auto node = new MockInputDeviceNode(); |
| node->setPath("/dev/input/event1"); |
| node->setName("lid_input"); |
| node->setLocation("/dev/input/lid_indev"); |
| // UniqueId not set |
| node->setBusType(0); |
| node->setVendorId(0); |
| node->setProductId(0); |
| node->setVersion(0); |
| // No keys |
| // No relative axes |
| // No absolute axes |
| node->addSwitch(SW_LID); |
| // No forcefeedback |
| node->addInputProperty(INPUT_PROP_DIRECT); |
| return node; |
| } |
| |
| MockInputDeviceNode* getButtonJack() { |
| auto node = new MockInputDeviceNode(); |
| node->setPath("/dev/input/event2"); |
| node->setName("apq8064-tabla-snd-card Button Jack"); |
| node->setLocation("ALSA"); |
| // UniqueId not set |
| node->setBusType(0); |
| node->setVendorId(0); |
| node->setProductId(0); |
| node->setVersion(0); |
| node->addKeys(BTN_0, BTN_1, BTN_2, BTN_3, BTN_4, BTN_5, BTN_6, BTN_7); |
| // No relative axes |
| // No absolute axes |
| // No switches |
| // No forcefeedback |
| node->addInputProperty(INPUT_PROP_DIRECT); |
| return node; |
| } |
| |
| MockInputDeviceNode* getHeadsetJack() { |
| auto node = new MockInputDeviceNode(); |
| node->setPath("/dev/input/event3"); |
| node->setName("apq8064-tabla-snd-card Headset Jack"); |
| node->setLocation("ALSA"); |
| // UniqueId not set |
| node->setBusType(0); |
| node->setVendorId(0); |
| node->setProductId(0); |
| node->setVersion(0); |
| // No keys |
| // No relative axes |
| // No absolute axes |
| node->addSwitch(SW_HEADPHONE_INSERT); |
| node->addSwitch(SW_MICROPHONE_INSERT); |
| node->addSwitch(SW_LINEOUT_INSERT); |
| // ASUS adds some proprietary switches, but we'll only see two of them. |
| node->addSwitch(0x0e); // SW_HPHL_OVERCURRENT |
| node->addSwitch(0x0f); // SW_HPHR_OVERCURRENT |
| // No forcefeedback |
| node->addInputProperty(INPUT_PROP_DIRECT); |
| return node; |
| } |
| |
| MockInputDeviceNode* getH2wButton() { |
| auto node = new MockInputDeviceNode(); |
| node->setPath("/dev/input/event4"); |
| node->setName("h2w button"); |
| // Location not set |
| // UniqueId not set |
| node->setBusType(0); |
| node->setVendorId(0); |
| node->setProductId(0); |
| node->setVersion(0); |
| node->addKeys(KEY_MEDIA); |
| // No relative axes |
| // No absolute axes |
| // No switches |
| node->addInputProperty(INPUT_PROP_DIRECT); |
| return node; |
| } |
| |
| MockInputDeviceNode* getGpioKeys() { |
| auto node = new MockInputDeviceNode(); |
| node->setPath("/dev/input/event5"); |
| node->setName("gpio-keys"); |
| node->setLocation("gpio-keys/input0"); |
| // UniqueId not set |
| node->setBusType(0x0019); |
| node->setVendorId(0x0001); |
| node->setProductId(0x0001); |
| node->setVersion(0x0100); |
| node->addKeys(KEY_VOLUMEDOWN, KEY_VOLUMEUP, KEY_POWER); |
| // No relative axes |
| // No absolute axes |
| // No switches |
| node->addInputProperty(INPUT_PROP_DIRECT); |
| return node; |
| } |
| |
| } // namespace MockNexus7v2 |
| |
| namespace MockNexusPlayer { |
| |
| MockInputDeviceNode* getGpioKeys() { |
| auto node = new MockInputDeviceNode(); |
| node->setPath("/dev/input/event0"); |
| node->setName("gpio-keys"); |
| node->setLocation("gpio-keys/input0"); |
| // UniqueId not set |
| node->setBusType(0x0019); |
| node->setVendorId(0x0001); |
| node->setProductId(0x0001); |
| node->setVersion(0x0100); |
| node->addKeys(KEY_CONNECT); |
| // No relative axes |
| // No absolute axes |
| // No switches |
| node->addInputProperty(INPUT_PROP_DIRECT); |
| return node; |
| } |
| |
| MockInputDeviceNode* getMidPowerBtn() { |
| auto node = new MockInputDeviceNode(); |
| node->setPath("/dev/input/event1"); |
| node->setName("mid_powerbtn"); |
| node->setLocation("power-button/input0"); |
| // UniqueId not set |
| node->setBusType(0x0019); |
| node->setVendorId(0); |
| node->setProductId(0); |
| node->setVersion(0); |
| node->addKeys(KEY_POWER); |
| // No relative axes |
| // No absolute axes |
| // No switches |
| node->addInputProperty(INPUT_PROP_DIRECT); |
| return node; |
| } |
| |
| MockInputDeviceNode* getNexusRemote() { |
| auto node = new MockInputDeviceNode(); |
| node->setPath("/dev/input/event2"); |
| node->setName("Nexus Remote"); |
| // Location not set |
| node->setUniqueId("78:86:D9:50:A0:54"); |
| node->setBusType(0x0005); |
| node->setVendorId(0x18d1); |
| node->setProductId(0x2c42); |
| node->setVersion(0); |
| node->addKeys(KEY_UP, KEY_LEFT, KEY_RIGHT, KEY_DOWN, KEY_BACK, KEY_PLAYPAUSE, |
| KEY_HOMEPAGE, KEY_SEARCH, KEY_SELECT); |
| // No relative axes |
| node->addAbsAxis(ABS_MISC, nullptr); |
| // No switches |
| node->addInputProperty(INPUT_PROP_DIRECT); |
| return node; |
| } |
| |
| MockInputDeviceNode* getAsusGamepad() { |
| auto node = new MockInputDeviceNode(); |
| node->setPath("/dev/input/event3"); |
| node->setName("ASUS Gamepad"); |
| // Location not set |
| node->setUniqueId("C5:30:CD:50:A0:54"); |
| node->setBusType(0x0005); |
| node->setVendorId(0x0b05); |
| node->setProductId(0x4500); |
| node->setVersion(0x0040); |
| node->addKeys(KEY_BACK, KEY_HOMEPAGE, BTN_A, BTN_B, BTN_X, BTN_Y, BTN_TL, BTN_TR, |
| BTN_MODE, BTN_THUMBL, BTN_THUMBR); |
| // No relative axes |
| node->addAbsAxis(ABS_X, nullptr); |
| node->addAbsAxis(ABS_Y, nullptr); |
| node->addAbsAxis(ABS_Z, nullptr); |
| node->addAbsAxis(ABS_RZ, nullptr); |
| node->addAbsAxis(ABS_GAS, nullptr); |
| node->addAbsAxis(ABS_BRAKE, nullptr); |
| node->addAbsAxis(ABS_HAT0X, nullptr); |
| node->addAbsAxis(ABS_HAT0Y, nullptr); |
| node->addAbsAxis(ABS_MISC, nullptr); |
| node->addAbsAxis(0x29, nullptr); |
| node->addAbsAxis(0x2a, nullptr); |
| // No switches |
| node->addInputProperty(INPUT_PROP_DIRECT); |
| // Note: this device has MSC and LED bitmaps as well. |
| return node; |
| } |
| |
| } // namespace MockNexusPlayer |
| |
| } // namespace android |