⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ts_test.c

📁 tslib触摸屏校准源代码
💻 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 + -