程序清单 39
static INT __tsClose (TS_DEV *ptsDev) { …… /* * Disable Pen Down Event */ writel(CLEAR_ALL, REG_ADC_IER); API_ThreadForceDelete(&ptsDev->TS_hThread, LW_NULL); API_SemaphoreBDelete(&adc_sem); API_SemaphoreBDelete(&adc_mst); …… }
__tsRead
Read函数得到ADC值并上报。具体实现如程序清单 310所示。
程序清单 310
static ssize_t __tsRead (TS_DEV *ptsDev, touchscreen_event_notify *pnotify, size_t stNbyte) { INTREG iregInterLevel; if (stNbyte == 0) { return (ERROR_NONE); } LW_SPIN_LOCK_QUICK(&ptsDev->TS_slLock, &iregInterLevel); pnotify->ctype = ptsDev->TS_tData.ctype; pnotify->kstat = ptsDev->TS_tData.kstat; pnotify->xanalog = ptsDev->TS_tData.xanalog; pnotify->yanalog = ptsDev->TS_tData.yanalog; printk("%d ix = %d iy = %d\n", __LINE__, ptsDev->TS_tData.xanalog, ptsDev->TS_tData.yanalog); if (ptsDev->TS_tData.kstat & MOUSE_LEFT) { /* 读取到点击事件 */ ptsDev->TS_bIsReadRel = LW_FALSE; /* 需要确保应用读到释放操作 */ } else { ptsDev->TS_bIsReadRel = LW_TRUE; /* 已经读取到释放操作 */ } LW_SPIN_UNLOCK_QUICK(&ptsDev->TS_slLock, iregInterLevel); return (sizeof(touchscreen_event_notify)); }
内核模块加载
当ADC触摸屏驱动完成后,编译生成touch_drv.ko文件,通过tftp服务下载至/lib/modules/路径下,通过执行modulereg touch_drv.ko命令动态加载至内核,如图 34所示:
图 34 modulereg touch_drv.ko动态加载
加载成功后,通过执行modules命令可以查看当前已加载.ko模块,如图 35所示:
图 35查看当前已加载.ko模块测试
在正常加载的情况下,启动任意一个QT程序,进行触控操作,如果正确响应触控事件,说明基本完成移植。