📄 touch.c.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 + -