| Index: device/hid/input_service_linux.cc
|
| diff --git a/device/hid/input_service_linux.cc b/device/hid/input_service_linux.cc
|
| index 09ecaaf0007645938e62f78242ce410f0ea63ba9..299d7a41422da3a07ab8f14ffa44dce809f3faf3 100644
|
| --- a/device/hid/input_service_linux.cc
|
| +++ b/device/hid/input_service_linux.cc
|
| @@ -15,8 +15,11 @@ namespace device {
|
|
|
| namespace {
|
|
|
| -const char kHidSubsystem[] = "hid";
|
| -const char kInputSubsystem[] = "input";
|
| +const char kSubsystemHid[] = "hid";
|
| +const char kSubsystemInput[] = "input";
|
| +const char kTypeBluetooth[] = "bluetooth";
|
| +const char kTypeUsb[] = "usb";
|
| +const char kTypeSerio[] = "serio";
|
| const char kIdInputAccelerometer[] = "ID_INPUT_ACCELEROMETER";
|
| const char kIdInputJoystick[] = "ID_INPUT_JOYSTICK";
|
| const char kIdInputKey[] = "ID_INPUT_KEY";
|
| @@ -44,6 +47,18 @@ bool GetBoolProperty(udev_device* device, const char* key) {
|
| return (value != 0);
|
| }
|
|
|
| +InputServiceLinux::InputDeviceInfo::Type GetDeviceType(udev_device* device) {
|
| + if (udev_device_get_parent_with_subsystem_devtype(
|
| + device, kTypeBluetooth, NULL)) {
|
| + return InputServiceLinux::InputDeviceInfo::TYPE_BLUETOOTH;
|
| + }
|
| + if (udev_device_get_parent_with_subsystem_devtype(device, kTypeUsb, NULL))
|
| + return InputServiceLinux::InputDeviceInfo::TYPE_USB;
|
| + if (udev_device_get_parent_with_subsystem_devtype(device, kTypeSerio, NULL))
|
| + return InputServiceLinux::InputDeviceInfo::TYPE_SERIO;
|
| + return InputServiceLinux::InputDeviceInfo::TYPE_UNKNOWN;
|
| +}
|
| +
|
| class InputServiceLinuxImpl : public InputServiceLinux,
|
| public DeviceMonitorLinux::Observer {
|
| public:
|
| @@ -89,13 +104,15 @@ void InputServiceLinuxImpl::OnDeviceAdded(udev_device* device) {
|
| const char* subsystem = udev_device_get_subsystem(device);
|
| if (!subsystem)
|
| return;
|
| - else if (strcmp(subsystem, kHidSubsystem) == 0)
|
| + else if (strcmp(subsystem, kSubsystemHid) == 0)
|
| info.subsystem = InputServiceLinux::InputDeviceInfo::SUBSYSTEM_HID;
|
| - else if (strcmp(subsystem, kInputSubsystem) == 0)
|
| + else if (strcmp(subsystem, kSubsystemInput) == 0)
|
| info.subsystem = InputServiceLinux::InputDeviceInfo::SUBSYSTEM_INPUT;
|
| else
|
| return;
|
|
|
| + info.type = GetDeviceType(device);
|
| +
|
| info.is_accelerometer = GetBoolProperty(device, kIdInputAccelerometer);
|
| info.is_joystick = GetBoolProperty(device, kIdInputJoystick);
|
| info.is_key = GetBoolProperty(device, kIdInputKey);
|
| @@ -122,6 +139,7 @@ void InputServiceLinuxImpl::OnDeviceRemoved(udev_device* device) {
|
|
|
| InputServiceLinux::InputDeviceInfo::InputDeviceInfo()
|
| : subsystem(SUBSYSTEM_UNKNOWN),
|
| + type(TYPE_UNKNOWN),
|
| is_accelerometer(false),
|
| is_joystick(false),
|
| is_key(false),
|
| @@ -144,7 +162,7 @@ InputServiceLinux::~InputServiceLinux() {
|
| // static
|
| InputServiceLinux* InputServiceLinux::GetInstance() {
|
| if (!HasInstance())
|
| - g_input_service_linux_ptr.Get().reset(new InputServiceLinux());
|
| + g_input_service_linux_ptr.Get().reset(new InputServiceLinuxImpl());
|
| return g_input_service_linux_ptr.Get().get();
|
| }
|
|
|
|
|