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

📄 linear.c

📁 触摸屏的支持源码包 tslib.tar.gz the touch board (embedded linux2.4)
💻 C
字号:
/* *  tslib/plugins/linear.c * *  Copyright (C) 2001 Russell King. * * This file is placed under the LGPL.  Please see the file * COPYING for more details. * * $Id: linear.c,v 1.5 2002/07/11 18:19:55 dlowder Exp $ * * Linearly scale touchscreen values */#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <fcntl.h>#include "tslib.h"#include "tslib-filter.h"struct tslib_linear {	struct tslib_module_info module;	int	swap_xy;// Linear scaling and offset parameters for pressure	int	p_offset;	int	p_mult;	int	p_div;// Linear scaling and offset parameters for x,y (can include rotation)	int	a[7];};static intlinear_read(struct tslib_module_info *info, struct ts_sample *samp, int nr){	struct tslib_linear *lin = (struct tslib_linear *)info;	int ret;	int xtemp,ytemp;	ret = info->next->ops->read(info->next, samp, nr);	//printf ("linear_read get ret:%d\n", ret);	if (ret >= 0) {		int nr;		for (nr = 0; nr < ret; nr++, samp++) {#ifdef DEBUG			printf("BEFORE CALIB--------------------> %d %d %d\n",samp->x, samp->y, samp->pressure);#endif /*DEBUG*/			xtemp = samp->x; ytemp = samp->y;			samp->x = 	( lin->a[2] +					lin->a[0]*xtemp + 					lin->a[1]*ytemp ) / lin->a[6];			samp->y =	( lin->a[5] +					lin->a[3]*xtemp +					lin->a[4]*ytemp ) / lin->a[6];			samp->pressure = ((samp->pressure + lin->p_offset)						 * lin->p_mult) / lin->p_div;			if (lin->swap_xy) {				int tmp = samp->x;				samp->x = samp->y;				samp->y = tmp;			}		}	}	return ret;}static int linear_fini(struct tslib_module_info *info){	free(info);}static const struct tslib_ops linear_ops ={	read:		linear_read,	fini:		linear_fini,};static int linear_xyswap(struct tslib_module_info *inf, char *str, void *data){	struct tslib_linear *lin = (struct tslib_linear *)inf;	lin->swap_xy = (int)data;	return 0;}static const struct tslib_vars linear_vars[] ={	{ "noxyswap",	(void *)0, linear_xyswap },	{ "xyswap",	(void *)1, linear_xyswap }};#define NR_VARS (sizeof(linear_vars) / sizeof(linear_vars[0]))struct tslib_module_info *mod_init(struct tsdev *dev, const char *params){	struct tslib_linear *lin;	struct stat sbuf;	int pcal_fd;	int a[7];	char pcalbuf[200];	int index;	char *tokptr;	char *calfile=NULL;	char *defaultcalfile = "/etc/pointercal";	lin = malloc(sizeof(struct tslib_linear));	if (lin == NULL)		return NULL;	lin->module.ops = &linear_ops;// Use default values that leave ts numbers unchanged after transform	lin->a[0] = 1;	lin->a[1] = 0;	lin->a[2] = 0;	lin->a[3] = 0;	lin->a[4] = 1;	lin->a[5] = 0;	lin->a[6] = 1;	lin->p_offset = 0;	lin->p_mult   = 1;	lin->p_div    = 1;	/*	 * Check calibration file	 */	if( (calfile = getenv("TSLIB_CALIBFILE")) == NULL) calfile = defaultcalfile;	if(stat(calfile,&sbuf)==0) {		pcal_fd = open(calfile,O_RDONLY);		read(pcal_fd,pcalbuf,200);		lin->a[0] = atoi(strtok(pcalbuf," "));		index=1;		while(index<7) {			tokptr = strtok(NULL," ");			if(*tokptr!='\0') {				lin->a[index] = atoi(tokptr);				index++;			}		}#ifdef DEBUG		printf("Linear calibration constants: ");		for(index=0;index<7;index++) printf("%d ",lin->a[index]);		printf("\n");#endif /*DEBUG*/		close(pcal_fd);	}					/*	 * Parse the parameters.	 */	if (tslib_parse_vars(&lin->module, linear_vars, NR_VARS, params)) {		free(lin);		return NULL;	}	return &lin->module;}

⌨️ 快捷键说明

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