AMOUSE.SYS - Erweiterte IOCTLS
==============================

AMOUSE weist weitere IOCTLs auf und erweitert bestehende:

Alle IOCTLs sind Kategorie 7.

Erweiterung IOCTL 60h (MOU_GETBUTTONCOUNT)
------------------------------------------
  Parameter Packet Format: <none>

  Data Packet Format: WORD#1 Input: 0x55AA -> Output: Wirkliche Anzahl Knpfe (-1, wenn nicht feststellbar)
                             Input: andere -> Output: Anzahl Knpfe fr PM (maximal 3)

Erweiterung IOCTL 6Ah (MOU_VER)
-------------------------------

  Parameter Packet Format: <none>

  Data Packet Format: WORD#1 Input: 0x55AA -> Output: Versionsnummer des Treibers (2.4 ist 0x0204)
                             Input: andere -> Output: Version 1 fr OS/2 1.x und 2 fr 2.x und spter

  nur nach zuvorgehender Abfrage mit 0x55AA !
                      WORD#1 Input: 0x424E -> Output: Versionsnummer des Treibers (2.4 ist 0x0204)
                             Input: andere -> wie oben

  alle folgenden Felder nur bei korrekter Abfrage mit 0x424E
                      WORD#2 Input: Lnge des nachfolgenden Konfigurationsfelds (kein Output: sinnvoll sind: 0,2,3,4,5)
         (>=2)        BYTE#3 Input: Tastencode-Familie:   0 -> Pfeil auf/ab (default)
                                                          1 -> Pfeil links/rechts
                                                          2 -> Seite auf/ab
                                                          3 und grer -> undefiniert
         (>=2)        BYTE#4 Input: Tastenwiederholung:   0 -> keine Wheel-Funktion im Fullscreen
                                                       1-15 -> Anzahl der Tastenwiederholungen (default: 1)
                                                         16 und grer -> undefiniert
         (>=3)        BYTE#5 Input: PS/2 Polling Rate:    Sinnvolle Werte (40, 60, 80, 100 und 200, 80 ist default)

         (>=4)        BYTE#6 Input: 2-Wheel Maus:         Sinnvolle Werte (0 = kein Rad, 1 = 1 Rad, 2 = 2 Rder)
                                                          Einstellung ist nur fr MS-Intellimouse(10) und Typhoon(11) ntig
         (>=5)        BYTE#7 Input: SmartCruiseFunction:  Sinnvolle Werte (0 = kein SMS, 1 = ver, 2 = hor, 3 (default) = hor+ver)
                                                          Smart Cruise derzeit nur bei MX500, MX700 und MX1000

Erweiterung IOCTL 6Bh (MOU_QUERYPOINTERID)
------------------------------------------

  Parameter Packet Format: <none>

  Data Packet Format: WORD#1 Input: none -> Output: Device ID:     0 = unknown
                                                                   1 = Bus Mouse
                                                                   2 = Serial Mouse
                                                                   3 = Inport Mouse
                                                                   4 = PS/2 Style Pointing Device
                                                                   5 = IBM PS/2 8516 Touch Display
                                                                   6 = Logitech mouse
                                                                   7 = Screen Reader Keypad
                                                                   9 = Serial Scroll Mouse
                                                                  10 = PS/2 Scroll Mouse
                                                                  11 = PS/2 Scroll Mouse with >3 Buttons
                                                                  12 = USB Mouse
                                                                  13 = PS/2+ Mouse
                                                                   8, 14 - 65,535 = reserved
                      WORD#2 Input: none -> Output: COM Port Number
                      WORD#3 Input: none -> Output: Secondary Device ID (0 = none or 12 = USB Mouse)

Definition IOCTL 77h (MOU_GETEXTDATA)
-------------------------------------

  Parameter Packet Format: <none>

  Data Packet Format: WORD#1 Input: none -> Output: Wheel moves (signed int)
                      WORD#2 Input: none -> Output: Buttons Bit 0 -> Status Button 4
                                                            Bit 1 -> Change Flag Button 4
                                                            Bit 2 -> Status Button 5
                                                            Bit 3 -> Change Flag Button 5
                                                            Bit 4 -> Status Button 6
                                                            Bit 5 -> Change Flag Button 6
                                                            Bit 6 -> Status Button 7
                                                            Bit 7 -> Change Flag Button 7
                                                            Bit 8 -> Status Button 8
                                                            Bit 9 -> Change Flag Button 8
                                                            Bit 10 -> Status Button 9
                                                            Bit 11 -> Change Flag Button 9
                                                            Bit 12 -> Status Button 10
                                                            Bit 13 -> Change Flag Button 10
                                                            Bit 14 -> reserved
                                                            Bit 15 -> 1 wenn PM FG-Session
                      WORD#3 Input: none -> Output: Horizontal wheel moves (signed int)

Definition IOCTL 78h (---)
--------------------------

  Parameter Packet Format: WORD#1: Anzahl zu schickender Tastendrcke (unsigned int)
                           WORD#2: Make-Code der Taste  (z.B. 0x50E0 fr Down Arrow)
                           WORD#3: Break-Code der Taste (z.B. 0xD0E0 fr Down Arrow)

  Data Packet Format: <none>

Definition IOCTL 79h (---)
--------------------------

   Parameter Packet Format: WORD#1: Funktion
                                    1 : Abfrage Maus-Daten

   Data Packet Format: Funktion 1 (Mouse-Data) LEN=13
       PS2Plus        STRUC
                      PS2PIndex           DW  ?   ; Index for all valid Struct Members
                      DeviceType          DW  ?   ; Device Type
                      PButtons            DB  ?   ; Buttons 0=2,1=3,..,6=8,7= >8
                      Rollers             DB  ?   ; Rollers 0=none, 1=vertical, 3=vert+horz
                      SubType             DB  ?   ; Wireless Mouse Type (DeviceType is receiver in this case)
                      Shape               DB  ?   ; Case Shape
                      DeviceNum           DB  ?   ; Device Number of Mouse
                      Channel             DB  ?   ; Used radio Channel (1-based)
                      BattState           DB  ?   ; Battery State 0=unknown, 1+2=critical, 3+4=low, 5+6=ok, 7=high
                      VendorID            DW  ?   ; Logitech is 046dh
       PS2Plus        ENDS


       DeviceTypeIdx  equ 0001h
       PButtonsIdx    equ 0002h
       RollersIdx     equ 0004h
       SubTypeIdx     equ 0008h
       ShapeIdx       equ 0010h
       DeviceNumIdx   equ 0020h
       ChannelIdx     equ 0040h
       BattStateIdx   equ 0080h
       VendorIDIdx    equ 0100h

       Remark to Channels: USB supports only CH1 = 27,045 / CH2 = 27,145 MHz

