|
|
Line 9: |
Line 9: |
| '''Mouse Devices''' | | '''Mouse Devices''' |
| | | |
− | This unit provides both the Mouse device interface and a generic USB mouse driver. | + | This unit provides the Mouse device interface and mouse API to be used by both drivers and applications. |
| + | |
| + | The API includes functions to create, register, locate, read, write, control and configure each connected mouse device. |
| | | |
− | '''USB Mouse Devices'''
| + | The API supports a global mouse buffer so multiple devices can feed data into a common buffer as well as a buffer per device to allow each device to be used for a specific purpose. For example an application with two separate displays may choose to have a mouse or pointing device to control each one individually. |
− | | + | |
− | The USB mouse driver in this unit uses HID Boot Protocol only and has been replaced by the HIDMouse unit which provides complete HID Report Protocol support for USB mice. | + | |
− |
| + | |
− | This driver will be moved to a separate unit and retained for backwards compatibility only.
| + | |
| | | |
| === Constants === | | === Constants === |
Line 276: |
Line 274: |
| {| class="wikitable" style="font-size: 14px; background: white;" | | {| class="wikitable" style="font-size: 14px; background: white;" |
| |- | | |- |
− | | <code>USBMOUSE_DRIVER_NAME = 'USB Mouse Driver (HID boot protocol)';</code> | + | |colspan="2"|''Note: The following constants are duplicated with the USBMouse unit for backwards compatibility'' |
− | | Name of USB mouse driver
| + | |
| |- | | |- |
− | |colspan="2"| | + | |} |
− | |-
| + | </div></div> |
− | | <code>USBMOUSE_MOUSE_DESCRIPTION = 'USB HID Mouse';</code>
| + | <br /> |
− | | Description of USB mouse device
| + | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> |
− | |-
| + | <div style="font-size: 14px; padding-left: 12px;">'''USB HID types''' <code> USB_HID_* </code></div> |
− | |colspan="2"| | + | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> |
| + | {| class="wikitable" style="font-size: 14px; background: white;" |
| |- | | |- |
− | |colspan="2"|''HID Interface Subclass types (See USB HID v1.11 specification)'' | + | |colspan="2"|''See USB HID v1.11 specification'' |
| |- | | |- |
| | <code>USB_HID_SUBCLASS_NONE = 0;</code> | | | <code>USB_HID_SUBCLASS_NONE = 0;</code> |
Line 657: |
Line 655: |
| |} | | |} |
| </div></div> | | </div></div> |
− |
| |
− | '''USB mouse device types'''
| |
− |
| |
− | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
| |
− | <code>PUSBMouseDevice = ^TUSBMouseDevice;</code>
| |
− |
| |
− | <code>TUSBMouseDevice = record</code>
| |
− | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
| |
− | {| class="wikitable" style="font-size: 14px; background: white;"
| |
− | |-
| |
− | |colspan="2"|''Mouse Properties''
| |
− | |-
| |
− | | <code>Mouse:TMouseDevice;</code>
| |
− | |
| |
− | |-
| |
− | |colspan="2"|''USB Properties''
| |
− | |-
| |
− | | <code>HIDInterface:PUSBInterface;</code>
| |
− | | USB HID Mouse Interface
| |
− | |-
| |
− | | <code>ReportRequest:PUSBRequest;</code>
| |
− | | USB request for mouse report data
| |
− | |-
| |
− | | <code>ReportEndpoint:PUSBEndpointDescriptor;</code>
| |
− | | USB Mouse Interrupt IN Endpoint
| |
− | |-
| |
− | | <code>HIDDescriptor:PUSBHIDDescriptor;</code>
| |
− | | USB HID Descriptor for mouse
| |
− | |-
| |
− | | <code>ReportDescriptor:Pointer;</code>
| |
− | | USB HID Report Descriptor for mouse
| |
− | |-
| |
− | | <code>PendingCount:LongWord;</code>
| |
− | | Number of USB requests pending for this mouse
| |
− | |-
| |
− | | <code>WaiterThread:TThreadId;</code>
| |
− | | Thread waiting for pending requests to complete (for mouse detachment)
| |
− | |-
| |
− | |}
| |
− | </div></div>
| |
| <br /> | | <br /> |
| | | |
Line 727: |
Line 685: |
| <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> |
| <pre style="border: 0; padding-bottom:0px;">procedure MouseInit;</pre> | | <pre style="border: 0; padding-bottom:0px;">procedure MouseInit;</pre> |
− | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Initialize the mouse unit, device table and USB mouse driver</div> | + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Initialize the mouse unit and device table</div> |
| <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> |
| {| class="wikitable" style="font-size: 14px; background: white;" | | {| class="wikitable" style="font-size: 14px; background: white;" |
Line 1,126: |
Line 1,084: |
| ! Note | | ! Note |
| | None documented | | | None documented |
− | |-
| |
− | |}
| |
− | </div></div>
| |
− | <br />
| |
− |
| |
− | '''USB mouse functions'''
| |
− |
| |
− | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
| |
− | <pre style="border: 0; padding-bottom:0px;">function USBMouseDriverBind(Device:PUSBDevice; Interrface:PUSBInterface):LongWord;</pre>
| |
− | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Bind the Mouse driver to a USB device if it is suitable</div>
| |
− | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
| |
− | {| class="wikitable" style="font-size: 14px; background: white;"
| |
− | |-
| |
− | ! Device
| |
− | | The USB device to attempt to bind to
| |
− | |-
| |
− | ! Interrface
| |
− | | The USB interface to attempt to bind to (or nil for whole device)
| |
− | |-
| |
− | ! Return
| |
− | | USB_STATUS_SUCCESS if completed, USB_STATUS_DEVICE_UNSUPPORTED if unsupported or another error code on failure.
| |
− | |-
| |
− | |}
| |
− | </div></div>
| |
− | <br />
| |
− | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
| |
− | <pre style="border: 0; padding-bottom:0px;">function USBMouseDriverUnbind(Device:PUSBDevice; Interrface:PUSBInterface):LongWord;</pre>
| |
− | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Unbind the Mouse driver from a USB device</div>
| |
− | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
| |
− | {| class="wikitable" style="font-size: 14px; background: white;"
| |
− | |-
| |
− | ! Device
| |
− | | The USB device to unbind from
| |
− | |-
| |
− | ! Interrface
| |
− | | The USB interface to unbind from (or nil for whole device)
| |
− | |-
| |
− | ! Return
| |
− | | USB_STATUS_SUCCESS if completed or another error code on failure
| |
− | |-
| |
− | |}
| |
− | </div></div>
| |
− | <br />
| |
− | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
| |
− | <pre style="border: 0; padding-bottom:0px;">procedure USBMouseReportWorker(Request:PUSBRequest);</pre>
| |
− | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Called (by a Worker thread) to process a completed USB request from a USB mouse IN interrupt endpoint</div>
| |
− | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
| |
− | {| class="wikitable" style="font-size: 14px; background: white;"
| |
− | |-
| |
− | ! Request
| |
− | | The USB request which has completed
| |
− | |-
| |
− | |}
| |
− | </div></div>
| |
− | <br />
| |
− | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
| |
− | <pre style="border: 0; padding-bottom:0px;">procedure USBMouseReportComplete(Request:PUSBRequest);</pre>
| |
− | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Called when a USB request from a USB mouse IN interrupt endpoint completes</div>
| |
− | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
| |
− | {| class="wikitable" style="font-size: 14px; background: white;"
| |
− | |-
| |
− | ! Request
| |
− | | The USB request which has completed
| |
− | |-
| |
− | ! Note
| |
− | | Request is passed to worker thread for processing to prevent blocking the USB completion
| |
| |- | | |- |
| |} | | |} |
Line 1,363: |
Line 1,255: |
| ! Note | | ! Note |
| | None documented | | | None documented |
− | |-
| |
− | |}
| |
− | </div></div>
| |
− | <br />
| |
− |
| |
− | '''USB mouse helper functions'''
| |
− |
| |
− | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
| |
− | <pre style="border: 0; padding-bottom:0px;">function USBMouseCheckDevice(Device:PUSBDevice):Boolean;</pre>
| |
− | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check if the supplied USB device is suitable for detection as a HID Mouse Device</div>
| |
− | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
| |
− | {| class="wikitable" style="font-size: 14px; background: white;"
| |
− | |-
| |
− | ! Device
| |
− | | The USB device to check
| |
− | |-
| |
− | ! Return
| |
− | | True if the device is suitable or False if it is not
| |
− | |-
| |
− | |}
| |
− | </div></div>
| |
− | <br />
| |
− | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
| |
− | <pre style="border: 0; padding-bottom:0px;">function USBMouseDeviceSetProtocol(Mouse:PUSBMouseDevice; Protocol:Byte):LongWord;</pre>
| |
− | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Set the report protocol for a USB mouse device</div>
| |
− | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
| |
− | {| class="wikitable" style="font-size: 14px; background: white;"
| |
− | |-
| |
− | ! Mouse
| |
− | | The USB mouse device to set the report protocol for
| |
− | |-
| |
− | ! Protocol
| |
− | | The report protocol to set (eg USB_HID_PROTOCOL_BOOT)
| |
− | |-
| |
− | ! Return
| |
− | | USB_STATUS_SUCCESS if completed or another USB error code on failure
| |
− | |-
| |
− | |}
| |
− | </div></div>
| |
− | <br />
| |
− | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
| |
− | <pre style="border: 0; padding-bottom:0px;">function USBMouseDeviceGetHIDDescriptor(Mouse:PUSBMouseDevice; Descriptor:PUSBHIDDescriptor):LongWord;</pre>
| |
− | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the HID Descriptor for a USB mouse device</div>
| |
− | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
| |
− | {| class="wikitable" style="font-size: 14px; background: white;"
| |
− | |-
| |
− | ! Mouse
| |
− | | The USB mouse device to get the descriptor for
| |
− | |-
| |
− | ! Descriptor
| |
− | | Pointer to a USB HID Descriptor structure for the returned data
| |
− | |-
| |
− | ! Return
| |
− | | USB_STATUS_SUCCESS if completed or another USB error code on failure
| |
− | |-
| |
− | |}
| |
− | </div></div>
| |
− | <br />
| |
− | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
| |
− | <pre style="border: 0; padding-bottom:0px;">function USBMouseDeviceGetReportDescriptor(Mouse:PUSBMouseDevice; Descriptor:Pointer; Size:LongWord):LongWord;</pre>
| |
− | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the Report Descriptor for a USB mouse device</div>
| |
− | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
| |
− | {| class="wikitable" style="font-size: 14px; background: white;"
| |
− | |-
| |
− | ! Mouse
| |
− | | The USB mouse device to get the descriptor for
| |
− | |-
| |
− | ! Descriptor
| |
− | | Pointer to a buffer to return the USB Report Descriptor
| |
− | |-
| |
− | ! Size
| |
− | | The size in bytes of the buffer pointed to by Descriptor
| |
− | |-
| |
− | ! Return
| |
− | | USB_STATUS_SUCCESS if completed or another USB error code on failure
| |
| |- | | |- |
| |} | | |} |
Revision as of 04:02, 11 November 2022
Return to Unit Reference
Description
Ultibo Mouse Interface unit
Mouse Devices
This unit provides the Mouse device interface and mouse API to be used by both drivers and applications.
The API includes functions to create, register, locate, read, write, control and configure each connected mouse device.
The API supports a global mouse buffer so multiple devices can feed data into a common buffer as well as a buffer per device to allow each device to be used for a specific purpose. For example an application with two separate displays may choose to have a mouse or pointing device to control each one individually.
Constants
[Expand]
Mouse specific constants MOUSE_*
MOUSE_NAME_PREFIX = 'Mouse';
|
Name prefix for Mouse Devices
|
[Expand]
Mouse device type MOUSE_TYPE_*
MOUSE_TYPE_NONE = 0;
|
|
MOUSE_TYPE_USB = 1;
|
|
MOUSE_TYPE_PS2 = 2;
|
|
MOUSE_TYPE_SERIAL = 3;
|
|
|
MOUSE_TYPE_MAX = 3;
|
|
[Expand]
Mouse device state MOUSE_STATE_*
MOUSE_STATE_DETACHED = 0;
|
|
MOUSE_STATE_DETACHING = 1;
|
|
MOUSE_STATE_ATTACHING = 2;
|
|
MOUSE_STATE_ATTACHED = 3;
|
|
|
MOUSE_STATE_MAX = 3;
|
|
[Expand]
Mouse device flag MOUSE_FLAG_*
MOUSE_FLAG_NONE = $00000000;
|
|
MOUSE_FLAG_NON_BLOCK = $00000001;
|
If set device reads are non blocking (Also supported in Flags parameter of MouseReadEx)
|
MOUSE_FLAG_DIRECT_READ = $00000002;
|
If set device writes mouse data to its local buffer which must be read using MouseDeviceRead
|
MOUSE_FLAG_SWAP_BUTTONS = $00000004;
|
If set left and right mouse buttons will be swapped in mouse data
|
MOUSE_FLAG_PEEK_BUFFER = $00000008;
|
Peek at the buffer to see if any data is available, don't remove it. (Used only in Flags parameter of MouseReadEx)
|
MOUSE_FLAG_SWAP_XY = $00000010;
|
If set swap the X and Y coordinates
|
MOUSE_FLAG_INVERT_X = $00000020;
|
If set invert the X coordinate
|
MOUSE_FLAG_INVERT_Y = $00000040;
|
If set invert the Y coordinate
|
MOUSE_FLAG_SWAP_MAX_XY = $00000080;
|
If set swap the maximum X and Y values
|
|
Flags supported by MOUSE_CONTROL_GET/SET/CLEAR_FLAG
|
MOUSE_FLAG_MASK = MOUSE_FLAG_NON_BLOCK or MOUSE_FLAG_DIRECT_READ or MOUSE_FLAG_SWAP_BUTTONS or MOUSE_FLAG_SWAP_XY or MOUSE_FLAG_INVERT_X or MOUSE_FLAG_INVERT_Y or MOUSE_FLAG_SWAP_MAX_XY;
|
[Expand]
Mouse device control code MOUSE_CONTROL_*
MOUSE_CONTROL_GET_FLAG = 1;
|
Get Flag
|
MOUSE_CONTROL_SET_FLAG = 2;
|
Set Flag
|
MOUSE_CONTROL_CLEAR_FLAG = 3;
|
Clear Flag
|
MOUSE_CONTROL_FLUSH_BUFFER = 4;
|
Flush Buffer
|
MOUSE_CONTROL_GET_SAMPLE_RATE = 5;
|
Get Sample Rate
|
MOUSE_CONTROL_SET_SAMPLE_RATE = 6;
|
Set Sample Rate
|
MOUSE_CONTROL_GET_MAX_X = 7;
|
Get Maximum X value (Only applies to Absolute X values)
|
MOUSE_CONTROL_GET_MAX_Y = 8;
|
Get Maximum Y value (Only applies to Absolute Y values)
|
MOUSE_CONTROL_GET_MAX_WHEEL = 9;
|
Get Maximum Wheel value (Only applies to Absolute Wheel values)
|
MOUSE_CONTROL_GET_MAX_BUTTONS = 10;
|
Get Maximum Buttons mask (eg MOUSE_LEFT_BUTTON or MOUSE_RIGHT_BUTTON etc)
|
MOUSE_CONTROL_GET_ROTATION = 11;
|
Get Rotation value (0, 90, 180, 270) (Only where supported by the driver)
|
MOUSE_CONTROL_SET_ROTATION = 12;
|
Set Rotation value (0, 90, 180, 270) (Only where supported by the driver)
|
[Expand]
Mouse buffer size MOUSE_BUFFER_*
[Expand]
Mouse sampling rate MOUSE_SAMPLE_*
MOUSE_SAMPLE_RATE = 100;
|
100 samples/sec
|
[Expand]
Mouse data definition MOUSE_LEFT_*, MOUSE_RIGHT_*
Values for TMouseData.Buttons
|
|
MOUSE_LEFT_BUTTON = $0001;
|
The Left mouse button is pressed
|
MOUSE_RIGHT_BUTTON = $0002;
|
The Right mouse button is pressed
|
MOUSE_MIDDLE_BUTTON = $0004;
|
The Middle mouse button is pressed
|
MOUSE_SIDE_BUTTON = $0008;
|
The Side mouse button is pressed
|
MOUSE_EXTRA_BUTTON = $0010;
|
The Extra mouse button is pressed
|
MOUSE_TOUCH_BUTTON = $0020;
|
The Touch screen is being touched
|
MOUSE_ABSOLUTE_X = $0040;
|
The OffsetX value is absolute not relative
|
MOUSE_ABSOLUTE_Y = $0080;
|
The OffsetY value is absolute not relative
|
MOUSE_ABSOLUTE_WHEEL = $0100;
|
The OffsetWheel value is absolute not relative
|
[Expand]
Mouse rotation MOUSE_ROTATION_*
MOUSE_ROTATION_0 = FRAMEBUFFER_ROTATION_0;
|
No rotation
|
MOUSE_ROTATION_90 = FRAMEBUFFER_ROTATION_90;
|
90 degree rotation
|
MOUSE_ROTATION_180 = FRAMEBUFFER_ROTATION_180;
|
180 degree rotation
|
MOUSE_ROTATION_270 = FRAMEBUFFER_ROTATION_270;
|
270 degree rotation
|
[Expand]
Mouse logging MOUSE_LOG_*
MOUSE_LOG_LEVEL_DEBUG = LOG_LEVEL_DEBUG;
|
Mouse debugging messages
|
MOUSE_LOG_LEVEL_INFO = LOG_LEVEL_INFO;
|
Mouse informational messages, such as a device being attached or detached
|
MOUSE_LOG_LEVEL_WARN = LOG_LEVEL_WARN;
|
Mouse warning messages
|
MOUSE_LOG_LEVEL_ERROR = LOG_LEVEL_ERROR;
|
Mouse error messages
|
MOUSE_LOG_LEVEL_NONE = LOG_LEVEL_NONE;
|
No Mouse messages
|
[Expand]
USB mouse specific constants USBMOUSE_*
Note: The following constants are duplicated with the USBMouse unit for backwards compatibility
|
[Expand]
USB HID types USB_HID_*
See USB HID v1.11 specification
|
USB_HID_SUBCLASS_NONE = 0;
|
Section 4.2
|
USB_HID_SUBCLASS_BOOT = 1;
|
Section 4.2
|
|
HID Interface Protocol types (See USB HID v1.11 specification)
|
USB_HID_BOOT_PROTOCOL_NONE = 0;
|
Section 4.3
|
USB_HID_BOOT_PROTOCOL_KEYBOARD = 1;
|
Section 4.3
|
USB_HID_BOOT_PROTOCOL_MOUSE = 2;
|
Section 4.3
|
|
HID Class Descriptor Types (See USB HID v1.11 specification)
|
USB_HID_DESCRIPTOR_TYPE_HID = $21;
|
Section 7.1
|
USB_HID_DESCRIPTOR_TYPE_REPORT = $22;
|
Section 7.1
|
USB_HID_DESCRIPTOR_TYPE_PHYSICAL_DESCRIPTOR = $23;
|
Section 7.1
|
|
HID Request types
|
USB_HID_REQUEST_GET_REPORT = $01;
|
|
USB_HID_REQUEST_GET_IDLE = $02;
|
|
USB_HID_REQUEST_GET_PROTOCOL = $03;
|
Section 7.2
|
USB_HID_REQUEST_SET_REPORT = $09;
|
|
USB_HID_REQUEST_SET_IDLE = $0A;
|
|
USB_HID_REQUEST_SET_PROTOCOL = $0B;
|
Section 7.2
|
|
HID Protocol types
|
USB_HID_PROTOCOL_BOOT = 0;
|
Section 7.2.5
|
USB_HID_PROTOCOL_REPORT = 1;
|
Section 7.2.5
|
|
HID Report types
|
USB_HID_REPORT_INPUT = 1;
|
Section 7.2.1
|
USB_HID_REPORT_OUTPUT = 2;
|
Section 7.2.1
|
USB_HID_REPORT_FEATURE = 3;
|
Section 7.2.1
|
|
HID Report IDs
|
USB_HID_REPORTID_NONE = 0;
|
Section 7.2.1
|
|
HID Boot Protocol Button bits
|
USB_HID_BOOT_LEFT_BUTTON = (1 shl 0);
|
|
USB_HID_BOOT_RIGHT_BUTTON = (1 shl 1);
|
|
USB_HID_BOOT_MIDDLE_BUTTON = (1 shl 2);
|
|
USB_HID_BOOT_SIDE_BUTTON = (1 shl 3);
|
|
USB_HID_BOOT_EXTRA_BUTTON = (1 shl 4);
|
|
|
HID Boot Protocol Report data
|
USB_HID_BOOT_REPORT_SIZE = 3;
|
Appendix B of HID Device Class Definition 1.11
|
USB_HID_BOOT_DATA_SIZE = 8;
|
Allocate more than the minimum to allow for extra data
|
Type definitions
Mouse data
[Expand]
PMouseData = ^TMouseData;
TMouseData = record
Buttons:Word;
|
The bitmap of current button values (eg MOUSE_LEFT_BUTTON or MOUSE_RIGHT_BUTTON)
|
OffsetX:SmallInt;
|
The X offset of the mouse pointer (May be negative, read as absolute if Buttons includes MOUSE_ABSOLUTE_X)
|
OffsetY:SmallInt;
|
The Y offset of the mouse pointer (May be negative, read as absolute if Buttons includes MOUSE_ABSOLUTE_Y)
|
OffsetWheel:SmallInt;
|
The X offset of the mouse pointer (May be negative, read as absolute if Buttons includes MOUSE_ABSOLUTE_WHEEL)
|
MaximumX:Word;
|
The maximum X value of the mouse (Only applicable if Buttons includes MOUSE_ABSOLUTE_X, otherwise must be 0)
|
MaximumY:Word;
|
The maximum Y value of the mouse (Only applicable if Buttons includes MOUSE_ABSOLUTE_Y, otherwise must be 0)
|
MaximumWheel:Word;
|
The maximum Wheel value of the mouse (Only applicable if Buttons includes MOUSE_ABSOLUTE_WHEEL, otherwise must be 0)
|
Reserved:Word;
|
Reserved field (Round structure to 16 bytes)
|
Mouse buffer
[Expand]
PMouseBuffer = ^TMouseBuffer;
TMouseBuffer = record
Wait:TSemaphoreHandle;
|
Buffer ready semaphore
|
Start:LongWord;
|
Index of first buffer ready
|
Count:LongWord;
|
Number of entries ready in buffer
|
Buffer:array[0..(MOUSE_BUFFER_SIZE - 1)] of TMouseData;
|
|
Mouse properties
[Expand]
PMouseProperties = ^TMouseProperties;
TMouseProperties = record
Flags:LongWord;
|
Device flags (eg MOUSE_FLAG_SWAP_BUTTONS)
|
Rotation:LongWord;
|
Screen Rotation (eg MOUSE_ROTATION_180)
|
MaxX:LongWord;
|
Maximum (absolute) X value for the mouse device
|
MaxY:LongWord;
|
Maximum (absolute) Y value for the mouse device
|
MaxWheel:LongWord;
|
Maximum (absolute) wheel value for the mouse device
|
MaxButtons:LongWord;
|
Maximum buttons mask (eg MOUSE_LEFT_BUTTON or MOUSE_RIGHT_BUTTON etc)
|
Mouse enumeration callback
TMouseEnumerate = function(Mouse:PMouseDevice; Data:Pointer):LongWord;
|
|
Mouse notification callback
TMouseNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;
|
|
Mouse device read
TMouseDeviceRead = function(Mouse:PMouseDevice; Buffer:Pointer; Size:LongWord; var Count:LongWord):LongWord;
|
|
Mouse device update
TMouseDeviceUpdate = function(Mouse:PMouseDevice):LongWord; stdcall;
|
|
Mouse device control
TMouseDeviceControl = function(Mouse:PMouseDevice; Request:Integer; Argument1:LongWord; var Argument2:LongWord):LongWord;
|
|
Mouse device get properties
TMouseDeviceGetProperties = function(Mouse:PMouseDevice; Properties:PMouseProperties):LongWord; stdcall;
|
|
Mouse device types
[Expand]
PMouseDevice = ^TMouseDevice;
TMouseDevice = record
Device Properties
|
Device:TDevice;
|
The Device entry for this Mouse
|
Mouse Properties
|
MouseId:LongWord;
|
Unique Id of this Mouse in the Mouse table
|
MouseState:LongWord;
|
Mouse state (eg MOUSE_STATE_ATTACHED)
|
MouseRate:LongWord;
|
Mouse sample rate (Samples per second)
|
DeviceRead:TMouseDeviceRead;
|
A Device specific DeviceRead method implementing a standard Mouse device interface (Or nil if the default method is suitable)
|
DeviceUpdate:TMouseDeviceUpdate;
|
A Device specific DeviceUpdate method implementing a standard Mouse device interface (Or nil if the default method is suitable)
|
DeviceControl:TMouseDeviceControl;
|
A Device specific DeviceControl method implementing a standard Mouse device interface (Or nil if the default method is suitable)
|
DeviceGetProperties:TMouseDeviceGetProperties;
|
A Device specific DeviceGetProperties method implementing a standard Mouse device interface (Or nil if the default method is suitable)
|
Driver Properties
|
Lock:TMutexHandle;
|
Mouse lock
|
Buffer:TMouseBuffer;
|
Mouse input buffer
|
Properties:TMouseProperties;
|
Device properties
|
Statistics Properties
|
ReceiveCount:LongWord;
|
|
ReceiveErrors:LongWord;
|
|
BufferOverruns:LongWord;
|
|
Internal Properties
|
Prev:PMouseDevice;
|
Previous entry in Mouse table
|
Next:PMouseDevice;
|
Next entry in Mouse table
|
USB HID descriptor
[Expand]
PUSBHIDDescriptor = ^TUSBHIDDescriptor;
TUSBHIDDescriptor = packed record
bLength:Byte;
|
|
bDescriptorType:Byte;
|
|
bcdHID:Word;
|
|
bCountryCode:Byte;
|
|
bNumDescriptors:Byte;
|
|
bHIDDescriptorType:Byte;
|
|
wHIDDescriptorLength:Word;
|
|
Note: Up to two optional bHIDDescriptorType/wHIDDescriptorLength pairs after the Report descriptor details
|
Public variables
Mouse logging
MOUSE_DEFAULT_LOG_LEVEL:LongWord = MOUSE_LOG_LEVEL_DEBUG;
|
Minimum level for Mouse messages. Only messages with level greater than or equal to this will be printed.
|
MOUSE_LOG_ENABLED:Boolean;
|
|
Function declarations
Initialization functions
[Expand]
procedure MouseInit;
Description: Initialize the mouse unit and device table
Note
|
Called only during system startup
|
Mouse functions
[Expand]
function MousePeek:LongWord;
Description: Peek at the global mouse buffer to see if any data packets are ready
Return
|
ERROR_SUCCESS if packets are ready, ERROR_NO_MORE_ITEMS if not or another error code on failure
|
[Expand]
function MouseRead(Buffer:Pointer; Size:LongWord; var Count:LongWord):LongWord; inline;
Description: Read mouse data packets from the global mouse buffer
Buffer
|
Pointer to a buffer to copy the mouse data packets to
|
Size
|
The size of the buffer in bytes (Must be at least TMouseData or greater)
|
Count
|
The number of mouse data packets copied to the bufferm
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function MouseReadEx(Buffer:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;
Description: Read mouse data packets from the global mouse buffer
Buffer
|
Pointer to a buffer to copy the mouse data packets to
|
Size
|
The size of the buffer in bytes (Must be at least TMouseData or greater)
|
Flags
|
The flags for the behaviour of the read (eg MOUSE_FLAG_NON_BLOCK)
|
Count
|
The number of mouse data packets copied to the buffer
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function MouseWrite(Buffer:Pointer; Size,Count:LongWord):LongWord;
Description: Write mouse data packets to the global mouse buffer
Buffer
|
Pointer to a buffer to copy the mouse data packets from
|
Size
|
The size of the buffer in bytes (Must be at least TMouseData or greater)
|
Count
|
The number of mouse data packets to copy from the buffer
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function MouseFlush:LongWord;
Description: Flush the contents of the global mouse buffer
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function MouseDeviceRead(Mouse:PMouseDevice; Buffer:Pointer; Size:LongWord; var Count:LongWord):LongWord;
Description: Read mouse data packets from the buffer of the specified mouse
Mouse
|
The mouse device to read from
|
Buffer
|
Pointer to a buffer to copy the mouse data packets to
|
Size
|
The size of the buffer in bytes (Must be at least TMouseData or greater)
|
Count
|
The number of mouse data packets copied to the buffer
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function MouseDeviceUpdate(Mouse:PMouseDevice):LongWord;
Description: Request the specified mouse device to update the current configuration
Mouse
|
The mouse device to update
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
Note
|
Items updated can include rotation, maximum X, Y and wheel and flags (If supported)
|
[Expand]
function MouseDeviceControl(Mouse:PMouseDevice; Request:Integer; Argument1:LongWord; var Argument2:LongWord):LongWord;
Description: Perform a control request on the specified mouse device
Mouse
|
The mouse device to control
|
Request
|
The request code for the operation (eg MOUSE_CONTROL_GET_FLAG)
|
Argument1
|
The first argument for the operation (Dependent on request code)
|
Argument2
|
The second argument for the operation (Dependent on request code)
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function MouseDeviceGetProperties(Mouse:PMouseDevice; Properties:PMouseProperties):LongWord;
Description: Get the properties for the specified mouse device
Mouse
|
The mouse device to get properties from
|
Properties
|
Pointer to a TMouseProperties structure to fill in
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function MouseDeviceSetState(Mouse:PMouseDevice; State:LongWord):LongWord;
Description: Set the state of the specified mouse and send a notification
Mouse
|
The mouse to set the state for
|
State
|
The new state to set and notify
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function MouseDeviceCreate:PMouseDevice;
Description: Create a new Mouse device entry
Return
|
Pointer to new Mouse device entry or nil if mouse could not be created
|
[Expand]
function MouseDeviceCreateEx(Size:LongWord):PMouseDevice;
Description: Create a new Mouse device entry
Size
|
Size in bytes to allocate for new mouse (Including the mouse device entry)
|
Return
|
Pointer to new Mouse device entry or nil if mouse could not be created
|
[Expand]
function MouseDeviceDestroy(Mouse:PMouseDevice):LongWord;
Description: Destroy an existing Mouse device entry
Mouse
|
The mouse device to destroy
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function MouseDeviceRegister(Mouse:PMouseDevice):LongWord;
Description: Register a new Mouse device in the Mouse table
Mouse
|
The mouse device to register
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function MouseDeviceDeregister(Mouse:PMouseDevice):LongWord;
Description: Deregister a Mouse device from the Mouse table
Mouse
|
The mouse device to deregister
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function MouseDeviceFind(MouseId:LongWord):PMouseDevice;
Description: Find a mouse device by ID in the mouse table
MouseId
|
The ID number of the mouse to find
|
Return
|
Pointer to mouse device entry or nil if not found
|
[Expand]
function MouseDeviceFindByName(const Name:String):PMouseDevice; inline;
Description: Find a mouse device by name in the mouse table
Name
|
The name of the mouse to find (eg Mouse0)
|
Return
|
Pointer to mouse device entry or nil if not found
|
[Expand]
function MouseDeviceFindByDescription(const Description:String):PMouseDevice; inline;
Description: Find a mouse device by description in the mouse table
Description
|
The description of the mouse to find (eg USB HID Mouse)
|
Return
|
Pointer to mouse device entry or nil if not found
|
[Expand]
function MouseDeviceEnumerate(Callback:TMouseEnumerate; Data:Pointer):LongWord;
Description: Enumerate all mouse devices in the mouse table
Callback
|
The callback function to call for each mouse in the table
|
Data
|
A private data pointer to pass to callback for each mouse in the table
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function MouseDeviceNotification(Mouse:PMouseDevice; Callback:TMouseNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
Description: Register a notification for mouse device changes
Mouse
|
The mouse device to notify changes for (Optional, pass nil for all mice)
|
Callback
|
The function to call when a notification event occurs
|
Data
|
A private data pointer to pass to callback when a notification event occurs
|
Notification
|
The events to register for notification of (eg DEVICE_NOTIFICATION_REGISTER)
|
Flags
|
The flags to control the notification (eg NOTIFIER_FLAG_WORKER)
|
RTL console functions
[Expand]
function SysConsoleHideMouse(AUserData:Pointer):Boolean;
Description: Handler for Platform ConsoleHideMouse function
[Expand]
function SysConsoleShowMouse(X,Y:LongWord; AUserData:Pointer):Boolean;
Description: Handler for Platform ConsoleShowMouse function
[Expand]
function SysConsoleReadMouse(var X,Y,Buttons:LongWord; AUserData:Pointer):Boolean;
Description: Handler for Platform ConsoleReadMouse function
Mouse helper functions
[Expand]
function MouseGetCount:LongWord; inline;
Description: Get the current mouse count
[Expand]
function MouseDeviceCheck(Mouse:PMouseDevice):PMouseDevice;
Description: Check if the supplied Mouse is in the mouse table
[Expand]
function MouseDeviceTypeToString(MouseType:LongWord):String;
Description: To be documented
[Expand]
function MouseDeviceStateToString(MouseState:LongWord):String;
Description: To be documented
[Expand]
function MouseDeviceRotationToString(Rotation:LongWord):String;
Description: Return a string describing the supplied mouse rotation value
[Expand]
function MouseDeviceStateToNotification(State:LongWord):LongWord;
Description: Convert a Mouse state value into the notification code for device notifications
[Expand]
function MouseDeviceResolveRotation(ARotation:LongWord):LongWord;
Description: Resolve a value of 0, 90, 180 or 270 to a mouse rotation constant (eg MOUSE_ROTATION_180)
Note
|
Also accepts passing the mouse rotation constant values directly
|
[Expand]
function MouseInsertData(Mouse:PMouseDevice; Data:PMouseData; Signal:Boolean):LongWord;
Description: Insert a TMouseData entry into the mouse buffer (Direct or Global)
Mouse
|
The mouse device to insert data for
|
Data
|
The TMouseData entry to insert
|
Signal
|
If True then signal that new data is available in the buffer
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
Note
|
Caller must hold the mouse lock
|
[Expand]
procedure MouseLog(Level:LongWord; Mouse:PMouseDevice; const AText:String);
Description: To be documented
[Expand]
procedure MouseLogInfo(Mouse:PMouseDevice; const AText:String); inline;
Description: To be documented
[Expand]
procedure MouseLogWarn(Mouse:PMouseDevice; const AText:String); inline;
Description: To be documented
[Expand]
procedure MouseLogError(Mouse:PMouseDevice; const AText:String); inline;
Description: To be documented
[Expand]
procedure MouseLogDebug(Mouse:PMouseDevice;const AText:String); inline;
Description: To be documented
Return to Unit Reference