Difference between revisions of "Unit USBCDCACM"

From Ultibo.org
Jump to: navigation, search
 
(8 intermediate revisions by the same user not shown)
Line 9: Line 9:
 
The Abstract Control Model (ACM) is part of the USB Communications Device Class (CDC) standard which allows modem like devices to be supported by USB with a standardized protocol for data transfer and modem control.
 
The Abstract Control Model (ACM) is part of the USB Communications Device Class (CDC) standard which allows modem like devices to be supported by USB with a standardized protocol for data transfer and modem control.
 
   
 
   
A CDC ACM device is defined by information in the interface descriptors and is not specific to any product and vendor ID. There are numerous devices that support the CDC ACM protocol and some of the most important from Ultibo are the Arduino Mega 2560 R3 and the Arduino Due.
+
A CDC ACM device is defined by information in the interface descriptors and is not specific to any product and vendor Id. There are numerous devices that support the CDC ACM protocol and some of the most important from Ultibo are the Arduino Mega 2560 R3 and the Arduino Due.
 
   
 
   
 
This driver presents any device recognized as a CDC ACM as a generic serial interface device that can be accessed using the API in the Serial unit. It should not be necessary to directly call any of the functions in this unit from application code.
 
This driver presents any device recognized as a CDC ACM as a generic serial interface device that can be accessed using the API in the Serial unit. It should not be necessary to directly call any of the functions in this unit from application code.
Line 68: Line 68:
 
<br />  
 
<br />  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''CDC ACM USB request constants''' <code> CDCACM_USB_REQUEST_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''CDC ACM USB request''' <code> CDCACM_USB_REQUEST_* </code></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 79: Line 79:
 
<br />  
 
<br />  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''CDC ACM device quirk constants''' <code> CDCACM_QUIRK_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''CDC ACM device quirk''' <code> CDCACM_QUIRK_* </code></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 108: Line 108:
 
|-
 
|-
 
| <code>CDCACM_QUIRK_SEND_ZERO_PACKET = $00000080;</code>
 
| <code>CDCACM_QUIRK_SEND_ZERO_PACKET = $00000080;</code>
 +
| &nbsp;
 +
|-
 +
| <code>CDCACM_QUIRK_DISABLE_ECHO = $00000100;</code>
 
| &nbsp;
 
| &nbsp;
 
|-
 
|-
Line 114: Line 117:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''CDC ACM device ID constants''' <code> CDCACM_DEVICE_ID_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''CDC ACM device Id''' <code> CDCACM_DEVICE_ID_* </code></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;"
 
|-
 
|-
| <code>CDCACM_DEVICE_ID_COUNT = 39;</code>
+
| <code>CDCACM_DEVICE_ID_COUNT = 49;</code>
 
| Number of supported Device IDs
 
| Number of supported Device IDs
 
|-
 
|-
Line 136: Line 139:
 
| <code>(idVendor:$0e8d;idProduct:$0003;Quirks:CDCACM_QUIRK_NO_UNION_NORMAL),</code>
 
| <code>(idVendor:$0e8d;idProduct:$0003;Quirks:CDCACM_QUIRK_NO_UNION_NORMAL),</code>
 
| FIREFLY, MediaTek Inc (has no union descriptor)
 
| FIREFLY, MediaTek Inc (has no union descriptor)
 +
|-
 +
| <code>(idVendor:$0e8d;idProduct:$2000;Quirks:CDCACM_QUIRK_DISABLE_ECHO),</code>
 +
| MediaTek Inc Preloader
 
|-
 
|-
 
| <code>(idVendor:$0e8d;idProduct:$3329;Quirks:CDCACM_QUIRK_NO_UNION_NORMAL),</code>
 
| <code>(idVendor:$0e8d;idProduct:$3329;Quirks:CDCACM_QUIRK_NO_UNION_NORMAL),</code>
Line 154: Line 160:
 
