WinCE5.0 SMDK2410 BSP在GEC2410开发板上的移植(5)-TouchPanel驱动

SMDK2410默认已经把TouchPanel的驱动实现了,在/PUBLIC/COMMON/OAK/CSP/ARM/SAMSUNG/S3C2410X/TOUCH/下,这个驱动不需要再进行修改.这里只介绍移植过程,具体的分析以后在写.

通过EBoot从PB把OS下载到内存中运行,然后会发现可以点击,但是坐标不对,我们需要进行触摸屏坐标的调整.
一.触摸屏坐标调整
1.在PB File-New Project or File,下添加一个新的空的WCE Application工程Touchadjust,然后在PB Projects目录下就可以看到新的工程了.
2.创建一个新的cpp文件touchadjust.cpp,添加代码为:

实际上就调用了一个函数TouchCalibrate(),运行这个函数屏幕会出现十字标志让你触摸进行坐标的调整.
编译时需要把StdAfx.h和pwinuser.h拷贝到该工程下.

3.重新生成系统镜像,下载到开发板运行,点击Target-Run Program选择touchadjust.exe运行就可以进行触摸屏坐标调整了.
或者在左边的命令行中运行:
Windows CE>s touchadjust
一样可以运行该程序.
4.调整好了,可以看到点击触摸屏位置都正确了,为了不用每次系统启动都要手动调整,我们需要把该坐标值保存到注册表中.
选择Tools-Remote Registry Editor,连上设备后可以看到系统里的注册表:
找到[HKEY_LOCAL_MACHINE/HARDWARE/DEVICEMAP/TOUCH/CalibrationData],将里面的坐标值复制下来,拷贝到BSP下的platform.reg文件中:
[HKEY_LOCAL_MACHINE/HARDWARE/DEVICEMAP/TOUCH]
  "MaxCalError"=dword:7
; portrait
  "CalibrationData"="480,636 866,128 92,131 90,1143 865,1135 "
; Landscape
;   "CalibrationData"="515,503 763,748 258,749 269,255 764,255 "
; @CESYSGEN ENDIF CE_MODULES_POINTER
5.重新Sysgen,以后每次启动坐标就正确了.

二.修改TouchPanel驱动的路径
这样的触摸屏驱动已经可以正常使用了,但是我想把驱动从CSP目录下复制到Platform的BSP目录下,这样可以进行修改调试,同时又不修改CSP下的代码.
1.将CSP下的Touch目录复制到/PLATFORM/GEC2410/SRC/COMMON/S3C2410X/TOUCH/
2.修改上层dir文件添加该目录
DIRS=/
 display/
 TOUCH

3./PUBLIC/COMMON/OAK/INC/touch.def到/PLATFORM/GEC2410/SRC/COMMON/S3C2410X/TOUCH/,并改名为s3c2410x_touch.def
4.修改source文件,将其编译为dll,原来的source文件只编译成lib,生成dll在/PUBLIC/COMMON/CESYSGEN/makefile中定义,我们把这两块内容都集中到现在的source文件

TARGETNAME=s3c2410x_touch
RELEASETYPE=PLATFORM
TARGETTYPE=DYNLINK

DLLENTRY=TouchPanelDllEntry

PREPROCESSDEFFILE=1
DEFFILE=s3c2410x_touch.def

INCLUDES=../inc

TARGETLIBS= /
    $(_COMMONSDKROOT)/lib/$(_CPUINDPATH)/coredll.lib

SOURCELIBS= /
 $(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/tch_cal.lib /
 $(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/tchmdd.lib /
 $(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/ceddk.lib /

  
SOURCES=s3c2410x_touch.cpp
5.编译,你会发现错误:
BUILD: [01:0000000041:ERRORE] s3c2410x_touch.def : error LNK2001: unresolved external symbol TouchCreateEvent
BUILD: [01:0000000042:ERRORE] s3c2410x_touch.def : error LNK2001: unresolved external symbol TouchGetFocusWnd
BUILD: [01:0000000043:ERRORE] s3c2410x_touch.def : error LNK2001: unresolved external symbol TouchGetLastTouchFocusWnd
BUILD: [01:0000000044:ERRORE] s3c2410x_touch.def : error LNK2001: unresolved external symbol TouchGetQueuePtr
BUILD: [01:0000000045:ERRORE] s3c2410x_touch.def : error LNK2001: unresolved external symbol TouchGetValue
BUILD: [01:0000000046:ERRORE] s3c2410x_touch.def : error LNK2001: unresolved external symbol TouchRegisterWindow
BUILD: [01:0000000047:ERRORE] s3c2410x_touch.def : error LNK2001: unresolved external symbol TouchReset
BUILD: [01:0000000048:ERRORE] s3c2410x_touch.def : error LNK2001: unresolved external symbol TouchSetValue
BUILD: [01:0000000049:ERRORE] s3c2410x_touch.def : error LNK2001: unresolved external symbol TouchUnregisterWindow
原因是s3c2410x_touch.def里定义的CESYSGEN下的函数没有实现,但是在CSP编译时确没有错误.WCESHELLFE_MODULES_MSTRANSCRIBER或者SHELLW_MODULES_TRANSCRIBER都没有定义,为什么这里编译确认为其有效,一直没找到原因.
但是没有关系注释掉Touch这些函数名,因为实际并不会使用
LIBRARY  TOUCH

EXPORTS
 STDAPI(TouchPanelGetDeviceCaps, 8);
 STDAPI(TouchPanelEnable,4);
 STDAPI(TouchPanelDisable,0);
 STDAPI(TouchPanelSetMode, 8);
 STDAPI(TouchPanelReadCalibrationPoint, 8);
 STDAPI(TouchPanelReadCalibrationAbort, 0);
 STDAPI(TouchPanelSetCalibration, 20);
 STDAPI(TouchPanelCalibrateAPoint, 16);
 STDAPI(TouchPanelPowerHandler, 4);
; @CESYSGEN IF WCESHELLFE_MODULES_MSTRANSCRIBER || SHELLW_MODULES_TRANSCRIBER
; TouchReset
; TouchRegisterWindow
; TouchUnregisterWindow
; TouchSetValue
; TouchGetValue
; TouchCreateEvent
; TouchGetFocusWnd
; TouchGetLastTouchFocusWnd
; TouchGetQueuePtr
; @CESYSGEN ENDIF 
然后在编译就OK了.生成新的系统镜像可以发现使用了是新的touch.dll

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值