Home | History | Annotate | Download | only in evdev
      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