aboutsummarylogtreecommitdiffstats
path: root/0001-Add-support-for-BUS_VIRTUAL.patch
blob: 52b296bcdaf8262927cc29d585aa581bb7935568 (plain)
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
From 808f74da665bb932664b4950fe86e05910c77537 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/16] 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      | 1 +
 5 files changed, 12 insertions(+)

diff --git a/libwacom/libwacom-database.c b/libwacom/libwacom-database.c
index 2c17e0d..090d5aa 100644
--- a/libwacom/libwacom-database.c
+++ b/libwacom/libwacom-database.c
@@ -130,6 +130,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;
 }
 
@@ -148,6 +150,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 d220d14..1ba0740 100644
--- a/libwacom/libwacom.c
+++ b/libwacom/libwacom.c
@@ -148,6 +148,10 @@ get_bus_vid_pid (GUdevDevice  *device,
 		*bus = WBUSTYPE_I2C;
 		retval = TRUE;
 		break;
+	case 6:
+		*bus = WBUSTYPE_VIRTUAL;
+		retval = TRUE;
+		break;
 	}
 
 out:
@@ -826,6 +830,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 389681d..040c51e 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 4b7983d..91e83de 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 4cca787..8ab1fea 100755
--- a/test/test_data_files.py
+++ b/test/test_data_files.py
@@ -46,6 +46,7 @@ def test_device_match(tabletfile):
             "bluetooth",
             "i2c",
             "serial",
+            "virt",
         ], f"{tabletfile}: unknown bus type"
         assert re.match(
             "[0-9a-f]{4}", vid
-- 
2.43.0