Difference between revisions of "Unit Mouse"

From Ultibo.org
Jump to: navigation, search
Line 312: Line 312:
 
----
 
----
  
''To be documented''
+
 
 +
'''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%;"|&nbsp;
 +
|-
 +
| <code>OffsetX:SmallInt;</code>
 +
| &nbsp;
 +
|-
 +
| <code>OffsetY:SmallInt;</code>
 +
| &nbsp;
 +
|-
 +
| <code>OffsetWheel:SmallInt;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</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>
 +
| &nbsp;
 +
|-
 +
|}
 +
</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>
 +
| &nbsp;
 +
|-
 +
| <code>ReceiveErrors:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>BufferOverruns:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|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>
 +
| &nbsp;
 +
|-
 +
|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


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

[Expand]

PMouseData = ^TMouseData;

TMouseData = record

Mouse buffer

[Expand]

PMouseBuffer = ^TMouseBuffer;

TMouseBuffer = record

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

[Expand]

PMouseDevice = ^TMouseDevice;

TMouseDevice = record

USB mouse device types

[Expand]

PUSBMouseDevice = ^TUSBMouseDevice;

TUSBMouseDevice = record


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 MouseFlush:LongWord;
Description: Flush the contents of 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 MouseDeviceCreate:PMouseDevice;
Description: Create a new Mouse device entry


[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 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 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