On Sat, Sep 03, 2022 at 05:43:25PM +0200, Caspar Schutijser wrote:

> Hi,
> 
> On Sat, Sep 03, 2022 at 05:00:00PM +0200, Stefan Hagen wrote:
> > This is a better version of an earlier attempt to make my wacom tablet
> > work. I have the tablet here in Bad Liebenzell if you want to give it a
> > spin (on my or on your machine).
> > 
> > Comments? OK?
> 
> I don't feel entirely qualified to give OKs in this area so I won't do
> that. But I tested it on my machine with sdk@'s tablet and it works well
> here. Nice!
> 
> Is there any chance it breaks other supported tablets? Should it be
> tested there as well?

The driver only attaches to specific products, currently
Intuos Draw, CTL-490.  So there shouldn't be too much to break I guess.
 
> One whitespace nit below.
> 
> Caspar
> 
> > 
> > Best Regards,
> > Stefan

I have an Wacom One CTL-672, never used it on OpenBSD.  Currently
it attaches to ums(4).  Works fine with that.  It also works fine
when attaching to uwacom(4), without and with your diff.  It doesn't
seem to require specific 'tsscale' nor 'loc_tip_press' settings.
I wonder if it would change something.

Some very few comments inline.

> > 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

Shouldn't that be 'One S'?

> >  .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);
> 
> This indentation style is different from style(9). It should be
> \t\t<4 spaces>&reportbuf, 2);

I agree.

> > +           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);
> > 

Reply via email to