usb/121052: Microsoft Notebook Optical Mouse 3000 (model 1049)
doesn't work
Duane H. Hesser
dhesser at accima.com
Mon Feb 25 16:36:30 UTC 2008
On Mon, 25 Feb 2008 03:24:50 +0100
Kai Wang <kaiwang27 at gmail.com> wrote:
>
> + sc->flags = UMS_Z;
> + sc->nbuttons = 3;
> + sc->sc_isize = 5;
> + sc->sc_iid = 17;
> + sc->sc_loc_x.pos = 8;
> + sc->sc_loc_y.pos = 16;
> + sc->sc_loc_z.pos = 24;
> + sc->sc_loc_btn[0].pos = 0;
> + sc->sc_loc_btn[1].pos = 1;
> + sc->sc_loc_btn[2].pos = 2;
The above does not appear to be quite correct, despite a report from
oliver@ that the patch is working.
The ms3000 provides multiple input reports, and thus prepends and "ID"
byte to each report, so the button bits will start at 8, and the x.pos
will be at 16.
I am attaching a rather verbose connection report for an ms3000 which
is generated by a revised ums driver which I hope to post to my ISP
account within a couple of days. I am also attaching a "mouse report"
generated by a new program ("mouse_report") which takes advantage of
information which the revised driver makes available.
(I don't recall whether these lists are allowing attachments, so I
will post the files at
http://accima.com/members/dhesser/fbsd_mouse_stuff/ms3000-report.txt
and
http://accima.com/members/dhesser/fbsd_mouse_stuff/ms3000connectmsgs.txt
for those who wish to see).
The revised driver is intended to support all mice which reasonably
conform to the HID spec, including those which offer multiple input
reports (and including the Microsoft 3000).
The 3000 has a couple of anomalies. It reports a tilt wheel, but
does not offer tilt. It reports 5 buttons, but has only 3. The
mouse data is provided in an input with ID 17 (0x11), but a private
input report with ID 21 (0x15) is also provided whether it is
requested or not, at the polling frequency. The mouse ignores any
attempt to "set_idle(interface,0,0) which is intended to cause
input reports to be sent only when there is new data. The odd thing
is that the "real" input report behaves properly, but the private
one won't shut up. The revised driver ignores the private report.
I am puzzled that the positions in your patch (which don't account
for the ID byte) are reported to work.
Any thoughts?
--------------
--
Duane H. Hesser <duane.hesser at gmail.com>
-------------- next part --------------
/dev/ums0:
idVendor = 0x045e
idProduct = 0x00e1
bcdDevice = 0x0007
iManufacturer = 1 = "Microsoft"
iProduct = 2 = "Microsoft Wireless Optical Mouse? 1.00"
iSerialNumber = 0 = ""
bNumConfigurations = 1
bDeviceClass = 0
bDeviceSubClass = 0
bDeviceProtocol = 0
bMaxPacketSize = 8
Interface 0:
bInterfaceClass = 0x3
bInterfaceSubClass = 0x1
bInterfaceProtocol = 0x2
bInterfaceNumber = 0x0
bNumEndpoints = 0x1
bLength = 0x9
bDescriptorType = 0x4
bAlternateSetting = 0x0
iInterface = 0x0 = ""
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= REPORT DESCRIPTOR -- 274 bytes =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= START INPUT REPORT =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
( 1) COLLECTION/1 Application | pos= 0 usage: 0x000c/0x0001 = Consumer/Consumer_Control
( 2) COLLECTION/2 Logical | pos= 0 usage: 0x0001/0x0002 = Generic_Desktop/Mouse
( 3) INPUT | report ID=19, pos= 0, size= 8 bits, count=1, usage: 0x000c/0x0238 = Consumer/AC_Pan
( 4) INPUT | report ID=20, pos= 8, size= 2 bits, count=1, usage: 0xff00/0xfe01 = Microsoft/0xfe01
( 5) INPUT | report ID=20, pos=10, size= 1 bits, count=1, usage: 0xff00/0xfe02 = Microsoft/0xfe02
( 6) INPUT | report ID=20, pos=11, size= 1 bits, count=1, usage: 0xff00/0xfe00 = Microsoft/0xfe00
( 7) INPUT | report ID=20, pos=12, size= 2 bits, count=1, usage: 0xff00/0xff03 = Microsoft/0xff03
( 8) INPUT | report ID=20, pos=14, size= 2 bits, count=1, usage: 0x0000/0x0000 = pad
( 9) INPUT | report ID=21, pos=16, size= 1 bits, count=1, usage: 0xff00/0xff0b = Microsoft/0xff0b
(10) INPUT | report ID=21, pos=17, size= 7 bits, count=1, usage: 0x0000/0x0000 = pad
(11) INPUT | report ID=21, pos=24, size=16 bits, count=1, usage: 0xff00/0xff0d = Microsoft/0xff0d
(12) ENDCOLLECT/2 pos=40
(13) ENDCOLLECT/1 pos=40
(14) COLLECTION/1 Application | pos=40 usage: 0x0001/0x0002 = Generic_Desktop/Mouse
(15) COLLECTION/2 Logical | pos=40 usage: 0x0001/0x0002 = Generic_Desktop/Mouse
(16) COLLECTION/3 Physical | pos=40 usage: 0x0001/0x0001 = Generic_Desktop/Pointer
(17) INPUT | report ID=17, pos=40, size= 1 bits, count=1, usage: 0x0009/0x0001 = Button/Button_1
(18) INPUT | report ID=17, pos=41, size= 1 bits, count=1, usage: 0x0009/0x0002 = Button/Button_2
(19) INPUT | report ID=17, pos=42, size= 1 bits, count=1, usage: 0x0009/0x0003 = Button/Button_3
(20) INPUT | report ID=17, pos=43, size= 1 bits, count=1, usage: 0x0009/0x0004 = Button/Button_4
(21) INPUT | report ID=17, pos=44, size= 1 bits, count=1, usage: 0x0009/0x0005 = Button/Button_5
(22) INPUT | report ID=17, pos=45, size= 3 bits, count=1, usage: 0x0000/0x0000 = pad
(23) INPUT | report ID=17, pos=48, size= 8 bits, count=1, usage: 0x0001/0x0030 = Generic_Desktop/X
(24) INPUT | report ID=17, pos=56, size= 8 bits, count=1, usage: 0x0001/0x0031 = Generic_Desktop/Y
(25) COLLECTION/4 Logical | pos=64 usage: 0x0000/0x0000 = 0x00/0x00
(26) INPUT | report ID=17, pos=64, size= 8 bits, count=1, usage: 0x0001/0x0048 = Generic_Desktop/0x48
(27) ENDCOLLECT/4 pos=72
(28) COLLECTION/4 Logical | pos=72 usage: 0x0000/0x0000 = 0x00/0x00
(29) INPUT | report ID=17, pos=72, size= 8 bits, count=1, usage: 0x0001/0x0048 = Generic_Desktop/0x48
(30) ENDCOLLECT/4 pos=80
(31) ENDCOLLECT/3 pos=80
(32) ENDCOLLECT/2 pos=80
(33) ENDCOLLECT/1 pos=80
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Input Report ID=17, first button at pos=40
report_size: start = 40, hi = 80, size = 48 bits
Input Report size = 6 bytes including leading ID byte
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= END INPUT REPORT =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= START FEATURE REPORT =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
( 1) COLLECTION/1 Application | pos= 0 usage: 0x000c/0x0001 = Consumer/Consumer_Control
( 2) COLLECTION/2 Logical | pos= 0 usage: 0x0001/0x0002 = Generic_Desktop/Mouse
( 3) FEATURE | report ID=23, pos= 0, size= 2 bits, count=1, usage: 0x000c/0x0238 = Consumer/AC_Pan
( 4) FEATURE | report ID=23, pos= 2, size= 2 bits, count=1, usage: 0xff00/0xfe01 = Microsoft/0xfe01
( 5) FEATURE | report ID=23, pos= 4, size= 1 bits, count=1, usage: 0xff00/0xff04 = Microsoft/0xff04
( 6) FEATURE | report ID=23, pos= 5, size= 3 bits, count=1, usage: 0x0000/0x0000 = pad
( 7) ENDCOLLECT/2 pos= 8
( 8) ENDCOLLECT/1 pos= 8
( 9) COLLECTION/1 Application | pos= 8 usage: 0x0001/0x0002 = Generic_Desktop/Mouse
(10) COLLECTION/2 Logical | pos= 8 usage: 0x0001/0x0002 = Generic_Desktop/Mouse
(11) COLLECTION/3 Physical | pos= 8 usage: 0x0001/0x0001 = Generic_Desktop/Pointer
(12) COLLECTION/4 Logical | pos= 8 usage: 0x0001/0x0031 = Generic_Desktop/Y
(13) FEATURE | report ID=18, pos= 8, size= 2 bits, count=1, usage: 0x0001/0x0048 = Generic_Desktop/0x48
(14) ENDCOLLECT/4 pos=10
(15) COLLECTION/4 Logical | pos=10 usage: 0x0000/0x0000 = 0x00/0x00
(16) FEATURE | report ID=18, pos=10, size= 2 bits, count=1, usage: 0x0001/0x0048 = Generic_Desktop/0x48
(17) FEATURE | report ID=18, pos=12, size= 4 bits, count=1, usage: 0x0000/0x0000 = pad
(18) ENDCOLLECT/4 pos=16
(19) ENDCOLLECT/3 pos=16
(20) ENDCOLLECT/2 pos=16
(21) ENDCOLLECT/1 pos=16
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= END FEATURE REPORT =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= START COMBINED REPORT =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
( 1) COLLECTION/1 Application | pos= 0 usage: 0x000c/0x0001 = Consumer/Consumer_Control
( 2) COLLECTION/2 Logical | pos= 0 usage: 0x0001/0x0002 = Generic_Desktop/Mouse
( 3) INPUT | report ID=19, pos= 0, size= 8 bits, count=1, usage: 0x000c/0x0238 = Consumer/AC_Pan
( 4) INPUT | report ID=20, pos= 8, size= 2 bits, count=1, usage: 0xff00/0xfe01 = Microsoft/0xfe01
( 5) INPUT | report ID=20, pos=10, size= 1 bits, count=1, usage: 0xff00/0xfe02 = Microsoft/0xfe02
( 6) INPUT | report ID=20, pos=11, size= 1 bits, count=1, usage: 0xff00/0xfe00 = Microsoft/0xfe00
( 7) INPUT | report ID=20, pos=12, size= 2 bits, count=1, usage: 0xff00/0xff03 = Microsoft/0xff03
( 8) INPUT | report ID=20, pos=14, size= 2 bits, count=1, usage: 0x0000/0x0000 = pad
( 9) INPUT | report ID=21, pos=16, size= 1 bits, count=1, usage: 0xff00/0xff0b = Microsoft/0xff0b
(10) INPUT | report ID=21, pos=17, size= 7 bits, count=1, usage: 0x0000/0x0000 = pad
(11) INPUT | report ID=21, pos=24, size=16 bits, count=1, usage: 0xff00/0xff0d = Microsoft/0xff0d
(12) FEATURE | report ID=23, pos=40, size= 2 bits, count=1, usage: 0xff00/0xff06 = Microsoft/0xff06
(13) FEATURE | report ID=23, pos=42, size= 2 bits, count=1, usage: 0xff00/0xff0f = Microsoft/0xff0f
(14) FEATURE | report ID=23, pos=44, size= 1 bits, count=1, usage: 0xff00/0xff04 = Microsoft/0xff04
(15) FEATURE | report ID=23, pos=45, size= 3 bits, count=1, usage: 0x0000/0x0000 = pad
(16) ENDCOLLECT/2 pos=48
(17) ENDCOLLECT/1 pos=48
(18) COLLECTION/1 Application | pos=48 usage: 0x0001/0x0002 = Generic_Desktop/Mouse
(19) COLLECTION/2 Logical | pos=48 usage: 0x0001/0x0002 = Generic_Desktop/Mouse
(20) COLLECTION/3 Physical | pos=48 usage: 0x0001/0x0001 = Generic_Desktop/Pointer
(21) INPUT | report ID=17, pos=48, size= 1 bits, count=1, usage: 0x0009/0x0001 = Button/Button_1
(22) INPUT | report ID=17, pos=49, size= 1 bits, count=1, usage: 0x0009/0x0002 = Button/Button_2
(23) INPUT | report ID=17, pos=50, size= 1 bits, count=1, usage: 0x0009/0x0003 = Button/Button_3
(24) INPUT | report ID=17, pos=51, size= 1 bits, count=1, usage: 0x0009/0x0004 = Button/Button_4
(25) INPUT | report ID=17, pos=52, size= 1 bits, count=1, usage: 0x0009/0x0005 = Button/Button_5
(26) INPUT | report ID=17, pos=53, size= 3 bits, count=1, usage: 0x0000/0x0000 = pad
(27) INPUT | report ID=17, pos=56, size= 8 bits, count=1, usage: 0x0001/0x0030 = Generic_Desktop/X
(28) INPUT | report ID=17, pos=64, size= 8 bits, count=1, usage: 0x0001/0x0031 = Generic_Desktop/Y
(29) COLLECTION/4 Logical | pos=72 usage: 0x0000/0x0000 = 0x00/0x00
(30) FEATURE | report ID=18, pos=72, size= 2 bits, count=1, usage: 0x0001/0x0048 = Generic_Desktop/0x48
(31) INPUT | report ID=17, pos=74, size= 8 bits, count=1, usage: 0x0001/0x0038 = Generic_Desktop/Wheel
(32) ENDCOLLECT/4 pos=82
(33) COLLECTION/4 Logical | pos=82 usage: 0x0000/0x0000 = 0x00/0x00
(34) FEATURE | report ID=18, pos=82, size= 2 bits, count=1, usage: 0x0001/0x0048 = Generic_Desktop/0x48
(35) FEATURE | report ID=18, pos=84, size= 4 bits, count=1, usage: 0x0000/0x0000 = pad
(36) INPUT | report ID=17, pos=88, size= 8 bits, count=1, usage: 0x000c/0x0238 = Consumer/AC_Pan
(37) ENDCOLLECT/4 pos=96
(38) ENDCOLLECT/3 pos=96
(39) ENDCOLLECT/2 pos=96
(40) ENDCOLLECT/1 pos=96
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= END COMBINED REPORT =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Driver mode:
level = 3
protocol = 18 = EXTENDED SYSMOUSE
packetsize = 12
syncmask[0] = 0xf8
syncmask[1] = 0x80
Mouse data: (move the mouse)
0| 0x83 0x00 0x00 0x00 0x00 0x00 0x00 0x7f 0x00 0x00 0x00 0x00
1| 0x83 0x00 0xff 0x01 0x00 0x00 0x00 0x7f 0x00 0x00 0x00 0x00
2| 0x87 0x00 0x00 0x00 0x00 0x00 0x00 0x7f 0x00 0x00 0x00 0x00
3| 0x86 0x00 0x00 0x00 0x00 0x00 0x00 0x7f 0x00 0x00 0x00 0x00
4| 0x87 0x00 0x00 0x00 0x00 0x00 0x00 0x7f 0x00 0x00 0x00 0x00
5| 0x85 0x00 0x00 0x00 0x00 0x00 0x00 0x7f 0x00 0x00 0x00 0x00
6| 0x87 0x00 0x00 0x00 0x00 0x00 0x00 0x7f 0x00 0x00 0x00 0x00
7| 0x87 0x00 0x00 0x01 0x00 0x00 0x00 0x7f 0x00 0x00 0x00 0x00
8| 0x87 0x00 0x00 0x01 0x00 0x00 0x00 0x7f 0x00 0x00 0x00 0x00
9| 0x87 0x03 0x00 0x03 0x00 0x00 0x00 0x7f 0x00 0x00 0x00 0x00
-------------- next part --------------
Feb 24 17:54:50 belinda kernel: usbd_new_device bus=0xc651e000 port=2 depth=1 speed=1
Feb 24 17:54:50 belinda kernel: usbd_new_device: adding unit addr=2, rev=200, class=0, subclass=0, protocol=0, maxpacket=8, len=18, speed=1
Feb 24 17:54:50 belinda kernel: usbd_new_device: new dev (addr 2), dev=0xc9962d80, parent=0xc64f6500
Feb 24 17:54:50 belinda kernel:
Feb 24 17:54:50 belinda kernel: usbd_probe_and_attach: idVendor = 0x45e
Feb 24 17:54:50 belinda kernel: : : idProduct = 0xe1
Feb 24 17:54:50 belinda kernel: : : bcdDevice (release) = 0x7
Feb 24 17:54:50 belinda kernel:
Feb 24 17:54:50 belinda kernel: usbd_probe_and_attach: trying device specific drivers
Feb 24 17:54:50 belinda kernel: usbd_probe_and_attach: no device specific driver found
Feb 24 17:54:50 belinda kernel: usbd_probe_and_attach: looping over 1 configurations
Feb 24 17:54:50 belinda kernel: usbd_set_config_index: (addr 1) cno=2 attr=0xa0, selfpowered=0, power=100
Feb 24 17:54:50 belinda kernel: usbd_set_config_index: set config 1
Feb 24 17:54:50 belinda kernel: usbd_probe_and_attach: looping over 1 interfaces
Feb 24 17:54:50 belinda kernel: Interface 0:
Feb 24 17:54:50 belinda kernel: : bLength = 0x9
Feb 24 17:54:50 belinda kernel: : bDescriptorType = 0x4
Feb 24 17:54:50 belinda kernel: : bInterfaceNumber = 0x0
Feb 24 17:54:50 belinda kernel: : bAlternateSetting = 0x0
Feb 24 17:54:50 belinda kernel: : bNumEndpoints = 0x1
Feb 24 17:54:50 belinda kernel: : bInterfaceClass = 0x3
Feb 24 17:54:50 belinda kernel: : bInterfaceSubClass = 0x1
Feb 24 17:54:50 belinda kernel: : bInterfaceProtocol = 0x2
Feb 24 17:54:50 belinda kernel: : iInterface = 0x0
Feb 24 17:54:50 belinda kernel:
Feb 24 17:54:50 belinda kernel: usbd_probe_and_attach: check interface 0
Feb 24 17:54:50 belinda kernel: usbd_probe_and_attach: bInterfaceNumber = 0
Feb 24 17:54:50 belinda kernel: ums0 on uhub4
Feb 24 17:54:50 belinda kernel: ums0: Microsoft Microsoft Wireless Optical Mouse? 1.00, class 0/0, rev 2.00/0.07, addr 2, iclass 3/1
Feb 24 17:54:50 belinda kernel: ums0: attach: initial protocol = 1
Feb 24 17:54:50 belinda kernel: ums0: attach: set report protocol (1)
Feb 24 17:54:50 belinda kernel: ums0: attach: final protocol = 1
Feb 24 17:54:51 belinda kernel: ums0: attach: usbd_set_idle(interface,0,0) FAILED, status 17
Feb 24 17:54:51 belinda kernel: ums0: attach: report descriptor size = 274
Feb 24 17:54:51 belinda kernel: ums0: attach: X (flags 0x06) item_id=17, sc_loc_x.pos=48/8
Feb 24 17:54:51 belinda kernel: ums0: attach: Y (flags 0x06) item_id=17, sc_loc_y.pos=56/8
Feb 24 17:54:51 belinda kernel: ums0: attach: T (flags 0x06) item_id=17, sc_loc_t.pos=64/8
Feb 24 17:54:51 belinda kernel: ums0: mouse has no Z report
Feb 24 17:54:51 belinda kernel: ums0: mouse has no W report
Feb 24 17:54:51 belinda kernel: ums0: input report ID=17/0x11, report size 6.
Feb 24 17:54:51 belinda kernel: ums0: attach: id_offset == 32
Feb 24 17:54:51 belinda kernel: ums0: attach: fixed B0 ==> 8/1
Feb 24 17:54:51 belinda kernel: ums0: attach: fixed B1 ==> 9/1
Feb 24 17:54:51 belinda kernel: ums0: attach: fixed B2 ==> 10/1
Feb 24 17:54:51 belinda kernel: ums0: attach: fixed B3 ==> 11/1
Feb 24 17:54:51 belinda kernel: ums0: attach: fixed B4 ==> 12/1
Feb 24 17:54:51 belinda kernel: ums0: attach: fixed X ==> 16/8
Feb 24 17:54:51 belinda kernel: ums0: attach: fixed Y ==> 24/8
Feb 24 17:54:51 belinda kernel: ums0: attach: fixed Z ==> 0/0
Feb 24 17:54:51 belinda kernel: ums0: attach: fixed T ==> 32/8
Feb 24 17:54:51 belinda kernel: ums0: attach: fixed W ==> 0/0
Feb 24 17:54:51 belinda kernel: ums0: attach: T.pos => Z.pos
Feb 24 17:54:51 belinda kernel: ums0: attach: T.pos = Z.pos + 8, sc_isize=6
Feb 24 17:54:51 belinda kernel: ums0: 5 buttons and Z dir (TILT wheel).
Feb 24 17:54:51 belinda kernel: ums0: ATTACH: sc=0xc7a47800
Feb 24 17:54:51 belinda kernel: ums0: ATTACH: ID 0/8
Feb 24 17:54:51 belinda kernel: ums0: ATTACH: B1 8/1
Feb 24 17:54:51 belinda kernel: ums0: ATTACH: B2 9/1
Feb 24 17:54:51 belinda kernel: ums0: ATTACH: B3 10/1
Feb 24 17:54:51 belinda kernel: ums0: ATTACH: B4 11/1
Feb 24 17:54:51 belinda kernel: ums0: ATTACH: B5 12/1
Feb 24 17:54:51 belinda kernel: ums0: ATTACH: X 16/8
Feb 24 17:54:51 belinda kernel: ums0: ATTACH: Y 24/8
Feb 24 17:54:51 belinda kernel: ums0: ATTACH: Z 32/8
Feb 24 17:54:51 belinda kernel: ums0: ATTACH: T 40/8
Feb 24 17:54:51 belinda kernel: ums0: ATTACH: W 0/0
Feb 24 17:54:51 belinda kernel: ums0: ATTACH: isize = 6, iid = 17
Feb 24 17:54:51 belinda kernel: usbd_probe_and_attach: FOUND interface 0
Feb 24 17:54:52 belinda kernel: ums0: usbd_set_idle(interface,0,0) FAILED, status 17
Feb 24 17:55:59 belinda kernel: ums0: usbd_set_idle(interface,0,0) FAILED, status 17
More information about the freebsd-usb
mailing list