首页 > 代码库 > 项目中的小bug
项目中的小bug
最近在做电子书项目中,采用select方式输入子系统,运行后发现键盘输入没问题,可是触摸屏却没反应,触摸屏驱动没问题,tslib也移植正确。问题在哪呢?
在代码中加入打印语句:
54 static int isOutOf500ms(struct timeval *ptPreTime, struct timeval *ptNowTime) 55 { 56 int iPreMs; 57 int iNowMs; 58 59 iPreMs = ptPreTime->tv_sec * 1000 + ptPreTime->tv_usec / 1000; 60 iNowMs = ptNowTime->tv_sec * 1000 + ptNowTime->tv_usec / 1000; 61 printf("PreTime %d ms , NowTime%d ms\n",iPreMs,iNowMs); 62 63 return (iNowMs > iPreMs + 500); 64 } 65 66 static int TouchScreenGetInputEvent(PT_InputEvent ptInputEvent) 67 { 68 struct ts_sample tSamp; 69 int iRet; 70 71 static struct timeval tPreTime; 72 printf("PreTime %ld:%ld\n",tPreTime.tv_sec,tPreTime.tv_usec); 73 74 iRet = ts_read(g_tTSDev, &tSamp, 1); 75 printf("tSamp : %ld.%06ld: %6d %6d %6d\n", tSamp.tv.tv_sec, tSamp.tv.tv_usec, tSamp.x, tSamp.y, tSamp.pressure); 76 77 if (iRet < 0) { 78 return -1; 79 } 80 81 if (isOutOf500ms(&tPreTime, &tSamp.tv)) 82 { 83 tPreTime = tSamp.tv; 84 ptInputEvent->tTime = tSamp.tv; 85 ptInputEvent->iType = INPUT_TYPE_TOUCHSCREEN; 86 87 if (tSamp.y < giYres/3) 88 { 89 ptInputEvent->iVal = INPUT_VALUE_UP; 90 } 91 else if (tSamp.y > 2*giYres/3) 92 { 93 ptInputEvent->iVal = INPUT_VALUE_DOWN; 94 } 95 else 96 { 97 ptInputEvent->iVal = INPUT_VALUE_UNKNOWN; 98 } 99 printf("Out 500ms\n");100 printf("Y = %d,giYres = %d\n",tSamp.y,giYres);101 return 0;102 103 }104 else105 {106 printf("In 500ms\n");107 return -1;108 }109 110 111 return 0;112 }
输出结果如下:
观察红色圈中的,PreTime为正,NowTime为负,那么NowTime永远不可能大于PreTime,所以永远返回0,所以触摸屏不会有反应。
在源码中,iPreMs,iNowMs定义为:
int iPreMs;
int iNowMs;
修改为:
unsigned int iPreMs;
unsigned int iNowMs;
运行结果如下:
完美运行。
虽然这只是一个小小的bug,但是我也是经过三天茶饭不思般的思考才找到的,阅读tslib源码库,自己重写代码,也是走了好大的弯路,但是,其中积累的经验也是不可多得的。
项目中的小bug
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。