Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

XP-Pen Arist 15.6 Pro Support #291

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

Conversation

Korvox
Copy link

@Korvox Korvox commented Jun 30, 2019

Edit: July 2020

Adds support for the XP-Pen Artist 15.6 Pro. Just rebased the patch off master again so its up to date. Adds tilt support. Squashed to one commit.

For anyone coming here just to get the working driver, make sure to read #291 (comment) for the hwdb entry required to make the pad buttons work.

@spbnick
Copy link
Member

spbnick commented Jul 1, 2019

Heey, very nice work, Matthew!

This is NOT ready to merge yet, for sure! Checklist of things to go over:

  • The probe is a giant mess. Going to cleanup variable declarations, ordering, whitespace, etc when everything else is sorted.

Since it's that big, could you also put probing in a separate function, like it's done with uclogic_params_huion_init?

  • Probe needs to send the initializer packet on the custom control interface. None of the string descriptor reportings activate it unlike on Huion devices. This is, demonstrably, crazy ugly to do. And might be violating some assumptions about device state when probing.

  • Preferrably it should verify the recv packet confirms the interface is active, but thats currently commented out and I'm not sure of a way to do this kind of manual packet interception. We need to open the recvpipe on endpoint 0x83 and read 10 bytes from it to compare the known good result but usb_start_wait_urb isn't in the public USB API. I guess this could be done asychronously, but then we would need to invalidate the interface after the fact? The only reason to bother with this would to try refreshing or falling back to the quirky default interfaces anyway.

From the traces, configuration descriptors, and report descriptors, I see that the request and the response you're dealing with are simply output/input reports being sent/received on interface 2.
This is actually saner than requesting strings to configure the tablet. So, you can simply send the request with hid_hw_output_report, and then handle the response in uclogic_raw_event. Maybe sending needs to happen after the probing is completed, so that the stack is ready to receive the response.

BTW, what happens if you don't send that, what's the difference?

And speaking about crazy things, do you think you could contribute your tablet diagnostics to the tablets repo?

  • Currently using the magic data in string descriptor 100 to initialize everything because I'm not convinced the unit I've been using is all well and proper - its got a a really arbitrary pixel grid of 34419 x 19461 and reports half the resolution its supposed to? If anyone wants to review this stuff here are all the string descriptors this tablet puts out. If probing the data is unnecessary the values could just be hardcoded like most devices. I just want to verify all A156Ps have an actual resolution of 2540 and not the 5080 the manufacturer advertises.

I would check there is no setting in the windows driver to increase the resolution, and you're using the latest driver, and then see what the actual reported coordinate is. If the tablet works normally in Windows, then dividing the coordinate extent by the active area extent in inches would produce the actual resolution. I don't think your tablet is defective. Maybe marketing is just "exaggerating things slightly".

  • The report descriptors are hand crafted from reading way too much USB documentation. There are few quirks - the In Range sensor is technically 0xA for active and 0xC for inactive so either checking bits 6 or 7 of the first packet work for an in range check (and 0xF is the keypad that gets filtered out). Not sure which is preferred, most other Huion descriptors go with inverted range on the C because they don't have the 6th bit set when active. Also just reusing the V1 report descriptor ID for the frame, but 0x03 is also available on this device if we wanted to keep it adjacent to the pen on 2.

Didn't review the report descriptors properly yet, but I generally just copy something close from my own descriptors and modify.

  • Because these descriptors get spliced together I found that the property values from the tilt axis spilled into the frame descriptor. Is there a way to unset Physical Max / Min? It doesn't seem to be impacting operation but I'd like the buttons on the frame to mirror the ones on the pen, being unitless and physical dimensionless rather than just being [0,1]. And having to unset all those properties either at the end of the pen or start of the frame seems idiomatic. Should there be a push / pop around the tilt usages?

Never really bothered about it, and never had a problem with buttons, but maybe something else is wrong? Anyway, the HID spec says:

If both the Physical Minimum and Physical Maximum extents are equal to 0 then they will revert to their default interpretation.

Push/pop should work as well.

  • I mapped the frame buttons to keys just to make sure they work, mapping them to buttons 1-A meant they didn't do anything by default (and Krita, for example, wouldn't recognize them for shortcuts like that). Is there a preferred mapping for the keys, particularly the wheel which should probably be mapped to a generic "plus / minus" or "in / out" button pair?

Take a look at the Huion button pad report descriptor. These are made to produce BTN_0-BTN_9 and then BTN_A, BTN_B, BTN_C, and so on, IIRC. This way the Wacom driver would handle and allow remapping them (e.g. with xsetwacom). The wheel needs to report as a relative or an absolute wheel (for the Wacom driver, again). Take a look at the Ugee G5 report descriptor for example.

  • I have a partial impl of an attempt at using tilt reporting to align the pen tip properly. On Windows the pen doesn't respond to tilt, so at extreme angles the pen tip is quite ajar from where the pen reports X/Y at. Problem is the pen doesn't always provide tilt data on every interrupt so in my testing it jumps around a lot. Fix would probably be a lot like the in range emulation where the driver tracks the tilt state between interrupts and if a packet is missing tilt data (some large Δ to 0) it would keep using the last reported tilt value for tip positioning. I'm fine with implementing that, I just want to check in if its an ok idea.

I find it strange that the Windows driver doesn't support tilt. Windows users are their primary customers, and XP-Pen advertises tilt support. Could you check again, and also see how the pen position behaves at those extreme angles, with tilt support or not? I don't know how extreme those angles are, and I'm not an artist, so I don't know if this kind of input is even useful. It could be that the tablet has this kind of reporting problem and the windows driver works it around somehow, but I wouldn't bet on it. In general at large angles position reporting breaks down, the question is which angles are those for your tablet.

  • All things said this driver is REALLY specific, especially if it starts having custom conditional behavior in raw_input. Feels like a candidate to be forked out into its separate file to avoid that big chunk of per-input conditionality on it.

Weeell, it's still very much a UC-Logic tablet, and I'll be OK with including it, especially if we manage to simplify it. I can't stop you from making a separate driver, but I would like a review from upstream first before including such a driver into digimend-kernel-drivers.

  • Xinput is calling the keypad "UGTABLET 15.6 inch PenDisplay Pen" and the pen "UGTABLET 15.6 inch PenDisplay Pen Pen (0)" but that happens on my personal H610 too so thats more of a Digimend quirk.

Hmm, it shouldn't be calling the pad "Pen", something is fishy. We can take a look at this later.

  • The tablet supports screen calibration over one of its interfaces, but I don't seem to have a way to give it display control via Virtualbox, so I'd need to find an actual Windows PC to plug it into to collect how that protocol works. After initial support is merged I'll do it.

Huh, does it really need to configure the device for calibration? I would have thought host-side scaling would be enough. There's xinput-calibrator, BTW, maybe it can help.

Once all these points are resolved I'll fix the formatting and reorganize the code properly for a proper merge. Presently all works on my end, at least.

Thanks a lot, very nice work!

@spbnick
Copy link
Member

spbnick commented Jul 1, 2019

BTW, could it be that calibration is enabling the full resolution?

@Korvox
Copy link
Author

Korvox commented Jul 9, 2019

BTW, could it be that calibration is enabling the full resolution?

Could be, I was doing diagnostics on it this last weekend. I'm on "vacation" the rest of July though, so I won't be around to do hardware testing till August. I should have all the changes in and the tablet info prepared the first weekend next month though.

@spbnick
Copy link
Member

spbnick commented Jul 9, 2019

Sounds good! No problem at all. I'm taking a vacation too, BTW.

@Korvox
Copy link
Author

Korvox commented Aug 5, 2019

Back from vacation so Ima work to wrap this up this week.

BTW, what happens if you don't send that, what's the difference?

The interface doesn't work without that magic packet.

✓ Tablet info pull request made.

I would check there is no setting in the windows driver to increase the resolution, and you're using the latest driver

I'll get access to a non-VM Windows install this week to run more tests on and see if I can't get the resolution to full.

Could you check again, and also see how the pen position behaves at those extreme angles, with tilt support or not?

A lot of their reviewers actually bring it up as a problem. Heres one example, but it seems fairly consistent across reviewers. Maybe they left it out to keep a market for their larger, more expensive devices?

you can simply send the request with hid_hw_output_report, and then handle the response in uclogic_raw_event

That seems like it would be extremely ugly to have the params init not actually initialize the interface - you would have a one-off event containing the response packet which would just be an extra conditional in every event parse to check for. And its really only that if that packet is received in proper form than the interface is active - you won't get anything until its sent otherwise from interface 2. In practice if the init fails then nothing is ever received anyway and the tablet does nothing - the only reason to verify the response is for correctness' sake and because it could theoretically let you retry the init packet until it works (or maybe fall back to the bizarre default interfaces?).

Everything else is mostly on hold until after I can see what the display settings do under a probe on an actual Windows machine. Once I get those diagnostics (tomorrow, I hope!) I'll post the revised patch.

@Korvox
Copy link
Author

Korvox commented Aug 6, 2019

Got to that legitimate Windows machine to test the tablet on, albeit the results aren't that interesting - here are all the Wireshark captures doing various things (the tablet is on bus 1.3.3).

The display calibration isn't using the USB interface at all and seems to just do Windows display manager color adjustment / rotation / etc. Resolution never changes, tilt doesn't follow (as expected), and theres no magic sauce here to change behavior or make anything work. In particular, the "corners" test was done after a reboot and all the knobs I could tweak were tweaked and the tablet still only reports coordinates at a resolution of 35689x20598. So either this specific unit is running at half resolution or the marketing is just bunk.

I'll get the base patch into a mergable state as soon as I am able, and I'll split out the activation packet config and tilt support into their own separate commits.

@Korvox Korvox force-pushed the master branch 3 times, most recently from 00cc524 to a2ebbb6 Compare August 25, 2019 01:20
@Korvox
Copy link
Author

Korvox commented Aug 25, 2019

