From 6a9aea9dfd5ea40fb65482c862ede2b71b1c8c18 Mon Sep 17 00:00:00 2001 From: Lt-Henry Date: Thu, 16 Dec 2021 00:01:48 +0100 Subject: [PATCH] input: implemented B_GET_DEVICE_NAME ioctl on both usb and i2c input devices Change-Id: Ie1eb0a958b4d60e6fa673cf8fe72bdfe924baf51 Reviewed-on: https://review.haiku-os.org/c/haiku/+/4798 Tested-by: Commit checker robot Reviewed-by: Adrien Destugues --- .../input/hid_shared/JoystickProtocolHandler.cpp | 6 ++++++ .../input/hid_shared/KeyboardProtocolHandler.cpp | 6 ++++++ .../input/hid_shared/MouseProtocolHandler.cpp | 7 +++++++ .../drivers/input/hid_shared/ProtocolHandler.cpp | 14 ++++++++++++++ .../drivers/input/hid_shared/ProtocolHandler.h | 3 +++ .../input/hid_shared/TabletProtocolHandler.cpp | 7 +++++++ src/add-ons/kernel/drivers/input/i2c_hid/Driver.h | 2 +- src/add-ons/kernel/drivers/input/usb_hid/Driver.h | 1 + 8 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/drivers/input/hid_shared/JoystickProtocolHandler.cpp b/src/add-ons/kernel/drivers/input/hid_shared/JoystickProtocolHandler.cpp index 37427cc19e..52630fbe47 100644 --- a/src/add-ons/kernel/drivers/input/hid_shared/JoystickProtocolHandler.cpp +++ b/src/add-ons/kernel/drivers/input/hid_shared/JoystickProtocolHandler.cpp @@ -267,6 +267,12 @@ JoystickProtocolHandler::Control(uint32 *cookie, uint32 op, void *buffer, size_t length) { switch (op) { + case B_GET_DEVICE_NAME: + { + const char name[] = DEVICE_NAME" Joystick"; + return IOGetDeviceName(name, buffer, length); + } + case B_JOYSTICK_SET_DEVICE_MODULE: { if (length < sizeof(joystick_module_info)) diff --git a/src/add-ons/kernel/drivers/input/hid_shared/KeyboardProtocolHandler.cpp b/src/add-ons/kernel/drivers/input/hid_shared/KeyboardProtocolHandler.cpp index 2f6d5453cd..ad3128b482 100644 --- a/src/add-ons/kernel/drivers/input/hid_shared/KeyboardProtocolHandler.cpp +++ b/src/add-ons/kernel/drivers/input/hid_shared/KeyboardProtocolHandler.cpp @@ -343,6 +343,12 @@ KeyboardProtocolHandler::Control(uint32 *cookie, uint32 op, void *buffer, size_t length) { switch (op) { + case B_GET_DEVICE_NAME: + { + const char name[] = DEVICE_NAME" Keyboard"; + return IOGetDeviceName(name,buffer,length); + } + case KB_READ: { if (*cookie == 0) { diff --git a/src/add-ons/kernel/drivers/input/hid_shared/MouseProtocolHandler.cpp b/src/add-ons/kernel/drivers/input/hid_shared/MouseProtocolHandler.cpp index a61df36b2e..df9810c10a 100644 --- a/src/add-ons/kernel/drivers/input/hid_shared/MouseProtocolHandler.cpp +++ b/src/add-ons/kernel/drivers/input/hid_shared/MouseProtocolHandler.cpp @@ -131,6 +131,13 @@ MouseProtocolHandler::Control(uint32 *cookie, uint32 op, void *buffer, size_t length) { switch (op) { + + case B_GET_DEVICE_NAME: + { + const char name[] = DEVICE_NAME" Mouse"; + return IOGetDeviceName(name,buffer,length); + } + case MS_READ: { if (length < sizeof(mouse_movement)) diff --git a/src/add-ons/kernel/drivers/input/hid_shared/ProtocolHandler.cpp b/src/add-ons/kernel/drivers/input/hid_shared/ProtocolHandler.cpp index 4426dfcfab..610845d234 100644 --- a/src/add-ons/kernel/drivers/input/hid_shared/ProtocolHandler.cpp +++ b/src/add-ons/kernel/drivers/input/hid_shared/ProtocolHandler.cpp @@ -6,6 +6,7 @@ #include #include +#include #include "Driver.h" #include "HIDCollection.h" @@ -187,3 +188,16 @@ ProtocolHandler::SetNextHandler(ProtocolHandler *nextHandler) { fNextHandler = nextHandler; } + +status_t +ProtocolHandler::IOGetDeviceName(const char *name, void *buffer, size_t length) +{ + + if (!IS_USER_ADDRESS(buffer)) + return B_BAD_ADDRESS; + + if (user_strlcpy((char *)buffer, name, length) > 0) + return B_OK; + + return B_ERROR; +} diff --git a/src/add-ons/kernel/drivers/input/hid_shared/ProtocolHandler.h b/src/add-ons/kernel/drivers/input/hid_shared/ProtocolHandler.h index 92a41d4fb7..8f1b1f20ee 100644 --- a/src/add-ons/kernel/drivers/input/hid_shared/ProtocolHandler.h +++ b/src/add-ons/kernel/drivers/input/hid_shared/ProtocolHandler.h @@ -54,6 +54,9 @@ public: void SetNextHandler(ProtocolHandler *next); ProtocolHandler * NextHandler() { return fNextHandler; }; + status_t IOGetDeviceName(const char *name, void *buffer, + size_t length); + protected: status_t fStatus; diff --git a/src/add-ons/kernel/drivers/input/hid_shared/TabletProtocolHandler.cpp b/src/add-ons/kernel/drivers/input/hid_shared/TabletProtocolHandler.cpp index 15fc249bee..fda6725e62 100644 --- a/src/add-ons/kernel/drivers/input/hid_shared/TabletProtocolHandler.cpp +++ b/src/add-ons/kernel/drivers/input/hid_shared/TabletProtocolHandler.cpp @@ -182,6 +182,13 @@ TabletProtocolHandler::Control(uint32 *cookie, uint32 op, void *buffer, size_t length) { switch (op) { + + case B_GET_DEVICE_NAME: + { + const char name[] = DEVICE_NAME" Tablet"; + return IOGetDeviceName(name,buffer,length); + } + case MS_READ: { if (length < sizeof(tablet_movement)) diff --git a/src/add-ons/kernel/drivers/input/i2c_hid/Driver.h b/src/add-ons/kernel/drivers/input/i2c_hid/Driver.h index bbdfe98534..0fb22104a5 100644 --- a/src/add-ons/kernel/drivers/input/i2c_hid/Driver.h +++ b/src/add-ons/kernel/drivers/input/i2c_hid/Driver.h @@ -15,7 +15,7 @@ #define DRIVER_NAME "i2c_hid" #define DEVICE_PATH_SUFFIX "i2c" - +#define DEVICE_NAME "I2C" extern DeviceList *gDeviceList; diff --git a/src/add-ons/kernel/drivers/input/usb_hid/Driver.h b/src/add-ons/kernel/drivers/input/usb_hid/Driver.h index 42c0cf29b5..4a34afb017 100644 --- a/src/add-ons/kernel/drivers/input/usb_hid/Driver.h +++ b/src/add-ons/kernel/drivers/input/usb_hid/Driver.h @@ -16,6 +16,7 @@ #define DRIVER_NAME "usb_hid" #define DEVICE_PATH_SUFFIX "usb" +#define DEVICE_NAME "USB" #define USB_INTERFACE_CLASS_HID 3 #define USB_INTERFACE_SUBCLASS_HID_BOOT 1