1*e01b6f76SAndroid Build Coastguard Worker /* 2*e01b6f76SAndroid Build Coastguard Worker * Copyright (C) 2015 The Android Open Source Project 3*e01b6f76SAndroid Build Coastguard Worker * 4*e01b6f76SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*e01b6f76SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*e01b6f76SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*e01b6f76SAndroid Build Coastguard Worker * 8*e01b6f76SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*e01b6f76SAndroid Build Coastguard Worker * 10*e01b6f76SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*e01b6f76SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*e01b6f76SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*e01b6f76SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*e01b6f76SAndroid Build Coastguard Worker * limitations under the License. 15*e01b6f76SAndroid Build Coastguard Worker */ 16*e01b6f76SAndroid Build Coastguard Worker 17*e01b6f76SAndroid Build Coastguard Worker #ifndef ANDROID_INPUT_MOCKS_H_ 18*e01b6f76SAndroid Build Coastguard Worker #define ANDROID_INPUT_MOCKS_H_ 19*e01b6f76SAndroid Build Coastguard Worker 20*e01b6f76SAndroid Build Coastguard Worker #include <map> 21*e01b6f76SAndroid Build Coastguard Worker #include <set> 22*e01b6f76SAndroid Build Coastguard Worker #include <string> 23*e01b6f76SAndroid Build Coastguard Worker 24*e01b6f76SAndroid Build Coastguard Worker #include <linux/input.h> 25*e01b6f76SAndroid Build Coastguard Worker 26*e01b6f76SAndroid Build Coastguard Worker #include "InputHub.h" 27*e01b6f76SAndroid Build Coastguard Worker 28*e01b6f76SAndroid Build Coastguard Worker namespace android { 29*e01b6f76SAndroid Build Coastguard Worker 30*e01b6f76SAndroid Build Coastguard Worker class MockInputDeviceNode : public InputDeviceNode { 31*e01b6f76SAndroid Build Coastguard Worker public: 32*e01b6f76SAndroid Build Coastguard Worker MockInputDeviceNode() = default; 33*e01b6f76SAndroid Build Coastguard Worker virtual ~MockInputDeviceNode() = default; 34*e01b6f76SAndroid Build Coastguard Worker getPath()35*e01b6f76SAndroid Build Coastguard Worker virtual const std::string& getPath() const override { return mPath; } getName()36*e01b6f76SAndroid Build Coastguard Worker virtual const std::string& getName() const override { return mName; } getLocation()37*e01b6f76SAndroid Build Coastguard Worker virtual const std::string& getLocation() const override { return mLocation; } getUniqueId()38*e01b6f76SAndroid Build Coastguard Worker virtual const std::string& getUniqueId() const override { return mUniqueId; } 39*e01b6f76SAndroid Build Coastguard Worker setPath(const std::string & path)40*e01b6f76SAndroid Build Coastguard Worker void setPath(const std::string& path) { mPath = path; } setName(const std::string & name)41*e01b6f76SAndroid Build Coastguard Worker void setName(const std::string& name) { mName = name; } setLocation(const std::string & location)42*e01b6f76SAndroid Build Coastguard Worker void setLocation(const std::string& location) { mLocation = location; } setUniqueId(const std::string & uniqueId)43*e01b6f76SAndroid Build Coastguard Worker void setUniqueId(const std::string& uniqueId) { mUniqueId = uniqueId; } 44*e01b6f76SAndroid Build Coastguard Worker getBusType()45*e01b6f76SAndroid Build Coastguard Worker virtual uint16_t getBusType() const override { return mBusType; } getVendorId()46*e01b6f76SAndroid Build Coastguard Worker virtual uint16_t getVendorId() const override { return mVendorId; } getProductId()47*e01b6f76SAndroid Build Coastguard Worker virtual uint16_t getProductId() const override { return mProductId; } getVersion()48*e01b6f76SAndroid Build Coastguard Worker virtual uint16_t getVersion() const override { return mVersion; } 49*e01b6f76SAndroid Build Coastguard Worker setBusType(uint16_t busType)50*e01b6f76SAndroid Build Coastguard Worker void setBusType(uint16_t busType) { mBusType = busType; } setVendorId(uint16_t vendorId)51*e01b6f76SAndroid Build Coastguard Worker void setVendorId(uint16_t vendorId) { mVendorId = vendorId; } setProductId(uint16_t productId)52*e01b6f76SAndroid Build Coastguard Worker void setProductId(uint16_t productId) { mProductId = productId; } setVersion(uint16_t version)53*e01b6f76SAndroid Build Coastguard Worker void setVersion(uint16_t version) { mVersion = version; } 54*e01b6f76SAndroid Build Coastguard Worker hasKey(int32_t key)55*e01b6f76SAndroid Build Coastguard Worker virtual bool hasKey(int32_t key) const override { return mKeys.count(key); } 56*e01b6f76SAndroid Build Coastguard Worker virtual bool hasKeyInRange(int32_t startKey, int32_t endKey) const override; hasRelativeAxis(int axis)57*e01b6f76SAndroid Build Coastguard Worker virtual bool hasRelativeAxis(int axis) const override { return mRelAxes.count(axis); } hasAbsoluteAxis(int32_t axis)58*e01b6f76SAndroid Build Coastguard Worker virtual bool hasAbsoluteAxis(int32_t axis) const override { return mAbsAxes.count(axis); } hasSwitch(int32_t sw)59*e01b6f76SAndroid Build Coastguard Worker virtual bool hasSwitch(int32_t sw) const override { return mSwitches.count(sw); } hasForceFeedback(int32_t ff)60*e01b6f76SAndroid Build Coastguard Worker virtual bool hasForceFeedback(int32_t ff) const override { return mForceFeedbacks.count(ff); } hasInputProperty(int32_t property)61*e01b6f76SAndroid Build Coastguard Worker virtual bool hasInputProperty(int32_t property) const override { 62*e01b6f76SAndroid Build Coastguard Worker return mInputProperties.count(property); 63*e01b6f76SAndroid Build Coastguard Worker } 64*e01b6f76SAndroid Build Coastguard Worker 65*e01b6f76SAndroid Build Coastguard Worker // base case addKeys()66*e01b6f76SAndroid Build Coastguard Worker void addKeys() {} 67*e01b6f76SAndroid Build Coastguard Worker // inductive case 68*e01b6f76SAndroid Build Coastguard Worker template<typename I, typename... Is> addKeys(I key,Is...keys)69*e01b6f76SAndroid Build Coastguard Worker void addKeys(I key, Is... keys) { 70*e01b6f76SAndroid Build Coastguard Worker // Add the first key 71*e01b6f76SAndroid Build Coastguard Worker mKeys.insert(key); 72*e01b6f76SAndroid Build Coastguard Worker // Recursively add the remaining keys 73*e01b6f76SAndroid Build Coastguard Worker addKeys(keys...); 74*e01b6f76SAndroid Build Coastguard Worker } 75*e01b6f76SAndroid Build Coastguard Worker addRelAxis(int32_t axis)76*e01b6f76SAndroid Build Coastguard Worker void addRelAxis(int32_t axis) { mRelAxes.insert(axis); } addAbsAxis(int32_t axis,AbsoluteAxisInfo * info)77*e01b6f76SAndroid Build Coastguard Worker void addAbsAxis(int32_t axis, AbsoluteAxisInfo* info) { mAbsAxes[axis] = info; } addSwitch(int32_t sw)78*e01b6f76SAndroid Build Coastguard Worker void addSwitch(int32_t sw) { mSwitches.insert(sw); } addForceFeedback(int32_t ff)79*e01b6f76SAndroid Build Coastguard Worker void addForceFeedback(int32_t ff) { mForceFeedbacks.insert(ff); } addInputProperty(int32_t property)80*e01b6f76SAndroid Build Coastguard Worker void addInputProperty(int32_t property) { mInputProperties.insert(property); } 81*e01b6f76SAndroid Build Coastguard Worker getKeyState(int32_t key)82*e01b6f76SAndroid Build Coastguard Worker virtual int32_t getKeyState(int32_t key) const override { return 0; } getSwitchState(int32_t sw)83*e01b6f76SAndroid Build Coastguard Worker virtual int32_t getSwitchState(int32_t sw) const override { return 0; } getAbsoluteAxisInfo(int32_t axis)84*e01b6f76SAndroid Build Coastguard Worker virtual const AbsoluteAxisInfo* getAbsoluteAxisInfo(int32_t axis) const override { 85*e01b6f76SAndroid Build Coastguard Worker auto iter = mAbsAxes.find(axis); 86*e01b6f76SAndroid Build Coastguard Worker if (iter != mAbsAxes.end()) { 87*e01b6f76SAndroid Build Coastguard Worker return iter->second; 88*e01b6f76SAndroid Build Coastguard Worker } 89*e01b6f76SAndroid Build Coastguard Worker return nullptr; 90*e01b6f76SAndroid Build Coastguard Worker } getAbsoluteAxisValue(int32_t axis,int32_t * outValue)91*e01b6f76SAndroid Build Coastguard Worker virtual status_t getAbsoluteAxisValue(int32_t axis, int32_t* outValue) const override { 92*e01b6f76SAndroid Build Coastguard Worker // TODO 93*e01b6f76SAndroid Build Coastguard Worker return 0; 94*e01b6f76SAndroid Build Coastguard Worker } 95*e01b6f76SAndroid Build Coastguard Worker vibrate(nsecs_t duration)96*e01b6f76SAndroid Build Coastguard Worker virtual void vibrate(nsecs_t duration) override {} cancelVibrate()97*e01b6f76SAndroid Build Coastguard Worker virtual void cancelVibrate() override {} 98*e01b6f76SAndroid Build Coastguard Worker disableDriverKeyRepeat()99*e01b6f76SAndroid Build Coastguard Worker virtual void disableDriverKeyRepeat() override { mKeyRepeatDisabled = true; } 100*e01b6f76SAndroid Build Coastguard Worker isDriverKeyRepeatEnabled()101*e01b6f76SAndroid Build Coastguard Worker bool isDriverKeyRepeatEnabled() { return mKeyRepeatDisabled; } 102*e01b6f76SAndroid Build Coastguard Worker 103*e01b6f76SAndroid Build Coastguard Worker private: 104*e01b6f76SAndroid Build Coastguard Worker std::string mPath = "/test"; 105*e01b6f76SAndroid Build Coastguard Worker std::string mName = "Test Device"; 106*e01b6f76SAndroid Build Coastguard Worker std::string mLocation = "test/0"; 107*e01b6f76SAndroid Build Coastguard Worker std::string mUniqueId = "test-id"; 108*e01b6f76SAndroid Build Coastguard Worker 109*e01b6f76SAndroid Build Coastguard Worker uint16_t mBusType = 0; 110*e01b6f76SAndroid Build Coastguard Worker uint16_t mVendorId = 0; 111*e01b6f76SAndroid Build Coastguard Worker uint16_t mProductId = 0; 112*e01b6f76SAndroid Build Coastguard Worker uint16_t mVersion = 0; 113*e01b6f76SAndroid Build Coastguard Worker 114*e01b6f76SAndroid Build Coastguard Worker std::set<int32_t> mKeys; 115*e01b6f76SAndroid Build Coastguard Worker std::set<int32_t> mRelAxes; 116*e01b6f76SAndroid Build Coastguard Worker std::map<int32_t, AbsoluteAxisInfo*> mAbsAxes; 117*e01b6f76SAndroid Build Coastguard Worker std::set<int32_t> mSwitches; 118*e01b6f76SAndroid Build Coastguard Worker std::set<int32_t> mForceFeedbacks; 119*e01b6f76SAndroid Build Coastguard Worker std::set<int32_t> mInputProperties; 120*e01b6f76SAndroid Build Coastguard Worker 121*e01b6f76SAndroid Build Coastguard Worker bool mKeyRepeatDisabled = false; 122*e01b6f76SAndroid Build Coastguard Worker }; 123*e01b6f76SAndroid Build Coastguard Worker 124*e01b6f76SAndroid Build Coastguard Worker namespace MockNexus7v2 { 125*e01b6f76SAndroid Build Coastguard Worker MockInputDeviceNode* getElanTouchscreen(); 126*e01b6f76SAndroid Build Coastguard Worker MockInputDeviceNode* getLidInput(); 127*e01b6f76SAndroid Build Coastguard Worker MockInputDeviceNode* getButtonJack(); 128*e01b6f76SAndroid Build Coastguard Worker MockInputDeviceNode* getHeadsetJack(); 129*e01b6f76SAndroid Build Coastguard Worker MockInputDeviceNode* getH2wButton(); 130*e01b6f76SAndroid Build Coastguard Worker MockInputDeviceNode* getGpioKeys(); 131*e01b6f76SAndroid Build Coastguard Worker } // namespace MockNexus7v2 132*e01b6f76SAndroid Build Coastguard Worker 133*e01b6f76SAndroid Build Coastguard Worker namespace MockNexusPlayer { 134*e01b6f76SAndroid Build Coastguard Worker MockInputDeviceNode* getGpioKeys(); 135*e01b6f76SAndroid Build Coastguard Worker MockInputDeviceNode* getMidPowerBtn(); 136*e01b6f76SAndroid Build Coastguard Worker MockInputDeviceNode* getNexusRemote(); 137*e01b6f76SAndroid Build Coastguard Worker MockInputDeviceNode* getAsusGamepad(); 138*e01b6f76SAndroid Build Coastguard Worker } // namespace MockNexusPlayer 139*e01b6f76SAndroid Build Coastguard Worker 140*e01b6f76SAndroid Build Coastguard Worker } // namespace android 141*e01b6f76SAndroid Build Coastguard Worker 142*e01b6f76SAndroid Build Coastguard Worker #endif // ANDROID_INPUT_MOCKS_H_ 143