Jump to content

UsbDataTransfer: Difference between revisions

From EDM2
Created page with "==Description== Executes synchronous Bulk or Interrupt Transfer with a specific endpoint. ==Syntax== <pre> ulrc=UsbDataTransfer(Handle,Endpoint,AltInterface,*pulNumBytes,*puc..."
 
W.m.brul (talk | contribs)
updated syntax and added parameter descriptions and example code
Line 4: Line 4:
==Syntax==
==Syntax==
<pre>
<pre>
ulrc=UsbDataTransfer(Handle,Endpoint,AltInterface,*pulNumBytes,*pucData,ulTimeout,usFlags)
ulrc = UsbDataTransfer(Handle,ucEndpoint,ucAltSetting,pulNumBytes,pucData,ulTimeout,usFlags)
 
</pre>
</pre>


==Parameters==
==Parameters==
; Handle :  
; Handle : the Device Handle received from the previous UsbOpen.
 
; ucEndpoint : the Endpoint Number appropriate for the data transfer.
 
; ucAltSetting : the Alternate Setting of the interface having this endpoint.


; Endpoint :  
; ulTimeout : the timeout to wait for completion in milliseconds.


; AltInterface :  
; usFlags : use 1 to transfer all data or 0 to allow less transferred.


; *pulNumBytes :  
''For device-to-host data transfer:''


; *pucData :  
; pulNumBytes : the address of the variable to specify/receive the number of bytes.


; ulTimeout :  
; pucData : the address of the buffer to receive the data bytes transferred.


; usFlags :  
''For host-to-device data transfer:''
 
; pulNumBytes : the address of the variable to specify/receive the number of bytes.
 
; pucData : the address of the buffer with the data bytes to be transferred.


==Return Code==
==Return Code==
 
<pre>
0x0000 - NO_ERROR
</pre>
===Errors===
===Errors===
  [0000] - NO_ERROR
<pre>
  [0006] - ERROR_INVALID_HANDLE
0x0006 - ERROR_INVALID_HANDLE
  [0008] - ERROR_NOT_ENOUGH_MEMORY
0x0008 - ERROR_NOT_ENOUGH_MEMORY
  [0057] - ERROR_INVALID_PARAMETER
0x0057 - ERROR_INVALID_PARAMETER
  [005F] - ERROR_INTERRUPT (95)
0x005F - ERROR_INTERRUPT
  [0122] - ERROR_TOO_MANY_HANDLES (290)
0x0122 - ERROR_TOO_MANY_HANDLES
  [0280] - ERROR_TIMEOUT (640)
0x0280 - ERROR_TIMEOUT
  [1B58] - USB_NOT_INIT (7000)
0x1B58 - USB_NOT_INIT
  [1B5B] - USB_ERROR_INVALID_ENDPOINT (7003)
0x1B5B - USB_ERROR_INVALID_ENDPOINT
  [1B5C] - USB_ERROR_LESSTRANSFERED (7004)
0x1B5C - USB_ERROR_LESSTRANSFERED
  [4000] - USB_IORB_REQUEST
0x4000 - USB_IORB_REQUEST
  [80XX] - USB_IORB_FAILED
0x80XX - USB_IORB_FAILED
 
</pre>
==Remarks==
==Remarks==


==Example Code==
==Example Code==
<pre>
<pre>
//Code Snippet - UsbDataTransfer
{
  APIRET ulrc;
  PUCHAR pucData;
  PULONG pulNumBytes;
  UCHAR ucAltSetting = 0;
  UCHAR ucData[4096];
  UCHAR ucEndpoint;
  USHORT usFlags;
  ULONG ulNumBytes = sizeof(ucData);
  ULONG ulTimeout = 8000;
  //device-to-host
  ucEndpoint = 0x81; usFlags = 0;
  pucData = &ucData[0]; pulNumBytes = &ulNumBytes;
  ulrc = UsbDataTransfer(Handle,ucEndpoint,ucAltSetting,pulNumBytes,pucData,ulTimeout,usFlags);
  printf("\nUsbDataTransfer - ulrc: 0x%04X (%hu)",ulrc,ulrc);
  if (!ulrc) //success
  {
    int i; printf(" - bulk data:\n");
    for (i=0;i<ulNumBytes;i++) printf("%02X",ucData[i]);
  }
  //host-to-device
  ucEndpoint = 0x02; usFlags = USB_TRANSFER_FULL_SIZE;
  pucData = &ucData[0]; pulNumBytes = &ulNumBytes;
  ulrc = UsbDataTransfer(Handle,ucEndpoint,ucAltSetting,pulNumBytes,pucData,ulTimeout,usFlags);
  printf("\nUsbDataTransfer - ulrc: 0x%04X (%hu)",ulrc,ulrc);
  if (!ulrc) //success
  {
    int i; printf(" - bulk data:\n");
    for (i=0;i<ulNumBytes;i++) printf("%02X",ucData[i]);
  }
}
</pre>
</pre>



