|
1 /* |
|
2 * Copyright (C) 2012 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 #ifndef _ANDROIDFW_INPUT_DEVICE_H |
|
18 #define _ANDROIDFW_INPUT_DEVICE_H |
|
19 |
|
20 #include "Input.h" |
|
21 #include "KeyCharacterMap.h" |
|
22 |
|
23 namespace android { |
|
24 |
|
25 /* |
|
26 * Identifies a device. |
|
27 */ |
|
28 struct InputDeviceIdentifier { |
|
29 inline InputDeviceIdentifier() : |
|
30 bus(0), vendor(0), product(0), version(0) { |
|
31 } |
|
32 |
|
33 // Information provided by the kernel. |
|
34 String8 name; |
|
35 String8 location; |
|
36 String8 uniqueId; |
|
37 uint16_t bus; |
|
38 uint16_t vendor; |
|
39 uint16_t product; |
|
40 uint16_t version; |
|
41 |
|
42 // A composite input device descriptor string that uniquely identifies the device |
|
43 // even across reboots or reconnections. The value of this field is used by |
|
44 // upper layers of the input system to associate settings with individual devices. |
|
45 // It is hashed from whatever kernel provided information is available. |
|
46 // Ideally, the way this value is computed should not change between Android releases |
|
47 // because that would invalidate persistent settings that rely on it. |
|
48 String8 descriptor; |
|
49 }; |
|
50 |
|
51 /* |
|
52 * Describes the characteristics and capabilities of an input device. |
|
53 */ |
|
54 class InputDeviceInfo { |
|
55 public: |
|
56 InputDeviceInfo(); |
|
57 InputDeviceInfo(const InputDeviceInfo& other); |
|
58 ~InputDeviceInfo(); |
|
59 |
|
60 struct MotionRange { |
|
61 int32_t axis; |
|
62 uint32_t source; |
|
63 float min; |
|
64 float max; |
|
65 float flat; |
|
66 float fuzz; |
|
67 float resolution; |
|
68 }; |
|
69 |
|
70 void initialize(int32_t id, int32_t generation, const InputDeviceIdentifier& identifier, |
|
71 const String8& alias, bool isExternal); |
|
72 |
|
73 inline int32_t getId() const { return mId; } |
|
74 inline int32_t getGeneration() const { return mGeneration; } |
|
75 inline const InputDeviceIdentifier& getIdentifier() const { return mIdentifier; } |
|
76 inline const String8& getAlias() const { return mAlias; } |
|
77 inline const String8& getDisplayName() const { |
|
78 return mAlias.isEmpty() ? mIdentifier.name : mAlias; |
|
79 } |
|
80 inline bool isExternal() const { return mIsExternal; } |
|
81 inline uint32_t getSources() const { return mSources; } |
|
82 |
|
83 const MotionRange* getMotionRange(int32_t axis, uint32_t source) const; |
|
84 |
|
85 void addSource(uint32_t source); |
|
86 void addMotionRange(int32_t axis, uint32_t source, |
|
87 float min, float max, float flat, float fuzz, float resolution); |
|
88 void addMotionRange(const MotionRange& range); |
|
89 |
|
90 inline void setKeyboardType(int32_t keyboardType) { mKeyboardType = keyboardType; } |
|
91 inline int32_t getKeyboardType() const { return mKeyboardType; } |
|
92 |
|
93 inline void setKeyCharacterMap(const sp<KeyCharacterMap>& value) { |
|
94 mKeyCharacterMap = value; |
|
95 } |
|
96 |
|
97 inline sp<KeyCharacterMap> getKeyCharacterMap() const { |
|
98 return mKeyCharacterMap; |
|
99 } |
|
100 |
|
101 inline void setVibrator(bool hasVibrator) { mHasVibrator = hasVibrator; } |
|
102 inline bool hasVibrator() const { return mHasVibrator; } |
|
103 |
|
104 inline const Vector<MotionRange>& getMotionRanges() const { |
|
105 return mMotionRanges; |
|
106 } |
|
107 |
|
108 private: |
|
109 int32_t mId; |
|
110 int32_t mGeneration; |
|
111 InputDeviceIdentifier mIdentifier; |
|
112 String8 mAlias; |
|
113 bool mIsExternal; |
|
114 uint32_t mSources; |
|
115 int32_t mKeyboardType; |
|
116 sp<KeyCharacterMap> mKeyCharacterMap; |
|
117 bool mHasVibrator; |
|
118 |
|
119 Vector<MotionRange> mMotionRanges; |
|
120 }; |
|
121 |
|
122 /* Types of input device configuration files. */ |
|
123 enum InputDeviceConfigurationFileType { |
|
124 INPUT_DEVICE_CONFIGURATION_FILE_TYPE_CONFIGURATION = 0, /* .idc file */ |
|
125 INPUT_DEVICE_CONFIGURATION_FILE_TYPE_KEY_LAYOUT = 1, /* .kl file */ |
|
126 INPUT_DEVICE_CONFIGURATION_FILE_TYPE_KEY_CHARACTER_MAP = 2, /* .kcm file */ |
|
127 }; |
|
128 |
|
129 /* |
|
130 * Gets the path of an input device configuration file, if one is available. |
|
131 * Considers both system provided and user installed configuration files. |
|
132 * |
|
133 * The device identifier is used to construct several default configuration file |
|
134 * names to try based on the device name, vendor, product, and version. |
|
135 * |
|
136 * Returns an empty string if not found. |
|
137 */ |
|
138 extern String8 getInputDeviceConfigurationFilePathByDeviceIdentifier( |
|
139 const InputDeviceIdentifier& deviceIdentifier, |
|
140 InputDeviceConfigurationFileType type); |
|
141 |
|
142 /* |
|
143 * Gets the path of an input device configuration file, if one is available. |
|
144 * Considers both system provided and user installed configuration files. |
|
145 * |
|
146 * The name is case-sensitive and is used to construct the filename to resolve. |
|
147 * All characters except 'a'-'z', 'A'-'Z', '0'-'9', '-', and '_' are replaced by underscores. |
|
148 * |
|
149 * Returns an empty string if not found. |
|
150 */ |
|
151 extern String8 getInputDeviceConfigurationFilePathByName( |
|
152 const String8& name, InputDeviceConfigurationFileType type); |
|
153 |
|
154 } // namespace android |
|
155 |
|
156 #endif // _ANDROIDFW_INPUT_DEVICE_H |