You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
243 lines
7.2 KiB
243 lines
7.2 KiB
/* |
|
* 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
|
|
|