これを使うには結構条件があって、
Z軸のプロトコル(imps2)が理解できないなら、SCROLL-UP,SCROLL-DOWNのキーに割り当てちゃえ!
ってことでこのパッチどうでしょう? 使う人います?
アプリ側はSCROLL-UP,SCROLL-DOWNだけ理解すればOKって利点もありますよ。
*** ./linux/drivers/usb/mouse.c Mon Jul 26 10:53:13 1999
--- mouse.c Mon Feb 14 18:24:45 2000
***************
*** 40,45 ****
--- 40,48 ----
#define USB_MOUSE_MINOR 32
+ #define PCKBD_NEEDS_E0 0x80
+ extern unsigned char usb_kbd_map[];
+
struct mouse_state {
unsigned char buttons; /* current button state */
long dx; /* dx, dy, dz are change since last read */
***************
*** 126,131 ****
--- 129,148 ----
return -EINVAL;
}
+ static void
+ usb_mouse_handle_key(unsigned char key, int down)
+ {
+ int scancode = (int) usb_kbd_map[key];
+ if(scancode)
+ {
+ if(scancode & PCKBD_NEEDS_E0)
+ {
+ handle_scancode(0xe0, 1);
+ }
+ handle_scancode((scancode & ~PCKBD_NEEDS_E0), down);
+ }
+ }
+
/*
* Look like a PS/2 mouse, please..
*
***************
*** 171,187 ****
put_user(dy, buffer);
buffer++;
retval++;
! state = 3;
! if (!--count)
! break;
! }
! case 3: { /* dz */
! int dz = mouse->dz;
! mouse->dz = 0;
! put_user(dz, buffer);
! buffer++;
! retval++;
! state = 0;
}
break;
}
--- 188,217 ----
put_user(dy, buffer);
buffer++;
retval++;
! state = 3;
! if (!--count)
! break;
! }
! case 3: { /* dz */
! int dz = mouse->dz;
! mouse->dz = 0;
! put_user(dz, buffer);
! buffer++;
! retval++;
! state = 0;
! while (dz){
! if( dz > 0){
! /* up 82*/
! /* Prior 75 */
! usb_mouse_handle_key(75, 1);
! dz--;
! }else{
! /* down 81 */
! /* Next 78*/
! usb_mouse_handle_key(78, 1);
! dz++;
! }
! }
}
break;
}