13186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn/* 23186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn * Copyright (C) 2015 The Android Open Source Project 33186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn * 43186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn * Licensed under the Apache License, Version 2.0 (the "License"); 53186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn * you may not use this file except in compliance with the License. 63186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn * You may obtain a copy of the License at 73186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn * 83186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn * http://www.apache.org/licenses/LICENSE-2.0 93186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn * 103186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn * Unless required by applicable law or agreed to in writing, software 113186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn * distributed under the License is distributed on an "AS IS" BASIS, 123186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn * See the License for the specific language governing permissions and 143186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn * limitations under the License. 153186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn */ 163186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 173186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn#ifndef ANDROID_INPUT_MOCKS_H_ 183186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn#define ANDROID_INPUT_MOCKS_H_ 193186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 203186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn#include <map> 213186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn#include <set> 223186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn#include <string> 233186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 243186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn#include <linux/input.h> 253186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 263186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn#include "InputHub.h" 273186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 283186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbournnamespace android { 293186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 303186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbournclass MockInputDeviceNode : public InputDeviceNode { 313186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbournpublic: 323186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn MockInputDeviceNode() = default; 333186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual ~MockInputDeviceNode() = default; 343186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 353186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual const std::string& getPath() const override { return mPath; } 363186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual const std::string& getName() const override { return mName; } 373186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual const std::string& getLocation() const override { return mLocation; } 383186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual const std::string& getUniqueId() const override { return mUniqueId; } 393186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 403186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn void setPath(const std::string& path) { mPath = path; } 413186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn void setName(const std::string& name) { mName = name; } 423186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn void setLocation(const std::string& location) { mLocation = location; } 433186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn void setUniqueId(const std::string& uniqueId) { mUniqueId = uniqueId; } 443186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 453186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual uint16_t getBusType() const override { return mBusType; } 463186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual uint16_t getVendorId() const override { return mVendorId; } 473186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual uint16_t getProductId() const override { return mProductId; } 483186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual uint16_t getVersion() const override { return mVersion; } 493186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 503186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn void setBusType(uint16_t busType) { mBusType = busType; } 513186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn void setVendorId(uint16_t vendorId) { mVendorId = vendorId; } 523186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn void setProductId(uint16_t productId) { mProductId = productId; } 533186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn void setVersion(uint16_t version) { mVersion = version; } 543186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 553186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual bool hasKey(int32_t key) const override { return mKeys.count(key); } 563186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual bool hasKeyInRange(int32_t startKey, int32_t endKey) const override; 573186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual bool hasRelativeAxis(int axis) const override { return mRelAxes.count(axis); } 583186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual bool hasAbsoluteAxis(int32_t axis) const override { return mAbsAxes.count(axis); } 593186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual bool hasSwitch(int32_t sw) const override { return mSwitches.count(sw); } 603186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual bool hasForceFeedback(int32_t ff) const override { return mForceFeedbacks.count(ff); } 613186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual bool hasInputProperty(int32_t property) const override { 623186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn return mInputProperties.count(property); 633186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn } 643186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 653186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn // base case 663186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn void addKeys() {} 673186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn // inductive case 683186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn template<typename I, typename... Is> 693186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn void addKeys(I key, Is... keys) { 703186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn // Add the first key 713186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn mKeys.insert(key); 723186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn // Recursively add the remaining keys 733186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn addKeys(keys...); 743186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn } 753186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 763186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn void addRelAxis(int32_t axis) { mRelAxes.insert(axis); } 773186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn void addAbsAxis(int32_t axis, AbsoluteAxisInfo* info) { mAbsAxes[axis] = info; } 783186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn void addSwitch(int32_t sw) { mSwitches.insert(sw); } 793186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn void addForceFeedback(int32_t ff) { mForceFeedbacks.insert(ff); } 803186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn void addInputProperty(int32_t property) { mInputProperties.insert(property); } 813186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 823186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual int32_t getKeyState(int32_t key) const override { return 0; } 833186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual int32_t getSwitchState(int32_t sw) const override { return 0; } 843186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual const AbsoluteAxisInfo* getAbsoluteAxisInfo(int32_t axis) const override { 853186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn auto iter = mAbsAxes.find(axis); 863186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn if (iter != mAbsAxes.end()) { 873186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn return iter->second; 883186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn } 893186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn return nullptr; 903186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn } 913186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual status_t getAbsoluteAxisValue(int32_t axis, int32_t* outValue) const override { 923186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn // TODO 933186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn return 0; 943186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn } 953186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 963186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual void vibrate(nsecs_t duration) override {} 973186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual void cancelVibrate() override {} 983186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 993186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn virtual void disableDriverKeyRepeat() override { mKeyRepeatDisabled = true; } 1003186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 1013186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn bool isDriverKeyRepeatEnabled() { return mKeyRepeatDisabled; } 1023186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 1033186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbournprivate: 1043186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn std::string mPath = "/test"; 1053186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn std::string mName = "Test Device"; 1063186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn std::string mLocation = "test/0"; 1073186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn std::string mUniqueId = "test-id"; 1083186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 1093186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn uint16_t mBusType = 0; 1103186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn uint16_t mVendorId = 0; 1113186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn uint16_t mProductId = 0; 1123186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn uint16_t mVersion = 0; 1133186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 1143186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn std::set<int32_t> mKeys; 1153186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn std::set<int32_t> mRelAxes; 1163186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn std::map<int32_t, AbsoluteAxisInfo*> mAbsAxes; 1173186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn std::set<int32_t> mSwitches; 1183186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn std::set<int32_t> mForceFeedbacks; 1193186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn std::set<int32_t> mInputProperties; 1203186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 1213186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn bool mKeyRepeatDisabled = false; 1223186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn}; 1233186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 1243186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbournnamespace MockNexus7v2 { 1253186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournMockInputDeviceNode* getElanTouchscreen(); 1263186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournMockInputDeviceNode* getLidInput(); 1273186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournMockInputDeviceNode* getButtonJack(); 1283186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournMockInputDeviceNode* getHeadsetJack(); 1293186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournMockInputDeviceNode* getH2wButton(); 1303186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournMockInputDeviceNode* getGpioKeys(); 1313186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn} // namespace MockNexus7v2 1323186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 1333186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbournnamespace MockNexusPlayer { 1343186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournMockInputDeviceNode* getGpioKeys(); 1353186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournMockInputDeviceNode* getMidPowerBtn(); 1363186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournMockInputDeviceNode* getNexusRemote(); 1373186e7bf4805b317769470137ffcf1f7eb0215e0Tim KilbournMockInputDeviceNode* getAsusGamepad(); 1383186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn} // namespace MockNexusPlayer 1393186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 1403186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn} // namespace android 1413186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn 1423186e7bf4805b317769470137ffcf1f7eb0215e0Tim Kilbourn#endif // ANDROID_INPUT_MOCKS_H_ 143