我只是想在 Ubuntu Linux 下玩鼠标驱动程序。我有 psmouse-base.c,我可以编译它并将它加载到内核中。我唯一想做的就是反转鼠标。我找到了这个从鼠标接收数据的函数
psmouse_interrupt(struct serio *serio,unsigned char data, unsigned int flags)
其中接收到的数据存储在 unsigned char 数据中。我发现 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 轴上反转鼠标。任何的想法?