| <code>(idVendor:$0ace;idProduct:$1611;Quirks:CDCACM_QUIRK_SINGLE_RX_URB),</code>
 
| <code>(idVendor:$0ace;idProduct:$1611;Quirks:CDCACM_QUIRK_SINGLE_RX_URB),</code>
 
| ZyDAS 56K USB MODEM - new version (firmware bug)
 
| ZyDAS 56K USB MODEM - new version (firmware bug)
 +
|-
 +
| <code>(idVendor:$11ca;idProduct:$0201;Quirks:CDCACM_QUIRK_SINGLE_RX_URB),</code>
 +
| VeriFone Mx870 Gadget Serial
 +
|-
 +
| <code>(idVendor:$1965;idProduct:$0018;Quirks:CDCACM_QUIRK_NO_UNION_NORMAL),</code>
 +
| Uniden UBC125XLT
 
|-
 
|-
 
| <code>(idVendor:$22b8;idProduct:$7000;Quirks:CDCACM_QUIRK_NO_UNION_NORMAL),</code>
 
| <code>(idVendor:$22b8;idProduct:$7000;Quirks:CDCACM_QUIRK_NO_UNION_NORMAL),</code>
Line 168: Line 180:
 
|-
 
|-
 
| <code>(idVendor:$0572;idProduct:$1328;Quirks:CDCACM_QUIRK_NO_UNION_NORMAL),</code>
 
| <code>(idVendor:$0572;idProduct:$1328;Quirks:CDCACM_QUIRK_NO_UNION_NORMAL),</code>
| Shiro / Aztech USB MODEM UM-3100 (has no union descriptor)
+
| Shiro/Aztech USB MODEM UM-3100 (has no union descriptor)
 +
|-
 +
| <code>(idVendor:$0572;idProduct:$1349;Quirks:CDCACM_QUIRK_NO_UNION_NORMAL),</code>
 +
| Hiro (Conexant) USB MODEM H50228
 
|-
 
|-
 
| <code>(idVendor:$20df;idProduct:$0001;Quirks:CDCACM_QUIRK_CONTROL_LINE_STATE),</code>
 
| <code>(idVendor:$20df;idProduct:$0001;Quirks:CDCACM_QUIRK_CONTROL_LINE_STATE),</code>
Line 175: Line 190:
 
| <code>(idVendor:$2184;idProduct:$001c;Quirks:CDCACM_QUIRK_NONE),</code>
 
| <code>(idVendor:$2184;idProduct:$001c;Quirks:CDCACM_QUIRK_NONE),</code>
 
| GW Instek AFG-2225
 
| GW Instek AFG-2225
 +
|-
 +
| <code>(idVendor:$2184;idProduct:$0036;Quirks:CDCACM_QUIRK_NONE),</code>
 +
| GW Instek AFG-125
 
|-
 
|-
 
| <code>(idVendor:$22b8;idProduct:$6425;Quirks:CDCACM_QUIRK_NONE),</code>
 
| <code>(idVendor:$22b8;idProduct:$6425;Quirks:CDCACM_QUIRK_NONE),</code>
Line 219: Line 237:
 
| <code>(idVendor:$1576;idProduct:$03b1;Quirks:CDCACM_QUIRK_NO_UNION_NORMAL),</code>
 
| <code>(idVendor:$1576;idProduct:$03b1;Quirks:CDCACM_QUIRK_NO_UNION_NORMAL),</code>
 
| Maretron USB100 (reports zero length descriptor)
 
| Maretron USB100 (reports zero length descriptor)
 +
|-
 +
| <code>(idVendor:$fff0;idProduct:$0100;Quirks:CDCACM_QUIRK_NO_UNION_NORMAL),</code>
 +
| DATECS FP-2000
 +
|-
 +
| <code>(idVendor:$09d8;idProduct:$0320;Quirks:CDCACM_QUIRK_NO_UNION_NORMAL),</code>
 +
| Elatec GmbH TWN3
 +
|-
 +
