USB Libraries Help > USB Device Libraries > USB Device Printer Library > Using the Library > How the Library Works > Receiving Data
MPLAB Harmony USB Stack
Receiving Data

 

The application can receive data from the host by using the USB_DEVICE_PRINTER_Read function. This function returns a transfer handle that allows the application to track the read request. The request is completed when the Host sends the required amount or less than required amount of data. The application must make sure that it allocates a buffer size that is at least the size or a multiple of the receive endpoint size. The return value of the function indicates the success of the request. A read request could fail if the function driver transfer queue is full. The completion of the read transfer is indicated by the USB_DEVICE_PRINTER_EVENT_READ_COMPLETE event. The request completes based on the amount of the data that was requested and size of the transaction initiated by the Host. 

 

• If the size parameter is not a multiple of maxPacketSize or is '0', the function returns 

USB_DEVICE_PRINTER_TRANSFER_HANDLE_INVALID in transferHandle and returns 

USB_DEVICE_PRINTER_RESULT_ERROR_TRANSFER_SIZE_INVALID as a return value 

• If the size parameter is a multiple of maxPacketSize and the Host sends less than maxPacketSize data in any transaction, the transfer completes and the function driver will issue a USB_DEVICE_PRINTER_EVENT_READ_COMPLETE event along with the 

USB_DEVICE_PRINTER_EVENT_READ_COMPLETE_DATA data structure 

• If the size parameter is a multiple of maxPacketSize and the Host sends maxPacketSize amount of data, and total data received does not exceed size, the function driver will wait for the next packet 

 

The following code shows an example of the USB_DEVICE_PRINTER_Read function:

// Shows an example of how to read. This assumes that
// driver was opened successfully.
USB_DEVICE_PRINTER_TRANSFER_HANDLE transferHandle;
USB_DEVICE_PRINTER_RESULT readRequestResult;
USB_DEVICE_PRINTER_HANDLE instanceHandle;
readRequestResult = USB_DEVICE_PRINTER_Read(instanceHandle,
&transferHandle, data, 64);

if(USB_DEVICE_PRINTER_RESULT_OK != readRequestResult)
{
//Do Error handling here
}
// The completion of the read request will be indicated by the
// USB_DEVICE_PRINTER_EVENT_READ_COMPLETE event.