Index: ui/events/ozone/gamepad/static_gamepad_mapping.cc |
diff --git a/ui/events/ozone/gamepad/gamepad_mapping.cc b/ui/events/ozone/gamepad/static_gamepad_mapping.cc |
similarity index 94% |
copy from ui/events/ozone/gamepad/gamepad_mapping.cc |
copy to ui/events/ozone/gamepad/static_gamepad_mapping.cc |
index be20d008c712826287248f10aaa5a1e14d707d5f..997d46fbd5319671cd8821d0d565a5d0a564c27c 100644 |
--- a/ui/events/ozone/gamepad/gamepad_mapping.cc |
+++ b/ui/events/ozone/gamepad/static_gamepad_mapping.cc |
@@ -4,35 +4,21 @@ |
#include <linux/input.h> |
#include <cstdint> |
+#include <list> |
#include <map> |
+#include <vector> |
#include "base/macros.h" |
-#include "ui/events/ozone/gamepad/gamepad_mapping.h" |
+#include "ui/events/ozone/evdev/event_device_info.h" |
+#include "ui/events/ozone/gamepad/static_gamepad_mapping.h" |
#include "ui/events/ozone/gamepad/webgamepad_constants.h" |
namespace ui { |
-// KeyMap maps evdev key code to web gamepad code. |
-struct KeyMapEntry { |
- uint16_t evdev_code; |
- uint16_t mapped_code; |
-}; |
- |
-// AbsMap maps evdev abs code to web gamepad (type, code). |
-struct AbsMapEntry { |
- uint16_t evdev_code; |
- GamepadEventType mapped_type; |
- uint16_t mapped_code; |
-}; |
- |
-using KeyMapType = const KeyMapEntry[]; |
-using AbsMapType = const AbsMapEntry[]; |
- |
-#define TO_BTN(code, mapped_code) \ |
- { code, GamepadEventType::BUTTON, mapped_code } |
- |
-#define TO_ABS(code, mapped_code) \ |
- { code, GamepadEventType::AXIS, mapped_code } |
+typedef bool (*GamepadMapperFunction)(uint16_t key, |
+ uint16_t code, |
+ GamepadEventType* mapped_type, |
+ uint16_t* mapped_code); |
#define DO_MAPPING \ |
DoGamepadMapping(key_mapping, arraysize(key_mapping), abs_mapping, \ |
@@ -202,8 +188,8 @@ bool ADT1Mapper(uint16_t type, |
{BTN_X, WG_BUTTON_X}, {BTN_Y, WG_BUTTON_Y}, |
{BTN_TL, WG_BUTTON_L1}, {BTN_TR, WG_BUTTON_R1}, |
{BTN_THUMBL, WG_BUTTON_THUMBL}, {BTN_THUMBR, WG_BUTTON_THUMBR}, |
- {BTN_MODE, WG_BUTTON_START}, {KEY_BACK, WG_BUTTON_SELECT}, |
- {KEY_HOMEPAGE, WG_BUTTON_MODE}}; |
+ {BTN_MODE, WG_BUTTON_MODE}, {KEY_BACK, WG_BUTTON_SELECT}, |
+ {KEY_HOMEPAGE, WG_BUTTON_START}}; |
static const AbsMapType abs_mapping = { |
TO_ABS(ABS_X, WG_ABS_X), TO_ABS(ABS_Y, WG_ABS_Y), |
@@ -391,7 +377,7 @@ bool GenericMapper(uint16_t type, |
static const struct MappingData { |
uint16_t vendor_id; |
uint16_t product_id; |
- GamepadMapper mapper; |
+ GamepadMapperFunction mapper; |
} AvailableMappings[] = { |
// Xbox style gamepad. |
{0x045e, 0x028e, XInputStyleMapper}, // Xbox 360 wired. |
@@ -435,14 +421,29 @@ static const struct MappingData { |
// Razer onza tournment edition. |
{0x1689, 0xfd00, Vendor_1689Product_fd00Mapper}}; |
-GamepadMapper GetGamepadMapper(uint16_t vendor_id, uint16_t product_id) { |
+class StaticGamepadMapper : public GamepadMapper { |
+ public: |
+ StaticGamepadMapper(GamepadMapperFunction fp) : mapper_fp_(fp) {} |
+ |
+ bool operator()(uint16_t type, |
+ uint16_t code, |
+ GamepadEventType* mapped_type, |
+ uint16_t* mapped_code) override { |
+ return mapper_fp_(type, code, mapped_type, mapped_code); |
+ }; |
+ |
+ private: |
+ GamepadMapperFunction mapper_fp_; |
+}; |
+ |
+GamepadMapper* GetStaticGamepadMapper(uint16_t vendor_id, uint16_t product_id) { |
for (size_t i = 0; i < arraysize(AvailableMappings); i++) { |
if (AvailableMappings[i].vendor_id == vendor_id && |
AvailableMappings[i].product_id == product_id) { |
- return AvailableMappings[i].mapper; |
+ return new StaticGamepadMapper(AvailableMappings[i].mapper); |
} |
} |
- return GenericMapper; |
+ return nullptr; |
} |
} // namespace ui |