2013-07-02 02:10:31 +00:00
|
|
|
/*
|
|
|
|
* Copyright (C) 2012 The Android Open Source Project
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _LIBINPUT_INPUT_DEVICE_H
|
|
|
|
#define _LIBINPUT_INPUT_DEVICE_H
|
|
|
|
|
|
|
|
#include <input/Input.h>
|
|
|
|
#include <input/KeyCharacterMap.h>
|
|
|
|
|
|
|
|
namespace android {
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Identifies a device.
|
|
|
|
*/
|
|
|
|
struct InputDeviceIdentifier {
|
|
|
|
inline InputDeviceIdentifier() :
|
|
|
|
bus(0), vendor(0), product(0), version(0) {
|
|
|
|
}
|
|
|
|
|
|
|
|
// Information provided by the kernel.
|
|
|
|
String8 name;
|
|
|
|
String8 location;
|
|
|
|
String8 uniqueId;
|
|
|
|
uint16_t bus;
|
|
|
|
uint16_t vendor;
|
|
|
|
uint16_t product;
|
|
|
|
uint16_t version;
|
|
|
|
|
|
|
|
// A composite input device descriptor string that uniquely identifies the device
|
|
|
|
// even across reboots or reconnections. The value of this field is used by
|
|
|
|
// upper layers of the input system to associate settings with individual devices.
|
|
|
|
// It is hashed from whatever kernel provided information is available.
|
|
|
|
// Ideally, the way this value is computed should not change between Android releases
|
|
|
|
// because that would invalidate persistent settings that rely on it.
|
|
|
|
String8 descriptor;
|
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Describes the characteristics and capabilities of an input device.
|
|
|
|
*/
|
|
|
|
class InputDeviceInfo {
|
|
|
|
public:
|
|
|
|
InputDeviceInfo();
|
|
|
|
InputDeviceInfo(const InputDeviceInfo& other);
|
|
|
|
~InputDeviceInfo();
|
|
|
|
|
|
|
|
struct MotionRange {
|
|
|
|
int32_t axis;
|
|
|
|
uint32_t source;
|
|
|
|
float min;
|
|
|
|
float max;
|
|
|
|
float flat;
|
|
|
|
float fuzz;
|
|
|
|
float resolution;
|
|
|
|
};
|
|
|
|
|
2013-07-17 20:23:26 +00:00
|
|
|
void initialize(int32_t id, int32_t generation, int32_t controllerNumber,
|
|
|
|
const InputDeviceIdentifier& identifier, const String8& alias, bool isExternal);
|
2013-07-02 02:10:31 +00:00
|
|
|
|
|
|
|
inline int32_t getId() const { return mId; }
|
2013-07-17 20:23:26 +00:00
|
|
|
inline int32_t getControllerNumber() const { return mControllerNumber; }
|
2013-07-02 02:10:31 +00:00
|
|
|
inline int32_t getGeneration() const { return mGeneration; }
|
|
|
|
inline const InputDeviceIdentifier& getIdentifier() const { return mIdentifier; }
|
|
|
|
inline const String8& getAlias() const { return mAlias; }
|
|
|
|
inline const String8& getDisplayName() const {
|
|
|
|
return mAlias.isEmpty() ? mIdentifier.name : mAlias;
|
|
|
|
}
|
|
|
|
inline bool isExternal() const { return mIsExternal; }
|
|
|
|
inline uint32_t getSources() const { return mSources; }
|
|
|
|
|
|
|
|
const MotionRange* getMotionRange(int32_t axis, uint32_t source) const;
|
|
|
|
|
|
|
|
void addSource(uint32_t source);
|
|
|
|
void addMotionRange(int32_t axis, uint32_t source,
|
|
|
|
float min, float max, float flat, float fuzz, float resolution);
|
|
|
|
void addMotionRange(const MotionRange& range);
|
|
|
|
|
|
|
|
inline void setKeyboardType(int32_t keyboardType) { mKeyboardType = keyboardType; }
|
|
|
|
inline int32_t getKeyboardType() const { return mKeyboardType; }
|
|
|
|
|
|
|
|
inline void setKeyCharacterMap(const sp<KeyCharacterMap>& value) {
|
|
|
|
mKeyCharacterMap = value;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline sp<KeyCharacterMap> getKeyCharacterMap() const {
|
|
|
|
return mKeyCharacterMap;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void setVibrator(bool hasVibrator) { mHasVibrator = hasVibrator; }
|
|
|
|
inline bool hasVibrator() const { return mHasVibrator; }
|
|
|
|
|
2013-07-11 01:05:15 +00:00
|
|
|
inline void setButtonUnderPad(bool hasButton) { mHasButtonUnderPad = hasButton; }
|
|
|
|
inline bool hasButtonUnderPad() const { return mHasButtonUnderPad; }
|
|
|
|
|
2013-07-02 02:10:31 +00:00
|
|
|
inline const Vector<MotionRange>& getMotionRanges() const {
|
|
|
|
return mMotionRanges;
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
int32_t mId;
|
|
|
|
int32_t mGeneration;
|
2013-07-17 20:23:26 +00:00
|
|
|
int32_t mControllerNumber;
|
2013-07-02 02:10:31 +00:00
|
|
|
InputDeviceIdentifier mIdentifier;
|
|
|
|
String8 mAlias;
|
|
|
|
bool mIsExternal;
|
|
|
|
uint32_t mSources;
|
|
|
|
int32_t mKeyboardType;
|
|
|
|
sp<KeyCharacterMap> mKeyCharacterMap;
|
|
|
|
bool mHasVibrator;
|
2013-07-11 01:05:15 +00:00
|
|
|
bool mHasButtonUnderPad;
|
2013-07-02 02:10:31 +00:00
|
|
|
|
|
|
|
Vector<MotionRange> mMotionRanges;
|
|
|
|
};
|
|
|
|
|
|
|
|
/* Types of input device configuration files. */
|
|
|
|
enum InputDeviceConfigurationFileType {
|
|
|
|
INPUT_DEVICE_CONFIGURATION_FILE_TYPE_CONFIGURATION = 0, /* .idc file */
|
|
|
|
INPUT_DEVICE_CONFIGURATION_FILE_TYPE_KEY_LAYOUT = 1, /* .kl file */
|
|
|
|
INPUT_DEVICE_CONFIGURATION_FILE_TYPE_KEY_CHARACTER_MAP = 2, /* .kcm file */
|
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Gets the path of an input device configuration file, if one is available.
|
|
|
|
* Considers both system provided and user installed configuration files.
|
|
|
|
*
|
|
|
|
* The device identifier is used to construct several default configuration file
|
|
|
|
* names to try based on the device name, vendor, product, and version.
|
|
|
|
*
|
|
|
|
* Returns an empty string if not found.
|
|
|
|
*/
|
|
|
|
extern String8 getInputDeviceConfigurationFilePathByDeviceIdentifier(
|
|
|
|
const InputDeviceIdentifier& deviceIdentifier,
|
|
|
|
InputDeviceConfigurationFileType type);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Gets the path of an input device configuration file, if one is available.
|
|
|
|
* Considers both system provided and user installed configuration files.
|
|
|
|
*
|
|
|
|
* The name is case-sensitive and is used to construct the filename to resolve.
|
|
|
|
* All characters except 'a'-'z', 'A'-'Z', '0'-'9', '-', and '_' are replaced by underscores.
|
|
|
|
*
|
|
|
|
* Returns an empty string if not found.
|
|
|
|
*/
|
|
|
|
extern String8 getInputDeviceConfigurationFilePathByName(
|
|
|
|
const String8& name, InputDeviceConfigurationFileType type);
|
|
|
|
|
|
|
|
} // namespace android
|
|
|
|
|
|
|
|
#endif // _LIBINPUT_INPUT_DEVICE_H
|