<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: [MQX4.1]: Is there data sending event in USB host stack? in MQX Software Solutions</title>
    <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX4-1-Is-there-data-sending-event-in-USB-host-stack/m-p/476840#M15705</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Hui,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In CDC example, there are two different interfaces, one for control (ACM) and other for data, both interfaces have their own callback (usb_host_cdc_acm_event and usb_host_cdc_data_event).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In ACM's callback, you will find a usb_class_cdc_init_ipipe function that starts the interrupt endpoint to poll for any interrupt transaction on device's side, so, this TR for interrupt endpoint is already installed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For Data's callback, you can see the usb_class_cdc_install_driver function that installs USB device, this way, you can use fopen, fread and fwrite functions in order to open, read, write for USB device, these functions call the respective _io_cdc_serial function. (You can see usb_host_cdc.c file in Host stack for more details)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Like driver is already installed and driver uses events to signal incoming data, you will only need to use fread and fwrite functions (as shown in USB2UART_Task and UART2USB_Task) and internally, usb_class_cdc functions will wait/post for these events and manage all service needed in order to complete these transactions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you look in _io_cdc_serial_read or _io_cdc_serial_write functions, you will see that these TR are managed internally as well:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14545171017432501 jive_text_macro" data-renderedposition="302_8_1231_128" jivemacro_uid="_14545171017432501" modifiedtitle="true"&gt;&lt;P&gt;usb_hostdev_tr_init(&amp;amp;tr, (tr_callback) usb_class_cdc_out_data_callback, (void *) data_instance);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tr.G.TX_BUFFER = (unsigned char *) data_ptr;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tr.G.TX_LENGTH = num_left;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _lwevent_clear(event, USB_DATA_SEND_COMPLETE);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = _usb_host_send_data(if_ptr-&amp;gt;CDC_G.G.host_handle, if_ptr-&amp;gt;out_pipe, &amp;amp;tr);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (status == USB_STATUS_TRANSFER_QUEUED) {&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB_unlock();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This example was built this way to make it easy to use and be compatible with POSIX standard.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I hope this can help you!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Beswt Regards,&lt;/P&gt;&lt;P&gt;Isaac&lt;/P&gt;&lt;P&gt;----------------------------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;/P&gt;&lt;P&gt;----------------------------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 03 Feb 2016 16:35:33 GMT</pubDate>
    <dc:creator>isaacavila</dc:creator>
    <dc:date>2016-02-03T16:35:33Z</dc:date>
    <item>
      <title>[MQX4.1]: Is there data sending event in USB host stack?</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX4-1-Is-there-data-sending-event-in-USB-host-stack/m-p/476837#M15702</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi-&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;One USB device side, there is a notification callback to inform about USB_APP_DATA_RECEIVED from USB device stack. My question is, is there a similar &lt;STRONG&gt;data sent event&lt;/STRONG&gt; that can be obtained from callback function on USB host side?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;thanks!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hui&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Jan 2016 19:03:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX4-1-Is-there-data-sending-event-in-USB-host-stack/m-p/476837#M15702</guid>
      <dc:creator>huishao2</dc:creator>
      <dc:date>2016-01-29T19:03:53Z</dc:date>
    </item>
    <item>
      <title>Re: [MQX4.1]: Is there data sending event in USB host stack?</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX4-1-Is-there-data-sending-event-in-USB-host-stack/m-p/476838#M15703</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Hui,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In Host stack, it is quite different, you need to initialize a transfer request and then set a callback that you can use to signal an event when transaction (either recepcion or transmission) has completed. For more information, you can read the MQX_USB_Host_User_Guide, section 4.2.4.6 Sending/Receiving Data to/from Device.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also, you can see host's examples and could notice (for example, en hid example) how this TR is used:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14544618612921480 jive_text_macro" data-renderedposition="134_8_1231_128" jivemacro_uid="_14544618612921480" modifiedtitle="true"&gt;&lt;P&gt;/******************************************************************&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Initiate a transfer request on the interrupt pipe&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ******************************************************************/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usb_hostdev_tr_init(&amp;amp;tr, usb_host_hid_recv_callback, NULL);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tr.G.RX_BUFFER = buffer;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tr.G.RX_LENGTH = pipe-&amp;gt;MAX_PACKET_SIZE;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = _usb_host_recv_data(host_handle, pipe, &amp;amp;tr);&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This TR is a structure that describes a transfer in its entirety, then you can request/transmit data using this TR and after this transaction is completed, callback function is called. In this callback you can use an event to inform about success/failure for transmission/reception:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14544620322411564 jive_text_macro" data-renderedposition="325_8_1231_432" jivemacro_uid="_14544620322411564" modifiedtitle="true"&gt;&lt;P&gt;void usb_host_hid_recv_callback&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; (&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* [IN] pointer to pipe */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _usb_pipe_handle&amp;nbsp; pipe_handle,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* [IN] user-defined parameter */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *user_parm,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* [IN] buffer address */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *buffer,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* [IN] length of data transferred */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buflen,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* [IN] status, hopefully USB_OK or USB_DONE */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB_STATUS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; )&lt;/P&gt;&lt;P&gt;{ /* Body */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (status == USB_OK) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* notify application that data are available */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _lwevent_set(&amp;amp;USB_Event, USB_EVENT_DATA);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* notify application that data are available */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _lwevent_set(&amp;amp;USB_Event, USB_EVENT_DATA_CORRUPTED);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I hope this can help you!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best Regards,&lt;/P&gt;&lt;P&gt;Isaac Avila&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;----------------------------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;/P&gt;&lt;P&gt;----------------------------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 03 Feb 2016 01:18:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX4-1-Is-there-data-sending-event-in-USB-host-stack/m-p/476838#M15703</guid>
      <dc:creator>isaacavila</dc:creator>
      <dc:date>2016-02-03T01:18:09Z</dc:date>
    </item>
    <item>
      <title>Re: [MQX4.1]: Is there data sending event in USB host stack?</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX4-1-Is-there-data-sending-event-in-USB-host-stack/m-p/476839#M15704</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Issac&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It is very helpful. However, I am looking at the CDC class example under Freescale_MQX_4_1\usb\host\examples\cdc\cdc_serial. There the USB port is opened by&lt;/P&gt;&lt;P&gt;..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (NULL == (s_f_usb_info.f_usb = fopen(device_name, (void*) &amp;amp;usb_open_param))) {&lt;/P&gt;&lt;P&gt;..&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;When I write something to the USB port opened above&lt;/P&gt;&lt;P&gt;..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; num_done = fwrite(buffer, sizeof(buffer[0]), num, s_f_usb_info.f_usb);&lt;/P&gt;&lt;P&gt;..&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Given I have only usb_host_cdc_acm_event and usb_host_cdc_data_event registered in driver info table, how can I apply the TR onto this mechanism?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hui&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 03 Feb 2016 05:45:58 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX4-1-Is-there-data-sending-event-in-USB-host-stack/m-p/476839#M15704</guid>
      <dc:creator>huishao2</dc:creator>
      <dc:date>2016-02-03T05:45:58Z</dc:date>
    </item>
    <item>
      <title>Re: [MQX4.1]: Is there data sending event in USB host stack?</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX4-1-Is-there-data-sending-event-in-USB-host-stack/m-p/476840#M15705</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Hui,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In CDC example, there are two different interfaces, one for control (ACM) and other for data, both interfaces have their own callback (usb_host_cdc_acm_event and usb_host_cdc_data_event).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In ACM's callback, you will find a usb_class_cdc_init_ipipe function that starts the interrupt endpoint to poll for any interrupt transaction on device's side, so, this TR for interrupt endpoint is already installed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For Data's callback, you can see the usb_class_cdc_install_driver function that installs USB device, this way, you can use fopen, fread and fwrite functions in order to open, read, write for USB device, these functions call the respective _io_cdc_serial function. (You can see usb_host_cdc.c file in Host stack for more details)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Like driver is already installed and driver uses events to signal incoming data, you will only need to use fread and fwrite functions (as shown in USB2UART_Task and UART2USB_Task) and internally, usb_class_cdc functions will wait/post for these events and manage all service needed in order to complete these transactions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you look in _io_cdc_serial_read or _io_cdc_serial_write functions, you will see that these TR are managed internally as well:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14545171017432501 jive_text_macro" data-renderedposition="302_8_1231_128" jivemacro_uid="_14545171017432501" modifiedtitle="true"&gt;&lt;P&gt;usb_hostdev_tr_init(&amp;amp;tr, (tr_callback) usb_class_cdc_out_data_callback, (void *) data_instance);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tr.G.TX_BUFFER = (unsigned char *) data_ptr;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tr.G.TX_LENGTH = num_left;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _lwevent_clear(event, USB_DATA_SEND_COMPLETE);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = _usb_host_send_data(if_ptr-&amp;gt;CDC_G.G.host_handle, if_ptr-&amp;gt;out_pipe, &amp;amp;tr);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (status == USB_STATUS_TRANSFER_QUEUED) {&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USB_unlock();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This example was built this way to make it easy to use and be compatible with POSIX standard.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I hope this can help you!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Beswt Regards,&lt;/P&gt;&lt;P&gt;Isaac&lt;/P&gt;&lt;P&gt;----------------------------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;/P&gt;&lt;P&gt;----------------------------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 03 Feb 2016 16:35:33 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX4-1-Is-there-data-sending-event-in-USB-host-stack/m-p/476840#M15705</guid>
      <dc:creator>isaacavila</dc:creator>
      <dc:date>2016-02-03T16:35:33Z</dc:date>
    </item>
  </channel>
</rss>