| <code>(idVendor:$0ca6;idProduct:$a050;Quirks:CDCACM_QUIRK_NO_UNION_NORMAL),</code>
 +
| Castles VEGA3000
 
|-
 
|-
 
| <code>(idVendor:$2912;idProduct:$0001;Quirks:CDCACM_QUIRK_CLEAR_HALT_CONDITIONS),</code>
 
| <code>(idVendor:$2912;idProduct:$0001;Quirks:CDCACM_QUIRK_CLEAR_HALT_CONDITIONS),</code>
Line 248: Line 275:
 
| <code>(idVendor:$058b;idProduct:$0041;Quirks:CDCACM_QUIRK_IGNORE_DEVICE),</code>
 
| <code>(idVendor:$058b;idProduct:$0041;Quirks:CDCACM_QUIRK_IGNORE_DEVICE),</code>
 
| &nbsp;
 
| &nbsp;
 +
|-
 +
| <code>(idVendor:$1bc7;idProduct:$0021;Quirks:CDCACM_QUIRK_SEND_ZERO_PACKET),</code>
 +
| Telit 3G ACM only composition
 +
|-
 +
| <code>(idVendor:$1bc7;idProduct:$0023;Quirks:CDCACM_QUIRK_SEND_ZERO_PACKET),</code>
 +
| Telit 3G ACM + ECM composition
 
|-
 
|-
 
| <code>(idVendor:$1519;idProduct:$0452;Quirks:CDCACM_QUIRK_SEND_ZERO_PACKET));</code>
 
| <code>(idVendor:$1519;idProduct:$0452;Quirks:CDCACM_QUIRK_SEND_ZERO_PACKET));</code>
Line 256: Line 289:
 
<br />  
 
<br />  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''CDC ACM interface ID constants''' <code> CDCACM_INTERFACE_ID_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''CDC ACM interface Id''' <code> CDCACM_INTERFACE_ID_* </code></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;"
 
|-
 
|-
 
| <code>CDCACM_INTERFACE_ID_COUNT = 7;</code>
 
| <code>CDCACM_INTERFACE_ID_COUNT = 7;</code>
| Number of supported Interface IDs
+
| Number of supported Interface Ids
 
|-
 
|-
 
|colspan="2"|&nbsp;
 
|colspan="2"|&nbsp;
Line 293: Line 326:
 
<br />  
 
<br />  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''CDC ACM device and interface ID constants''' <code> CDCACM_DEVICE_INTERFACE_ID_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''CDC ACM device and interface Id''' <code> CDCACM_DEVICE_INTERFACE_ID_* </code></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 489: Line 522:
 
----
 
----
  
''To be documented''
+
 
 +
'''CDC ACM device Id'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PCDCACMDeviceId = ^TCDCACMDeviceId;</code>
 +
 
 +
<code>TCDCACMDeviceId = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>idVendor:Word;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>idProduct:Word;</code>
 +
| &nbsp;
 +
|-
 +
| <code>Quirks:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''CDC ACM device'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PCDCACMDevice = ^TCDCACMDevice;</code>
 +
 
 +
<code>TCDCACMDevice = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''Serial Properties''
 +
|-
 +
| <code>Serial:TSerialDevice;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''USB Properties''
 +
|-
 +
| <code>Quirks:LongWord;</code>
 +
| Unusual behaviours of specific chip versions
 +
|-
 +
| <code>ReceiveSize:LongWord;</code>
 +
| Maximum Receive size for Bulk IN Endpoint
 +
|-
 +
| <code>TransmitSize:LongWord;</code>
 +
| Maximum Transmit size for Bulk OUT Endpoint
 +
|-
 +
| <code>ReceiveActive:LongBool;</code>
 +
| True if a Receive request is currently in progress
 +
|-
 +
| <code>TransmitActive:LongBool;</code>
 +
| True if a Transmit request is currently in progress
 +
|-
 +
| <code>DataInterface:PUSBInterface;</code>
 +
| USB interface for data requests
 +
|-
 +
| <code>ControlInterface:PUSBInterface;</code>
 +
| USB interface for control requests
 +
|-
 +
| <code>ReceiveRequest:PUSBRequest;</code>
 +
| USB request Bulk IN Endpoint
 +
|-
 +
| <code>ReceiveEndpoint:PUSBEndpointDescriptor;</code>
 +
| CDC ACM Bulk IN Endpoint
 +
|-
 +
| <code>TransmitRequest:PUSBRequest;</code>
 +
| USB request for Bulk OUT Endpoint
 +
|-
 +
| <code>TransmitEndpoint:PUSBEndpointDescriptor;</code>
 +
| CDC ACM Bulk OUT Endpoint
 +
|-
 +
| <code>InterruptRequest:PUSBRequest;</code>
 +
| USB request for Interrupt IN Endpoint
 +
|-
 +
| <code>InterruptEndpoint:PUSBEndpointDescriptor;</code>
 +
| CDC ACM Interrupt IN Endpoint
 +
|-
 +
| <code>PendingCount:LongWord;</code>
 +
| Number of USB requests pending for this device
 +
|-
 +
| <code>WaiterThread:TThreadId;</code>
 +
| Thread waiting for pending requests to complete (for device detachment)
 +
|-
 +
|colspan="2"|''Statistics Properties''
 +
|-
 +
| <code>ReceiveComplete:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>TransmitComplete:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>InterruptComplete:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>InterruptErrors:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div> 
 +
<br />
  
 
=== Public variables ===
 
=== Public variables ===
Line 508: Line 640:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 519: Line 651:
 
<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 CDCACMSerialDeviceOpen(Serial:PSerialDevice; BaudRate,DataBits,StopBits,Parity,FlowControl,ReceiveDepth,TransmitDepth:LongWord):LongWord;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function CDCACMSerialDeviceOpen(Serial:PSerialDevice; BaudRate,DataBits,StopBits,Parity,FlowControl,ReceiveDepth,TransmitDepth:LongWord):LongWord;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SerialDeviceOpen API for CDCACM Serial</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
+
| Not intended to be called directly by applications, use SerialDeviceOpen instead.
 
|-
 
|-
 
|}
 
|}
Line 531: Line 663:
 
<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 CDCACMSerialDeviceClose(Serial:PSerialDevice):LongWord;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function CDCACMSerialDeviceClose(Serial:PSerialDevice):LongWord;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SerialDeviceClose API for CDCACM Serial</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
+
| Not intended to be called directly by applications, use SerialDeviceClose instead.
 
|-
 
|-
 
|}
 
|}
Line 543: Line 675:
 
<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 CDCACMSerialDeviceRead(Serial:PSerialDevice; Buffer:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function CDCACMSerialDeviceRead(Serial:PSerialDevice; Buffer:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SerialDeviceRead API for CDCACM Serial</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
+
| Not intended to be called directly by applications, use SerialDeviceRead instead.
 
|-
 
|-
 
|}
 
|}
Line 555: Line 687:
 
<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 CDCACMSerialDeviceWrite(Serial:PSerialDevice; Buffer:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function CDCACMSerialDeviceWrite(Serial:PSerialDevice; Buffer:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SerialDeviceWrite API for CDCACM Serial</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
+
| Not intended to be called directly by applications, use SerialDeviceWrite instead.
 
|-
 
|-
 
|}
 
|}
Line 574: Line 706:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Device'''
+
! Device
 
| The USB device to attempt to bind to
 
| The USB device to attempt to bind to
 
|-
 
|-
! '''Interrface'''
+
! Interrface
 
| The USB interface to attempt to bind to (or nil for whole device)
 
| The USB interface to attempt to bind to (or nil for whole device)
 
|-
 
