Skip to content

Support for XP-Pen Artist 12 (not pro) ? #554

@zenny

Description

@zenny

Hi,

I could not figure out any way that I can use this driver instead of the proprietary driver from xp-pen (which too is crashing without any debug possibilities).

I tried to do the following:

  1. Appended hid-ids.h with:
    #define USB_DEVICE_ID_UGEE_XPPEN_TABLET_A12 0x080a

Ref: Bus 003 Device 002: ID 28bd:080a UGTABLET 11.6 inch PenDisplay

  1. Appended hid-uclogic-params.c with:
case VID_PID(USB_VENDOR_ID_UGEE,
			USB_DEVICE_ID_UGEE_XPPEN_TABLET_A12):
  1. Appended hid-uclogic-core.c with:
{ HID_USB_DEVICE(USB_VENDOR_ID_UGEE,
				USB_DEVICE_ID_UGEE_XPPEN_TABLET_A12) },
  1. Appended the USBID to xorg.conf:
Section "InputClass"
        Identifier "Ugee/XP-Pen tablets with Wacom driver"
        MatchUSBID "28bd:007[1458]|28bd:0094|28bd:0042|28bd:080a|5543:004[57]|5543:0081|5543:0004|5543:3031"
        MatchDevicePath "/dev/input/event*"
        Driver "wacom"
EndSection
  1. Ran sudo make dkms_install:
$ sudo make dkms_install
dkms add .

Creating symlink /var/lib/dkms/digimend/11/source ->
                 /usr/src/digimend-11

DKMS: add completed.
dkms build digimend/11

Kernel preparation unnecessary for this kernel.  Skipping...

Building module:
cleaning build area...
make -j4 KERNELRELEASE=5.4.138_1 KVERSION=5.4.138_1...(bad exit status: 2)
Error! Bad return status for module build on kernel: 5.4.138_1 (x86_64)
Consult /var/lib/dkms/digimend/11/build/make.log for more information.
make: *** [Makefile:101: dkms_modules_install] Error 10
  1. The /var/lib/dkms/digimend/11/build/make.log shows:
$ cat /var/lib/dkms/digimend/11/build/make.log
DKMS make.log for digimend-11 for kernel 5.4.138_1 (x86_64)
Tue Aug 17 11:12:24 AM CEST 2021
make[1]: Entering directory '/var/lib/dkms/digimend/11/build'
make -C /lib/modules/5.4.138_1/build M=/var/lib/dkms/digimend/11/build modules
make[2]: Entering directory '/usr/src/kernel-headers-5.4.138_1'
  CC [M]  /var/lib/dkms/digimend/11/build/hid-kye.o
  CC [M]  /var/lib/dkms/digimend/11/build/hid-uclogic-core.o
  CC [M]  /var/lib/dkms/digimend/11/build/hid-uclogic-rdesc.o
  CC [M]  /var/lib/dkms/digimend/11/build/hid-uclogic-params.o
In file included from /var/lib/dkms/digimend/11/build/hid-kye.c:21:
/var/lib/dkms/digimend/11/build/hid-ids.h:62:11: error: expected '=', ',', ';', 'asm' or '__attribute__' before '--' token
   62 | xsetwacom --set "$tabletstylus" Area 100 120 32794 32797
      |           ^~
In file included from /var/lib/dkms/digimend/11/build/hid-uclogic-params.c:19:
/var/lib/dkms/digimend/11/build/hid-ids.h:62:11: error: expected '=', ',', ';', 'asm' or '__attribute__' before '--' token
   62 | xsetwacom --set "$tabletstylus" Area 100 120 32794 32797
      |           ^~
In file included from /var/lib/dkms/digimend/11/build/hid-uclogic-params.c:20:
./include/linux/ctype.h: In function '__tolower':
./include/linux/ctype.h:21:22: error: '_ctype' undeclared (first use in this function)
   21 | #define __ismask(x) (_ctype[(int)(unsigned char)(x)])
      |                      ^~~~~~
./include/linux/ctype.h:36:22: note: in expansion of macro '__ismask'
   36 | #define isupper(c) ((__ismask(c)&(_U)) != 0)
      |                      ^~~~~~~~
./include/linux/ctype.h:44:6: note: in expansion of macro 'isupper'
   44 |  if (isupper(c))
      |      ^~~~~~~
./include/linux/ctype.h:21:22: note: each undeclared identifier is reported only once for each function it appears in
   21 | #define __ismask(x) (_ctype[(int)(unsigned char)(x)])
      |                      ^~~~~~
