Skip to content
This repository has been archived by the owner on Nov 11, 2021. It is now read-only.

Commit

Permalink
Quick hack to get GfxTablet working with Gimp 2.8 on kernel 4.17
Browse files Browse the repository at this point in the history
  • Loading branch information
tonyg committed Nov 19, 2018
1 parent babd92a commit 8c2421b
Showing 1 changed file with 50 additions and 19 deletions.
69 changes: 50 additions & 19 deletions driver-uinput/networktablet.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@ int udp_socket;

void init_device(int fd)
{
struct uinput_user_dev uidev;

// enable synchronization
if (ioctl(fd, UI_SET_EVBIT, EV_SYN) < 0)
die("error: ioctl UI_SET_EVBIT EV_SYN");
Expand All @@ -52,23 +50,56 @@ void init_device(int fd)
if (ioctl(fd, UI_SET_ABSBIT, ABS_PRESSURE) < 0)
die("error: ioctl UI_SETEVBIT ABS_PRESSURE");

memset(&uidev, 0, sizeof(uidev));
snprintf(uidev.name, UINPUT_MAX_NAME_SIZE, "Network Tablet");
uidev.id.bustype = BUS_VIRTUAL;
uidev.id.vendor = 0x1;
uidev.id.product = 0x1;
uidev.id.version = 1;
uidev.absmin[ABS_X] = 0;
uidev.absmax[ABS_X] = UINT16_MAX;
uidev.absmin[ABS_Y] = 0;
uidev.absmax[ABS_Y] = UINT16_MAX;
uidev.absmin[ABS_PRESSURE] = 0;
uidev.absmax[ABS_PRESSURE] = INT16_MAX;
if (write(fd, &uidev, sizeof(uidev)) < 0)
die("error: write");

if (ioctl(fd, UI_DEV_CREATE) < 0)
die("error: ioctl");
{
struct uinput_abs_setup abs_setup;
struct uinput_setup setup;

memset(&abs_setup, 0, sizeof(abs_setup));
abs_setup.code = ABS_X;
abs_setup.absinfo.value = 0;
abs_setup.absinfo.minimum = 0;
abs_setup.absinfo.maximum = UINT16_MAX;
abs_setup.absinfo.fuzz = 0;
abs_setup.absinfo.flat = 0;
abs_setup.absinfo.resolution = 400;
if (ioctl(fd, UI_ABS_SETUP, &abs_setup) < 0)
die("error: UI_ABS_SETUP ABS_X");

memset(&abs_setup, 0, sizeof(abs_setup));
abs_setup.code = ABS_Y;
abs_setup.absinfo.value = 0;
abs_setup.absinfo.minimum = 0;
abs_setup.absinfo.maximum = UINT16_MAX;
abs_setup.absinfo.fuzz = 0;
abs_setup.absinfo.flat = 0;
abs_setup.absinfo.resolution = 400;
if (ioctl(fd, UI_ABS_SETUP, &abs_setup) < 0)
die("error: UI_ABS_SETUP ABS_Y");

memset(&abs_setup, 0, sizeof(abs_setup));
abs_setup.code = ABS_PRESSURE;
abs_setup.absinfo.value = 0;
abs_setup.absinfo.minimum = 0;
abs_setup.absinfo.maximum = INT16_MAX;
abs_setup.absinfo.fuzz = 0;
abs_setup.absinfo.flat = 0;
abs_setup.absinfo.resolution = 0;
if (ioctl(fd, UI_ABS_SETUP, &abs_setup) < 0)
die("error: UI_ABS_SETUP ABS_PRESSURE");

memset(&setup, 0, sizeof(setup));
snprintf(setup.name, UINPUT_MAX_NAME_SIZE, "Network Tablet");
setup.id.bustype = BUS_VIRTUAL;
setup.id.vendor = 0x1;
setup.id.product = 0x1;
setup.id.version = 2;
setup.ff_effects_max = 0;
if (ioctl(fd, UI_DEV_SETUP, &setup) < 0)
die("error: UI_DEV_SETUP");

if (ioctl(fd, UI_DEV_CREATE) < 0)
die("error: ioctl");
}
}

int prepare_socket()
Expand Down

0 comments on commit 8c2421b

Please sign in to comment.