Difference between revisions of "Unit Mouse"
From Ultibo.org
Line 312: | Line 312: | ||
---- | ---- | ||
− | '' | + | |
+ | '''Mouse data''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PMouseData = ^TMouseData;</code> | ||
+ | |||
+ | <code>TMouseData = record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>Buttons:Word;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>OffsetX:SmallInt;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>OffsetY:SmallInt;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>OffsetWheel:SmallInt;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Mouse buffer''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PMouseBuffer = ^TMouseBuffer;</code> | ||
+ | |||
+ | <code>TMouseBuffer = record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>Wait:TSemaphoreHandle;</code> | ||
+ | | Buffer ready semaphore | ||
+ | |- | ||
+ | | <code>Start:LongWord;</code> | ||
+ | | Index of first buffer ready | ||
+ | |- | ||
+ | | <code>Count:LongWord;</code> | ||
+ | | Number of entries ready in buffer | ||
+ | |- | ||
+ | | <code>Buffer:array[0..(MOUSE_BUFFER_SIZE - 1)] of TMouseData; </code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | |||
+ | '''Mouse enumeration callback''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TMouseEnumerate = function(Mouse:PMouseDevice; Data:Pointer):LongWord;</code> | ||
+ | | style="width: 40%;"| | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''Mouse notification callback''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TMouseNotification = function(Device:PDevice; Data:Pointer; Notification:LongWord):LongWord;</code> | ||
+ | | style="width: 40%;"| | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''Mouse device read''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TMouseDeviceRead = function(Mouse:PMouseDevice; Buffer:Pointer; Size:LongWord; var Count:LongWord):LongWord;</code> | ||
+ | | style="width: 40%;"| | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''Mouse device control''' | ||
+ | |||
+ | {| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;" | ||
+ | |- | ||
+ | | <code>TMouseDeviceControl = function(Mouse:PMouseDevice; Request:Integer; Argument1:LongWord; var Argument2:LongWord):LongWord;</code> | ||
+ | | style="width: 40%;"| | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | '''Mouse device types''' | ||
+ | |||
+ | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
+ | <code>PMouseDevice = ^TMouseDevice;</code> | ||
+ | |||
+ | <code>TMouseDevice = record</code> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | |colspan="2"|''Device Properties'' | ||
+ | |- | ||
+ | | <code>Device:TDevice;</code> | ||
+ | | The Device entry for this Mouse | ||
+ | |- | ||
+ | |colspan="2"|''Mouse Properties'' | ||
+ | |- | ||
+ | | <code>MouseId:LongWord;</code> | ||
+ | | Unique Id of this Mouse in the Mouse table | ||
+ | |- | ||
+ | | <code>MouseState:LongWord;</code> | ||
+ | | Mouse state (eg MOUSE_STATE_ATTACHED) | ||
+ | |- | ||
+ | | <code>DeviceRead:TMouseDeviceRead;</code> | ||
+ | | A Device specific DeviceRead method implementing a standard Mouse device interface (Or nil if the default method is suitable) | ||
+ | |- | ||
+ | | <code>DeviceControl:TMouseDeviceControl;</code> | ||
+ | | A Device specific DeviceControl method implementing a standard Mouse device interface (Or nil if the default method is suitable) | ||
+ | |- | ||
+ | |colspan="2"|''Driver Properties'' | ||
+ | |- | ||
+ | | <code>Lock:TMutexHandle;</code> | ||
+ | | Mouse lock | ||
+ | |- | ||
+ | | <code>Buffer:TMouseBuffer;</code> | ||
+ | | Mouse input buffer | ||
+ | |- | ||
+ | |colspan="2"|''Statistics Properties'' | ||
+ | |- | ||
+ | | <code>ReceiveCount:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>ReceiveErrors:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>BufferOverruns:LongWord;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"|''Internal Properties'' | ||
+ | |- | ||
+ | | <code>Prev:PMouseDevice;</code> | ||
+ | | Previous entry in Mouse table | ||
+ | |- | ||
+ | | <code>Next:PMouseDevice;</code> | ||
+ | | Next entry in Mouse table | ||
+ | |- | ||
+ | |} | ||
+ | </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>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 /> | ||
=== Public variables === | === Public variables === |
Revision as of 02:22, 22 January 2017
Return to Unit Reference
Contents
[hide]Description
Ultibo Mouse interface unit
This unit provides both the Mouse device interface and the generic USB HID mouse driver.
Constants
[Expand]
Mouse specific constants
MOUSE_*
[Expand]
Mouse device type constants
MOUSE_TYPE_*
[Expand]
Mouse device state constants
MOUSE_STATE_*
[Expand]
Mouse device flag constants
MOUSE_FLAG_*
[Expand]
Mouse device control code constants
MOUSE_CONTROL_*
[Expand]
Mouse buffer size constants
MOUSE_BUFFER_*
[Expand]
Mouse data definition constants
MOUSE_LEFT_*, MOUSE_RIGHT_*
[Expand]
Mouse logging constants
MOUSE_LOG_*
[Expand]
USB mouse specific constants
USBMOUSE_*
Type definitions
Mouse data
Mouse buffer
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 control
TMouseDeviceControl = function(Mouse:PMouseDevice; Request:Integer; Argument1:LongWord; var Argument2:LongWord):LongWord;
|
Mouse device types
USB mouse device types
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, device table and USB mouse driver
Mouse functions
[Expand]
function MousePeek:LongWord;
Description: Peek at the global mouse buffer to see if any data packets are ready
[Expand]
function MouseRead(Buffer:Pointer; Size:LongWord; var Count:LongWord):LongWord;
Description: Read mouse data packets from the global mouse buffer
[Expand]
function MouseReadEx(Buffer:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;
Description: Read mouse data packets from the global mouse buffer
[Expand]
function MouseWrite(Buffer:Pointer; Size,Count:LongWord):LongWord;
Description: Write mouse data packets to the global mouse buffer
[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
[Expand]
function MouseDeviceControl(Mouse:PMouseDevice; Request:Integer; Argument1:LongWord; var Argument2:LongWord):LongWord;
Description: Perform a control request on the specified mouse device
[Expand]
function MouseDeviceSetState(Mouse:PMouseDevice; State:LongWord):LongWord;
Description: Set the state of the specified mouse and send a notification
[Expand]
function MouseDeviceCreateEx(Size:LongWord):PMouseDevice;
Description: Create a new Mouse device entry
[Expand]
function MouseDeviceDestroy(Mouse:PMouseDevice):LongWord;
Description: Destroy an existing Mouse device entry
[Expand]
function MouseDeviceRegister(Mouse:PMouseDevice):LongWord;
Description: Register a new Mouse device in the Mouse table
[Expand]
function MouseDeviceDeregister(Mouse:PMouseDevice):LongWord;
Description: Deregister a Mouse device from the Mouse table
[Expand]
function MouseDeviceFind(MouseId:LongWord):PMouseDevice;
Description: Find a mouse device by ID in the mouse table
[Expand]
function MouseDeviceFindByName(const Name:String):PMouseDevice; inline;
Description: Find a mouse device by name in the mouse table
[Expand]
function MouseDeviceFindByDescription(const Description:String):PMouseDevice; inline;
Description: Find a mouse device by description in the mouse table
[Expand]
function MouseDeviceEnumerate(Callback:TMouseEnumerate; Data:Pointer):LongWord;
Description: Enumerate all mouse devices in the mouse table
[Expand]
function MouseDeviceNotification(Mouse:PMouseDevice; Callback:TMouseNotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
Description: Register a notification for mouse device changes
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
USB mouse functions
[Expand]
function USBMouseDeviceRead(Mouse:PMouseDevice; Buffer:Pointer; Size:LongWord; var Count:LongWord):LongWord;
Description: Implementation of MouseDeviceRead API for USB Mouse
[Expand]
function USBMouseDeviceControl(Mouse:PMouseDevice; Request:Integer; Argument1:LongWord; var Argument2:LongWord):LongWord;
Description: Implementation of MouseDeviceControl API for USB Mouse
[Expand]
function USBMouseDriverBind(Device:PUSBDevice; Interrface:PUSBInterface):LongWord;
Description: Bind the Mouse driver to a USB device if it is suitable
[Expand]
function USBMouseDriverUnbind(Device:PUSBDevice; Interrface:PUSBInterface):LongWord;
Description: Unbind the Mouse driver from a USB device
[Expand]
procedure USBMouseReportWorker(Request:PUSBRequest);
Description: Called (by a Worker thread) to process a completed USB request from a USB mouse IN interrupt endpoint
[Expand]
procedure USBMouseReportComplete(Request:PUSBRequest);
Description: Called when a USB request from a USB mouse IN interrupt endpoint completes
Mouse helper functions
[Expand]
function MouseDeviceCheck(Mouse:PMouseDevice):PMouseDevice;
Description: Check if the supplied Mouse is in the mouse table
[Expand]
function MouseDeviceStateToString(MouseState:LongWord):String;
Description: To be documented
[Expand]
function MouseDeviceStateToNotification(State:LongWord):LongWord;
Description: Convert a Mouse state value into the notification code for device notifications
[Expand]
procedure MouseLog(Level:LongWord; Mouse:PMouseDevice; const AText:String);
Description: To be documented
[Expand]
procedure MouseLogInfo(Mouse:PMouseDevice; const AText:String);
Description: To be documented
[Expand]
procedure MouseLogError(Mouse:PMouseDevice; const AText:String);
Description: To be documented
[Expand]
procedure MouseLogDebug(Mouse:PMouseDevice; const AText:String);
Description: To be documented
USB mouse helper functions
[Expand]
function USBMouseDeviceSetProtocol(Mouse:PUSBMouseDevice; Protocol:Byte):LongWord;
Description: Set the report protocol for a USB mouse device
Return to Unit Reference