📄 ts_test.c
字号:
/* * tslib/src/ts_test.c * * Copyright (C) 2001 Russell King. * * This file is placed under the GPL. Please see the file * COPYING for more details. * * $Id: ts_test.c,v 1.6 2004/10/19 22:01:27 dlowder Exp $ * * Basic test program for touchscreen library. */#include "config.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <signal.h>#include <sys/fcntl.h>#include <sys/ioctl.h>#include <sys/mman.h>#include <sys/time.h>#include "tslib.h"#include "fbutils.h"static int palette [] ={ 0x000000, 0xffe080, 0xffffff, 0xe0c0a0, 0x304050, 0x80b8c0};#define NR_COLORS (sizeof (palette) / sizeof (palette [0]))struct ts_button { int x, y, w, h; char *text; int flags;#define BUTTON_ACTIVE 0x00000001};/* [inactive] border fill text [active] border fill text */static int button_palette [6] ={ 1, 4, 2, 1, 5, 0};#define NR_BUTTONS 2static struct ts_button buttons [NR_BUTTONS];static void sig(int sig){ close_framebuffer(); fflush(stderr); printf("signal %d caught\n", sig); fflush(stdout); exit(1);}static void button_draw (struct ts_button *button){ int s = (button->flags & BUTTON_ACTIVE) ? 3 : 0; rect (button->x, button->y, button->x + button->w - 1, button->y + button->h - 1, button_palette [s]); fillrect (button->x + 1, button->y + 1, button->x + button->w - 2, button->y + button->h - 2, button_palette [s + 1]); put_string_center (button->x + button->w / 2, button->y + button->h / 2, button->text, button_palette [s + 2]);}static int button_handle (struct ts_button *button, struct ts_sample *samp){ int inside = (samp->x >= button->x) && (samp->y >= button->y) && (samp->x < button->x + button->w) && (samp->y < button->y + button->h); if (samp->pressure > 0) { if (inside) { if (!(button->flags & BUTTON_ACTIVE)) { button->flags |= BUTTON_ACTIVE; button_draw (button); } } else if (button->flags & BUTTON_ACTIVE) { button->flags &= ~BUTTON_ACTIVE; button_draw (button); } } else if (button->flags & BUTTON_ACTIVE) { button->flags &= ~BUTTON_ACTIVE; button_draw (button); return 1; } return 0;}static void refresh_screen (){ int i; fillrect (0, 0, xres - 1, yres - 1, 0); put_string_center (xres/2, yres/4, "TSLIB test program", 1); put_string_center (xres/2, yres/4+20,"Touch screen to move crosshair", 2); for (i = 0; i < NR_BUTTONS; i++) button_draw (&buttons [i]);}int main(){ struct tsdev *ts; int x, y; unsigned int i; unsigned int mode = 0; char *tsdevice=NULL; signal(SIGSEGV, sig); signal(SIGINT, sig); signal(SIGTERM, sig); if ((tsdevice = getenv("TSLIB_TSDEVICE")) == NULL) {#ifdef USE_INPUT_API tsdevice = strdup ("/dev/input/event0");#else tsdevice = strdup ("/dev/touchscreen/ucb1x00");#endif /* USE_INPUT_API */ } ts = ts_open (tsdevice, 0); if (!ts) { perror (tsdevice); exit(1); } if (ts_config(ts)) { perror("ts_config"); exit(1); } if (open_framebuffer()) { close_framebuffer(); exit(1); } x = xres/2; y = yres/2; for (i = 0; i < NR_COLORS; i++) setcolor (i, palette [i]); /* Initialize buttons */ memset (&buttons, 0, sizeof (buttons)); buttons [0].w = buttons [1].w = xres / 4; buttons [0].h = buttons [1].h = 20; buttons [0].x = xres / 4 - buttons [0].w / 2; buttons [1].x = (3 * xres) / 4 - buttons [0].w / 2; buttons [0].y = buttons [1].y = 10; buttons [0].text = "Drag"; buttons [1].text = "Draw"; refresh_screen (); while (1) { struct ts_sample samp; int ret; /* Show the cross */ if ((mode & 15) != 1) put_cross(x, y, 2 | XORMODE); ret = ts_read(ts, &samp, 1); /* Hide it */ if ((mode & 15) != 1) put_cross(x, y, 2 | XORMODE); if (ret < 0) { perror("ts_read"); close_framebuffer(); exit(1); } if (ret != 1) continue; for (i = 0; i < NR_BUTTONS; i++) if (button_handle (&buttons [i], &samp)) switch (i) { case 0: mode = 0; refresh_screen (); break; case 1: mode = 1; refresh_screen (); break; } printf("%ld.%06ld: %6d %6d %6d\n", samp.tv.tv_sec, samp.tv.tv_usec, samp.x, samp.y, samp.pressure); if (samp.pressure > 0) { if (mode == 0x80000001) line (x, y, samp.x, samp.y, 2); x = samp.x; y = samp.y; mode |= 0x80000000; } else mode &= ~0x80000000; } close_framebuffer();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -