xref: /aosp_15_r20/hardware/libhardware/tests/input/evdev/InputMocks.h (revision e01b6f769022e40d0923dee176e8dc7cd1d52984)
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