技术专栏
触摸屏和鼠标共存
嵌入式QT程序需要支持触屏和鼠标同时使用,一般会使用tslib库(tslib和qt编译请参照网上其他帖子)
qt和tslib配置如下:
注意替换库文件路径和对应的设备文件路径
LIB_ROOT=/usr
QT_DIR=${LIB_ROOT}/qt4.8.6
TS_DIR=${LIB_ROOT}/tslib-1.8
export LD_LIBRARY_PATH=${LIB_ROOT}/lib:${QT_DIR}/lib:${TS_DIR}/lib:${ShellPath}
export QT_QWS_FONTDIR=${QT_DIR}/lib/fonts
export QWS_DISPLAY="LinuxFb:/dev/fb1"
export QWS_MOUSE_PROTO="mouseman:/dev/input/mice tslib:/dev/input/touchscreen0"
export TSLIB_TSDEVICE="/dev/input/touchscreen0"
export TSLIB_CONFFILE=${TS_DIR}/etc/ts.conf
export POINTERCAL_FILE=${TS_DIR}/etc/pointercal
export TSLIB_CALIBFILE=${TS_DIR}/etc/pointercal
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb1
export TSLIB_PLUGINDIR=${TS_DIR}/lib/ts
使用这个配置时,鼠标可以正常操作,触屏操作就显得有些魔性了...
解决思路:这个问题是由于触屏设备在input子系统注册的时候,会被视为一个mouse设备。/dev/input/mice这个设备会连接所有的mouse设备,导致触屏设备上报坐标变化时,/dev/input/mice也会上报,此时mice上报的数据点不准确。
2个解决办法(推荐使用第二种):
- 在配置中不使用mice,将指定鼠标的event handler固定(如固定为event1,配置时将mice替换为event1即可)。
参照另一个帖子固定event handler. 点我传送
- 修改内核源码中的drivers/input/mousedev.c文件。在将鼠标设备连接到mice的时候,忽略触屏设备,使触屏设备与mice互相独立,互不影响。修改如下:
文件顶部头文件添加
#include <linux/string.h>
mousedev_connect 、 mousedev_disconnect 函数修改(此处我的触屏设备名为touchScreen)
static int mousedev_connect(struct input_handler *handler,
struct input_dev *dev,
const struct input_device_id *id)
{
struct mousedev *mousedev;
int minor;
int error;
// add by wx: ignore touch screen
static const char* tsname = "touchScreen";
printk(KERN_INFO "%s: %s", __func__, dev->name);
for (minor = 0; minor < MOUSEDEV_MINORS; minor++)
if (!mousedev_table[minor])
break;
if (minor == MOUSEDEV_MINORS) {
printk(KERN_ERR "mousedev: no more free mousedev devicesn");
return -ENFILE;
}
mousedev = mousedev_create(dev, handler, minor);
if (IS_ERR(mousedev))
return PTR_ERR(mousedev);
// add by wx: (mixdev_add_device) ignore touch screen
if (!strcmp(dev->name, tsname))
return 0;
error = mixdev_add_device(mousedev);
if (error) {
mousedev_destroy(mousedev);
return error;
}
return 0;
}
static void mousedev_disconnect(struct input_handle *handle)
{
struct mousedev *mousedev = handle->private;
// modify by wx: (mixdev_remove_device) ignore touch screen
static const char* tsname = "touchScreen";
printk(KERN_INFO "%s: %s", __func__, handle->dev->name);
if (strcmp(handle->dev->name, tsname))
mixdev_remove_device(mousedev);
mousedev_destroy(mousedev);
}
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包
点赞
收藏
评论
打赏
- 分享
- 举报
评论
0个
手气红包
暂无数据
相关专栏
-
浏览量:4236次2017-09-25 17:46:02
-
2023-11-21 17:01:33
-
浏览量:6552次2022-10-09 10:20:09
-
浏览量:3925次2020-11-05 15:00:56
-
浏览量:1694次2023-11-20 17:27:49
-
浏览量:861次2023-12-07 01:07:22
-
浏览量:5295次2021-04-21 16:55:23
-
浏览量:3190次2020-10-16 09:39:05
-
浏览量:1952次2020-02-28 09:43:57
-
浏览量:1405次2020-02-28 09:57:39
-
浏览量:2002次2020-03-20 09:45:36
-
浏览量:1966次2017-11-24 11:39:01
-
浏览量:2206次2020-07-18 18:11:19
-
浏览量:4092次2020-10-30 15:15:24
-
浏览量:1214次2023-10-26 17:37:43
-
浏览量:4029次2017-12-14 16:59:48
-
浏览量:7027次2020-08-27 10:20:57
-
浏览量:2652次2020-08-11 10:41:17
-
浏览量:1982次2020-08-10 19:45:11
置顶时间设置
结束时间
删除原因
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
打赏作者
big_anana
您的支持将鼓励我继续创作!
打赏金额:
¥1
¥5
¥10
¥50
¥100
支付方式:
微信支付
打赏成功!
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
审核成功
发布时间设置
发布时间:
请选择发布时间设置
是否关联周任务-专栏模块
审核失败
失败原因
请选择失败原因
备注
请输入备注