Difference between revisions of "Unit USBMOUSE"

From Ultibo.org
Jump to: navigation, search
(Created page with "Return to Unit Reference === Description === ---- ''To be documented'' === Constants === ---- ''To be documented'' === Type definitions === ---- ''To...")
 
 
(2 intermediate revisions by the same user not shown)
Line 5: Line 5:
 
----
 
----
  
''To be documented''
+
'''Ultibo USB Mouse Driver unit'''
 +
 
 +
'''USB Mouse Devices'''
 +
 
 +
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. It is retained here for legacy uses and backwards compatibility only.
 +
 +
To use this driver in place of the default HID Mouse driver set the following configuration variables in your application during system initialization.
 +
HID_REGISTER_MOUSE := False;
 +
USB_MOUSE_REGISTER_DRIVER := True;
 +
This driver does not recognize devices that do not report themselves as boot mice, does not correctly recognize the wheel on many devices and is known to be incompatible with the touch pad included in some portable wireless keyboards.
  
 
=== Constants ===
 
=== Constants ===
 
----
 
----
  
''To be documented''
+
 
 +
<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 mouse specific constants''' <code> USBMOUSE_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>USBMOUSE_DRIVER_NAME = 'USB Mouse Driver (HID boot protocol)';</code>
 +
| Name of USB mouse driver
 +
|-
 +
| <code>USBMOUSE_MOUSE_DESCRIPTION = 'USB HID Mouse';</code>
 +
| Description of USB mouse device
 +
|-
 +
|}
 +
</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)''
 +
|-
 +
| <code>USB_HID_SUBCLASS_NONE = 0;</code>
 +
| Section 4.2
 +
|-
 +
| <code>USB_HID_SUBCLASS_BOOT = 1;</code>
 +
| Section 4.2
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
|colspan="2"|''HID Interface Protocol types (See USB HID v1.11 specification)''
 +
|-
 +
| <code>USB_HID_BOOT_PROTOCOL_NONE = 0;</code>
 +
| Section 4.3
 +
|-
 +
| <code>USB_HID_BOOT_PROTOCOL_KEYBOARD = 1;</code>
 +
| Section 4.3
 +
|-
 +
| <code>USB_HID_BOOT_PROTOCOL_MOUSE = 2;</code>
 +
| Section 4.3
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
|colspan="2"|''HID Class Descriptor Types (See USB HID v1.11 specification)''
 +
|-
 +
| <code>USB_HID_DESCRIPTOR_TYPE_HID = $21;</code>
 +
| Section 7.1
 +
|-
 +
| <code>USB_HID_DESCRIPTOR_TYPE_REPORT = $22;</code>
 +
| Section 7.1
 +
|-
 +
| <code>USB_HID_DESCRIPTOR_TYPE_PHYSICAL_DESCRIPTOR = $23;</code>
 +
| Section 7.1
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
|colspan="2"|''HID Request types''
 +
|-
 +
| <code>USB_HID_REQUEST_GET_REPORT = $01;</code>
 +
| &nbsp;
 +
|-
 +
| <code>USB_HID_REQUEST_GET_IDLE = $02;</code>
 +
| &nbsp;
 +
|-
 +
| <code>USB_HID_REQUEST_GET_PROTOCOL = $03;</code>
 +
| Section 7.2
 +
|-
 +
| <code>USB_HID_REQUEST_SET_REPORT = $09;</code>
 +
| &nbsp;
 +
|-
 +
| <code>USB_HID_REQUEST_SET_IDLE = $0A;</code>
 +
| &nbsp;
 +
|-
 +
| <code>USB_HID_REQUEST_SET_PROTOCOL = $0B;</code>
 +
| Section 7.2
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
|colspan="2"|''HID Protocol types''
 +
|-
 +
| <code>USB_HID_PROTOCOL_BOOT = 0;</code>
 +
| Section 7.2.5
 +
|-
 +
| <code>USB_HID_PROTOCOL_REPORT = 1;</code>
 +
| Section 7.2.5
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
|colspan="2"|''HID Report types''
 +
|-
 +
| <code>USB_HID_REPORT_INPUT = 1;</code>
 +
| Section 7.2.1
 +
|-
 +
| <code>USB_HID_REPORT_OUTPUT = 2;</code>
 +
| Section 7.2.1
 +
|-
 +
| <code>USB_HID_REPORT_FEATURE = 3;</code>
 +
| Section 7.2.1
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
|colspan="2"|''HID Report IDs''
 +
|-
 +
| <code>USB_HID_REPORTID_NONE = 0;</code>
 +
| Section 7.2.1
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
|colspan="2"|''HID Boot Protocol Button bits''
 +
|-
 +
| <code>USB_HID_BOOT_LEFT_BUTTON = (1 shl 0);</code>
 +
| &nbsp;
 +
|-
 +
| <code>USB_HID_BOOT_RIGHT_BUTTON = (1 shl 1);</code>
 +
| &nbsp;
 +
|-
 +
| <code>USB_HID_BOOT_MIDDLE_BUTTON = (1 shl 2);</code>
 +
| &nbsp;
 +
|-
 +
| <code>USB_HID_BOOT_SIDE_BUTTON = (1 shl 3);</code>
 +
| &nbsp;
 +
|-
 +
| <code>USB_HID_BOOT_EXTRA_BUTTON = (1 shl 4);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
|colspan="2"|''HID Boot Protocol Report data''
 +
|-
 +
| <code>USB_HID_BOOT_REPORT_SIZE = 3;</code>
 +
| Appendix B of HID Device Class Definition 1.11
 +
|-
 +
| <code>USB_HID_BOOT_DATA_SIZE = 8;</code>
 +
| Allocate more than the minimum to allow for extra data
 +
|-
 +
|}
 +
</div></div>
 +
<br />
  
 
=== Type definitions ===
 
=== Type definitions ===
 
----
 
----
  
''To be documented''
+
 
 +
'''USB HID descriptor'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PUSBHIDDescriptor = ^TUSBHIDDescriptor;</code>
 +
 
 +
<code>TUSBHIDDescriptor = packed record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>bLength:Byte;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>bDescriptorType:Byte;</code>
 +
| &nbsp;
 +
|-
 +
| <code>bcdHID:Word;</code>
 +
| &nbsp;
 +
|-
 +
| <code>bCountryCode:Byte;</code>
 +
| &nbsp;
 +
|-
 +
| <code>bNumDescriptors:Byte;</code>
 +
| &nbsp;
 +
|-
 +
| <code>bHIDDescriptorType:Byte;</code>
 +
| &nbsp;
 +
|-
 +
| <code>wHIDDescriptorLength:Word;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|Note: Up to two optional bHIDDescriptorType/wHIDDescriptorLength pairs after the Report descriptor details
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''USB mouse device'''
 +
 
 +
<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>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 />
  
 
=== Public variables ===
 
=== Public variables ===
 
----
 
----
  
''To be documented''
+
''None defined''
  
 
=== Function declarations ===
 
=== Function declarations ===
 
----
 
----
  
''To be documented''
 
  
 +
 +
'''Initialization 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;">procedure USBMouseInit;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Initialize the USB mouse driver</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Called only during system startup
 +
|-
 +
|}
 +
</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
 +
|-
 +
|}
 +
</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
 +
|-
 +
|}
 +
</div></div>
 +
<br />
  
 
Return to [[Unit_Reference|Unit Reference]]
 
Return to [[Unit_Reference|Unit Reference]]

Latest revision as of 04:02, 16 November 2022

Return to Unit Reference


Description


Ultibo USB Mouse Driver unit

USB Mouse Devices

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. It is retained here for legacy uses and backwards compatibility only.

To use this driver in place of the default HID Mouse driver set the following configuration variables in your application during system initialization.

HID_REGISTER_MOUSE := False;
USB_MOUSE_REGISTER_DRIVER := True;

This driver does not recognize devices that do not report themselves as boot mice, does not correctly recognize the wheel on many devices and is known to be incompatible with the touch pad included in some portable wireless keyboards.

Constants



USB mouse specific constants USBMOUSE_*
USBMOUSE_DRIVER_NAME = 'USB Mouse Driver (HID boot protocol)'; Name of USB mouse driver
USBMOUSE_MOUSE_DESCRIPTION = 'USB HID Mouse'; Description of USB mouse device


USB HID types USB_HID_*
HID Interface Subclass types (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



USB HID descriptor

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

USB mouse device

PUSBMouseDevice = ^TUSBMouseDevice;

TUSBMouseDevice = record

Mouse Properties
Mouse:TMouseDevice;  
USB Properties
HIDInterface:PUSBInterface; USB HID Mouse Interface
ReportRequest:PUSBRequest; USB request for mouse report data
ReportEndpoint:PUSBEndpointDescriptor; USB Mouse Interrupt IN Endpoint
HIDDescriptor:PUSBHIDDescriptor; USB HID Descriptor for mouse
ReportDescriptor:Pointer; USB HID Report Descriptor for mouse
PendingCount:LongWord; Number of USB requests pending for this mouse
WaiterThread:TThreadId; Thread waiting for pending requests to complete (for mouse detachment)


Public variables


None defined

Function declarations



Initialization functions

procedure USBMouseInit;
Description: Initialize the USB mouse driver
Note Called only during system startup


USB mouse functions

function USBMouseDriverBind(Device:PUSBDevice; Interrface:PUSBInterface):LongWord;
Description: Bind the Mouse driver to a USB device if it is suitable
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.


function USBMouseDriverUnbind(Device:PUSBDevice; Interrface:PUSBInterface):LongWord;
Description: Unbind the Mouse driver from a USB device
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


procedure USBMouseReportWorker(Request:PUSBRequest);
Description: Called (by a Worker thread) to process a completed USB request from a USB mouse IN interrupt endpoint
Request The USB request which has completed


procedure USBMouseReportComplete(Request:PUSBRequest);
Description: Called when a USB request from a USB mouse IN interrupt endpoint completes
Request The USB request which has completed
Note Request is passed to worker thread for processing to prevent blocking the USB completion


USB mouse helper functions

function USBMouseCheckDevice(Device:PUSBDevice):Boolean;
Description: Check if the supplied USB device is suitable for detection as a HID Mouse Device
Device The USB device to check
Return True if the device is suitable or False if it is not


function USBMouseDeviceSetProtocol(Mouse:PUSBMouseDevice; Protocol:Byte):LongWord;
Description: Set the report protocol for a USB mouse device
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


function USBMouseDeviceGetHIDDescriptor(Mouse:PUSBMouseDevice; Descriptor:PUSBHIDDescriptor):LongWord;
Description: Get the HID Descriptor for a USB mouse device
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


function USBMouseDeviceGetReportDescriptor(Mouse:PUSBMouseDevice; Descriptor:Pointer; Size:LongWord):LongWord;
Description: Get the Report Descriptor for a USB mouse device
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


Return to Unit Reference