PSH鼠标驱动程序反转鼠标
psmouse driver inverse mouse
我只是想在Ubuntu Linux下玩鼠标驱动程序。我有psmouse-base.c,我可以编译它并将其加载到内核中。我唯一想做的就是反转鼠标。我找到了这个从鼠标接收数据的函数
psmouse_interrupt(struct serio *serio,unsigned char data, unsigned int flags)
其中接收的数据存储在无符号的字符数据中。我想出 6 个数据代表所有可能的鼠标状态,因此它接收 6 个数据,然后在 6 之后再次接收,但我无法弄清楚这些数据代表什么。如果有人能告诉我答案或告诉我在哪里可以找到描述它的文档,我会很高兴。
我想我发现了一些东西。由于我使用触摸板,我一直收到 6 字节。我在这里找到了数据的描述:www.synaptics.com/sites/default/files/511-000024-01a.pdf。它可以在第 2 页和第 3 页找到。根据此文档,可以在第 4 字节的第 4 位和第 5 位中找到运动的方向。但以下代码不执行任何操作:
if (psmouse->pktcnt == 3)
{
data |= 1 << 4;
data |= 1 << 5;
}
我假设我只能在 x 轴和 y 轴的一个方向上移动鼠标。
我发现负责我的触摸板的驱动程序是elentech.c。
x1 = ((packet[1] & 0x0f) << 8) | packet[2];
y1 = etd->y_max - (((packet[4] & 0x0f) << 8) | packet[5]);
这些线计算运动。我可以在x轴上反转我的触摸板,但这只是运气。我不知道它为什么有效。以下行执行此操作:
psmouse->packet[1] *=-1;
psmouse->packet[2] *=-1;
但是,我假设接下来的行与前两行执行相同的操作,但它们没有:
psmouse->packet[1] ^= 0x80;
psmouse->packet[2] ^= 0x80;
而且我无法在 y 轴上反转鼠标。知道吗?
最好修改处理数据包的代码,psmouse_process_byte
,而不是中断处理程序本身。
它在这里报告了X&Y的运动,让它反过来移动应该不是很困难。
基本上,您需要做的就是反转 XNG/YNG 位(分别为数据包 [0] 位 4 和 5)。
下面是描述数据包格式的一页:http://www.computer-engineering.org/ps2mouse/另一个在这里:http://wiki.osdev.org/Mouse_Input
- Mongodb c++驱动程序:如何查询元素的数组
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 使用mongocxx驱动程序时包含头文件问题
- void*到驱动程序中的UnicodeString
- C++驱动程序看不到头文件
- 用于创建/注册虚拟存储设备的 IOKit 驱动程序
- 员工测试驱动程序数据结构
- 获取 OID(类型::b_oid)作为 MongoDB C++驱动程序中的字符串
- 如何在 c++ 中映射驱动程序?
- 如何在 cuda 中将 kd 树从主机复制到驱动程序
- Visual Studio 如何在内核模式驱动程序项目中使用C++标准库?
- 为什么我的驱动程序只读取部分字符串?
- 为 Sql 服务器实现 odbc 包装器.将数据库数据读取为字符或要求驱动程序将数据转换为 C 类型
- 如何在C++中将OID_PM_WOL_PATTERN_LIST发送到NDIS驱动程序?
- C++ 创建 NdisProt 驱动程序的句柄
- 使用 mongo c++ 驱动程序查询嵌套的 BSON 文档
- 有没有办法使用 mongocxx 驱动程序从 GridFS 集合的文件下载任意范围?
- 使用CMake ExternalProject_Add构建mongo cxx驱动程序
- PSH鼠标驱动程序反转鼠标
- 鼠标过滤器驱动程序的问题