Android-4.0支持触摸屏参考文档转载
2012-11-07 11:51
471 查看
----------------------------------------------------------------------------------------------------------------------------------
原文链接:http://blog.csdn.net/joard_yang/article/details/7387316
在android 4.0上开发触摸设备驱动需要注意的几点
android 4.0已经渐渐流行,很多方案都已经基于其上,android 4.0的linux内核版本已经更新为linux 3.0,这个变化导致和内核直接接触的驱动需要或多或少的变化,以下描述的是触摸设备驱动的一些小变化:
1.当一个(这时候的情境应该是多点触摸的情况)手指或是触摸工具抬起(UP)时,他应该立即消失在多点出没的同步报告中,当所有的工具或手指抬起,驱动应该立即发送一个“空”同步消息,使用SYN_MT_REPORT其次是SYN_REPORT。
之前的版本是向上报告一个presssure为0的消息,现在新的多点触摸协议已经不再兼容旧的协议了。
2.物理接触或是信号强度将使用ABS_MT_PRESSURE上报。
之前的版本是用ABS_MT_TOUCH_MAJOR上报这个消息,同样,旧的方式也已经不被兼容了。
3.触摸接触面积使用ABS_MT_TOUCH_MAJOR向上报告
旧的版本使用ABS_MT_TOOL_MAJOR向上报告,旧的方式也已经不被兼容了。
触摸设备驱动程序不再需要特定的Android定制。依靠标准的Linux输入协议,Android可以更广泛支持触摸外设,如外部HID多点触摸触摸屏,使用未修改的驱动程序。
example:
static irqreturn_t xxx_ts_irq_handler(int irq, void *dev_id)
{
struct xxx_ts_data *ts = dev_id;
struct xxx_ts_finger *finger = ts->finger;
struct input_dev *input_dev = ts->input_dev;
int count = 0;
int i, ret;
ret = xxx_ts_read_data(ts);
if (ret < 0)
goto end;
/* multi touch protocol */
for (i = 0; i < MAX_FINGERS; i++) {
if (!finger[i].is_valid)
continue;
input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, finger[i].t);
input_report_abs(input_dev, ABS_MT_POSITION_X, finger[i].x);
input_report_abs(input_dev, ABS_MT_POSITION_Y, finger[i].y);
input_mt_sync(input_dev);
count++;
}
/* SYN_MT_REPORT only if no contact */
if (!count)
input_mt_sync(input_dev);
/* SYN_REPORT */
input_sync(input_dev);
end:
return IRQ_HANDLED;
}
--------------------------------------------------------------------------------------------------------------------------------
android4.0与2.3版本的触摸屏驱动调试注意
个人找到的链接地址:http://blog.csdn.net/joard_yang/article/details/7388109
在android2.3上调试TP时,只需要把linux驱动调通,android就可以正常使用了,而到android4.0上又有些不同了,针对linux驱动,需添加如下内容:
1、在手指按下时需调用如下函数上报Key Down:
input_report_key(struct input_dev *input, BTN_TOUCH, 1);
2、在手指释放时需调用如下函数上报Key Up:
input_report_key(struct input_dev *input, BTN_TOUCH, 0);
这样通过的话,可以在android4.0上看到有鼠标指针(圆圈)可以移动,把触摸屏做成了笔记本电脑上的鼠标触摸屏了,后来再查了下,原来需要添加一个idc文件,具体识别优先级参考:http://source.android.com/tech/input/input-device-configuration-files.html这篇文档,会按下面的顺序识别配置文件:
为了方便,我直接创建一个“设备名.idc”的文件,直接放到/system/usr/idc/目录下,相应的内容参考如下:
# Basic Parameters
touch.deviceType = touchScreen
touch.orientationAware = 1
# Size
touch.size.calibration = diameter
touch.size.scale = 10
touch.size.bias = 0
touch.size.isSummed = 0
# Pressure
# Driver reports signal strength as pressure.
#
# A normal thumb touch typically registers about 200 signal strength
# units although we don't expect these values to be accurate.
touch.pressure.calibration = amplitude
touch.pressure.scale = 0.005
# Orientation
touch.orientation.calibration = none
这样配置好后,在android4.0上的TP就可以正常使用了,而不会成为滑鼠触屏了。
-----------------------------------------------------------------------------------------------------------
原文链接:http://blog.csdn.net/joard_yang/article/details/7387316
在android 4.0上开发触摸设备驱动需要注意的几点
android 4.0已经渐渐流行,很多方案都已经基于其上,android 4.0的linux内核版本已经更新为linux 3.0,这个变化导致和内核直接接触的驱动需要或多或少的变化,以下描述的是触摸设备驱动的一些小变化:
1.当一个(这时候的情境应该是多点触摸的情况)手指或是触摸工具抬起(UP)时,他应该立即消失在多点出没的同步报告中,当所有的工具或手指抬起,驱动应该立即发送一个“空”同步消息,使用SYN_MT_REPORT其次是SYN_REPORT。
之前的版本是向上报告一个presssure为0的消息,现在新的多点触摸协议已经不再兼容旧的协议了。
2.物理接触或是信号强度将使用ABS_MT_PRESSURE上报。
之前的版本是用ABS_MT_TOUCH_MAJOR上报这个消息,同样,旧的方式也已经不被兼容了。
3.触摸接触面积使用ABS_MT_TOUCH_MAJOR向上报告
旧的版本使用ABS_MT_TOOL_MAJOR向上报告,旧的方式也已经不被兼容了。
触摸设备驱动程序不再需要特定的Android定制。依靠标准的Linux输入协议,Android可以更广泛支持触摸外设,如外部HID多点触摸触摸屏,使用未修改的驱动程序。
example:
static irqreturn_t xxx_ts_irq_handler(int irq, void *dev_id)
{
struct xxx_ts_data *ts = dev_id;
struct xxx_ts_finger *finger = ts->finger;
struct input_dev *input_dev = ts->input_dev;
int count = 0;
int i, ret;
ret = xxx_ts_read_data(ts);
if (ret < 0)
goto end;
/* multi touch protocol */
for (i = 0; i < MAX_FINGERS; i++) {
if (!finger[i].is_valid)
continue;
input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, finger[i].t);
input_report_abs(input_dev, ABS_MT_POSITION_X, finger[i].x);
input_report_abs(input_dev, ABS_MT_POSITION_Y, finger[i].y);
input_mt_sync(input_dev);
count++;
}
/* SYN_MT_REPORT only if no contact */
if (!count)
input_mt_sync(input_dev);
/* SYN_REPORT */
input_sync(input_dev);
end:
return IRQ_HANDLED;
}
--------------------------------------------------------------------------------------------------------------------------------
android4.0与2.3版本的触摸屏驱动调试注意
个人找到的链接地址:http://blog.csdn.net/joard_yang/article/details/7388109
转自搜索到的一篇blog,他没有注明转载出处,我也没法写出处了,对原创作者隔空说一声抱歉。
android4.0与2.3版本的TP代码区别
在android2.3上调试TP时,只需要把linux驱动调通,android就可以正常使用了,而到android4.0上又有些不同了,针对linux驱动,需添加如下内容:1、在手指按下时需调用如下函数上报Key Down:
input_report_key(struct input_dev *input, BTN_TOUCH, 1);
2、在手指释放时需调用如下函数上报Key Up:
input_report_key(struct input_dev *input, BTN_TOUCH, 0);
这样通过的话,可以在android4.0上看到有鼠标指针(圆圈)可以移动,把触摸屏做成了笔记本电脑上的鼠标触摸屏了,后来再查了下,原来需要添加一个idc文件,具体识别优先级参考:http://source.android.com/tech/input/input-device-configuration-files.html这篇文档,会按下面的顺序识别配置文件:
/system/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
/system/usr/idc/Vendor_XXXX_Product_XXXX.idc
/system/usr/idc/DEVICE_NAME.idc
/data/system/devices/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
/data/system/devices/idc/Vendor_XXXX_Product_XXXX.idc
/data/system/devices/idc/DEVICE_NAME.idc
为了方便,我直接创建一个“设备名.idc”的文件,直接放到/system/usr/idc/目录下,相应的内容参考如下:
# Basic Parameters
touch.deviceType = touchScreen
touch.orientationAware = 1
# Size
touch.size.calibration = diameter
touch.size.scale = 10
touch.size.bias = 0
touch.size.isSummed = 0
# Pressure
# Driver reports signal strength as pressure.
#
# A normal thumb touch typically registers about 200 signal strength
# units although we don't expect these values to be accurate.
touch.pressure.calibration = amplitude
touch.pressure.scale = 0.005
# Orientation
touch.orientation.calibration = none
这样配置好后,在android4.0上的TP就可以正常使用了,而不会成为滑鼠触屏了。
-----------------------------------------------------------------------------------------------------------
相关文章推荐
- Android官方入门文档[9]支持不同的语言
- [转载]苹果上线HomeKit支持文档,Apple TV将成为HomeKit中枢设备
- 4.0 以后 android 不再支持第三方app读写apn了
- Android 4.0 触摸屏驱动调试记录
- Android官方文档---支持不同的平台版本
- Android官方提供的支持不同屏幕大小的全部方法(转载)
- Android 4.0 触摸屏驱动调试记录
- OCI经典参考文档(转载)
- Android文档学习07_多屏幕支持
- Android 4.0- 4.4 不支持TLS v1.1 和TLS v1.2
- Android官方开发文档Training系列课程中文版:支持不同的设备之支持不同的语言
- Spring 框架参考文档(五)-The Web之 WebSocket 支持
- Android 4.0 触摸屏驱动调试记录
- Android 使用模板生成Word文档,支持手机直接查看word
- android 4.0 BLE开发官方文档介绍
- 转载:Android 5.x OTA Update官方文档(一,关于OTA 升级)
- Android官方开发文档Training系列课程中文版:多样屏幕之支持不同的屏幕密度
- Android文档学习07_多屏幕支持
- Android 使用模板生成Word文档,支持手机直接查看word
- Android 4.0的12个主要新特性供读者参考