Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使USB设备启用多点触摸?_C_Linux_Linux Kernel_Linux Device Driver_Embedded Linux - Fatal编程技术网

C 如何使USB设备启用多点触摸?

C 如何使USB设备启用多点触摸?,c,linux,linux-kernel,linux-device-driver,embedded-linux,C,Linux,Linux Kernel,Linux Device Driver,Embedded Linux,我正在为Linux制作我的第一个USB设备驱动程序,我正在尝试连接一个触摸面板设备 我在Win7中试用过这个设备,使用Win7的默认触摸屏驱动程序。 使用线路监视器/读卡器,我能够在启用多点触摸的情况下获取原始数据。 就样本而言,多点触摸数据头是[0x8301]和[0x8701] 分别用于第一次和第二次触摸 现在禁用多点触控时,原始数据标题将为[0x8101] 现在,使用我为Linux制作的驱动程序,我只能让它输出[0x8101],这是一个一键式数据头 所以我猜在这部分初始化代码的某个地方,我必

我正在为Linux制作我的第一个USB设备驱动程序,我正在尝试连接一个触摸面板设备

我在Win7中试用过这个设备,使用Win7的默认触摸屏驱动程序。 使用线路监视器/读卡器,我能够在启用多点触摸的情况下获取原始数据。 就样本而言,多点触摸数据头是[0x8301][0x8701] 分别用于第一次和第二次触摸

现在禁用多点触控时,原始数据标题将为[0x8101]

现在,使用我为Linux制作的驱动程序,我只能让它输出[0x8101],这是一个一键式数据头

所以我猜在这部分初始化代码的某个地方,我必须对设备说它是一个多点触摸设备。或者我可能初始化错误了

    struct input_dev *input_dev;
input_dev = input_allocate_device();
input_dev->name = usb_mtouch->name;
input_dev->phys = usb_mtouch->phys;
usb_to_input_id(usb_mtouch->udev, &input_dev->id);
input_dev->dev.parent = &interface->dev;

input_set_drvdata(input_dev, usb_mtouch);

input_dev->open = mtouchdrv_open;
input_dev->close = mtouchdrv_close;

input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_PEN) |
    BIT_MASK(BTN_TOUCH) | BIT_MASK(BTN_STYLUS);
input_set_abs_params(input_dev, ABS_X, usb_mtouch->x_min, usb_mtouch->x_max, 0, 0);
input_set_abs_params(input_dev, ABS_Y, usb_mtouch->y_min, usb_mtouch->y_max, 0, 0);
input_set_abs_params(input_dev, ABS_PRESSURE, 0, usb_mtouch->press_max, 0, 0);
input_dev->absbit[BIT_WORD(ABS_MISC)] |= BIT_MASK(ABS_MISC);
另外,我正在使用Linux 2.6.24

谢谢


纳泽,我明白了。您必须向设备发送控制消息

int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request,
                     __u8 requesttype, __u16 value, __u16 index, void *data,
                     __u16 size, int timeout)
默认情况下,大多数设备都是一触式启用的。因此,向设备发送消息就可以了


棘手的部分是要发送什么信息。因为Win7可以实现单点触摸或多点触摸。我所做的只是比较两者的初始化序列。并在Linux上应用“缺失”消息。

它不适用于
synaptics
wacom
驱动程序?您的内核支持它吗?()@Ignacio Vazquez Abrams,如何使用wacom驱动程序?顺便说一下,这是一个ARM9嵌入式系统。@vines:谢谢你的链接,我也会试试这个。