./include/linux/ctype.h:36:22: note: in expansion of macro '__ismask'
   36 | #define isupper(c) ((__ismask(c)&(_U)) != 0)
      |                      ^~~~~~~~
./include/linux/ctype.h:44:6: note: in expansion of macro 'isupper'
   44 |  if (isupper(c))
      |      ^~~~~~~
./include/linux/ctype.h: In function '__toupper':
./include/linux/ctype.h:21:22: error: '_ctype' undeclared (first use in this function)
   21 | #define __ismask(x) (_ctype[(int)(unsigned char)(x)])
      |                      ^~~~~~
./include/linux/ctype.h:31:22: note: in expansion of macro '__ismask'
   31 | #define islower(c) ((__ismask(c)&(_L)) != 0)
      |                      ^~~~~~~~
./include/linux/ctype.h:51:6: note: in expansion of macro 'islower'
   51 |  if (islower(c))
      |      ^~~~~~~
In file included from /var/lib/dkms/digimend/11/build/hid-uclogic-core.c:23:
/var/lib/dkms/digimend/11/build/hid-ids.h:62:11: error: expected '=', ',', ';', 'asm' or '__attribute__' before '--' token
   62 | xsetwacom --set "$tabletstylus" Area 100 120 32794 32797
      |           ^~
In file included from ./include/linux/ioport.h:13,
                 from ./include/linux/device.h:15,
                 from /var/lib/dkms/digimend/11/build/hid-uclogic-core.c:16:
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c: In function 'uclogic_inrange_timeout':
./include/linux/kernel.h:994:51: error: invalid use of undefined type 'struct uclogic_drvdata'
  994 |  BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
      |                                                   ^~
./include/linux/compiler.h:397:9: note: in definition of macro '__compiletime_assert'
  397 |   if (!(condition))     \
      |         ^~~~~~~~~
./include/linux/compiler.h:417:2: note: in expansion of macro '_compiletime_assert'
  417 |  _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
      |  ^~~~~~~~~~~~~~~~~~~
./include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
   39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
      |                                     ^~~~~~~~~~~~~~~~~~
./include/linux/kernel.h:994:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
  994 |  BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
      |  ^~~~~~~~~~~~~~~~
./include/linux/kernel.h:994:20: note: in expansion of macro '__same_type'
  994 |  BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
      |                    ^~~~~~~~~~~
./include/linux/timer.h:153:2: note: in expansion of macro 'container_of'
  153 |  container_of(callback_timer, typeof(*var), timer_fieldname)
      |  ^~~~~~~~~~~~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:57:36: note: in expansion of macro 'from_timer'
   57 |  struct uclogic_drvdata *drvdata = from_timer(drvdata, t,
      |                                    ^~~~~~~~~~
In file included from <command-line>:
././include/linux/compiler_types.h:133:35: error: invalid use of undefined type 'struct uclogic_drvdata'
  133 | #define __compiler_offsetof(a, b) __builtin_offsetof(a, b)
      |                                   ^~~~~~~~~~~~~~~~~~
./include/linux/stddef.h:17:32: note: in expansion of macro '__compiler_offsetof'
   17 | #define offsetof(TYPE, MEMBER) __compiler_offsetof(TYPE, MEMBER)
      |                                ^~~~~~~~~~~~~~~~~~~
./include/linux/kernel.h:997:21: note: in expansion of macro 'offsetof'
  997 |  ((type *)(__mptr - offsetof(type, member))); })
      |                     ^~~~~~~~
