📄 ts_ret.c
字号:
#define _GNU_SOURCE#include <stdio.h>#include <errno.h>#include <fcntl.h>#include <unistd.h>#include <stdlib.h>#include <signal.h>#include <sys/poll.h>#include <sys/ioctl.h>static volatile sig_atomic_t __io_canceled = 0;static void sig_hup(int sig){}static void sig_term(int sig){ __io_canceled = 1;}typedef struct{ unsigned short pressure; unsigned short x; unsigned short y; unsigned short pad;}TS_RET;void Print_Ts_ret (const TS_RET pbuf);int main ( int argc, char* argv[] ){ TS_RET buf = {0}; struct sigaction sa; struct pollfd p; sigset_t sigs; int i, ts, len; ts = open ("/dev/touchscreen/0raw", O_RDONLY|O_NDELAY); if ( ts < 0 ) { fprintf ( stderr, "Can not open Touchscreen\n" ); exit (1); } memset(&sa, 0, sizeof(sa)); sa.sa_flags = SA_NOCLDSTOP; sa.sa_handler = SIG_IGN; sigaction(SIGCHLD, &sa, NULL); sigaction(SIGPIPE, &sa, NULL); sa.sa_handler = sig_term; sigaction(SIGTERM, &sa, NULL); sigaction(SIGINT, &sa, NULL); sa.sa_handler = sig_hup; sigaction(SIGHUP, &sa, NULL); sigfillset(&sigs); sigdelset(&sigs, SIGCHLD); sigdelset(&sigs, SIGPIPE); sigdelset(&sigs, SIGTERM); sigdelset(&sigs, SIGINT); sigdelset(&sigs, SIGHUP); p.fd = ts; p.events = POLLIN | POLLERR | POLLHUP; while (!__io_canceled) { p.revents = 0; if (poll(&p, 1, 500) < 1) continue; len = read( ts, &buf, sizeof(buf)); if (len < 0) break; Print_Ts_ret ( buf ); } close(ts); return 0;}void Print_Ts_ret ( const TS_RET pbuf){ printf ("--------------\n"); printf ("Pressure: %d\n", pbuf.pressure ); printf ("Location X: %d\n", pbuf.x ); printf ("Location Y: %d\n", pbuf.y ); printf ("Pad status: %d\n", pbuf.pad );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -