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

📄 testutils.c.svn-base

📁 通用触摸屏驱动库
💻 SVN-BASE
字号:
/* *  tslib/src/ts_getxy.c * *  Copyright (C) 2001 Russell King. * * This file is placed under the GPL.  Please see the file * COPYING for more details. * * $Id: testutils.c,v 1.2 2004/10/19 22:01:27 dlowder Exp $ * * Waits for the screen to be touched, averages x and y sample * coordinates until the end of contact */#include "config.h"#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/time.h>#include "tslib.h"#include "fbutils.h"static int sort_by_x(const void* a, const void *b){	return (((struct ts_sample *)a)->x - ((struct ts_sample *)b)->x);}static int sort_by_y(const void* a, const void *b){	return (((struct ts_sample *)a)->y - ((struct ts_sample *)b)->y);}void getxy(struct tsdev *ts, int *x, int *y){#define MAX_SAMPLES 128	struct ts_sample samp[MAX_SAMPLES];	int index, middle;	do {		if (ts_read_raw(ts, &samp[0], 1) < 0) {			perror("ts_read");			close_framebuffer ();			exit(1);		}			} while (samp[0].pressure == 0);	/* Now collect up to MAX_SAMPLES touches into the samp array. */	index = 0;	do {		if (index < MAX_SAMPLES-1)			index++;		if (ts_read_raw(ts, &samp[index], 1) < 0) {			perror("ts_read");			close_framebuffer ();			exit(1);		}	} while (samp[index].pressure > 0);	printf("Took %d samples...\n",index);	/*	 * At this point, we have samples in indices zero to (index-1)	 * which means that we have (index) number of samples.  We want	 * to calculate the median of the samples so that wild outliers	 * don't skew the result.  First off, let's assume that arrays	 * are one-based instead of zero-based.  If this were the case	 * and index was odd, we would need sample number ((index+1)/2)	 * of a sorted array; if index was even, we would need the	 * average of sample number (index/2) and sample number	 * ((index/2)+1).  To turn this into something useful for the	 * real world, we just need to subtract one off of the sample	 * numbers.  So for when index is odd, we need sample number	 * (((index+1)/2)-1).  Due to integer division truncation, we	 * can simplify this to just (index/2).  When index is even, we	 * need the average of sample number ((index/2)-1) and sample	 * number (index/2).  Calculate (index/2) now and we'll handle	 * the even odd stuff after we sort.	 */	middle = index/2;	if (x) {		qsort(samp, index, sizeof(struct ts_sample), sort_by_x);		if (index & 1)			*x = samp[middle].x;		else			*x = (samp[middle-1].x + samp[middle].x) / 2;	}	if (y) {		qsort(samp, index, sizeof(struct ts_sample), sort_by_y);		if (index & 1)			*y = samp[middle].y;		else			*y = (samp[middle-1].y + samp[middle].y) / 2;	}}void ts_flush (struct tsdev *ts){	/* Read all unread touchscreen data, 	 * so that we are sure that the next data that we read	 * have been input after this flushing.	 */#define TS_BUFFER_MAX 32768	static char buffer [TS_BUFFER_MAX];	read (ts_fd (ts), buffer, TS_BUFFER_MAX);  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -