10月 032015
安卓的触摸屏,目前主要有2个方式驱动:一种是以hid设备的形式,另一种是作为touchscreen注册。对于2者区别,时间关系我没有仔细研究,不过我估计touchscreen可以支持的动作更多,多点支持更好吧。
我这次买了一个hid的设备,驱动的路径就是lichee/drviers/hid/。如果是touchscreen的话,就是lichee/drviers/input/touchscreen/
驱动添加步骤如下:
- 在hid-ids.h中加入设备的vid pid,如:
#define
USB_VENDOR_ID_WF 0xFFF0
#define
USB_DEVICE_ID_WF_SCREEN 0x5D01 - 在hid-multitouch.c->mt_devices[] 中加入厂家和设备,如:
{
.driver_data = MT_CLS_DEFAULT,
HID_USB_DEVICE(USB_VENDOR_ID_WF,
USB_DEVICE_ID_WF_SCREEN)
} - 在hid-core.c->hid_have_special_driver[]中加入HID_USB_DEVICE(VID,PID),如:
{HID_USB_DEVICE(USB_VENDOR_ID_WF,USB_DEVICE_ID_WF_SCREEN)} - 在内核的menuconfig中开启HID Multitouch panels
- 编译内核
- 修改android/device/softwinner/kylin-cubieoard4.mk 把驱动文件加入system/usr/idc
打开文件之后,找到有其他设备配置,比如蓝牙或者wifi配置的位置,增加配置:
PRODUCT_COPY_FILES +=\
【idc文件路径】:system/usr/idc/idc文件名
红外触摸屏hid的驱动文件是通用的,只需要把下面的内容复制一份,以Vendor_vid_Product_pid.idc的形式保存即可。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# Filename:Vendor_FFF0_Product_05D1.idc
# My TouchScreen Device configuration file.
touch.deviceType = touchScreen
touch.orientationAware = 1
device.internal = 1
keyboard.layout = qwerty
keyboard.characterMap = qwerty2
keyboard.orientationAware = 1
keyboard.builtIn = 1
cursor.mode = navigation
cursor.orientationAware = 1如果用的是电容或者电阻屏的,可以参考:http://m.blog.csdn.net/blog/houyizi337825770/8481899
- 编译android源码,pack之后就可以用触摸屏啦!
插曲:
当初买触摸屏,想在电视机上也能够使用。结果淘宝上问了半天,大家都说不可以。可是触摸屏买回来发现是hid驱动的,让我心里又燃起了火焰,想要试一下电视机到底是否支持。毕竟hid就是个鼠标嘛~结果是喜忧参半。
喜:插上去可以用
忧:有鼠标光标,且单击无反映,放大是单击动作
后来看到一个博客,这位大哥就是要给TV做触摸屏,其中提到了一句:
目前的kernel中都是自带了usbtouchscreen驱动的,我的版本3.1.10
源码位于:/kernel/drivers/input/touchscreen/usbtouchscreen.c
从这个路径可以看出所属驱动分支,我这边平台本身是没放开的,并没有编译进kernel,谁会想到触摸电视呢~
和我预期中类似,androidTV并没有把这个代码编译进kernel。看来还是要给电视机配个开发板才行啦~
楼主您好 我是新手 想问如果要在CB4上使用10寸的触摸屏 有好推荐的吗? 驱动只需要根据你写的就可以了?
不知道你想用红外的还是电容的,我目前用红外的比较多。现在电容屏的接口有好几种,如果是usb的一般都是可以直接用,没有驱动的话可以根据我说的加。其他形式的估计会复杂点,我没弄过