From 4348064ccdd80d1ded743bf63369116ccb165add Mon Sep 17 00:00:00 2001 From: Maximilian Luz Date: Sat, 1 Jun 2019 21:17:15 +0200 Subject: [PATCH 02/16] Add support for Intel Management Engine bus Add support for devices connected via the Intel Management Engine (MEI). This is required to support IPTS based devices, such as (among others) the Microsoft Surface Books, Surface Pro 5 and 6, and Surface Laptops. --- libwacom/libwacom-database.c | 4 ++++ libwacom/libwacom.c | 5 +++++ libwacom/libwacom.h | 1 + test/test-tablet-validity.c | 1 + test/test_data_files.py | 1 + 5 files changed, 12 insertions(+) diff --git a/libwacom/libwacom-database.c b/libwacom/libwacom-database.c index 090d5aa..5a749c9 100644 --- a/libwacom/libwacom-database.c +++ b/libwacom/libwacom-database.c @@ -132,6 +132,8 @@ bus_from_str (const char *str) return WBUSTYPE_I2C; if (g_str_equal(str, "virt")) return WBUSTYPE_VIRTUAL; + if (strcmp (str, "mei") == 0) + return WBUSTYPE_MEI; return WBUSTYPE_UNKNOWN; } @@ -152,6 +154,8 @@ bus_to_str (WacomBusType bus) return "i2c"; case WBUSTYPE_VIRTUAL: return "virt"; + case WBUSTYPE_MEI: + return "mei"; } g_assert_not_reached (); } diff --git a/libwacom/libwacom.c b/libwacom/libwacom.c index 2f6bddd..c838c6d 100644 --- a/libwacom/libwacom.c +++ b/libwacom/libwacom.c @@ -152,6 +152,10 @@ get_bus_vid_pid (GUdevDevice *device, *bus = WBUSTYPE_VIRTUAL; retval = TRUE; break; + case 68: + *bus = WBUSTYPE_MEI; + retval = TRUE; + break; } out: @@ -831,6 +835,7 @@ static void print_match(int fd, const WacomMatch *match) case WBUSTYPE_SERIAL: bus_name = "serial"; break; case WBUSTYPE_I2C: bus_name = "i2c"; break; case WBUSTYPE_VIRTUAL: bus_name = "virt"; break; + case WBUSTYPE_MEI: bus_name = "mei"; break; case WBUSTYPE_UNKNOWN: bus_name = "unknown"; break; default: g_assert_not_reached(); break; } diff --git a/libwacom/libwacom.h b/libwacom/libwacom.h index 040c51e..a937c08 100644 --- a/libwacom/libwacom.h +++ b/libwacom/libwacom.h @@ -150,6 +150,7 @@ typedef enum { WBUSTYPE_BLUETOOTH, /**< Bluetooth tablet */ WBUSTYPE_I2C, /**< I2C tablet */ WBUSTYPE_VIRTUAL, /**< Virtual (uinput) tablet */ + WBUSTYPE_MEI, /**< MEI */ } WacomBusType; /** diff --git a/test/test-tablet-validity.c b/test/test-tablet-validity.c index 91e83de..9c8af44 100644 --- a/test/test-tablet-validity.c +++ b/test/test-tablet-validity.c @@ -178,6 +178,7 @@ assert_vidpid(WacomBusType bus, int vid, int pid) case WBUSTYPE_BLUETOOTH: case WBUSTYPE_I2C: case WBUSTYPE_VIRTUAL: + case WBUSTYPE_MEI: g_assert_cmpint(vid, >, 0); g_assert_cmpint(pid, >, 0); break; diff --git a/test/test_data_files.py b/test/test_data_files.py index 8ab1fea..a3f1d9d 100755 --- a/test/test_data_files.py +++ b/test/test_data_files.py @@ -47,6 +47,7 @@ def test_device_match(tabletfile): "i2c", "serial", "virt", + "mei", ], f"{tabletfile}: unknown bus type" assert re.match( "[0-9a-f]{4}", vid -- 2.43.2