【问题标题】:How to write a custom USB Infrared Touch Screen driver for OS X? [duplicate]如何为 OS X 编写自定义 USB 红外触摸屏驱动程序? [复制]
【发布时间】:2014-01-02 05:17:33
【问题描述】:

系统详情:

OS X 10.9.1 (13B42)

USB 红外线触摸屏详情:

低速设备@ 3 (0x14400000): ...................................... ....来自未知供应商的复合设备 端口信息:0x101a 非俘虏 附加到根集线器 外接设备 连接的 启用 连接到外部端口 端点数量(包括 EP0): 配置 1(当前)的总端点:2 设备描述符 描述符版本号:0x0100 设备类别:0(复合) 设备子类:0 设备协议:0 设备 MaxPacketSize:8 设备供应商 ID/产品 ID:0x255E/0x0001(未知供应商) 设备版本号:0x0100 配置数量:1 制造商字符串:0(无) 产品字符串:0(无) 序列号字符串:0(无) 配置描述符(当前配置) 长度(和内容):25 原始描述符(十六进制)0000:09 02 19 00 01 01 00 A0 FA 09 04 00 00 01 FF 00 原始描述符(十六进制)0010:00 00 07 05 81 03 08 00 0A 接口数量:1 配置值:1 属性:0xA0(总线供电,远程唤醒) 最大功率:500 毫安 接口 #0 - 供应商特定 备用设置 0 端点数量 1 接口类:255(特定于供应商) 接口子类; 0(特定于供应商) 接口协议:0 端点 0x81 - 中断输入 地址:0x81(输入) 属性:0x03(中断) 最大数据包大小:8 轮询间隔:10 毫秒

我的测试代码源(https://github.com/maqinjun/MyDriver/blob/master/MyDriver/MyDriver/MyDriver.cpp)。

作为细节,我的红外触摸屏不是HID USB设备,并报告中断输入事件。所以,我需要为它编写一个自定义的 USB 驱动程序。然后,我决定编写一个 USB 驱动程序 kext。

根据 Mac 开发人员库 (I/O Kit Fundamentals),我看到了 处理事件。为了正确看待工作循环的角色,首先考虑它的事件源会有所帮助专为。在 I/O Kit 中有五类异步事件:

      1。中断事件——源自设备的间接(次要)中断
      2。计时器事件——由计时器定期传递的事件,例如超时
      3。 I/O 命令——驱动程序客户端向其提供者发出的 I/O 请求
      4。电源事件——通常通过调用驱动程序堆栈生成
      5。结构事件——通常是涉及 I/O 注册表的事件

    我在他们的启动函数中设置了他们的工作循环、事件源和事件处理程序。但不起作用。所以,我无法从 USB 触摸屏设备获取数据。
    我的问题:

        1。 os x USB kext中是否有其他方法可以从USB设备接收报告数据?
        2。获取报表数据时如何将坐标分派给系统?


      有人帮帮我吗?

      【问题讨论】:

      • @Gabe 这不是重复的。但是,是的,它可能仍然过于宽泛,并且还违反了一个问题的规则。

      标签: macos usb kernel-extension


      【解决方案1】:

      USB 不是这样工作的。 USB 设备永远不会自行生成事件——您需要在设备接口上找到相关管道。然后,您需要向设备发送请求,当事件发生时,设备会做出响应。

      我建议阅读 USB 的工作原理。此外,如果该设备已经存在其他操作系统的驱动程序,也许开发人员可以引导您完成它?您还会发现 this book 尽管存在所有错误,但确实有一个关于编写 USB 驱动程序的不错的章节,并解释了 USB 设备、接口、端点等如何组合在一起。

      您可能希望考虑在用户空间中编写驱动程序。写 kexts 并不是我真正推荐给新手的事情,如果可以在用户空间中做同样的事情,我也绝不会推荐。

      最后,请不要指望本网站的用户会引导您完成为您的设备编写驱动程序的整个学习过程。您可以从中学习很多材料——书籍、Apple 的文档、博客文章、Apple 的源代码、第 3 方源代码等等。是的,这可能需要你几个月的时间。没有办法解决这个问题(除了雇用其他人来做)。

      【讨论】:

      • 好的,谢谢!致以最诚挚的问候。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      相关资源
      最近更新 更多