aboutsummaryrefslogtreecommitdiff
path: root/mousetsr.h
diff options
context:
space:
mode:
authorJavier <dev.git@javispedro.com>2024-05-19 21:03:50 +0200
committerJavier <dev.git@javispedro.com>2024-05-19 21:03:50 +0200
commit4a8fe8127c57b0953e2ba2ad4da5e45a20300645 (patch)
tree60eacf9089c2883bc78b3fc8bf22dc1a7c456031 /mousetsr.h
parentdfa929d625028dae01c8317823f210a3b056c385 (diff)
downloadvbados-4a8fe8127c57b0953e2ba2ad4da5e45a20300645.tar.gz
vbados-4a8fe8127c57b0953e2ba2ad4da5e45a20300645.zip
add initial support for 2nd wheel & 4-5 mouse buttons
Diffstat (limited to 'mousetsr.h')
-rw-r--r--mousetsr.h36
1 files changed, 24 insertions, 12 deletions
diff --git a/mousetsr.h b/mousetsr.h
index 43fccc1..67d6ec4 100644
--- a/mousetsr.h
+++ b/mousetsr.h
@@ -34,8 +34,10 @@
#define USE_VMWARE 1
/** Enable Windows 386/protected mode integration .*/
#define USE_WIN386 1
-/** Enable the wheel. */
+/** Enable the wheel (and ImPS/2 protocol). */
#define USE_WHEEL 1
+/** Enable Intellimouse Explorer protocol (two wheels and 5 buttons). */
+#define USE_IMEX 1
/** Trace mouse events verbosily. */
#define TRACE_EVENTS 0
/** Trace (noisy) API calls. */
@@ -57,8 +59,11 @@
/** Maximum number of 55ms ticks that may pass between two bytes of the same PS/2 packet */
#define MAX_PS2_PACKET_DELAY 2
-/** Number of buttons reported back to user programs. */
-#define NUM_BUTTONS 3
+/** Maximum number of buttons supported by this driver. */
+#define MAX_BUTTONS 5
+
+/** Maximum number of wheels supported. */
+#define MAX_WHEELS 2
/** Size of int33 graphic cursor shape definitions. */
#define GRAPHIC_CURSOR_WIDTH 16
@@ -110,9 +115,13 @@ typedef struct tsrdata {
struct point screen_granularity;
// Detected mouse hardware & status
+ /** Current negotiated PS/2 device_id */
+ uint8_t device_id;
+ /** Number of buttons of current device. */
+ uint8_t num_buttons;
#if USE_WHEEL
- /** Whether the current mouse has a wheel (and support is enabled). */
- bool haswheel;
+ /** Number of wheels of current device. */
+ uint8_t num_wheels;
#endif
/** Packet size that the BIOS is currently using. Either 1 (streaming) or 3 (plain). */
uint8_t bios_packet_size;
@@ -168,18 +177,21 @@ typedef struct tsrdata {
/** Ticks when the above value was last reset. */
uint16_t last_motion_ticks;
/** Current status of buttons (as bitfield). */
- uint16_t buttons;
+ uint8_t buttons;
struct {
struct buttoncounter {
struct point last;
uint16_t count;
} pressed, released;
- } button[NUM_BUTTONS];
- /** Total delta movement of the wheel since the last wheel report. */
- int16_t wheel_delta;
- /** Last position where the wheel was moved. */
- struct point wheel_last;
-
+ } button[MAX_BUTTONS];
+#if USE_WHEEL
+ struct wheelcounter {
+ /** Total delta movement of the wheel since the last wheel report. */
+ int16_t delta;
+ /** Last position where the wheel was moved. */
+ struct point last;
+ } wheel[MAX_WHEELS];
+#endif
// Cursor information
/** Whether the cursor is currently displayed or not. */
bool cursor_visible;