ThinkPad570でスクロールマウスもどき #1
ThinkPad570をWindowsで使っているときに、真ん中ボタンを押しながらポインタを上下するとマウスホイールの上下として機能する。これをNetBSD-2.0.2で使いたい。
ということで、カーネルへのpatchを作ってみた。
--- dev/pckbport/pms.c 8 May 2005 12:42:41 -0000 1.1.1.1 +++ dev/pckbport/pms.c 20 May 2005 22:19:37 -0000 1.5 @@ -85,6 +85,7 @@ struct device *sc_wsmousedev; struct proc *sc_event_thread; + int dz; }; int pmsprobe(struct device *, struct cfdata *, void *); @@ -250,6 +251,7 @@ sc->inputstate = 0; sc->buttons = 0; + sc->dz = 0; pckbport_slot_enable(sc->sc_kbctag, sc->sc_kbcslot, 1); @@ -606,6 +608,21 @@ dy = -127; sc->inputstate = 0; + + if (newbuttons & 0x02) { + sc->dz += dy; + if (sc->dz < -10 || sc->dz > 10) { + dz = -sc->dz; + if (dz >= 128) + dz = 127; /* XXX need? */ + if (dz <= -128) + dz = -127; /* XXX need? */ + sc->dz = 0; + } + dx = dy = 0; + } + newbuttons &= ~0x02; + changed = (sc->buttons ^ newbuttons); sc->buttons = newbuttons;
どのレイヤをHackしようか迷ったけど、結局pms(4)に手も入れてみた。うーん、dzの値の範囲がこれでいいか自信ないな。dyの値をそのまま使うと感度が良すぎるので、少し遊びを持たせた。
そうそうこのpatchを当てると真ん中ボタンは真ん中ボタンとして使えなくなるので、3ボタンマウスのエミュレーションを有効にした方がいいと思う。