1
0
Fork 0
mirror of https://github.com/rfc2822/GfxTablet synced 2025-10-03 01:29:17 +02:00

uinput driver: some status messages

This commit is contained in:
Richard Hirner 2013-06-22 14:41:42 +02:00
parent edc3c99a95
commit 7f9be5ecf0
2 changed files with 25 additions and 8 deletions

View file

@ -75,7 +75,7 @@ Part 1: uinput driver
On your PC, either download one of these binaries (don't forget to `chmod a+x` it):
* [uinput-networktablet 64-bit, dynamically linked, tested with Fedora 18 and Ubuntu 12.10](https://github.com/rfc2822/GfxTablet/blob/binaries/uinput-networktablet-x86_64?raw=true)
* [networktablet 64-bit, dynamically linked, tested with Fedora 18 and Ubuntu 12.10](https://github.com/rfc2822/GfxTablet/blob/binaries/networktablet-x86_64?raw=true)
or compile it yourself (don't be afraid, it's only one file)
@ -90,12 +90,13 @@ uinput access, you'll need to do it yourself or just run the driver as root:
`sudo ./networktablet`
Then, `xinput list` should show a "Network Tablet" device.
Then you should see a status message saying the driver is ready. If you do `xinput list` in a separate
terminal, should show a "Network Tablet" device.
You can start and stop (Ctrl+C) the Network Tablet at any time, but please be aware that applications
which use the device may be confused by that and could crash.
`networktablet` will display a dot for every touch/motion event it receives.
`networktablet` will display a status line for every touch/motion event it receives.
Part 2: App

View file

@ -2,6 +2,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
@ -17,6 +18,9 @@
}
int udp_socket;
void init_device(int fd)
{
struct uinput_user_dev uidev;
@ -85,19 +89,29 @@ void send_event(int device, int type, int code, int value)
error("error: write()");
}
void quit(int signal) {
close(udp_socket);
}
int main(void)
{
int device, socket;
int device;
struct event_packet ev_pkt;
if ((device = open("/dev/uinput", O_WRONLY | O_NONBLOCK)) < 0)
die("error: open");
init_device(device);
socket = prepare_socket();
udp_socket = prepare_socket();
while (recv(socket, &ev_pkt, sizeof(ev_pkt), 0) >= 9) { // every packet has at least 9 bytes
printf("GfxTablet driver (protocol version %u) is ready and listening on 0.0.0.0:%u (UDP)\n"
"Hint: Make sure that this port is not blocked by your firewall.\n", PROTOCOL_VERSION, GFXTABLET_PORT);
signal(SIGINT, quit);
signal(SIGTERM, quit);
while (recv(udp_socket, &ev_pkt, sizeof(ev_pkt), 0) >= 9) { // every packet has at least 9 bytes
printf("."); fflush(0);
if (memcmp(ev_pkt.signature, "GfxTablet", 9) != 0) {
@ -132,10 +146,12 @@ int main(void)
}
}
close(udp_socket);
close(socket);
printf("Removing network tablet from device list\n");
ioctl(device, UI_DEV_DESTROY);
close(device);
printf("GfxTablet driver shut down gracefully\n");
return 0;
}