Finally got some time to clean this up, I rebased to two commits for now (I have the tilt stuff in a branch I'll fix up once this is merged). Its in two commits because no matter what I try I cannot get the tablet buttons to show up if I write their report descriptor as buttons and not as keys.

Several other tablets do use keypads for their pad buttons, but they only have up to 8 of them and use Leftcontrol to Right GUI at the end of the key space. This thing has 10 buttons and my attempt to have the "wheel" be a relative control just had me getting irq status -75 which seems the input subsystem doesn't like treating buttons as relative values. So it looks proper to treat the two wheel buttons as, well, buttons. Or keys. But not as a relative control. Which then begets the question of what keys buttons 9 and 10 would be if the de facto strategy is to use the 8 buttons at the end of the non-reserved keyspace, and the two keys preceding them are... also reserved.

I only have a Huion tablet that uses the keypad behavior to inspect locally so the first commit is what I assume the button style is "supposed" to look like while the second is what I'm actually using to test the thing because I actually get working buttons that way. So feel free to merge the first commit alone.

Its passing Travis, what else needs doing?

Edit: I have tilt compensation on a branch in my fork here

@lambferatu
Copy link

Hi @Korvox , I was testing your fork and can confirm the pen nib is aligned with the cursor and the tilt seems to be working fine, I can even configure the mapping, calibration and pen pressure through the KDE Graphic Tablet configuration GUI, however I can't get the keys to work using the keypad code nor using the button code from your first commit ( I tried using the KDE gui and the xsetwacom command). Am I missing something? Does it need to add anything to the xorg conf file?

@Korvox
Copy link
Author

Korvox commented Aug 29, 2019

Same on my end trying out the wacom driver, but I've been mostly developing it on libinput where the function keys variant works. I based the report descriptor off the already existing ones so I'm wondering what both drivers aren't liking about having button maps because xinput reports no buttons under any driver (including evdev, which should at least recognize a keyboard). I'm wondering if it might have something to do with this tablets ids not showing up in any of the udev tables.

This did lead me to test out the tilt behavior again after calibrating on wacom properly and realizing that I need to account for the rotation of the pen in the tilt calculation, basically the offset given the two angles is length = height * tan(∠x), width = height * tan(∠y), d = sqrt(8) / 4, x = ± length * d, y = ± height * d for any time where both angles are > 0.

I'll update the patch tomorrow though since I just spent two hours using matplotlib and hand math to find the intersections of an elipse and line because I fail to realize the Internet exists.

Though if I may ask a favor can you post your uclogic-probe results? I just want to verify XP-Pen is really advertising this tablet as being double its actual resolution. Though if the tilt support was working with the hardcoded dimensions that probably already tells me the answer...

Edit: I lied and fixed the tilt support instead of going to bed. Its 3:30am. Do try it out though and see if its as accurate as its coming up on my end! The only real variable thing I want to check for is sensor height - its hard to accurately gauge how high above the tablet surface the pen actually tracks at, I'm currently using 1.8mm in my script that generates the tangent table.

Edit 2: The buttons should be working under wacom now, it seems to really want a report descriptor with a top level keypad usage. Still need to figure out the button mapping on libinput but thats not much of a blocker.

As it is its looking pretty close to merge ready for the full version with tilt included, just let me know when you want to actually do the merge and I'll squash the branch onto my master. I'll do one more optimization pass on the tilt handling before that, there are a lot of unnecessary variables / possibly excess branching.

@lambferatu
Copy link

Here is the output from uclogic-probe, however in the terminal I get "Failed to get string descriptor 0xC8: Input/Output Error" at the end and the tablet gets disconnected.
probe.txt

I was using the code from your last commit on the tilt branch, however the keys still didn't work.

@Korvox
Copy link
Author

Korvox commented Aug 30, 2019

Its incomplete because its not a real uclogic device. Looks like your tablet has the exact same resolution so its good to know its just bizarrely arbitrary dimensions (though its not that arbitrary, 34419x19461 gives it 100 pixels per mm). So XP-Pen is just falsely advertising?

It also shouldn't be totally crashing - one of the string descriptor queries puts it in a legacy emulation mode that makes it show up with usb id 28bd:1227 as a mouse and keyboard:

Screenshot_20190829_201947

I did a few more cleanups I force pushed to my branch recently, but when I run it under the wacom driver I see two devices:

Screenshot_20190829_200907

If its still not working for you as of my latest changes it might be down to udev / x / wacom versioning.

@lambferatu
Copy link

Thanks for the explanations @Korvox, the usb id changed to 28bd:1227 after the uclogic probe crash. It seems that everything is working now, even the keys and the tilt (or at least from what I can see), first I was trying on Manjaro with kernel 5.2 and I couldn't get it to work, but it is working great on Debian with kernel 4.19, not really sure if that has something to do with it. The only thing I can't get to work is the keys configuration from the KDE GUI, but it's not really a problem since it can be done through xsetwacom (leaving it here in case someone runs need the buttons numbers):

#tested in krita
#first 4 buttons, KP_5 is numpad 5
xsetwacom set "UGTABLET 15.6 inch PenDisplay Pad pad" button 1 key /
xsetwacom set "UGTABLET 15.6 inch PenDisplay Pad pad" button 2 key KP_5
xsetwacom set "UGTABLET 15.6 inch PenDisplay Pad pad" button 3 key m
xsetwacom set "UGTABLET 15.6 inch PenDisplay Pad pad" button 8 key Ctrl z

#scroll wheel buttons KP_Add and KP_Subtract to zoom in and out using numpad keys
xsetwacom set "UGTABLET 15.6 inch PenDisplay Pad pad" button 13 key KP_Add
xsetwacom set "UGTABLET 15.6 inch PenDisplay Pad pad" button 14 key KP_Subtract

#last 4 button
xsetwacom set "UGTABLET 15.6 inch PenDisplay Pad pad" button 9 key Ctrl w
xsetwacom set "UGTABLET 15.6 inch PenDisplay Pad pad" button 10 key Ctrl n
xsetwacom set "UGTABLET 15.6 inch PenDisplay Pad pad" button 11 key Shift
xsetwacom set "UGTABLET 15.6 inch PenDisplay Pad pad" button 12 key Ctrl

Thanks @spbnick and @Korvox for the hard work.

@Korvox
Copy link
Author

Korvox commented Aug 30, 2019

@lambferatu if you (or anyone else that happens to have one of these) find the tilt accuracy is even slightly off I'd ask that you tweak the tangent table the tilt function uses to see if you can't get it more accurate. I measured it to 1.8mm but thats just through guesswork. This is the script I use to generate it, just change the value of height.

#!/usr/bin/env python

import math

# height in millimeters
height = 1.8

# pixels per mm
resolution = 100

max = 64;

if __name__ == '__main__':
	for i in range(1, max + 1):
		droop = height - (i * height / (4 * max))
		print(round(math.tan(math.radians(i)) * droop * resolution), ',', sep='', end=' ')

Edit: @spbnick doodled with the full tilt supported version all weekend, probably makes sense to squash this down to two commits (tablet and tilt) and just merge both at once since everything is working.

@Korvox
Copy link
Author

Korvox commented Sep 6, 2019

Figured out it takes a hwdb entry for the pad for it to be recognized under libinput. This entry works, and when this gets merged I'll send it upstream hwdb.

id-input:modalias:input:b0003v28BDp090De0100-e0,1,4*
  ID_INPUT_TABLET=1
  ID_INPUT_TABLET_PAD=1

@gefagan
Copy link

gefagan commented Oct 25, 2019

I'd like to test and give feedback, but I may not be smart enough.

Installed modified digimend kernel drivers, created file /usr/lib/udev/hwdb.d/90-pentablet.hwdb with the lines above, rebooted, opened kde settings => hardware => input devices => graphic tablet, and found nothing detected. xinput shows 3 versions of ugee, and everything works as before digimend install. Which is to say, under opensuse Tumbleweed with kernel 5.3.6, the buttons and dial all work, as does pressure and tilt sensitivity (though not degree of tilt), though no mapping is possible, either of the buttons or of the pen, so it only works right when set to mirror the primary display with the same resolution. -GEF

@Korvox
Copy link
Author

Korvox commented Oct 25, 2019

@gefagan KDE's KCM is only for xf86-input-wacom. You'd have to force the wacom driver with an xinput conf like this:

Section "InputClass"
        Identifier "tablet"
        MatchUSBID "28bd:090d"
        Driver "wacom"
EndSection

The 3 versions of UGEE would be the pad, pen, and tablet device that libinput generates. If possible, run libinput record on the pad to see the kind of key events its generating and preferably post them here. It would be interesting to see if you have one of these that doesn't generate garbage key events on the default interface.

Otherwise check your usb ids to make sure they match 8bd:090d UGTABLET 15.6 inch PenDisplay. If you properly installed the patched driver it would show up in lsmod if the ids are right. And if you do get the driver working via libinput, you can use xinput set-button-map to set the pad and pen buttons.

@gefagan
Copy link

gefagan commented Oct 25, 2019

That was quick! Thanks for yur work on this, Korvox. libinput record generated a lot of paragraphs like this:

  • evdev:
    • [ 39, 897025, 3, 0, 30477] # EV_ABS / ABS_X 30477
    • [ 39, 897025, 3, 1, 5055] # EV_ABS / ABS_Y 5055
    • [ 39, 897025, 3, 26, 24] # EV_ABS / ABS_TILT_X 24
    • [ 39, 897025, 3, 27, 4] # EV_ABS / ABS_TILT_Y 4
    • [ 39, 897025, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +4ms

This was while I was trying my calligraphy hand in inkscape. How long a file do you need?

GEF

@Korvox
Copy link
Author

Korvox commented Oct 25, 2019

@gefagan Thats the pen interface, record the pad and just press the 10 buttons on the tablet body. One of my primary reasons for doing all the custom report descriptors was because the included ones generated garbage key events.

Additionally, just for curiosity, run uclogic-probe and post the results. I'm still baffled XP-Pen is advertising a tablet that really only has half the resolution it claims to.

@gefagan
Copy link

gefagan commented Oct 25, 2019

clarification: libinput gives me 4 choices, as follow:

/dev/input/event14: UGTABLET 15.6 inch PenDisplay Mouse
/dev/input/event15: UGTABLET 15.6 inch PenDisplay Keyboard
/dev/input/event16: UGTABLET 15.6 inch PenDisplay
/dev/input/event17: UGTABLET 15.6 inch PenDisplay

The only one that generates anything interesting is the event16.

@gefagan
Copy link

gefagan commented Oct 25, 2019

Okay, there's a lot here, so elipsises represent the bits I snipped for clarity. I pressed the express keys in order, and after the 4th, turned the dial clockwise and then counterclockwise. Key 7 interrupted the command, so I issued it again and pressed 8, then each of the buttons on the pen:

[code]
purplebox:/home/gef # libinput record
Available devices:...
/dev/input/event14: UGTABLET 15.6 inch PenDisplay Mouse
/dev/input/event15: UGTABLET 15.6 inch PenDisplay Keyboard
/dev/input/event16: UGTABLET 15.6 inch PenDisplay
/dev/input/event17: UGTABLET 15.6 inch PenDisplay
Select the device event number: 15
Recording to 'stdout'.
version: 1
ndevices: 1
libinput:
version: "1.14.1"
git: "unknown"
system:
kernel: "5.3.6-1-default"
dmi: "dmi:bvnInsyde:bvrF.37:bd01/16/2017:svnHP:pnHPNotebook:pvrType1ProductConfigId:rvnHP:rn8221:rvr85.27:cvnHP:ct10:cvrChassisVersion:"
devices:

  • node: /dev/input/event15
    evdev:

    Name: UGTABLET 15.6 inch PenDisplay Keyboard

    ID: bus 0x3 vendor 0x28bd product 0x90d version 0x100

    Supported Events:

    Event type 0 (EV_SYN)

    Event type 1 (EV_KEY)

    Event code 1 (KEY_ESC)

    Event code 2 (KEY_1)

    Event code 3 (KEY_2)...

    Event code 194 (KEY_F24)

    Event code 240 (KEY_UNKNOWN)

    Event type 4 (EV_MSC)

    Event code 4 (MSC_SCAN)

    Event type 20 (EV_REP)

    Event code 0 (REP_DELAY)

    Event code 1 (REP_MAX)

    Properties:

    name: "UGTABLET 15.6 inch PenDisplay Keyboard"
    id: [3, 10429, 2317, 256]
    codes:
    0: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] # EV_SYN
    1: [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, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 113, 114, 115, 116, 117, 119, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 140, 142, 150, 152, 158, 159, 161, 163, 164, 165, 166, 173, 176, 177, 178, 179, 180, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 240] # EV_KEY
    4: [4] # EV_MSC
    20: [0, 1] # EV_REP
    properties: []
    hid: [5, 1, 9, 2, 161, 1, 133, 9, 9, 1, 161, 0, 5, 9, 25, 1, 41, 3, 21, 0, 37, 1, 149, 3, 117, 1, 129, 2, 149, 5, 129, 1, 5, 1, 9, 48, 9, 49, 38, 255, 127, 149, 2, 117, 16, 129, 2, 5, 13, 9, 48, 38, 255, 127, 149, 1, 117, 16, 129, 2, 192, 192, 5, 1, 9, 2, 161, 1, 9, 1, 161, 0, 133, 1, 5, 9, 25, 1, 41, 5, 149, 5, 117, 1, 21, 0, 37, 1, 129, 2, 149, 3, 129, 1, 5, 1, 9, 48, 9, 49, 149, 2, 117, 16, 22, 0, 128, 38, 255, 127, 129, 6, 9, 56, 21, 129, 37, 127, 149, 1, 117, 8, 129, 6, 5, 12, 10, 56, 2, 149, 1, 117, 8, 129, 6, 192, 192, 5, 1, 9, 6, 161, 1, 133, 6, 5, 7, 25, 224, 41, 231, 21, 0, 37, 1, 117, 1, 149, 8, 129, 2, 5, 7, 25, 0, 41, 255, 38, 255, 0, 117, 8, 149, 6, 129, 0, 192 ]
    udev:
    properties:
    • ID_INPUT=1
    • ID_INPUT_KEY=1
    • ID_INPUT_KEYBOARD=1
    • LIBINPUT_DEVICE_GROUP=3/28bd/90d:usb-0000:00:12.0-1
      quirks:
      events:
    • evdev:
      • [ 0, 0, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 0, 0, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 0, 0, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +0ms
        b - evdev:
      • [ 0, 247921, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 0, 247921, 1, 30, 0] # EV_KEY / KEY_A 0 (obfuscated)
      • [ 0, 247921, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +247ms
    • evdev:
      • [ 1, 391767, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 1, 391767, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 1, 391767, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +1144ms
        e - evdev:
      • [ 1, 615785, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 1, 615785, 1, 30, 0] # EV_KEY / KEY_A 0 (obfuscated)
      • [ 1, 615785, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +224ms
    • evdev:
      • [ 2, 639692, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 2, 639692, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 2, 639692, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +1024ms
    • evdev:
      • [ 2, 867504, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 2, 867504, 1, 30, 0] # EV_KEY / KEY_A 0 (obfuscated)
      • [ 2, 867504, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +228ms
    • evdev:
      • [ 3, 903388, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 3, 903388, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 3, 903388, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +1036ms
    • evdev:
    • [ 4, 119482, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
    • [ 4, 119482, 1, 30, 0] # EV_KEY / KEY_A 0 (obfuscated)
    • [ 4, 119482, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +216ms
    • evdev:
      • [ 9, 546702, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 9, 546702, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 9, 546702, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 9, 546702, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 9, 546702, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +5427ms
    • evdev:
      • [ 9, 550684, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 9, 550684, 1, 30, 0] # EV_KEY / KEY_A 0 (obfuscated)
      • [ 9, 550684, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 9, 550684, 1, 30, 0] # EV_KEY / KEY_A 0 (obfuscated)
      • [ 9, 550684, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +4ms
    • evdev:
      • [ 10, 162635, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 10, 162635, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 10, 162635, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 10, 162635, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 10, 162635, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +612ms
    • evdev:
      • [ 10, 166624, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 10, 166624, 1, 30, 0] # EV_KEY / KEY_A 0 (obfuscated)
      • [ 10, 166624, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 10, 166624, 1, 30, 0] # EV_KEY / KEY_A 0 (obfuscated)
      • [ 10, 166624, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +4ms
    • evdev:
      • [ 10, 950546, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 10, 950546, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 10, 950546, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 10, 950546, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 10, 950546, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +784ms
    • evdev:
      • [ 10, 954540, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 10, 954540, 1, 30, 0] # EV_KEY / KEY_A 0 (obfuscated)
      • [ 10, 954540, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 10, 954540, 1, 30, 0] # EV_KEY / KEY_A 0 (obfuscated)
      • [ 10, 954540, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +4ms
    • evdev:
      • [ 11, 426497, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 11, 426497, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 11, 426497, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 11, 426497, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 11, 426497, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +472ms
    • evdev:
      • [ 11, 430467, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 11, 430467, 1, 30, 0] # EV_KEY / KEY_A 0 (obfuscated)
      • [ 11, 430467, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 11, 430467, 1, 30, 0] # EV_KEY / KEY_A 0 (obfuscated)
      • [ 11, 430467, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +4ms
    • evdev:
      • [ 12, 58424, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 12, 58424, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 12, 58424, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 12, 58424, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 12, 58424, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +628ms
    • evdev:
      • [ 12, 62392, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 12, 62392, 1, 30, 0] # EV_KEY / KEY_A 0 (obfuscated)
      • [ 12, 62392, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 12, 62392, 1, 30, 0] # EV_KEY / KEY_A 0 (obfuscated)
      • [ 12, 62392, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +4ms
    • evdev:
      • [ 13, 966172, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 13, 966172, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 13, 966172, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +1904ms
        v - evdev:
      • [ 14, 186147, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 14, 186147, 1, 30, 0] # EV_KEY / KEY_A 0 (obfuscated)
      • [ 14, 186147, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +220ms
    • evdev:
      • [ 16, 241897, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 16, 241897, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 16, 241897, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 16, 241897, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 16, 241897, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +2055ms
        ^Z
        [1]+ Stopped libinput record
        purplebox:/home/gef # libinput record
        Available devices:...
        events:
    • evdev:
      • [ 0, 0, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 0, 0, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 0, 0, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 0, 0, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 0, 0, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 0, 0, 1, 30, 1] # EV_KEY / KEY_A 1 (obfuscated)
      • [ 0, 0, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +0ms
        ^[^N - evdev:
      • [ 0, 208097, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 0, 208097, 1, 30, 0] # EV_KEY / KEY_A 0 (obfuscated)
      • [ 0, 208097, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 0, 208097, 1, 30, 0] # EV_KEY / KEY_A 0 (obfuscated)
      • [ 0, 208097, 4, 4, 30] # EV_MSC / MSC_SCAN 30 (obfuscated)
      • [ 0, 208097, 1, 30, 0] # EV_KEY / KEY_A 0 (obfuscated)
      • [ 0, 208097, 0, 0, 0] # ------------ SYN_REPORT (0) ---------- +208ms
        [/code]

@Korvox
Copy link
Author

Korvox commented Oct 25, 2019

Your results are accurate to what I've seen - the default keyboard interface generates garbage key events and codes. I'm pretty sure its designed for coverage to use as an early boot device keyboard so that if you smash all the buttons one of them will probably do something you want.

@gefagan
Copy link

gefagan commented Oct 25, 2019

standby, had to find a version of libusbx before I could make uclogic-tools install, and now I have to figure out how to use it.

@gefagan
Copy link

gefagan commented Oct 25, 2019

Is this what you wer asking for?

purplebox:/home/gef # uclogic-probe 001 004
M 55 00 47 00 54 00 41 00 42 00 4C 00 45 00 54 00
P 54 00 41 00 42 00 4C 00 45 00 54 00

@gefagan
Copy link

gefagan commented Oct 25, 2019

Otherwise check your usb ids to make sure they match 8bd:090d UGTABLET 15.6 inch PenDisplay. If you properly installed the patched driver it would show up in lsmod if the ids are right.

OK, no show. lsmod|grep 090d yields nada. So that means I didn't install patched driver correctly, eh? What I did was unzip into /opt, change to that directory, opened a terminal and typed make dkms_install, yielding a string of output that mostly said it's installing nothing because my kernel already has stuff, but I can override by specifying --force.

So, "make dkms_install --force" is the wrong syntax. Do you know where the switch goes?

@gefagan
Copy link

gefagan commented Oct 25, 2019

"Meanwhile, to fix the issues, you can apply these yourself, or execute the following command:

sudo sed -i
-e '/^get_module_verinfo()/,+3 s/<unset res$|<res=()$/res=("" "" "")/'
/usr/sbin/dkms

Be aware that the operation of the above command is inexact, and might not work, or might break DKMS. "

Worked for me, however I still don't have any output from lsmod that looks like 090d.

@Korvox
Copy link
Author

Korvox commented Oct 25, 2019

@gefagan lsmod would have hid_uclogic in it, not the actual vendor ids - the point is that if your vendor ids match (they do) and you have the modified driver available via dkms (you should) it would show up with the tablet attached because the kernel would load the hid_uclogic driver for the device.

Also that uclogic-probe seems incomplete, it only has the manufacturer and product. It should print several lines pf additional hex with a leading S.

Also note that uclogic-probe can bork the tablet - the device node can change, the name, the usb ids, etc. It queries a few magic numbers that put the tablet in compatibility modes that don't work. But the first run freshly attached should work (and if the tablet gets borked just replug it).

@gefagan
Copy link

gefagan commented Oct 25, 2019

Also note that uclogic-probe can bork the tablet

Any chance this could be more than temporary?

The first time I ran uclogic-probe, I did get a bit more output, but I wasn't sure I'd tested the right thing so I moved it to a different usb port, checked what changed, and probed that.

Since then, re-plug, re-boot, reboot tablet with long wait, no different tha what I posted. Also, tablet doesn't work anymore. Vendor-supplied driver says it's disconnected, both in linux and win10 vbox, both this laptop and another that I haven't been experimenting on. lsmod | grep uclogic returns naught.

Thanks Korvox for quick and frequent replies, and for your effort to make a better driver for my tablet than the vendor will supply. Beer money's about all I can afford, so lemme know where/how best to send it.

It's midnight my time, think I'll turn in and hope this works tomorrow night. See you here with my results. -GEF

@gefagan
Copy link

gefagan commented May 9, 2020

Y'know, the driver from xp-pen does a passable job with the buttons, but it doesn't support tilt. Is it possible to run that driver for the buttons but overrider it to use digimend for the stylus?

@Korvox
Copy link
Author

Korvox commented May 9, 2020

I could update my branch to make sure the buttons still work on top of the latest upstream, but I've been using the buttons on and off fine for the better part of a year now.

Just remember that a lot of programs won't "handle" the buttons right without some kind of input system level configuration. XInput / Libinput / etc will call them Tablet Pad Button events and at least Qt doesn't recognize them as generic buttons. They show up like this:

 event8   TABLET_PAD_BUTTON +9.129s       1 pressed (mode 0)
 event8   TABLET_PAD_BUTTON +9.251s       1 released (mode 0)
 event8   TABLET_PAD_BUTTON +10.589s      2 pressed (mode 0)
 event8   TABLET_PAD_BUTTON +10.741s      2 released (mode 0)
 event8   TABLET_PAD_BUTTON +11.355s      3 pressed (mode 0)
 event8   TABLET_PAD_BUTTON +11.469s      3 released (mode 0)
 event8   TABLET_PAD_BUTTON +12.857s      9 pressed (mode 0)

I am currently trying to fix this on the side. I've been working on a KCM to configure libinput tablets over here that will handle mapping the buttons to normal keys on X and Wayland. Eventually. Only just started working on it again after a work related hiatus recently.

If you have Firefox you can test if they work without configuration. The top 3 should act like mouse buttons by default. Not sure if its specific to their input handling or its generic over GTK.

@gefagan
Copy link

gefagan commented May 9, 2020

Thanks Korvox. I totally understand a work-related hiatus. Buttons worked fine for me until kernel 5.3.12; presently on 5.6.8. In general I find fewer problems with rolling than point release, because any problems that show up get fixed fast. Given a choice between buttons (vendor driver) and tilt (digimend), for now I'll take tilt (for calligraphy) and reach over to my keyboard for ctrl-z. Or maybe I'll map ctrl-z to one of the stylus buttons because they work fine.

That said, I really like the way the Windows driver supports cycling through multiple functions for the dial, and I'm thinking that could be replicated with a bash script. Frex, sometmes zooming is useful, sometimes a scroll wheel is useful, and for animation if I ever get into that, I've heard recommendations that the scroll wheel should be mapped to move through the timeline.

@miniskipper
Copy link

Wow I'm now finally able to use PEN and PAD and also to map the buttons :)
Big THANKS!

grafik

@alfazaz
Copy link

alfazaz commented May 16, 2020

Hello !

I have an XP-Pen artist 12 Pro which seems to be very close to the XP-Pen artist 15.6 Pro (size change but pad buttons seem to be the same). I also saw in config.xml of XP-Pen linux driver (pentablet) that options for the 12 Pro are the same of 15.6 Pro (they are under the item)...

Could you give guidelines to be able to make it works with your experience of 15.6 Pro on this thread :

#351

(I'm on archlinux and I can give you as many infos as you need on the precedent thread...).

@alfazaz
Copy link

alfazaz commented May 23, 2020

Sorry for multiple posts but this driver does it still works on 5.6.x kernel ?

I tried it on my XP PEN Artist 12 Pro (after many adaptations/tries) without any success (on kernels 5.6.13 and 5.6.14 now). I'm getting kernel: usb 1-2: input irq status -75 received messages (see #351 for details ; I don't know how to fight this problem...).

I would like to know if you have the same problem on your Artist 15.6 Pro (with 5.6.x kernel). Thanks.

@Korvox
Copy link
Author

Korvox commented Jul 14, 2020

I got some requests through the grapevine to rebase this off master. Since I heard no real complaints about the tilt handling I just merged it all into one commit. Also changed the name of uclogic_params_init_ugee_xppen_a156p to uclogic_params_init_ugee_xppen_pro since it seems common across several models in the same family.

Edit: Realized testing that tilt compensation was never being run due to changes in control flow of uclogic_raw_event so I just moved it where it works and force pushed the fix. Its a bit ugly there, but it can't move into uclogic_raw_event_pen because it needs to check against vid / pid in hdev.

@Korvox Korvox force-pushed the master branch 2 times, most recently from 983af0d to 7df6ea2 Compare July 15, 2020 08:11
@serratedserenade
Copy link

serratedserenade commented Sep 5, 2020

Heya,

I'm trying to get my 15.6 work, though I can't seem to get the pad keys to show up under xinput list. Is there something I'm doing wrong?

⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Logitech MX Ergo                          id=9    [slave  pointer  (2)]
⎜   ↳ Dygma Raise Consumer Control              id=12   [slave  pointer  (2)]
⎜   ↳ Dygma Raise Mouse                         id=15   [slave  pointer  (2)]
⎜   ↳ Dygma Raise                               id=16   [slave  pointer  (2)]
⎜   ↳ UGTABLET 15.6 inch PenDisplay Mouse touch id=10   [slave  pointer  (2)]
⎜   ↳ UGTABLET 15.6 inch PenDisplay stylus      id=11   [slave  pointer  (2)]
⎜   ↳ UGTABLET 15.6 inch PenDisplay eraser      id=18   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ Dygma Raise Keyboard                      id=13   [slave  keyboard (3)]
    ↳ Dygma Raise System Control                id=14   [slave  keyboard (3)]
    ↳ Logitech MX Ergo                          id=17   [slave  keyboard (3)]
    ↳ Dygma Raise Consumer Control              id=19   [slave  keyboard (3)]

Also what is the UI utility used here? #291 (comment)

@thecookie94
Copy link

thecookie94 commented Sep 13, 2020

Hi there. I own a XP-Pen Artist 13.3 Pro, but as I'm not exactly a developer I don't really know how to get it working based upon your PR. Here is the uclogic-probe output I get from it:

P 31 00 33 00 2E 00 33 00 20 00 69 00 6E 00 63 00 68 00 20 00 50 00 65 00 6E 00 44 00 69 00 73 00 70 00 6C 00 61 00 79 00
S 64 0E 03 B2 72 7E 40 08 01 FF 1F EC 09 00 00
S 65 04 03 00 67
S 6E 0B 03 00 30 00 03 08 01 00 00 00
S 79 10 03 20 20 20 20 20 20 20 20 20 20 20 20 20 20
S 7A 08 03 00 00 00 00 00 00
S 7B 0C 03 48 00 4B 00 20 00 4F 00 6E 00






  |           Manufacturer: UGTABLET
    |                Product: 13.3 inch PenDisplay
 64 |        Params block #1: ??????
    |                          Max X: 29362
    |                          Max Y: 16510
    |                   Max pressure: 8191
    |                     Resolution: 2540
    |
 79 |         Internal model: ???????
 7b |         Buttons status: HK On```

`PID=092B VID=28BD` in nonborked state, the Model Name written on the back is `LPU1302F`.
If ya need anything more to add it, just tell me

@Korvox
Copy link
Author

Korvox commented Sep 14, 2020

@alfazaz has been trying to get the 12 working with some complications and might be able to help on that. Either way you'd want a separate issue for it.

@alfazaz
Copy link

alfazaz commented Sep 14, 2020

@Korvox @thecookie94
Hello !

I tried many things (see #351) but without success... I don't know where is the little difference between XP-Pen Artist 15.6 Pro and XP-Pen Artist 12 Pro and how to find and correct it. I don't know if XP-Pen Artist 13.3 Pro will be easier than 12 Pro to make it work well like 15.6 Pro.

I think a "universal" driver may be possible for all XP-Pen Artist Pro but I'm not competent to make it. :-(

@acatxnamedvirtue
Copy link

acatxnamedvirtue commented Jan 28, 2022

Hi @Korvox !

I've been banging my head against trying to get my Artist 15.6 Pro working for a week or so now. Using your fork and the hwdb entry, I've got the stylus upper button (right click) working finally, but all of the frame buttons no longer do anything.

Interestingly, if I run 'evtest', the button presses are still reported (this is the first button):
Event: time 1643328286.556509, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001 Event: time 1643328286.556509, type 1 (EV_KEY), code 256 (BTN_0), value 1 Event: time 1643328286.556509, -------------- SYN_REPORT ------------ Event: time 1643328286.632534, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001 Event: time 1643328286.632534, type 1 (EV_KEY), code 256 (BTN_0), value 0 Event: time 1643328286.632534, -------------- SYN_REPORT ------------

Do you have any advice here?

Thanks so much for all of your work on this! In the end I think I could deal with not having the pad buttons as long as the right click works, and I have you to thank for that!

@gefagan
Copy link

gefagan commented Jan 29, 2022 via email

@Korvox
Copy link
Author

Korvox commented Jan 29, 2022

I don't actually have the tablet at the moment to check, make sure you follow Peter's instructions on updating hwdb: https://who-t.blogspot.com/2019/02/adding-entries-to-udev-hwdb.html

I know some people have missed steps so they never get mapped, if they show up in evdev than the kernel driver is working properly.

If that doesn't work, try branch #557 it has additional work in it that I haven't reviewed it a while but might correct some bugs.

@gelatinbomb
Copy link

Hi! Is the development for the 15.6 pro still alive?

@Korvox
Copy link
Author

Korvox commented May 20, 2023

This driver works, Digimend never merged it and nobody has tried getting it merged in the kernel directly.

@gelatinbomb
Copy link

Oh well that's a shame. Hopefully at some point it can be merged. For now I use the driver compiled from master and it seems to work except for the tablet side buttons and key mapping in the Kde panel.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.