注:本人已购买韦东山老师第三期项目视频,内容来源《数码相框项目视频》,只用于学习记录,如有侵权,请联系删除。
上一节我们使用了多线程的方法去获取标准输入与LCD触摸屏的输入事件,这一节将在此基础上通过在LCD触摸屏上滑动,实现控制电子书的上下翻页。如下图所示,是一个LCD触摸屏,我们通过向左向右滑动控制电子书的上下翻页。那么我们的程序怎么做呢?从按下开始记录按下起始位置的LCD x 坐标,松开后在次记录松开时的LCD x 坐标,然后用松开时的 x 坐标减去按下时的x坐标计算出他们的差值,通过差值的正负判断是向左还是向右滑动(正:向右滑动,对应翻上一页的输入事件;负:向左滑动,对应翻下一页的输入事件)
源码只需修改 touchscreen.c 的 TouchScreenGetInputEvent 函数即可,代码如下:
static int TouchScreenGetInputEvent(PT_InputEvent ptInputEvent)
{
struct ts_sample tSamp;
struct ts_sample tSampPress;
struct ts_sample tSampRelease;
int iRet;
int bStart = 0;
int iDelta;
static struct timeval tPreTime; /* 上一次的时间值 */
while(1)
{
/* 读取数据 */
iRet = ts_read(g_ptTSDev, &tSamp, 1); /* 如果无数据就休眠 */
if (iRet == 1)
{
if ((tSamp.pressure > 0) && (bStart == 0))
{
/* 刚按下 */
/* 记录刚开始压下的点 */
tSampPress = tSamp;
bStart = 1;
}
else if (tSamp.pressure <= 0)
{
/* 松开 */
tSampRelease = tSamp;
/* 处理数据 */
if (!bStart)
{
return -1;
}
else
{
iDelta = tSampRelease.x - tSampPress.x;
ptInputEvent->tTime = tSampRelease.tv;
ptInputEvent->iType = INPUT_TYPE_TOUCHSCREEN;
if (iDelta > g_iXres/5)
{
/* 翻到上一页 */
ptInputEvent->iVal = INPUT_VALUE_UP;
}
else if (iDelta < (0 - g_iXres/5))
{
/* 翻到下一页 */
ptInputEvent->iVal = INPUT_VALUE_DOWN;
}
else
{
/* 无法识别 */
ptInputEvent->iVal = INPUT_VALUE_UNKNOW;
}
return 0;
}
}
}
else
{
return -1;
}
}
return 0;
}