Revision as of 18:49, 25 January 2017

Description

Executes synchronous Bulk or Interrupt Transfer with a specific endpoint.

Syntax

ulrc = UsbDataTransfer(Handle,ucEndpoint,ucAltSetting,pulNumBytes,pucData,ulTimeout,usFlags)

Parameters

Handle
the Device Handle received from the previous UsbOpen.
ucEndpoint
the Endpoint Number appropriate for the data transfer.
ucAltSetting
the Alternate Setting of the interface having this endpoint.
ulTimeout
the timeout to wait for completion in milliseconds.
usFlags
use 1 to transfer all data or 0 to allow less transferred.

For device-to-host data transfer:

pulNumBytes
the address of the variable to specify/receive the number of bytes.
pucData
the address of the buffer to receive the data bytes transferred.

For host-to-device data transfer:

pulNumBytes
the address of the variable to specify/receive the number of bytes.
pucData
the address of the buffer with the data bytes to be transferred.

Return Code

0x0000 - NO_ERROR

Errors

0x0006 - ERROR_INVALID_HANDLE
0x0008 - ERROR_NOT_ENOUGH_MEMORY
0x0057 - ERROR_INVALID_PARAMETER
0x005F - ERROR_INTERRUPT
0x0122 - ERROR_TOO_MANY_HANDLES
0x0280 - ERROR_TIMEOUT
0x1B58 - USB_NOT_INIT
0x1B5B - USB_ERROR_INVALID_ENDPOINT
0x1B5C - USB_ERROR_LESSTRANSFERED
0x4000 - USB_IORB_REQUEST
0x80XX - USB_IORB_FAILED

Remarks

Example Code

//Code Snippet - UsbDataTransfer
{
  APIRET ulrc;
  PUCHAR pucData;
  PULONG pulNumBytes;
  UCHAR ucAltSetting = 0;
  UCHAR ucData[4096];
  UCHAR ucEndpoint;
  USHORT usFlags;
  ULONG ulNumBytes = sizeof(ucData);
  ULONG ulTimeout = 8000;

  //device-to-host
  ucEndpoint = 0x81; usFlags = 0;
  pucData = &ucData[0]; pulNumBytes = &ulNumBytes;
  ulrc = UsbDataTransfer(Handle,ucEndpoint,ucAltSetting,pulNumBytes,pucData,ulTimeout,usFlags);
  printf("\nUsbDataTransfer - ulrc: 0x%04X (%hu)",ulrc,ulrc);
  if (!ulrc) //success
  {
    int i; printf(" - bulk data:\n");
    for (i=0;i<ulNumBytes;i++) printf("%02X",ucData[i]);
  }

  //host-to-device
  ucEndpoint = 0x02; usFlags = USB_TRANSFER_FULL_SIZE;
  pucData = &ucData[0]; pulNumBytes = &ulNumBytes;
  ulrc = UsbDataTransfer(Handle,ucEndpoint,ucAltSetting,pulNumBytes,pucData,ulTimeout,usFlags);
  printf("\nUsbDataTransfer - ulrc: 0x%04X (%hu)",ulrc,ulrc);
  if (!ulrc) //success
  {
    int i; printf(" - bulk data:\n");
    for (i=0;i<ulNumBytes;i++) printf("%02X",ucData[i]);
  }
}

Related Functions