|-
! '''Return'''
+
! Return
| USB_STATUS_SUCCESS if completed, USB_STATUS_DEVICE_UNSUPPORTED if unsupported or another error code on failure
+
| USB_STATUS_SUCCESS if completed, USB_STATUS_DEVICE_UNSUPPORTED if unsupported or another error code on failure.
 
|-
 
|-
 
|}
 
|}
Line 592: Line 724:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Device'''
+
! Device
 
| The USB device to unbind from
 
| The USB device to unbind from
 
|-
 
|-
! '''Interrface'''
+
! Interrface
 
| The USB interface to unbind from (or nil for whole device)
 
| The USB interface to unbind from (or nil for whole device)
 
|-
 
|-
! '''Return'''
+
! Return
 
| USB_STATUS_SUCCESS if completed or another error code on failure
 
| USB_STATUS_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 604: Line 736:
 
</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;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure CDCACMReceiveStart(Request:PUSBRequest);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Called to continue reception of data to the receive buffer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Request
 +
| The USB receive request to use
 +
|-
 +
! Note
 +
| Caller must hold the lock on the serial device
 +
|-
 +
|}
 +
</div></div>
 +
<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;">procedure CDCACMReceiveWorker(Request:PUSBRequest);</pre>
 
<pre style="border: 0; padding-bottom:0px;">procedure CDCACMReceiveWorker(Request:PUSBRequest);</pre>
Line 610: Line 757:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Request'''
+
! Request
 
| The USB request which has completed
 
| The USB request which has completed
 
|-
 
|-
Line 622: Line 769:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Request'''
+
! Request
 
| The USB request which has completed
 
| The USB request which has completed
 
|-
 
|-
! '''Note'''
+
! Note
 
| Request is passed to worker thread for processing to prevent blocking the USB completion
 
| Request is passed to worker thread for processing to prevent blocking the USB completion
 
|-
 
|-
Line 637: Line 784:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Request'''
+
! Request
 
| The USB transmit request to use
 
| The USB transmit request to use
 
|-
 
|-
! '''Note'''
+
! Note
 
| Caller must hold the lock on the serial device
 
| Caller must hold the lock on the serial device
 
|-
 
|-
Line 652: Line 799:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Request'''
+
! Request
 
| The USB request which has completed
 
| The USB request which has completed
 
|-
 
|-
Line 664: Line 811:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Request'''
+
! Request
 
| The USB request which has completed
 
| The USB request which has completed
 
|-
 
|-
! '''Note'''
+
! Note
 
| Request is passed to worker thread for processing to prevent blocking the USB completion
 
| Request is passed to worker thread for processing to prevent blocking the USB completion
 
|-
 
|-
Line 679: Line 826:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Request'''
+
! Request
 
| The USB request which has completed
 
| The USB request which has completed
 
|-
 
|-
Line 691: Line 838:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Request'''
+
! Request
 
| The USB request which has completed
 
| The USB request which has completed
 
|-
 
|-
! '''Note'''
+
! Note
 
| Request is passed to worker thread for processing to prevent blocking the USB completion
 
| Request is passed to worker thread for processing to prevent blocking the USB completion
 
|-
 
|-
Line 705: Line 852:
 
<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 CDCACMCheckDevice(Device:PUSBDevice; var Quirks:LongWord):LongWord;</pre>
 
<pre style="border: 0; padding-bottom:0px;">function CDCACMCheckDevice(Device:PUSBDevice; var Quirks:LongWord):LongWord;</pre>
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the Vendor and Device ID against the supported devices</div>
+
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the Vendor and Device Id against the supported devices</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;"
 
|-
 
|-
! '''Device'''
+
! Device
 
| USB device to check
 
| USB device to check
 
|-
 
|-
! '''Quirks'''
+
! Quirks
 
| Return value for any device specific quirks (eg CDCACM_QUIRK_NO_UNION_NORMAL)
 
| Return value for any device specific quirks (eg CDCACM_QUIRK_NO_UNION_NORMAL)
 
|-
 
|-
! '''Return'''
+
! Return
 
