项目中的小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
",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
",tPreTime.tv_sec,tPreTime.tv_usec);
 73 
 74     iRet = ts_read(g_tTSDev, &tSamp, 1);
 75     printf("tSamp : %ld.%06ld: %6d %6d %6d
", 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
");
100         printf("Y = %d,giYres = %d
",tSamp.y,giYres);
101         return 0;
102         
103     }
104     else
105     {
106         printf("In 500ms
");
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源码库,自己重写代码,也是走了好大的弯路,但是,其中积累的经验也是不可多得的。

————————————————————————————————————————————————————————————————————————————— 无他,唯手熟尔。。。
原文地址:https://www.cnblogs.com/ZXNblog/p/4034952.html