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

📄 touch.c.bak

📁 intel pxa270开发板的重要试验:触摸屏驱动程序设计实验
💻 BAK
字号:
#ifndef __INTELPXA255_TS_CAL_C#define __INTELPXA255_TS_CAL_C#include <stdio.h>#include <stdlib.h>#include <linux/fb.h>#include <asm/fcntl.h>#include <linux/input.h>#include <asm/mman.h>#include "touch.h"int touchscreen_fd = 0;							/* touch screen device handle */				ts_event_t	ts_CalPoints[CAL_POINT_NUM];	/* touch screen calibration pBuffer */// Retrieve an average data from touch screen input deviceint Cal_DataAvg(int ts_handler, ts_event_t * ts_avg, unsigned short max_num){	ts_event_t *tmpDataArr;	ts_event_t tmpData;	unsigned short bp, i;	unsigned short count;	long tempX, tempY;	int ret;     static int curr_x = 0, curr_y = 0, curr_p = 0;	static int got_curr_x = 0, got_curr_y = 0;	int got_curr_p = 0;	int next_x, next_y;	int got_next_x = 0, got_next_y = 0;	//int got_tstamp = 0;     struct input_event ev;	// Allocate a buffer for input data		tmpDataArr = (ts_event_t *)malloc(max_num * sizeof(ts_event_t));	if (tmpDataArr == NULL)	{		printf("Error: malloc failed.\n");		return -1;	}//printf("malloc ok.\n");	for (i = 0; i < max_num; i++)	{		tmpDataArr[i].x = 0;		tmpDataArr[i].y = 0;		tmpDataArr[i].pressure = 0;		tmpDataArr[i].flag = -1;	}	// Read a set of data into buffer//printf("<max_num is ok!\n");	count = 0;	do	{		bp = 0;		while (1)		{		//printf("in  bp=%d\n",bp);			memset(&tmpDataArr[bp], 0, sizeof(ts_event_t));			//ret = read(ts_handler, &tmpDataArr[bp], sizeof(ts_event_t));	    ret = read(ts_handler, &ev, sizeof(struct input_event));	    if (ret < sizeof(struct input_event)) break;	    	    	    if (ev.type == EV_ABS) switch (ev.code) {		case ABS_X:			//if (!got_curr_x && !got_curr_y) {				//got_curr_x = 1;				curr_x = ev.value;			//} else {						//got_next_x = 1;				//next_x = ev.value;			//}			break;		case ABS_Y:		    //	if (!got_curr_y) {			//	got_curr_y = 1;				curr_y = ev.value;			//} else {				//got_next_y = 1;				//next_y = ev.value;			//}			break;		case ABS_PRESSURE:			//got_curr_p = 1;			curr_p = ev.value;			break;		}		/* We consider having a complete ts event */		tmpDataArr[bp].x = curr_x;		tmpDataArr[bp].y = curr_y;		tmpDataArr[bp].pressure = curr_p;	    	    	    	    	    	    //printf("ret=%d\n",ret);//printf("tmpDataArr[%d].x=%d\n",bp,curr_x);//printf("tmpDataArr[%d].y=%d\n",bp,curr_y);		//if (tmpDataArr[bp].flag == 2)//printf("tmpDataArr.flag ==2  break!\n");				//break;		//	if (bp < max_num && tmpDataArr[bp].flag == 1)		if (bp < max_num )				bp++;		else			break;		}		count = bp;	} while (count == 0);	tempX =	tempY = 0;	for (bp = 0; bp < count; bp++)	{		tempX += tmpDataArr[bp].x;		tempY += tmpDataArr[bp].y;	}	// Calculate an average value    ts_avg->x = tempX / count;	ts_avg->y = tempY / count;	ts_avg->pressure = 0xffff;	// Release	free(tmpDataArr);}int main(){	char * tsconf_name;	Point Screen_Point[CAL_POINT_NUM];	unsigned short x_max, y_max;	unsigned short i;  	FILE * fp;	i = 0;		touchscreen_fd = open(TOUCHSCREEN_DEV, O_RDONLY);	if (touchscreen_fd < 0)	{		fprintf (stderr, "Cannot open touch screen device [%s].\n", TOUCHSCREEN_DEV);        return -1;    }	else		{		fprintf (stderr, "the  touch screen device [%s]is opened.\n", TOUCHSCREEN_DEV);             fprintf (stderr, "please touch the screen to test the driver is working \n");	}		while (1)	{		Cal_DataAvg(touchscreen_fd, &ts_CalPoints[i], 10);		printf("ts_CalPoints[%d].x = %d\n", i, ts_CalPoints[i].x);		printf("ts_CalPoints[%d].y = %d\n", i, ts_CalPoints[i].y);		i++;		if(i==10)			i=0;	}	close(touchscreen_fd);	return 0;}#endif	// __INTELPXA255_TS_CAL_C

⌨️ 快捷键说明

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