./include/linux/timer.h:153:2: note: in expansion of macro 'container_of'
  153 |  container_of(callback_timer, typeof(*var), timer_fieldname)
      |  ^~~~~~~~~~~~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:57:36: note: in expansion of macro 'from_timer'
   57 |  struct uclogic_drvdata *drvdata = from_timer(drvdata, t,
      |                                    ^~~~~~~~~~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:59:35: error: invalid use of undefined type 'struct uclogic_drvdata'
   59 |  struct input_dev *input = drvdata->pen_input;
      |                                   ^~
/var/lib/dkms/digimend/11/build/hid-kye.c: In function 'kye_report_fixup':
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c: In function 'uclogic_report_fixup':
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:80:13: error: invalid use of undefined type 'struct uclogic_drvdata'
   80 |  if (drvdata->desc_ptr != NULL) {
      |             ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:81:18: error: invalid use of undefined type 'struct uclogic_drvdata'
   81 |   rdesc = drvdata->desc_ptr;
      |                  ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:82:19: error: invalid use of undefined type 'struct uclogic_drvdata'
   82 |   *rsize = drvdata->desc_size;
      |                   ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c: In function 'uclogic_input_mapping':
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:95:42: error: invalid use of undefined type 'struct uclogic_drvdata'
   95 |  struct uclogic_params *params = &drvdata->params;
      |                                          ^~
/var/lib/dkms/digimend/11/build/hid-kye.c:611:12: error: 'easypen_i405x_rdesc_fixed' undeclared (first use in this function); did you mean 'easypen_m406xe_rdesc_fixed'?
  611 |    rdesc = easypen_i405x_rdesc_fixed;
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~
      |            easypen_m406xe_rdesc_fixed
/var/lib/dkms/digimend/11/build/hid-kye.c:611:12: note: each undeclared identifier is reported only once for each function it appears in
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c: In function 'uclogic_input_configured':
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:116:42: error: invalid use of undefined type 'struct uclogic_drvdata'
  116 |  struct uclogic_params *params = &drvdata->params;
      |                                          ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:134:10: error: invalid use of undefined type 'struct uclogic_drvdata'
  134 |   drvdata->pen_input = hi->input;
      |          ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c: In function 'uclogic_probe':
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:208:43: error: invalid application of 'sizeof' to incomplete type 'struct uclogic_drvdata'
  208 |  drvdata = devm_kzalloc(&hdev->dev, sizeof(*drvdata), GFP_KERNEL);
      |                                           ^
In file included from ./include/linux/workqueue.h:9,
                 from ./include/linux/srcu.h:21,
                 from ./include/linux/notifier.h:16,
                 from ./arch/x86/include/asm/uprobes.h:13,
                 from ./include/linux/uprobes.h:49,
                 from ./include/linux/mm_types.h:14,
                 from ./include/linux/mmzone.h:21,
                 from ./include/linux/gfp.h:6,
                 from ./include/linux/xarray.h:14,
                 from ./include/linux/radix-tree.h:18,
                 from ./include/linux/idr.h:15,
                 from ./include/linux/kernfs.h:13,
                 from ./include/linux/sysfs.h:16,
                 from ./include/linux/kobject.h:20,
                 from ./include/linux/device.h:16,
                 from /var/lib/dkms/digimend/11/build/hid-uclogic-core.c:16:
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:213:22: error: invalid use of undefined type 'struct uclogic_drvdata'
  213 |  timer_setup(&drvdata->inrange_timer, uclogic_inrange_timeout, 0);
      |                      ^~
./include/linux/timer.h:125:18: note: in definition of macro '__init_timer'
  125 |  init_timer_key((_timer), (_fn), (_flags), NULL, NULL)
      |                  ^~~~~~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:213:2: note: in expansion of macro 'timer_setup'
  213 |  timer_setup(&drvdata->inrange_timer, uclogic_inrange_timeout, 0);
      |  ^~~~~~~~~~~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:214:9: error: invalid use of undefined type 'struct uclogic_drvdata'
  214 |  drvdata->re_state = U8_MAX;
      |         ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:218:35: error: invalid use of undefined type 'struct uclogic_drvdata'
  218 |  rc = uclogic_params_init(&drvdata->params, hdev);
      |                                   ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:225:39: error: invalid use of undefined type 'struct uclogic_drvdata'
  225 |  uclogic_params_hid_dbg(hdev, &drvdata->params);
      |                                       ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:226:13: error: invalid use of undefined type 'struct uclogic_drvdata'
  226 |  if (drvdata->params.invalid) {
      |             ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:233:39: error: invalid use of undefined type 'struct uclogic_drvdata'
  233 |  rc = uclogic_params_get_desc(&drvdata->params,
      |                                       ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:234:18: error: invalid use of undefined type 'struct uclogic_drvdata'
  234 |          &drvdata->desc_ptr,
      |                  ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:235:18: error: invalid use of undefined type 'struct uclogic_drvdata'
  235 |          &drvdata->desc_size);
      |                  ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:259:34: error: invalid use of undefined type 'struct uclogic_drvdata'
  259 |   uclogic_params_cleanup(&drvdata->params);
      |                                  ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c: At top level:
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:290:41: warning: 'struct uclogic_drvdata' declared inside parameter list will not be visible outside of this definition or declaration
  290 | static int uclogic_raw_event_pen(struct uclogic_drvdata *drvdata,
      |                                         ^~~~~~~~~~~~~~~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c: In function 'uclogic_raw_event_pen':
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:293:43: error: invalid use of undefined type 'struct uclogic_drvdata'
  293 |  struct uclogic_params_pen *pen = &drvdata->params.pen;
      |                                           ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:334:21: error: invalid use of undefined type 'struct uclogic_drvdata'
  334 |   mod_timer(&drvdata->inrange_timer,
      |                     ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c: At top level:
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:357:10: warning: 'struct uclogic_drvdata' declared inside parameter list will not be visible outside of this definition or declaration
  357 |   struct uclogic_drvdata *drvdata,
      |          ^~~~~~~~~~~~~~~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c: In function 'uclogic_raw_event_frame':
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:381:26: error: invalid use of undefined type 'struct uclogic_drvdata'
  381 |   u8 prev_state = drvdata->re_state;
      |                          ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:398:10: error: invalid use of undefined type 'struct uclogic_drvdata'
  398 |   drvdata->re_state = state;
      |          ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c: In function 'uclogic_raw_event':
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:431:42: error: invalid use of undefined type 'struct uclogic_drvdata'
  431 |  struct uclogic_params *params = &drvdata->params;
      |                                          ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:461:34: error: passing argument 1 of 'uclogic_raw_event_pen' from incompatible pointer type [-Werror=incompatible-pointer-types]
  461 |     return uclogic_raw_event_pen(drvdata, data, size);
      |                                  ^~~~~~~
      |                                  |
      |                                  struct uclogic_drvdata *
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:290:58: note: expected 'struct uclogic_drvdata *' but argument is of type 'struct uclogic_drvdata *'
  290 | static int uclogic_raw_event_pen(struct uclogic_drvdata *drvdata,
      |                                  ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:469:6: error: passing argument 1 of 'uclogic_raw_event_frame' from incompatible pointer type [-Werror=incompatible-pointer-types]
  469 |      drvdata, &params->frame_list[i],
      |      ^~~~~~~
      |      |
      |      struct uclogic_drvdata *
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:357:27: note: expected 'struct uclogic_drvdata *' but argument is of type 'struct uclogic_drvdata *'
  357 |   struct uclogic_drvdata *drvdata,
      |   ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c: In function 'uclogic_remove':
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:484:25: error: invalid use of undefined type 'struct uclogic_drvdata'
  484 |  del_timer_sync(&drvdata->inrange_timer);
      |                         ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:486:15: error: invalid use of undefined type 'struct uclogic_drvdata'
  486 |  kfree(drvdata->desc_ptr);
      |               ^~
/var/lib/dkms/digimend/11/build/hid-uclogic-core.c:487:33: error: invalid use of undefined type 'struct uclogic_drvdata'
  487 |  uclogic_params_cleanup(&drvdata->params);
      |                                 ^~
make[3]: *** [scripts/Makefile.build:262: /var/lib/dkms/digimend/11/build/hid-kye.o] Error 1
make[3]: *** Waiting for unfinished jobs....
cc1: some warnings being treated as errors
make[3]: *** [scripts/Makefile.build:262: /var/lib/dkms/digimend/11/build/hid-uclogic-core.o] Error 1
make[3]: *** [scripts/Makefile.build:262: /var/lib/dkms/digimend/11/build/hid-uclogic-params.o] Error 1
make[2]: *** [Makefile:1734: /var/lib/dkms/digimend/11/build] Error 2
make[2]: Leaving directory '/usr/src/kernel-headers-5.4.138_1'
make[1]: *** [Makefile:25: modules] Error 2
make[1]: Leaving directory '/var/lib/dkms/digimend/11/build'
  1. Any input to resolve this issue? Some outpus about the xp-pen artist 12 tablet are follows:
$ xinput list | grep UG
⎜   ↳ UGTABLET 11.6 inch PenDisplay Mouse       id=8    [slave  pointer  (2)]
⎜   ↳ UGTABLET 11.6 inch PenDisplay             id=9    [slave  pointer  (2)]
    ↳ UGTABLET 11.6 inch PenDisplay Keyboard    id=10   [slave  keyboard (3)]
$ lsusb | grep UG
Bus 003 Device 002: ID 28bd:080a UGTABLET 11.6 inch PenDisplay

The tablet pointer gets detected with default kernel drivers that comes with v5.4.138 in tty console, but does not respond inside X! Hopefully this driver may work. Thanks in advance.

/z

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions