Loading include/android/input.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -859,7 +859,7 @@ enum { /** HDMI */ /** HDMI */ AINPUT_SOURCE_HDMI = 0x02000000 | AINPUT_SOURCE_CLASS_BUTTON, AINPUT_SOURCE_HDMI = 0x02000000 | AINPUT_SOURCE_CLASS_BUTTON, /** sensor */ /** sensor */ AINPUT_SOURCE_SENSOR = 0x04000000 | AINPUT_SOURCE_UNKNOWN, AINPUT_SOURCE_SENSOR = 0x04000000 | AINPUT_SOURCE_CLASS_NONE, /** rotary encoder */ /** rotary encoder */ AINPUT_SOURCE_ROTARY_ENCODER = 0x00400000 | AINPUT_SOURCE_CLASS_NONE, AINPUT_SOURCE_ROTARY_ENCODER = 0x00400000 | AINPUT_SOURCE_CLASS_NONE, Loading include/input/InputDevice.h +28 −0 Original line number Original line Diff line number Diff line Loading @@ -100,6 +100,13 @@ enum class InputDeviceSensorReportingMode : int32_t { SPECIAL_TRIGGER = 3, SPECIAL_TRIGGER = 3, }; }; enum class InputDeviceLightType : int32_t { SINGLE = 0, PLAYER_ID = 1, RGB = 2, MULTI_COLOR = 3, }; struct InputDeviceSensorInfo { struct InputDeviceSensorInfo { explicit InputDeviceSensorInfo(std::string name, std::string vendor, int32_t version, explicit InputDeviceSensorInfo(std::string name, std::string vendor, int32_t version, InputDeviceSensorType type, InputDeviceSensorAccuracy accuracy, InputDeviceSensorType type, InputDeviceSensorAccuracy accuracy, Loading Loading @@ -156,6 +163,20 @@ struct InputDeviceSensorInfo { int32_t id; int32_t id; }; }; struct InputDeviceLightInfo { explicit InputDeviceLightInfo(std::string name, int32_t id, InputDeviceLightType type, int32_t ordinal) : name(name), id(id), type(type), ordinal(ordinal) {} // Name string of the light. std::string name; // Light id int32_t id; // Type of the light. InputDeviceLightType type; // Ordinal of the light int32_t ordinal; }; /* /* * Describes the characteristics and capabilities of an input device. * Describes the characteristics and capabilities of an input device. */ */ Loading Loading @@ -198,6 +219,7 @@ public: float min, float max, float flat, float fuzz, float resolution); float min, float max, float flat, float fuzz, float resolution); void addMotionRange(const MotionRange& range); void addMotionRange(const MotionRange& range); void addSensorInfo(const InputDeviceSensorInfo& info); void addSensorInfo(const InputDeviceSensorInfo& info); void addLightInfo(const InputDeviceLightInfo& info); inline void setKeyboardType(int32_t keyboardType) { mKeyboardType = keyboardType; } inline void setKeyboardType(int32_t keyboardType) { mKeyboardType = keyboardType; } inline int32_t getKeyboardType() const { return mKeyboardType; } inline int32_t getKeyboardType() const { return mKeyboardType; } Loading Loading @@ -230,6 +252,10 @@ public: const std::vector<InputDeviceSensorType> getSensorTypes(); const std::vector<InputDeviceSensorType> getSensorTypes(); const std::vector<int32_t> getLightIds(); const InputDeviceLightInfo* getLightInfo(int32_t id); private: private: int32_t mId; int32_t mId; int32_t mGeneration; int32_t mGeneration; Loading @@ -248,6 +274,8 @@ private: std::vector<MotionRange> mMotionRanges; std::vector<MotionRange> mMotionRanges; std::unordered_map<InputDeviceSensorType, InputDeviceSensorInfo> mSensors; std::unordered_map<InputDeviceSensorType, InputDeviceSensorInfo> mSensors; /* Map from light ID to light info */ std::unordered_map<int32_t, InputDeviceLightInfo> mLights; }; }; /* Types of input device configuration files. */ /* Types of input device configuration files. */ Loading libs/input/InputDevice.cpp +26 −1 Original line number Original line Diff line number Diff line Loading @@ -170,7 +170,8 @@ InputDeviceInfo::InputDeviceInfo(const InputDeviceInfo& other) mHasButtonUnderPad(other.mHasButtonUnderPad), mHasButtonUnderPad(other.mHasButtonUnderPad), mHasSensor(other.mHasSensor), mHasSensor(other.mHasSensor), mMotionRanges(other.mMotionRanges), mMotionRanges(other.mMotionRanges), mSensors(other.mSensors) {} mSensors(other.mSensors), mLights(other.mLights) {} InputDeviceInfo::~InputDeviceInfo() { InputDeviceInfo::~InputDeviceInfo() { } } Loading @@ -193,6 +194,7 @@ void InputDeviceInfo::initialize(int32_t id, int32_t generation, int32_t control mHasSensor = false; mHasSensor = false; mMotionRanges.clear(); mMotionRanges.clear(); mSensors.clear(); mSensors.clear(); mLights.clear(); } } const InputDeviceInfo::MotionRange* InputDeviceInfo::getMotionRange( const InputDeviceInfo::MotionRange* InputDeviceInfo::getMotionRange( Loading Loading @@ -229,6 +231,13 @@ void InputDeviceInfo::addSensorInfo(const InputDeviceSensorInfo& info) { mSensors.insert_or_assign(info.type, info); mSensors.insert_or_assign(info.type, info); } } void InputDeviceInfo::addLightInfo(const InputDeviceLightInfo& info) { if (mLights.find(info.id) != mLights.end()) { ALOGW("Light id %d already exists, will be replaced by new light added.", info.id); } mLights.insert_or_assign(info.id, info); } const std::vector<InputDeviceSensorType> InputDeviceInfo::getSensorTypes() { const std::vector<InputDeviceSensorType> InputDeviceInfo::getSensorTypes() { std::vector<InputDeviceSensorType> types; std::vector<InputDeviceSensorType> types; for (const auto& [type, info] : mSensors) { for (const auto& [type, info] : mSensors) { Loading @@ -245,4 +254,20 @@ const InputDeviceSensorInfo* InputDeviceInfo::getSensorInfo(InputDeviceSensorTyp return &it->second; return &it->second; } } const std::vector<int32_t> InputDeviceInfo::getLightIds() { std::vector<int32_t> ids; for (const auto& [id, info] : mLights) { ids.push_back(id); } return ids; } const InputDeviceLightInfo* InputDeviceInfo::getLightInfo(int32_t id) { auto it = mLights.find(id); if (it == mLights.end()) { return nullptr; } return &it->second; } } // namespace android } // namespace android services/inputflinger/include/InputReaderBase.h +13 −0 Original line number Original line Diff line number Diff line Loading @@ -113,6 +113,10 @@ public: /* Get battery status of a particular input device. */ /* Get battery status of a particular input device. */ virtual std::optional<int32_t> getBatteryStatus(int32_t deviceId) = 0; virtual std::optional<int32_t> getBatteryStatus(int32_t deviceId) = 0; virtual std::vector<int32_t> getLightIds(int32_t deviceId) = 0; virtual const InputDeviceLightInfo* getLightInfo(int32_t deviceId, int32_t lightId) = 0; /* Return true if the device can send input events to the specified display. */ /* Return true if the device can send input events to the specified display. */ virtual bool canDispatchToDisplay(int32_t deviceId, int32_t displayId) = 0; virtual bool canDispatchToDisplay(int32_t deviceId, int32_t displayId) = 0; Loading @@ -126,6 +130,15 @@ public: /* Flush sensor data in input reader mapper. */ /* Flush sensor data in input reader mapper. */ virtual void flushSensor(int32_t deviceId, InputDeviceSensorType sensorType) = 0; virtual void flushSensor(int32_t deviceId, InputDeviceSensorType sensorType) = 0; /* Set color for the light */ virtual bool setLightColor(int32_t deviceId, int32_t lightId, int32_t color) = 0; /* Set player ID for the light */ virtual bool setLightPlayerId(int32_t deviceId, int32_t lightId, int32_t playerId) = 0; /* Get light color */ virtual std::optional<int32_t> getLightColor(int32_t deviceId, int32_t lightId) = 0; /* Get light player ID */ virtual std::optional<int32_t> getLightPlayerId(int32_t deviceId, int32_t lightId) = 0; }; }; // --- InputReaderConfiguration --- // --- InputReaderConfiguration --- Loading services/inputflinger/reader/Android.bp +1 −0 Original line number Original line Diff line number Diff line Loading @@ -45,6 +45,7 @@ filegroup { "mapper/InputMapper.cpp", "mapper/InputMapper.cpp", "mapper/JoystickInputMapper.cpp", "mapper/JoystickInputMapper.cpp", "mapper/KeyboardInputMapper.cpp", "mapper/KeyboardInputMapper.cpp", "mapper/LightInputMapper.cpp", "mapper/MultiTouchInputMapper.cpp", "mapper/MultiTouchInputMapper.cpp", "mapper/RotaryEncoderInputMapper.cpp", "mapper/RotaryEncoderInputMapper.cpp", "mapper/SensorInputMapper.cpp", "mapper/SensorInputMapper.cpp", Loading Loading
include/android/input.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -859,7 +859,7 @@ enum { /** HDMI */ /** HDMI */ AINPUT_SOURCE_HDMI = 0x02000000 | AINPUT_SOURCE_CLASS_BUTTON, AINPUT_SOURCE_HDMI = 0x02000000 | AINPUT_SOURCE_CLASS_BUTTON, /** sensor */ /** sensor */ AINPUT_SOURCE_SENSOR = 0x04000000 | AINPUT_SOURCE_UNKNOWN, AINPUT_SOURCE_SENSOR = 0x04000000 | AINPUT_SOURCE_CLASS_NONE, /** rotary encoder */ /** rotary encoder */ AINPUT_SOURCE_ROTARY_ENCODER = 0x00400000 | AINPUT_SOURCE_CLASS_NONE, AINPUT_SOURCE_ROTARY_ENCODER = 0x00400000 | AINPUT_SOURCE_CLASS_NONE, Loading
include/input/InputDevice.h +28 −0 Original line number Original line Diff line number Diff line Loading @@ -100,6 +100,13 @@ enum class InputDeviceSensorReportingMode : int32_t { SPECIAL_TRIGGER = 3, SPECIAL_TRIGGER = 3, }; }; enum class InputDeviceLightType : int32_t { SINGLE = 0, PLAYER_ID = 1, RGB = 2, MULTI_COLOR = 3, }; struct InputDeviceSensorInfo { struct InputDeviceSensorInfo { explicit InputDeviceSensorInfo(std::string name, std::string vendor, int32_t version, explicit InputDeviceSensorInfo(std::string name, std::string vendor, int32_t version, InputDeviceSensorType type, InputDeviceSensorAccuracy accuracy, InputDeviceSensorType type, InputDeviceSensorAccuracy accuracy, Loading Loading @@ -156,6 +163,20 @@ struct InputDeviceSensorInfo { int32_t id; int32_t id; }; }; struct InputDeviceLightInfo { explicit InputDeviceLightInfo(std::string name, int32_t id, InputDeviceLightType type, int32_t ordinal) : name(name), id(id), type(type), ordinal(ordinal) {} // Name string of the light. std::string name; // Light id int32_t id; // Type of the light. InputDeviceLightType type; // Ordinal of the light int32_t ordinal; }; /* /* * Describes the characteristics and capabilities of an input device. * Describes the characteristics and capabilities of an input device. */ */ Loading Loading @@ -198,6 +219,7 @@ public: float min, float max, float flat, float fuzz, float resolution); float min, float max, float flat, float fuzz, float resolution); void addMotionRange(const MotionRange& range); void addMotionRange(const MotionRange& range); void addSensorInfo(const InputDeviceSensorInfo& info); void addSensorInfo(const InputDeviceSensorInfo& info); void addLightInfo(const InputDeviceLightInfo& info); inline void setKeyboardType(int32_t keyboardType) { mKeyboardType = keyboardType; } inline void setKeyboardType(int32_t keyboardType) { mKeyboardType = keyboardType; } inline int32_t getKeyboardType() const { return mKeyboardType; } inline int32_t getKeyboardType() const { return mKeyboardType; } Loading Loading @@ -230,6 +252,10 @@ public: const std::vector<InputDeviceSensorType> getSensorTypes(); const std::vector<InputDeviceSensorType> getSensorTypes(); const std::vector<int32_t> getLightIds(); const InputDeviceLightInfo* getLightInfo(int32_t id); private: private: int32_t mId; int32_t mId; int32_t mGeneration; int32_t mGeneration; Loading @@ -248,6 +274,8 @@ private: std::vector<MotionRange> mMotionRanges; std::vector<MotionRange> mMotionRanges; std::unordered_map<InputDeviceSensorType, InputDeviceSensorInfo> mSensors; std::unordered_map<InputDeviceSensorType, InputDeviceSensorInfo> mSensors; /* Map from light ID to light info */ std::unordered_map<int32_t, InputDeviceLightInfo> mLights; }; }; /* Types of input device configuration files. */ /* Types of input device configuration files. */ Loading
libs/input/InputDevice.cpp +26 −1 Original line number Original line Diff line number Diff line Loading @@ -170,7 +170,8 @@ InputDeviceInfo::InputDeviceInfo(const InputDeviceInfo& other) mHasButtonUnderPad(other.mHasButtonUnderPad), mHasButtonUnderPad(other.mHasButtonUnderPad), mHasSensor(other.mHasSensor), mHasSensor(other.mHasSensor), mMotionRanges(other.mMotionRanges), mMotionRanges(other.mMotionRanges), mSensors(other.mSensors) {} mSensors(other.mSensors), mLights(other.mLights) {} InputDeviceInfo::~InputDeviceInfo() { InputDeviceInfo::~InputDeviceInfo() { } } Loading @@ -193,6 +194,7 @@ void InputDeviceInfo::initialize(int32_t id, int32_t generation, int32_t control mHasSensor = false; mHasSensor = false; mMotionRanges.clear(); mMotionRanges.clear(); mSensors.clear(); mSensors.clear(); mLights.clear(); } } const InputDeviceInfo::MotionRange* InputDeviceInfo::getMotionRange( const InputDeviceInfo::MotionRange* InputDeviceInfo::getMotionRange( Loading Loading @@ -229,6 +231,13 @@ void InputDeviceInfo::addSensorInfo(const InputDeviceSensorInfo& info) { mSensors.insert_or_assign(info.type, info); mSensors.insert_or_assign(info.type, info); } } void InputDeviceInfo::addLightInfo(const InputDeviceLightInfo& info) { if (mLights.find(info.id) != mLights.end()) { ALOGW("Light id %d already exists, will be replaced by new light added.", info.id); } mLights.insert_or_assign(info.id, info); } const std::vector<InputDeviceSensorType> InputDeviceInfo::getSensorTypes() { const std::vector<InputDeviceSensorType> InputDeviceInfo::getSensorTypes() { std::vector<InputDeviceSensorType> types; std::vector<InputDeviceSensorType> types; for (const auto& [type, info] : mSensors) { for (const auto& [type, info] : mSensors) { Loading @@ -245,4 +254,20 @@ const InputDeviceSensorInfo* InputDeviceInfo::getSensorInfo(InputDeviceSensorTyp return &it->second; return &it->second; } } const std::vector<int32_t> InputDeviceInfo::getLightIds() { std::vector<int32_t> ids; for (const auto& [id, info] : mLights) { ids.push_back(id); } return ids; } const InputDeviceLightInfo* InputDeviceInfo::getLightInfo(int32_t id) { auto it = mLights.find(id); if (it == mLights.end()) { return nullptr; } return &it->second; } } // namespace android } // namespace android
services/inputflinger/include/InputReaderBase.h +13 −0 Original line number Original line Diff line number Diff line Loading @@ -113,6 +113,10 @@ public: /* Get battery status of a particular input device. */ /* Get battery status of a particular input device. */ virtual std::optional<int32_t> getBatteryStatus(int32_t deviceId) = 0; virtual std::optional<int32_t> getBatteryStatus(int32_t deviceId) = 0; virtual std::vector<int32_t> getLightIds(int32_t deviceId) = 0; virtual const InputDeviceLightInfo* getLightInfo(int32_t deviceId, int32_t lightId) = 0; /* Return true if the device can send input events to the specified display. */ /* Return true if the device can send input events to the specified display. */ virtual bool canDispatchToDisplay(int32_t deviceId, int32_t displayId) = 0; virtual bool canDispatchToDisplay(int32_t deviceId, int32_t displayId) = 0; Loading @@ -126,6 +130,15 @@ public: /* Flush sensor data in input reader mapper. */ /* Flush sensor data in input reader mapper. */ virtual void flushSensor(int32_t deviceId, InputDeviceSensorType sensorType) = 0; virtual void flushSensor(int32_t deviceId, InputDeviceSensorType sensorType) = 0; /* Set color for the light */ virtual bool setLightColor(int32_t deviceId, int32_t lightId, int32_t color) = 0; /* Set player ID for the light */ virtual bool setLightPlayerId(int32_t deviceId, int32_t lightId, int32_t playerId) = 0; /* Get light color */ virtual std::optional<int32_t> getLightColor(int32_t deviceId, int32_t lightId) = 0; /* Get light player ID */ virtual std::optional<int32_t> getLightPlayerId(int32_t deviceId, int32_t lightId) = 0; }; }; // --- InputReaderConfiguration --- // --- InputReaderConfiguration --- Loading
services/inputflinger/reader/Android.bp +1 −0 Original line number Original line Diff line number Diff line Loading @@ -45,6 +45,7 @@ filegroup { "mapper/InputMapper.cpp", "mapper/InputMapper.cpp", "mapper/JoystickInputMapper.cpp", "mapper/JoystickInputMapper.cpp", "mapper/KeyboardInputMapper.cpp", "mapper/KeyboardInputMapper.cpp", "mapper/LightInputMapper.cpp", "mapper/MultiTouchInputMapper.cpp", "mapper/MultiTouchInputMapper.cpp", "mapper/RotaryEncoderInputMapper.cpp", "mapper/RotaryEncoderInputMapper.cpp", "mapper/SensorInputMapper.cpp", "mapper/SensorInputMapper.cpp", Loading