19f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown/* 29f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Copyright (C) 2012 The Android Open Source Project 39f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * 49f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 59f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * you may not use this file except in compliance with the License. 69f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * You may obtain a copy of the License at 79f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * 89f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * http://www.apache.org/licenses/LICENSE-2.0 99f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * 109f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Unless required by applicable law or agreed to in writing, software 119f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 129f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * See the License for the specific language governing permissions and 149f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * limitations under the License. 159f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown */ 169f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 179f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown#ifndef _ANDROIDFW_INPUT_DEVICE_H 189f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown#define _ANDROIDFW_INPUT_DEVICE_H 199f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 209f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown#include <androidfw/Input.h> 219f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown#include <androidfw/KeyCharacterMap.h> 229f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 239f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownnamespace android { 249f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 259f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown/* 269f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Identifies a device. 279f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown */ 289f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownstruct InputDeviceIdentifier { 299f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown inline InputDeviceIdentifier() : 309f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown bus(0), vendor(0), product(0), version(0) { 319f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 329f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 339f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown // Information provided by the kernel. 349f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown String8 name; 359f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown String8 location; 369f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown String8 uniqueId; 379f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown uint16_t bus; 389f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown uint16_t vendor; 399f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown uint16_t product; 409f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown uint16_t version; 419f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 429f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown // A composite input device descriptor string that uniquely identifies the device 439f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown // even across reboots or reconnections. The value of this field is used by 449f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown // upper layers of the input system to associate settings with individual devices. 459f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown // It is hashed from whatever kernel provided information is available. 469f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown // Ideally, the way this value is computed should not change between Android releases 479f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown // because that would invalidate persistent settings that rely on it. 489f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown String8 descriptor; 499f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown}; 509f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 519f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown/* 529f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Describes the characteristics and capabilities of an input device. 539f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown */ 549f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownclass InputDeviceInfo { 559f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownpublic: 569f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown InputDeviceInfo(); 579f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown InputDeviceInfo(const InputDeviceInfo& other); 589f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown ~InputDeviceInfo(); 599f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 609f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown struct MotionRange { 619f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown int32_t axis; 629f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown uint32_t source; 639f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown float min; 649f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown float max; 659f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown float flat; 669f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown float fuzz; 679f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown }; 689f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 695bbd4b4f5fc19302fa017ad6afee6eb2d489d91aJeff Brown void initialize(int32_t id, int32_t generation, const InputDeviceIdentifier& identifier, 70daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown const String8& alias, bool isExternal); 719f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 729f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown inline int32_t getId() const { return mId; } 73af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown inline int32_t getGeneration() const { return mGeneration; } 745bbd4b4f5fc19302fa017ad6afee6eb2d489d91aJeff Brown inline const InputDeviceIdentifier& getIdentifier() const { return mIdentifier; } 755bbd4b4f5fc19302fa017ad6afee6eb2d489d91aJeff Brown inline const String8& getAlias() const { return mAlias; } 765bbd4b4f5fc19302fa017ad6afee6eb2d489d91aJeff Brown inline const String8& getDisplayName() const { 775bbd4b4f5fc19302fa017ad6afee6eb2d489d91aJeff Brown return mAlias.isEmpty() ? mIdentifier.name : mAlias; 785bbd4b4f5fc19302fa017ad6afee6eb2d489d91aJeff Brown } 79daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown inline bool isExternal() const { return mIsExternal; } 809f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown inline uint32_t getSources() const { return mSources; } 819f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 829f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown const MotionRange* getMotionRange(int32_t axis, uint32_t source) const; 839f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 849f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown void addSource(uint32_t source); 859f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown void addMotionRange(int32_t axis, uint32_t source, 869f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown float min, float max, float flat, float fuzz); 879f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown void addMotionRange(const MotionRange& range); 889f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 899f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown inline void setKeyboardType(int32_t keyboardType) { mKeyboardType = keyboardType; } 909f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown inline int32_t getKeyboardType() const { return mKeyboardType; } 919f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 929f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown inline void setKeyCharacterMap(const sp<KeyCharacterMap>& value) { 939f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown mKeyCharacterMap = value; 949f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 959f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 969f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown inline sp<KeyCharacterMap> getKeyCharacterMap() const { 979f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return mKeyCharacterMap; 989f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 999f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 100a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown inline void setVibrator(bool hasVibrator) { mHasVibrator = hasVibrator; } 101a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown inline bool hasVibrator() const { return mHasVibrator; } 102a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown 1039f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown inline const Vector<MotionRange>& getMotionRanges() const { 1049f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown return mMotionRanges; 1059f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown } 1069f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 1079f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownprivate: 1089f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown int32_t mId; 109af9e8d38184c6ba4d2d3eb5bde7014a66dd8a78bJeff Brown int32_t mGeneration; 1105bbd4b4f5fc19302fa017ad6afee6eb2d489d91aJeff Brown InputDeviceIdentifier mIdentifier; 1115bbd4b4f5fc19302fa017ad6afee6eb2d489d91aJeff Brown String8 mAlias; 112daa3753a04699724d2cfe824ac1f5a266d643a05Jeff Brown bool mIsExternal; 1139f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown uint32_t mSources; 1149f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown int32_t mKeyboardType; 1159f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown sp<KeyCharacterMap> mKeyCharacterMap; 116a47425a13c19f95057df78b8bb65bb25657e8753Jeff Brown bool mHasVibrator; 1179f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 1189f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown Vector<MotionRange> mMotionRanges; 1199f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown}; 1209f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 1219f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown/* Types of input device configuration files. */ 1229f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownenum InputDeviceConfigurationFileType { 1239f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown INPUT_DEVICE_CONFIGURATION_FILE_TYPE_CONFIGURATION = 0, /* .idc file */ 1249f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown INPUT_DEVICE_CONFIGURATION_FILE_TYPE_KEY_LAYOUT = 1, /* .kl file */ 1259f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown INPUT_DEVICE_CONFIGURATION_FILE_TYPE_KEY_CHARACTER_MAP = 2, /* .kcm file */ 1269f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown}; 1279f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 1289f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown/* 1299f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Gets the path of an input device configuration file, if one is available. 1309f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Considers both system provided and user installed configuration files. 1319f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * 1329f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * The device identifier is used to construct several default configuration file 1339f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * names to try based on the device name, vendor, product, and version. 1349f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * 1359f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Returns an empty string if not found. 1369f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown */ 1379f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownextern String8 getInputDeviceConfigurationFilePathByDeviceIdentifier( 1389f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown const InputDeviceIdentifier& deviceIdentifier, 1399f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown InputDeviceConfigurationFileType type); 1409f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 1419f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown/* 1429f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Gets the path of an input device configuration file, if one is available. 1439f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Considers both system provided and user installed configuration files. 1449f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * 1459f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * The name is case-sensitive and is used to construct the filename to resolve. 1469f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * All characters except 'a'-'z', 'A'-'Z', '0'-'9', '-', and '_' are replaced by underscores. 1479f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * 1489f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown * Returns an empty string if not found. 1499f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown */ 1509f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brownextern String8 getInputDeviceConfigurationFilePathByName( 1519f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown const String8& name, InputDeviceConfigurationFileType type); 1529f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 1539f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown} // namespace android 1549f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown 1559f25b7fdf216c9ef0bd2322cd223eeaf0d60f77fJeff Brown#endif // _ANDROIDFW_INPUT_DEVICE_H 156