15912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown/* 25912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Copyright (C) 2012 The Android Open Source Project 35912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 45912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 55912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * you may not use this file except in compliance with the License. 65912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * You may obtain a copy of the License at 75912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 85912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * http://www.apache.org/licenses/LICENSE-2.0 95912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 105912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Unless required by applicable law or agreed to in writing, software 115912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 125912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * See the License for the specific language governing permissions and 145912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * limitations under the License. 155912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 165912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 175912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#ifndef _LIBINPUT_INPUT_DEVICE_H 185912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#define _LIBINPUT_INPUT_DEVICE_H 195912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 205912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <input/Input.h> 215912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#include <input/KeyCharacterMap.h> 225912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 235912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownnamespace android { 245912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 255912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown/* 265912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Identifies a device. 275912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 285912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownstruct InputDeviceIdentifier { 295912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline InputDeviceIdentifier() : 305912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown bus(0), vendor(0), product(0), version(0) { 315912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown } 325912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 335912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Information provided by the kernel. 345912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown String8 name; 355912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown String8 location; 365912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown String8 uniqueId; 375912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown uint16_t bus; 385912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown uint16_t vendor; 395912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown uint16_t product; 405912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown uint16_t version; 415912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 425912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // A composite input device descriptor string that uniquely identifies the device 435912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // even across reboots or reconnections. The value of this field is used by 445912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // upper layers of the input system to associate settings with individual devices. 455912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // It is hashed from whatever kernel provided information is available. 465912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // Ideally, the way this value is computed should not change between Android releases 475912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown // because that would invalidate persistent settings that rely on it. 485912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown String8 descriptor; 49ec2a15a26f7c50b23a4196d17f106b5efa68560dRoboErik 50ec2a15a26f7c50b23a4196d17f106b5efa68560dRoboErik // A value added to uniquely identify a device in the absence of a unique id. This 51ec2a15a26f7c50b23a4196d17f106b5efa68560dRoboErik // is intended to be a minimum way to distinguish from other active devices and may 52ec2a15a26f7c50b23a4196d17f106b5efa68560dRoboErik // reuse values that are not associated with an input anymore. 53ec2a15a26f7c50b23a4196d17f106b5efa68560dRoboErik uint16_t nonce; 545912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown}; 555912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 565912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown/* 575912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Describes the characteristics and capabilities of an input device. 585912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 595912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownclass InputDeviceInfo { 605912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownpublic: 615912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown InputDeviceInfo(); 625912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown InputDeviceInfo(const InputDeviceInfo& other); 635912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown ~InputDeviceInfo(); 645912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 655912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown struct MotionRange { 665912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t axis; 675912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown uint32_t source; 685912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown float min; 695912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown float max; 705912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown float flat; 715912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown float fuzz; 725912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown float resolution; 735912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown }; 745912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 750415d63b1adf15f6546fea902c66f8bd508afbfcMichael Wright void initialize(int32_t id, int32_t generation, int32_t controllerNumber, 76063ff53d0b0a0d670ea0185e687526d8fd302820Tim Kilbourn const InputDeviceIdentifier& identifier, const String8& alias, bool isExternal, 77063ff53d0b0a0d670ea0185e687526d8fd302820Tim Kilbourn bool hasMic); 785912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 795912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline int32_t getId() const { return mId; } 800415d63b1adf15f6546fea902c66f8bd508afbfcMichael Wright inline int32_t getControllerNumber() const { return mControllerNumber; } 815912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline int32_t getGeneration() const { return mGeneration; } 825912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline const InputDeviceIdentifier& getIdentifier() const { return mIdentifier; } 835912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline const String8& getAlias() const { return mAlias; } 845912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline const String8& getDisplayName() const { 855912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown return mAlias.isEmpty() ? mIdentifier.name : mAlias; 865912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown } 875912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline bool isExternal() const { return mIsExternal; } 88063ff53d0b0a0d670ea0185e687526d8fd302820Tim Kilbourn inline bool hasMic() const { return mHasMic; } 895912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline uint32_t getSources() const { return mSources; } 905912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 915912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const MotionRange* getMotionRange(int32_t axis, uint32_t source) const; 925912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 935912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown void addSource(uint32_t source); 945912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown void addMotionRange(int32_t axis, uint32_t source, 955912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown float min, float max, float flat, float fuzz, float resolution); 965912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown void addMotionRange(const MotionRange& range); 975912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 985912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline void setKeyboardType(int32_t keyboardType) { mKeyboardType = keyboardType; } 995912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline int32_t getKeyboardType() const { return mKeyboardType; } 1005912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1015912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline void setKeyCharacterMap(const sp<KeyCharacterMap>& value) { 1025912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown mKeyCharacterMap = value; 1035912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown } 1045912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1055912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline sp<KeyCharacterMap> getKeyCharacterMap() const { 1065912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown return mKeyCharacterMap; 1075912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown } 1085912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1095912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline void setVibrator(bool hasVibrator) { mHasVibrator = hasVibrator; } 1105912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline bool hasVibrator() const { return mHasVibrator; } 1115912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 112931fd6dee7891e94650353c09956ccf24b4dfff3Michael Wright inline void setButtonUnderPad(bool hasButton) { mHasButtonUnderPad = hasButton; } 113931fd6dee7891e94650353c09956ccf24b4dfff3Michael Wright inline bool hasButtonUnderPad() const { return mHasButtonUnderPad; } 114931fd6dee7891e94650353c09956ccf24b4dfff3Michael Wright 1155912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown inline const Vector<MotionRange>& getMotionRanges() const { 1165912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown return mMotionRanges; 1175912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown } 1185912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1195912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownprivate: 1205912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t mId; 1215912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t mGeneration; 1220415d63b1adf15f6546fea902c66f8bd508afbfcMichael Wright int32_t mControllerNumber; 1235912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown InputDeviceIdentifier mIdentifier; 1245912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown String8 mAlias; 1255912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown bool mIsExternal; 126063ff53d0b0a0d670ea0185e687526d8fd302820Tim Kilbourn bool mHasMic; 1275912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown uint32_t mSources; 1285912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown int32_t mKeyboardType; 1295912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown sp<KeyCharacterMap> mKeyCharacterMap; 1305912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown bool mHasVibrator; 131931fd6dee7891e94650353c09956ccf24b4dfff3Michael Wright bool mHasButtonUnderPad; 1325912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1335912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown Vector<MotionRange> mMotionRanges; 1345912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown}; 1355912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1365912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown/* Types of input device configuration files. */ 1375912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownenum InputDeviceConfigurationFileType { 1385912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown INPUT_DEVICE_CONFIGURATION_FILE_TYPE_CONFIGURATION = 0, /* .idc file */ 1395912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown INPUT_DEVICE_CONFIGURATION_FILE_TYPE_KEY_LAYOUT = 1, /* .kl file */ 1405912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown INPUT_DEVICE_CONFIGURATION_FILE_TYPE_KEY_CHARACTER_MAP = 2, /* .kcm file */ 1415912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown}; 1425912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1435912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown/* 1445912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Gets the path of an input device configuration file, if one is available. 1455912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Considers both system provided and user installed configuration files. 1465912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 1475912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * The device identifier is used to construct several default configuration file 1485912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * names to try based on the device name, vendor, product, and version. 1495912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 1505912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Returns an empty string if not found. 1515912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 1525912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownextern String8 getInputDeviceConfigurationFilePathByDeviceIdentifier( 1535912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const InputDeviceIdentifier& deviceIdentifier, 1545912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown InputDeviceConfigurationFileType type); 1555912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1565912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown/* 1575912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Gets the path of an input device configuration file, if one is available. 1585912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Considers both system provided and user installed configuration files. 1595912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 1605912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * The name is case-sensitive and is used to construct the filename to resolve. 1615912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * All characters except 'a'-'z', 'A'-'Z', '0'-'9', '-', and '_' are replaced by underscores. 1625912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * 1635912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown * Returns an empty string if not found. 1645912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown */ 1655912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brownextern String8 getInputDeviceConfigurationFilePathByName( 1665912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown const String8& name, InputDeviceConfigurationFileType type); 1675912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1685912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown} // namespace android 1695912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown 1705912f95d26f77d2b6df13e1f2672e48e3f9b871cJeff Brown#endif // _LIBINPUT_INPUT_DEVICE_H 171