【发布时间】:2014-01-12 14:05:31
【问题描述】:
我有一个 HID 设备,设计有点遗憾(Griffin Powermate),当您转动它时,“旋转轴”HID 元素的输入值不会改变,除非速度旋转的剧烈变化或除非方向改变。它发送许多 HID 报告(角度分辨率似乎约为 4 度,因为我每转大约 90 个报告 - 不是很好,但无论如何......),但它们都报告相同的值(通常-1 或 1 分别表示 CCW 和 CW - 如果你转得更快,它会报告 -2 和 2,依此类推,但你必须转得 多 快。由于这种不幸的行为,我发现这东西基本上没用。
我突然想到,我可能可以编写一个后台用户空间应用程序,该应用程序占用物理设备并呈现另一个虚拟设备,并添加一些小的附加内容,以便导致每个报告的输入值发生变化(如环绕累加器,HID 规范支持——只有上帝知道为什么 Griffin 自己不这样做。)
但我没有看到如何从用户空间为虚拟设备创建内核端对象,我开始认为这可能是不可能的。我看到this question,它的迹象并不好,但它的细节很低。
或者,如果我有办法在现有设备上欺骗报告,我想我也可以这样做,因为我可以在报告 -1 或 1 后立即将其设置回零。
有什么想法吗?
【问题讨论】: