Difference between revisions of "Unit Mouse"
(9 intermediate revisions by the same user not shown) | |||
Line 7: | Line 7: | ||
'''Ultibo Mouse Interface unit''' | '''Ultibo Mouse Interface unit''' | ||
− | This unit provides | + | '''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 === | === Constants === | ||
Line 268: | Line 274: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | | | + | |colspan="2"|Note: The following constants are duplicated with the USBMouse unit for backwards compatibility |
− | | | + | |
|- | |- | ||
− | | | + | |} |
− | + | </div></div> | |
− | + | <br /> | |
− | + | <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> | |
− | | | + | <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"|''HID Interface Subclass types (See USB HID v1.11 specification)'' | ||
Line 457: | Line 463: | ||
| <code>Buffer:array[0..(MOUSE_BUFFER_SIZE - 1)] of TMouseData; </code> | | <code>Buffer:array[0..(MOUSE_BUFFER_SIZE - 1)] of TMouseData; </code> | ||
| | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Mouse properties''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PMouseProperties = ^TMouseProperties;</code> | ||
+ | |||
+ | <code>TMouseProperties = record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>Flags:LongWord;</code> | ||
+ | | Device flags (eg MOUSE_FLAG_SWAP_BUTTONS) | ||
+ | |- | ||
+ | | <code>Rotation:LongWord;</code> | ||
+ | | Screen Rotation (eg MOUSE_ROTATION_180) | ||
+ | |- | ||
+ | | <code>MaxX:LongWord;</code> | ||
+ | | Maximum (absolute) X value for the mouse device | ||
+ | |- | ||
+ | | <code>MaxY:LongWord;</code> | ||
+ | | Maximum (absolute) Y value for the mouse device | ||
+ | |- | ||
+ | | <code>MaxWheel:LongWord;</code> | ||
+ | | Maximum (absolute) wheel value for the mouse device | ||
+ | |- | ||
+ | | <code>MaxButtons:LongWord;</code> | ||
+ | | Maximum buttons mask (eg MOUSE_LEFT_BUTTON or MOUSE_RIGHT_BUTTON etc) | ||
|- | |- | ||
|} | |} | ||
Line 484: | Line 520: | ||
|- | |- | ||
| <code>TMouseDeviceRead = function(Mouse:PMouseDevice; Buffer:Pointer; Size:LongWord; var Count:LongWord):LongWord;</code> | | <code>TMouseDeviceRead = function(Mouse:PMouseDevice; Buffer:Pointer; Size:LongWord; var Count:LongWord):LongWord;</code> | ||
+ | | style="width: 40%;"| | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''Mouse device update''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TMouseDeviceUpdate = function(Mouse:PMouseDevice):LongWord; stdcall;</code> | ||
| style="width: 40%;"| | | style="width: 40%;"| | ||
|- | |- | ||
Line 492: | Line 537: | ||
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
|- | |- | ||
− | | <code>TMouseDeviceControl = function(Mouse:PMouseDevice; Request:Integer; Argument1: | + | | <code>TMouseDeviceControl = function(Mouse:PMouseDevice; Request:Integer; Argument1:PtrUInt; var Argument2:PtrUInt):LongWord;</code> |
+ | | style="width: 40%;"| | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''Mouse device get properties''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TMouseDeviceGetProperties = function(Mouse:PMouseDevice; Properties:PMouseProperties):LongWord; stdcall;</code> | ||
| style="width: 40%;"| | | style="width: 40%;"| | ||
|- | |- | ||
Line 524: | Line 578: | ||
| <code>DeviceRead:TMouseDeviceRead;</code> | | <code>DeviceRead:TMouseDeviceRead;</code> | ||
| A Device specific DeviceRead method implementing a standard Mouse device interface (Or nil if the default method is suitable) | | A Device specific DeviceRead method implementing a standard Mouse device interface (Or nil if the default method is suitable) | ||
+ | |- | ||
+ | | <code>DeviceUpdate:TMouseDeviceUpdate;</code> | ||
+ | | A Device specific DeviceUpdate method implementing a standard Mouse device interface (Or nil if the default method is suitable) | ||
|- | |- | ||
| <code>DeviceControl:TMouseDeviceControl;</code> | | <code>DeviceControl:TMouseDeviceControl;</code> | ||
| A Device specific DeviceControl method implementing a standard Mouse device interface (Or nil if the default method is suitable) | | A Device specific DeviceControl method implementing a standard Mouse device interface (Or nil if the default method is suitable) | ||
+ | |- | ||
+ | | <code>DeviceGetProperties:TMouseDeviceGetProperties;</code> | ||
+ | | A Device specific DeviceGetProperties method implementing a standard Mouse device interface (Or nil if the default method is suitable) | ||
|- | |- | ||
|colspan="2"|''Driver Properties'' | |colspan="2"|''Driver Properties'' | ||
Line 535: | Line 595: | ||
| <code>Buffer:TMouseBuffer;</code> | | <code>Buffer:TMouseBuffer;</code> | ||
| Mouse input buffer | | Mouse input buffer | ||
+ | |- | ||
+ | | <code>Properties:TMouseProperties;</code> | ||
+ | | Device properties | ||
|- | |- | ||
|colspan="2"|''Statistics Properties'' | |colspan="2"|''Statistics Properties'' | ||
Line 592: | Line 655: | ||
|} | |} | ||
</div></div> | </div></div> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<br /> | <br /> | ||
Line 662: | 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 | + | <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 808: | Line 831: | ||
<br /> | <br /> | ||
<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;">function MouseDeviceControl(Mouse:PMouseDevice; Request:Integer; Argument1: | + | <pre style="border: 0; padding-bottom:0px;">function MouseDeviceControl(Mouse:PMouseDevice; Request:Integer; Argument1:PtrUInt; var Argument2:PtrUInt):LongWord;</pre> |
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Perform a control request on the specified mouse device</div> | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Perform a control request on the specified mouse device</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;"> | ||
Line 1,066: | Line 1,089: | ||
<br /> | <br /> | ||
− | ''' | + | '''Mouse helper functions''' |
<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;">function | + | <pre style="border: 0; padding-bottom:0px;">function MouseGetCount:LongWord;</pre> |
− | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' | + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the current mouse count</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;" | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
! Note | ! Note | ||
− | | | + | | None documented |
|- | |- | ||
|} | |} | ||
</div></div> | </div></div> | ||
<br /> | <br /> | ||
− | |||
− | |||
− | |||
<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;">function | + | <pre style="border: 0; padding-bottom:0px;">function MouseDeviceCheck(Mouse:PMouseDevice):PMouseDevice;</pre> |
− | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' | + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check if the supplied Mouse is in the mouse 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,147: | Line 1,116: | ||
<br /> | <br /> | ||
<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;">function | + | <pre style="border: 0; padding-bottom:0px;">function MouseDeviceTypeToString(MouseType:LongWord):String;</pre> |
− | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' | + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</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,159: | Line 1,128: | ||
<br /> | <br /> | ||
<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;">function | + | <pre style="border: 0; padding-bottom:0px;">function MouseDeviceStateToString(MouseState:LongWord):String;</pre> |
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div> | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</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;"> | ||
Line 1,171: | Line 1,140: | ||
<br /> | <br /> | ||
<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;">function | + | <pre style="border: 0; padding-bottom:0px;">function MouseDeviceRotationToString(Rotation:LongWord):String;</pre> |
− | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' | + | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' Return a string describing the supplied mouse rotation value</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,286: | Line 1,255: | ||
! Note | ! Note | ||
| None documented | | None documented | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
|} | |} |
Latest revision as of 03:41, 15 December 2022
Return to Unit Reference
Contents
[hide]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
MOUSE_*
MOUSE_TYPE_*
MOUSE_STATE_*
MOUSE_FLAG_*
MOUSE_CONTROL_*
MOUSE_BUFFER_*
MOUSE_SAMPLE_*
MOUSE_LEFT_*, MOUSE_RIGHT_*
MOUSE_ROTATION_*
MOUSE_LOG_*
USBMOUSE_*
USB_HID_*
Type definitions
Mouse data
Mouse buffer
Mouse properties
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:PtrUInt; var Argument2:PtrUInt):LongWord;
|
Mouse device get properties
TMouseDeviceGetProperties = function(Mouse:PMouseDevice; Properties:PMouseProperties):LongWord; stdcall;
|
Mouse device types
USB HID descriptor
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
Mouse functions
function MousePeek:LongWord;
function MouseRead(Buffer:Pointer; Size:LongWord; var Count:LongWord):LongWord; inline;
function MouseReadEx(Buffer:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;
function MouseWrite(Buffer:Pointer; Size,Count:LongWord):LongWord;
function MouseDeviceRead(Mouse:PMouseDevice; Buffer:Pointer; Size:LongWord; var Count:LongWord):LongWord;
function MouseDeviceUpdate(Mouse:PMouseDevice):LongWord;
function MouseDeviceControl(Mouse:PMouseDevice; Request:Integer; Argument1:PtrUInt; var Argument2:PtrUInt):LongWord;
function MouseDeviceGetProperties(Mouse:PMouseDevice; Properties:PMouseProperties):LongWord;
function MouseDeviceSetState(Mouse:PMouseDevice; State:LongWord):LongWord;
function MouseDeviceCreateEx(Size:LongWord):PMouseDevice;
function MouseDeviceDestroy(Mouse:PMouseDevice):LongWord;
function MouseDeviceRegister(Mouse:PMouseDevice):LongWord;
function MouseDeviceDeregister(Mouse:PMouseDevice):LongWord;
function MouseDeviceFind(MouseId:LongWord):PMouseDevice;
function MouseDeviceFindByName(const Name:String):PMouseDevice; inline;
function MouseDeviceFindByDescription(const Description:String):PMouseDevice; inline;
function MouseDeviceEnumerate(Callback:TMouseEnumerate; Data:Pointer):LongWord;
function MouseDeviceNotification(Mouse:PMouseDevice; Callback:TMouseNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
RTL console functions
function SysConsoleHideMouse(AUserData:Pointer):Boolean;
function SysConsoleShowMouse(X,Y:LongWord; AUserData:Pointer):Boolean;
function SysConsoleReadMouse(var X,Y,Buttons:LongWord; AUserData:Pointer):Boolean;
Mouse helper functions
function MouseDeviceCheck(Mouse:PMouseDevice):PMouseDevice;
function MouseDeviceStateToString(MouseState:LongWord):String;
function MouseDeviceRotationToString(Rotation:LongWord):String;
function MouseDeviceStateToNotification(State:LongWord):LongWord;
function MouseDeviceResolveRotation(ARotation:LongWord):LongWord;
function MouseInsertData(Mouse:PMouseDevice; Data:PMouseData; Signal:Boolean):LongWord;
procedure MouseLog(Level:LongWord; Mouse:PMouseDevice; const AText:String);
procedure MouseLogInfo(Mouse:PMouseDevice; const AText:String); inline;
procedure MouseLogWarn(Mouse:PMouseDevice; const AText:String); inline;
procedure MouseLogError(Mouse:PMouseDevice; const AText:String); inline;
procedure MouseLogDebug(Mouse:PMouseDevice;const AText:String); inline;
Return to Unit Reference