1 /* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include "InputMocks.h" 18 19 namespace android { 20 21 bool MockInputDeviceNode::hasKeyInRange(int32_t startKey, int32_t endKey) const { 22 auto iter = mKeys.lower_bound(startKey); 23 if (iter == mKeys.end()) return false; 24 return *iter < endKey; 25 } 26 27 namespace MockNexus7v2 { 28 29 MockInputDeviceNode* getElanTouchscreen() { 30 auto node = new MockInputDeviceNode(); 31 node->setPath("/dev/input/event0"); 32 node->setName("elan-touchscreen"); 33 // Location not set 34 // UniqueId not set 35 node->setBusType(0); 36 node->setVendorId(0); 37 node->setProductId(0); 38 node->setVersion(0); 39 // No keys 40 // No relative axes 41 // TODO: set the AbsoluteAxisInfo pointers 42 node->addAbsAxis(ABS_MT_SLOT, nullptr); 43 node->addAbsAxis(ABS_MT_TOUCH_MAJOR, nullptr); 44 node->addAbsAxis(ABS_MT_POSITION_X, nullptr); 45 node->addAbsAxis(ABS_MT_POSITION_Y, nullptr); 46 node->addAbsAxis(ABS_MT_TRACKING_ID, nullptr); 47 node->addAbsAxis(ABS_MT_PRESSURE, nullptr); 48 // No switches 49 // No forcefeedback 50 node->addInputProperty(INPUT_PROP_DIRECT); 51 return node; 52 } 53 54 MockInputDeviceNode* getLidInput() { 55 auto node = new MockInputDeviceNode(); 56 node->setPath("/dev/input/event1"); 57 node->setName("lid_input"); 58 node->setLocation("/dev/input/lid_indev"); 59 // UniqueId not set 60 node->setBusType(0); 61 node->setVendorId(0); 62 node->setProductId(0); 63 node->setVersion(0); 64 // No keys 65 // No relative axes 66 // No absolute axes 67 node->addSwitch(SW_LID); 68 // No forcefeedback 69 node->addInputProperty(INPUT_PROP_DIRECT); 70 return node; 71 } 72 73 MockInputDeviceNode* getButtonJack() { 74 auto node = new MockInputDeviceNode(); 75 node->setPath("/dev/input/event2"); 76 node->setName("apq8064-tabla-snd-card Button Jack"); 77 node->setLocation("ALSA"); 78 // UniqueId not set 79 node->setBusType(0); 80 node->setVendorId(0); 81 node->setProductId(0); 82 node->setVersion(0); 83 node->addKeys(BTN_0, BTN_1, BTN_2, BTN_3, BTN_4, BTN_5, BTN_6, BTN_7); 84 // No relative axes 85 // No absolute axes 86 // No switches 87 // No forcefeedback 88 node->addInputProperty(INPUT_PROP_DIRECT); 89 return node; 90 } 91 92 MockInputDeviceNode* getHeadsetJack() { 93 auto node = new MockInputDeviceNode(); 94 node->setPath("/dev/input/event3"); 95 node->setName("apq8064-tabla-snd-card Headset Jack"); 96 node->setLocation("ALSA"); 97 // UniqueId not set 98 node->setBusType(0); 99 node->setVendorId(0); 100 node->setProductId(0); 101 node->setVersion(0); 102 // No keys 103 // No relative axes 104 // No absolute axes 105 node->addSwitch(SW_HEADPHONE_INSERT); 106 node->addSwitch(SW_MICROPHONE_INSERT); 107 node->addSwitch(SW_LINEOUT_INSERT); 108 // ASUS adds some proprietary switches, but we'll only see two of them. 109 node->addSwitch(0x0e); // SW_HPHL_OVERCURRENT 110 node->addSwitch(0x0f); // SW_HPHR_OVERCURRENT 111 // No forcefeedback 112 node->addInputProperty(INPUT_PROP_DIRECT); 113 return node; 114 } 115 116 MockInputDeviceNode* getH2wButton() { 117 auto node = new MockInputDeviceNode(); 118 node->setPath("/dev/input/event4"); 119 node->setName("h2w button"); 120 // Location not set 121 // UniqueId not set 122 node->setBusType(0); 123 node->setVendorId(0); 124 node->setProductId(0); 125 node->setVersion(0); 126 node->addKeys(KEY_MEDIA); 127 // No relative axes 128 // No absolute axes 129 // No switches 130 node->addInputProperty(INPUT_PROP_DIRECT); 131 return node; 132 } 133 134 MockInputDeviceNode* getGpioKeys() { 135 auto node = new MockInputDeviceNode(); 136 node->setPath("/dev/input/event5"); 137 node->setName("gpio-keys"); 138 node->setLocation("gpio-keys/input0"); 139 // UniqueId not set 140 node->setBusType(0x0019); 141 node->setVendorId(0x0001); 142 node->setProductId(0x0001); 143 node->setVersion(0x0100); 144 node->addKeys(KEY_VOLUMEDOWN, KEY_VOLUMEUP, KEY_POWER); 145 // No relative axes 146 // No absolute axes 147 // No switches 148 node->addInputProperty(INPUT_PROP_DIRECT); 149 return node; 150 } 151 152 } // namespace MockNexus7v2 153 154 namespace MockNexusPlayer { 155 156 MockInputDeviceNode* getGpioKeys() { 157 auto node = new MockInputDeviceNode(); 158 node->setPath("/dev/input/event0"); 159 node->setName("gpio-keys"); 160 node->setLocation("gpio-keys/input0"); 161 // UniqueId not set 162 node->setBusType(0x0019); 163 node->setVendorId(0x0001); 164 node->setProductId(0x0001); 165 node->setVersion(0x0100); 166 node->addKeys(KEY_CONNECT); 167 // No relative axes 168 // No absolute axes 169 // No switches 170 node->addInputProperty(INPUT_PROP_DIRECT); 171 return node; 172 } 173 174 MockInputDeviceNode* getMidPowerBtn() { 175 auto node = new MockInputDeviceNode(); 176 node->setPath("/dev/input/event1"); 177 node->setName("mid_powerbtn"); 178 node->setLocation("power-button/input0"); 179 // UniqueId not set 180 node->setBusType(0x0019); 181 node->setVendorId(0); 182 node->setProductId(0); 183 node->setVersion(0); 184 node->addKeys(KEY_POWER); 185 // No relative axes 186 // No absolute axes 187 // No switches 188 node->addInputProperty(INPUT_PROP_DIRECT); 189 return node; 190 } 191 192 MockInputDeviceNode* getNexusRemote() { 193 auto node = new MockInputDeviceNode(); 194 node->setPath("/dev/input/event2"); 195 node->setName("Nexus Remote"); 196 // Location not set 197 node->setUniqueId("78:86:D9:50:A0:54"); 198 node->setBusType(0x0005); 199 node->setVendorId(0x18d1); 200 node->setProductId(0x2c42); 201 node->setVersion(0); 202 node->addKeys(KEY_UP, KEY_LEFT, KEY_RIGHT, KEY_DOWN, KEY_BACK, KEY_PLAYPAUSE, 203 KEY_HOMEPAGE, KEY_SEARCH, KEY_SELECT); 204 // No relative axes 205 node->addAbsAxis(ABS_MISC, nullptr); 206 // No switches 207 node->addInputProperty(INPUT_PROP_DIRECT); 208 return node; 209 } 210 211 MockInputDeviceNode* getAsusGamepad() { 212 auto node = new MockInputDeviceNode(); 213 node->setPath("/dev/input/event3"); 214 node->setName("ASUS Gamepad"); 215 // Location not set 216 node->setUniqueId("C5:30:CD:50:A0:54"); 217 node->setBusType(0x0005); 218 node->setVendorId(0x0b05); 219 node->setProductId(0x4500); 220 node->setVersion(0x0040); 221 node->addKeys(KEY_BACK, KEY_HOMEPAGE, BTN_A, BTN_B, BTN_X, BTN_Y, BTN_TL, BTN_TR, 222 BTN_MODE, BTN_THUMBL, BTN_THUMBR); 223 // No relative axes 224 node->addAbsAxis(ABS_X, nullptr); 225 node->addAbsAxis(ABS_Y, nullptr); 226 node->addAbsAxis(ABS_Z, nullptr); 227 node->addAbsAxis(ABS_RZ, nullptr); 228 node->addAbsAxis(ABS_GAS, nullptr); 229 node->addAbsAxis(ABS_BRAKE, nullptr); 230 node->addAbsAxis(ABS_HAT0X, nullptr); 231 node->addAbsAxis(ABS_HAT0Y, nullptr); 232 node->addAbsAxis(ABS_MISC, nullptr); 233 node->addAbsAxis(0x29, nullptr); 234 node->addAbsAxis(0x2a, nullptr); 235 // No switches 236 node->addInputProperty(INPUT_PROP_DIRECT); 237 // Note: this device has MSC and LED bitmaps as well. 238 return node; 239 } 240 241 } // namespace MockNexusPlayer 242 243 } // namespace android 244