| USB_STATUS_SUCCESS if completed or another error code on failure
 
| USB_STATUS_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 727: Line 874:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Device'''
+
! Device
 
| USB device to check
 
| USB device to check
 
|-
 
|-
! '''Interrface'''
+
! Interrface
 
| USB interface to check
 
| USB interface to check
 
|-
 
|-
! '''Return'''
+
! Return
 
| USB_STATUS_SUCCESS if completed or another error code on failure
 
| USB_STATUS_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 745: Line 892:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Device'''
+
! Device
 
| USB device to check
 
| USB device to check
 
|-
 
|-
! '''Interrface'''
+
! Interrface
 
| USB interface to check
 
| USB interface to check
 
|-
 
|-
! '''Return'''
+
! Return
 
| USB_STATUS_SUCCESS if completed or another error code on failure
 
| USB_STATUS_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 763: Line 910:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Device'''
+
! Device
 
| USB device to check
 
| USB device to check
 
|-
 
|-
! '''Interrface'''
+
! Interrface
 
| USB interface to check (Optional)
 
| USB interface to check (Optional)
 
|-
 
|-
! '''DataInterface'''
+
! DataInterface
 
| Return value for the located data interface
 
| Return value for the located data interface
 
|-
 
|-
! '''ControlInterface'''
+
! ControlInterface
 
| Return value for the located control interface
 
| Return value for the located control interface
 
|-
 
|-
! '''Quirks'''
+
! Quirks
 
| Any known quirks for this device from identification (eg CDCACM_QUIRK_NO_UNION_NORMAL)
 
| Any known quirks for this device from identification (eg CDCACM_QUIRK_NO_UNION_NORMAL)
 
|-
 
|-
! '''Capabilities'''
+
! Capabilities
 
| Return value for ACM capabilities (eg USB_CDC_ACM_CAP_LINE)
 
| Return value for ACM capabilities (eg USB_CDC_ACM_CAP_LINE)
 
|-
 
|-
! '''Return'''
+
! Return
 
| USB_STATUS_SUCCESS if completed or another error code on failure
 
| USB_STATUS_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 793: Line 940:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 805: Line 952:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 817: Line 964:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 829: Line 976:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-

Latest revision as of 03:53, 10 May 2019

Return to Unit Reference


Description


USB CDC ACM Driver unit

The Abstract Control Model (ACM) is part of the USB Communications Device Class (CDC) standard which allows modem like devices to be supported by USB with a standardized protocol for data transfer and modem control.

A CDC ACM device is defined by information in the interface descriptors and is not specific to any product and vendor Id. There are numerous devices that support the CDC ACM protocol and some of the most important from Ultibo are the Arduino Mega 2560 R3 and the Arduino Due.

This driver presents any device recognized as a CDC ACM as a generic serial interface device that can be accessed using the API in the Serial unit. It should not be necessary to directly call any of the functions in this unit from application code.

Constants



[Expand]
CDC ACM specific constants CDCACM_*


[Expand]
CDC ACM USB request CDCACM_USB_REQUEST_*


[Expand]
CDC ACM device quirk CDCACM_QUIRK_*


[Expand]
CDC ACM device Id CDCACM_DEVICE_ID_*


[Expand]
CDC ACM interface Id CDCACM_INTERFACE_ID_*


[Expand]
CDC ACM device and interface Id CDCACM_DEVICE_INTERFACE_ID_*


Type definitions



CDC ACM device Id

[Expand]

PCDCACMDeviceId = ^TCDCACMDeviceId;

TCDCACMDeviceId = record

CDC ACM device

[Expand]

PCDCACMDevice = ^TCDCACMDevice;

TCDCACMDevice = record


Public variables


None defined

Function declarations



Initialization functions

[Expand]
procedure CDCACMInit;
Description: To be documented


CDC ACM serial functions

[Expand]
function CDCACMSerialDeviceOpen(Serial:PSerialDevice; BaudRate,DataBits,StopBits,Parity,FlowControl,ReceiveDepth,TransmitDepth:LongWord):LongWord;
Description: Implementation of SerialDeviceOpen API for CDCACM Serial


[Expand]
function CDCACMSerialDeviceClose(Serial:PSerialDevice):LongWord;
Description: Implementation of SerialDeviceClose API for CDCACM Serial


[Expand]
function CDCACMSerialDeviceRead(Serial:PSerialDevice; Buffer:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;
Description: Implementation of SerialDeviceRead API for CDCACM Serial


[Expand]
function CDCACMSerialDeviceWrite(Serial:PSerialDevice; Buffer:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;
Description: Implementation of SerialDeviceWrite API for CDCACM Serial


CDC ACM USB functions

[Expand]
function CDCACMDriverBind(Device:PUSBDevice; Interrface:PUSBInterface):LongWord;
Description: Bind the CDC ACM driver to a USB device if it is suitable


[Expand]
function CDCACMDriverUnbind(Device:PUSBDevice; Interrface:PUSBInterface):LongWord;
Description: Unbind the CDC ACM driver from a USB device


[Expand]
procedure CDCACMReceiveStart(Request:PUSBRequest);
Description: Called to continue reception of data to the receive buffer


[Expand]
procedure CDCACMReceiveWorker(Request:PUSBRequest);
Description: Called (by a Worker thread) to process a completed USB request from the CDC ACM bulk IN endpoint


[Expand]
procedure CDCACMReceiveComplete(Request:PUSBRequest);
Description: Called when a USB request from the CDC ACM bulk IN endpoint completes


[Expand]
procedure CDCACMTransmitStart(Request:PUSBRequest);
Description: Called to continue transmission of data from the transmit buffer


[Expand]
procedure CDCACMTransmitWorker(Request:PUSBRequest);
Description: Called (by a Worker thread) to process a completed USB request to the CDC ACM bulk OUT endpoint


[Expand]
procedure CDCACMTransmitComplete(Request:PUSBRequest);
Description: Called when a USB request to the CDC ACM bulk OUT endpoint completes


[Expand]
procedure CDCACMInterruptWorker(Request:PUSBRequest);
Description: Called (by a Worker thread) to process a completed USB request to the CDC ACM interrupt IN endpoint


[Expand]
procedure CDCACMInterruptComplete(Request:PUSBRequest);
Description: Called when a USB request from the CDC ACM interrupt IN endpoint completes


CDC ACM helper functions

[Expand]
function CDCACMCheckDevice(Device:PUSBDevice; var Quirks:LongWord):LongWord;
Description: Check the Vendor and Device Id against the supported devices


[Expand]
function CDCACMCheckInterface(Device:PUSBDevice; Interrface:PUSBInterface):LongWord;
Description: Check the Interface against the supported devices


[Expand]
function CDCACMCheckDeviceAndInterface(Device:PUSBDevice; Interrface:PUSBInterface):LongWord;
Description: Check the Device and Interface against the supported devices


[Expand]
function CDCACMFindInterfaces(Device:PUSBDevice; Interrface:PUSBInterface; var DataInterface,ControlInterface:PUSBInterface; Quirks:LongWord; var Capabilities:Byte):LongWord;
Description: Locate the data and control interfaces from the functional descriptors


[Expand]
function CDCACMControlRequest(Serial:PCDCACMDevice; Request:Byte; Value:Word; Data:Pointer;Size:Word):LongWord;
Description: To be documented


[Expand]
function CDCACMGetLineRequest(Serial:PCDCACMDevice; var LineCoding:TUSBCDCLineCoding):LongWord;
Description: To be documented


[Expand]
function CDCACMSetLineRequest(Serial:PCDCACMDevice; const LineCoding:TUSBCDCLineCoding):LongWord;
Description: To be documented


[Expand]
function CDCACMSetControlRequest(Serial:PCDCACMDevice; Control:Word):LongWord;
Description: To be documented


Return to Unit Reference