1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
From f3428ccebde7f189c6f3fb6fd21803d57b22e9ba Mon Sep 17 00:00:00 2001
From: Dorian Stoll <dorian.stoll@tmsp.io>
Date: Sat, 27 Jun 2020 18:21:11 +0200
Subject: [PATCH 01/12] Add support for BUS_VIRTUAL
This is needed to support IPTS devices through the iptsd userspace
daemon. It exposes the touchscreen / stylus as uinput, since the parsing
of raw IPTS data needs to happen in userspace.
Because these devices are not backed by an actual bus, they are created
as BUS_VIRTUAL.
Signed-off-by: Dorian Stoll <dorian.stoll@tmsp.io>
---
libwacom/libwacom-database.c | 4 ++++
libwacom/libwacom.c | 5 +++++
libwacom/libwacom.h | 1 +
test/test-tablet-validity.c | 1 +
test/test_data_files.py | 2 +-
5 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/libwacom/libwacom-database.c b/libwacom/libwacom-database.c
index 804ac3d..96aaa5e 100644
--- a/libwacom/libwacom-database.c
+++ b/libwacom/libwacom-database.c
@@ -128,6 +128,8 @@ bus_from_str (const char *str)
return WBUSTYPE_BLUETOOTH;
if (g_str_equal(str, "i2c"))
return WBUSTYPE_I2C;
+ if (g_str_equal(str, "virt"))
+ return WBUSTYPE_VIRTUAL;
return WBUSTYPE_UNKNOWN;
}
@@ -146,6 +148,8 @@ bus_to_str (WacomBusType bus)
return "bluetooth";
case WBUSTYPE_I2C:
return "i2c";
+ case WBUSTYPE_VIRTUAL:
+ return "virt";
}
g_assert_not_reached ();
}
diff --git a/libwacom/libwacom.c b/libwacom/libwacom.c
index ccfe43a..d9b8a22 100644
--- a/libwacom/libwacom.c
+++ b/libwacom/libwacom.c
@@ -149,6 +149,10 @@ get_bus_vid_pid (GUdevDevice *device,
*bus = WBUSTYPE_I2C;
retval = TRUE;
break;
+ case 6:
+ *bus = WBUSTYPE_VIRTUAL;
+ retval = TRUE;
+ break;
}
out:
@@ -817,6 +821,7 @@ static void print_match(int fd, const WacomMatch *match)
case WBUSTYPE_USB: bus_name = "usb"; break;
case WBUSTYPE_SERIAL: bus_name = "serial"; break;
case WBUSTYPE_I2C: bus_name = "i2c"; break;
+ case WBUSTYPE_VIRTUAL: bus_name = "virt"; 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 cafed64..b184ed7 100644
--- a/libwacom/libwacom.h
+++ b/libwacom/libwacom.h
@@ -149,6 +149,7 @@ typedef enum {
WBUSTYPE_SERIAL, /**< Serial tablet */
WBUSTYPE_BLUETOOTH, /**< Bluetooth tablet */
WBUSTYPE_I2C, /**< I2C tablet */
+ WBUSTYPE_VIRTUAL, /**< Virtual (uinput) tablet */
} WacomBusType;
/**
diff --git a/test/test-tablet-validity.c b/test/test-tablet-validity.c
index 2095089..da5fe07 100644
--- a/test/test-tablet-validity.c
+++ b/test/test-tablet-validity.c
@@ -177,6 +177,7 @@ assert_vidpid(WacomBusType bus, int vid, int pid)
break;
case WBUSTYPE_BLUETOOTH:
case WBUSTYPE_I2C:
+ case WBUSTYPE_VIRTUAL:
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 d732bd1..4b21b6a 100755
--- a/test/test_data_files.py
+++ b/test/test_data_files.py
@@ -41,7 +41,7 @@ def test_device_match(tabletfile):
continue
bus, vid, pid = match.split(':')[:3] # skip the name part of the match
- assert bus in ['usb', 'bluetooth', 'i2c', 'serial'], f'{tabletfile}: unknown bus type'
+ assert bus in ['usb', 'bluetooth', 'i2c', 'serial', 'virt'], f'{tabletfile}: unknown bus type'
assert re.match('[0-9a-f]{4}', vid), f'{tabletfile}: {vid} must be lowercase hex'
assert re.match('[0-9a-f]{4}', pid), f'{tabletfile}: {pid} must be lowercase hex'
--
2.37.2
|