0

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;

ただし、次の行は前の 2 行と同じことを行うと思いますが、そうではありません。

psmouse->packet[1] ^= 0x80;
psmouse->packet[2] ^= 0x80;

そして、y軸でマウスを反転できませんでした。何か案が?

4

1 に答える 1

1

psmouse_process_byteおそらく、割り込みハンドラ自体を変更するよりも、パケットを処理するコードを変更した方がよいでしょう。

ここでX&Y の動きを報告します。逆に動かすのはそれほど難しいことではありません。

基本的に、XNG/YNG ビット (それぞれパケット [0] ビット 4 と 5) を反転するだけで済みます。

パケット形式について説明しているページは次のとおりです: http://www.computer-engineering.org/ps2mouse/ 別 のページ: http://wiki.osdev.org/Mouse_Input

于 2013-09-17T10:07:14.973 に答える