191 lines
6.2 KiB
Diff
191 lines
6.2 KiB
Diff
Index: share/man/man4/uwacom.4
|
|
===================================================================
|
|
RCS file: /cvs/src/share/man/man4/uwacom.4,v
|
|
retrieving revision 1.2
|
|
diff -u -p -u -p -r1.2 uwacom.4
|
|
--- share/man/man4/uwacom.4 12 Sep 2016 10:39:06 -0000 1.2
|
|
+++ share/man/man4/uwacom.4 1 Sep 2022 19:57:37 -0000
|
|
@@ -42,6 +42,7 @@ driver supports the following Wacom tabl
|
|
.Bl -column "Intuos Draw" "Model Number" -offset 6n
|
|
.It Em Name Ta Em Model Number
|
|
.It Li Intuos Draw Ta CTL-490
|
|
+.It Li One Ta CTL-472
|
|
.El
|
|
.Sh SEE ALSO
|
|
.Xr uhidev 4 ,
|
|
Index: sys/dev/usb/usbdevs
|
|
===================================================================
|
|
RCS file: /cvs/src/sys/dev/usb/usbdevs,v
|
|
retrieving revision 1.748
|
|
diff -u -p -u -p -r1.748 usbdevs
|
|
--- sys/dev/usb/usbdevs 23 Aug 2022 08:10:35 -0000 1.748
|
|
+++ sys/dev/usb/usbdevs 1 Sep 2022 19:57:38 -0000
|
|
@@ -4613,6 +4613,7 @@ product WACOM GRAPHIRE3_4X5 0x0013 Graph
|
|
product WACOM GRAPHIRE4_4X5 0x0015 Graphire4 Classic A6
|
|
product WACOM INTUOSA5 0x0021 Intuos A5
|
|
product WACOM INTUOS_DRAW 0x033b Intuos Draw (CTL-490)
|
|
+product WACOM ONE_S 0x037a One S (CTL-472)
|
|
product WACOM INTUOS_PRO_S 0x0392 Intuos Pro S
|
|
|
|
/* WAGO Kontakttechnik products */
|
|
Index: sys/dev/usb/usbdevs.h
|
|
===================================================================
|
|
RCS file: /cvs/src/sys/dev/usb/usbdevs.h,v
|
|
retrieving revision 1.760
|
|
diff -u -p -u -p -r1.760 usbdevs.h
|
|
--- sys/dev/usb/usbdevs.h 23 Aug 2022 08:11:01 -0000 1.760
|
|
+++ sys/dev/usb/usbdevs.h 1 Sep 2022 19:57:38 -0000
|
|
@@ -1,4 +1,4 @@
|
|
-/* $OpenBSD: usbdevs.h,v 1.760 2022/08/23 08:11:01 jsg Exp $ */
|
|
+/* $OpenBSD$ */
|
|
|
|
/*
|
|
* THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
|
|
@@ -4620,6 +4620,7 @@
|
|
#define USB_PRODUCT_WACOM_GRAPHIRE4_4X5 0x0015 /* Graphire4 Classic A6 */
|
|
#define USB_PRODUCT_WACOM_INTUOSA5 0x0021 /* Intuos A5 */
|
|
#define USB_PRODUCT_WACOM_INTUOS_DRAW 0x033b /* Intuos Draw (CTL-490) */
|
|
+#define USB_PRODUCT_WACOM_ONE_S 0x037a /* One S (CTL-472) */
|
|
#define USB_PRODUCT_WACOM_INTUOS_PRO_S 0x0392 /* Intuos Pro S */
|
|
|
|
/* WAGO Kontakttechnik products */
|
|
Index: sys/dev/usb/usbdevs_data.h
|
|
===================================================================
|
|
RCS file: /cvs/src/sys/dev/usb/usbdevs_data.h,v
|
|
retrieving revision 1.754
|
|
diff -u -p -u -p -r1.754 usbdevs_data.h
|
|
--- sys/dev/usb/usbdevs_data.h 23 Aug 2022 08:11:01 -0000 1.754
|
|
+++ sys/dev/usb/usbdevs_data.h 1 Sep 2022 19:57:39 -0000
|
|
@@ -1,4 +1,4 @@
|
|
-/* $OpenBSD: usbdevs_data.h,v 1.754 2022/08/23 08:11:01 jsg Exp $ */
|
|
+/* $OpenBSD$ */
|
|
|
|
/*
|
|
* THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
|
|
@@ -11824,6 +11824,10 @@ const struct usb_known_product usb_known
|
|
{
|
|
USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOS_DRAW,
|
|
"Intuos Draw (CTL-490)",
|
|
+ },
|
|
+ {
|
|
+ USB_VENDOR_WACOM, USB_PRODUCT_WACOM_ONE_S,
|
|
+ "One S (CTL-472)",
|
|
},
|
|
{
|
|
USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOS_PRO_S,
|
|
Index: sys/dev/usb/uwacom.c
|
|
===================================================================
|
|
RCS file: /cvs/src/sys/dev/usb/uwacom.c,v
|
|
retrieving revision 1.5
|
|
diff -u -p -u -p -r1.5 uwacom.c
|
|
--- sys/dev/usb/uwacom.c 22 Nov 2021 11:29:18 -0000 1.5
|
|
+++ sys/dev/usb/uwacom.c 1 Sep 2022 19:57:39 -0000
|
|
@@ -35,10 +35,14 @@
|
|
|
|
#include <dev/hid/hidmsvar.h>
|
|
|
|
+#define UWACOM_USE_PRESSURE 0x0001 /* button 0 is flaky, use tip pressure */
|
|
+#define UWACOM_BIG_ENDIAN 0x0002 /* XY reporting byte order */
|
|
+
|
|
struct uwacom_softc {
|
|
struct uhidev sc_hdev;
|
|
struct hidms sc_ms;
|
|
struct hid_location sc_loc_tip_press;
|
|
+ int sc_flags;
|
|
};
|
|
|
|
struct cfdriver uwacom_cd = {
|
|
@@ -47,7 +51,8 @@ struct cfdriver uwacom_cd = {
|
|
|
|
|
|
const struct usb_devno uwacom_devs[] = {
|
|
- { USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOS_DRAW }
|
|
+ { USB_VENDOR_WACOM, USB_PRODUCT_WACOM_INTUOS_DRAW },
|
|
+ { USB_VENDOR_WACOM, USB_PRODUCT_WACOM_ONE_S }
|
|
};
|
|
|
|
int uwacom_match(struct device *, void *, void *);
|
|
@@ -110,6 +115,7 @@ uwacom_attach(struct device *parent, str
|
|
|
|
uhidev_get_report_desc(uha->parent, &desc, &size);
|
|
repid = uha->reportid;
|
|
+
|
|
sc->sc_hdev.sc_isize = hid_report_size(desc, size, hid_input, repid);
|
|
sc->sc_hdev.sc_osize = hid_report_size(desc, size, hid_output, repid);
|
|
sc->sc_hdev.sc_fsize = hid_report_size(desc, size, hid_feature, repid);
|
|
@@ -118,15 +124,14 @@ uwacom_attach(struct device *parent, str
|
|
ms->sc_rawmode = 1;
|
|
ms->sc_flags = HIDMS_ABSX | HIDMS_ABSY;
|
|
ms->sc_num_buttons = 3;
|
|
+
|
|
ms->sc_loc_x.pos = 8;
|
|
ms->sc_loc_x.size = 16;
|
|
ms->sc_loc_y.pos = 24;
|
|
ms->sc_loc_y.size = 16;
|
|
|
|
ms->sc_tsscale.minx = 0;
|
|
- ms->sc_tsscale.maxx = 7600;
|
|
ms->sc_tsscale.miny = 0;
|
|
- ms->sc_tsscale.maxy = 4750;
|
|
|
|
ms->sc_loc_btn[0].pos = 0;
|
|
ms->sc_loc_btn[0].size = 1;
|
|
@@ -135,8 +140,21 @@ uwacom_attach(struct device *parent, str
|
|
ms->sc_loc_btn[2].pos = 2;
|
|
ms->sc_loc_btn[2].size = 1;
|
|
|
|
- sc->sc_loc_tip_press.pos = 43;
|
|
- sc->sc_loc_tip_press.size = 8;
|
|
+ if (uha->uaa->product == USB_PRODUCT_WACOM_ONE_S) {
|
|
+ static uByte reportbuf[2] = { 0x02, 0x02 };
|
|
+ uhidev_set_report(uha->parent, UHID_FEATURE_REPORT, 2,
|
|
+ &reportbuf, 2);
|
|
+ ms->sc_tsscale.maxx = 15200;
|
|
+ ms->sc_tsscale.maxy = 9500;
|
|
+ }
|
|
+
|
|
+ if (uha->uaa->product == USB_PRODUCT_WACOM_INTUOS_DRAW) {
|
|
+ sc->sc_flags = UWACOM_USE_PRESSURE | UWACOM_BIG_ENDIAN;
|
|
+ sc->sc_loc_tip_press.pos = 43;
|
|
+ sc->sc_loc_tip_press.size = 8;
|
|
+ ms->sc_tsscale.maxx = 7600;
|
|
+ ms->sc_tsscale.maxy = 4750;
|
|
+ }
|
|
|
|
hidms_attach(ms, &uwacom_accessops);
|
|
}
|
|
@@ -166,19 +184,25 @@ uwacom_intr(struct uhidev *addr, void *b
|
|
if ((data[0] & 0xf0) == 0xc0)
|
|
return;
|
|
|
|
- x = be16toh(hid_get_data(data, len, &ms->sc_loc_x));
|
|
- y = be16toh(hid_get_data(data, len, &ms->sc_loc_y));
|
|
- pressure = hid_get_data(data, len, &sc->sc_loc_tip_press);
|
|
+ x = hid_get_data(data, len, &ms->sc_loc_x);
|
|
+ y = hid_get_data(data, len, &ms->sc_loc_y);
|
|
+
|
|
+ if (sc->sc_flags & UWACOM_BIG_ENDIAN) {
|
|
+ x = be16toh(x);
|
|
+ y = be16toh(y);
|
|
+ }
|
|
|
|
for (i = 0; i < ms->sc_num_buttons; i++)
|
|
if (hid_get_data(data, len, &ms->sc_loc_btn[i]))
|
|
buttons |= (1 << i);
|
|
|
|
- /* button 0 reporting is flaky, use tip pressure for it */
|
|
- if (pressure > 10)
|
|
- buttons |= 1;
|
|
- else
|
|
- buttons &= ~1;
|
|
+ if (sc->sc_flags & UWACOM_USE_PRESSURE) {
|
|
+ pressure = hid_get_data(data, len, &sc->sc_loc_tip_press);
|
|
+ if (pressure > 10)
|
|
+ buttons |= 1;
|
|
+ else
|
|
+ buttons &= ~1;
|
|
+ }
|
|
|
|
if (x != 0 || y != 0 || buttons != ms->sc_buttons) {
|
|
wsmouse_position(ms->sc_wsmousedev, x, y);
|