<?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>i.MX RT Crossover MCUsのトピックRe: USB Host Audio Stream Receive Data Corruption</title>
    <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016293#M6686</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I will forward it . Have a nice day.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 13 Dec 2019 02:09:05 GMT</pubDate>
    <dc:creator>fangfang</dc:creator>
    <dc:date>2019-12-13T02:09:05Z</dc:date>
    <item>
      <title>USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016267#M6660</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 22px;"&gt;&lt;STRONG&gt;Description of problem&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;The audio data received when operating the NXP RT1050 as a USB Host&amp;nbsp;with the Audio class does not represent the audio data spoken into a connected USB microphone device. &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;This issue exists not with just a single microphone or device, as I have tested three different&amp;nbsp;types&amp;nbsp;of USB microphones.&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;I have independently tested the microphones with a PC to confirm&amp;nbsp;they work correctly.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;The data corruption&amp;nbsp;has been confirmed by taking traces of the USB bus and comparing the data received on the RT1050 with the data seen on the bus.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 22px;"&gt;&lt;STRONG&gt;Prior Requisite Details&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;I fixed a bug in the USB stack that misreports the received data length.&amp;nbsp;The details of that problem and solution&amp;nbsp;can be found in the &lt;A _jive_internal="true" href="https://community.nxp.com/thread/514301" rel="nofollow noopener noreferrer" target="_blank"&gt;USB Host Audio Stream Receive Data Length Misreporting&lt;/A&gt;&amp;nbsp;thread.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 22px;"&gt;&lt;STRONG&gt;Setup Details&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;My RT1050 is setup as a USB&amp;nbsp;Audio Host.&amp;nbsp;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;I created the USB Audio setup based off of the USB HID Mouse example. I included the state machine below that sets the control and streaming interfaces.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm able to receive audio data from a connected Full-Speed USB microphone by repeatedly calling&amp;nbsp;USB_HostAudioStreamRecv.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 22px;"&gt;&lt;STRONG&gt;Test Setup and Results&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;I have results from two different ways of using the USBHostAudioStreamRecv function that both result in receiving unexpected audio data. In these tests, I'm speaking into the microphone and collecting three seconds of audio data into a RAM buffer on the RT1050. At the same time, I'm collecting a trace of the USB communication using a Teledyne Advisor T3 USB Analyzer.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;&lt;SPAN class="comment token"&gt;/* USB Audio Buffer */&lt;/SPAN&gt;

&lt;SPAN class="token function"&gt;USB_DMA_NONINIT_DATA_ALIGN&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;USB_DATA_ALIGN_SIZE&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;static&lt;/SPAN&gt; uint8_t _AudioBuffer&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;AUDIO_BUFFER_SIZE&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

&lt;SPAN class="comment token"&gt;/* audioInstance-&amp;gt;audioBuffer points to _AudioBuffer */&lt;/SPAN&gt;

status &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;USB_HostAudioStreamRecv&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;classHandle&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
                  audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;audioBuffer&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
            AUDIO_BUFFER_SIZE&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
            _HostAudioInCallback&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
            audioInstance&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here are descriptions of the two modes of operation. The audio bin files are 16-bit, 16kHz PCM audio, which can be played using Audacity.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Mode 1:&amp;nbsp;More than one packet (greater than 34 bytes) is requested for transfer at a time&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;USB Trace of Aud&lt;SPAN style="color: #000000;"&gt;io:&amp;nbsp;microphone_4k_read_usb_trace.bin.zip&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;Received data on RT1050 read from RAM buffer:&amp;nbsp;microphone_4k_read_ram_buffer.bin.zip&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;a) AUDIO_BUFFER_SIZE = 34&lt;BR /&gt;b) The&amp;nbsp;received audio’s speech is audible, but there is significant noise&lt;BR /&gt;c) In this mode, the audio data on the bus is equivalent to the audio data of the source (microphone)&lt;BR /&gt;d) Comparing the received data to the source data, bytes are rearranged and values are different&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Mode 2: Exactly one packet (34 bytes) is requested for transfer at a time&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;USB Trace of Aud&lt;SPAN style="color: #000000;"&gt;io:&amp;nbsp;microphone_34_read_usb_trace.bin.zip&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;Received data on RT1050 read from RAM buffer:&amp;nbsp;microphone_34_read_&lt;SPAN&gt;ram_buffer&lt;/SPAN&gt;.bin.zip&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;a) AUDIO_BUFFER_SIZE = 4096&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;b) The received audio does not resemble speech&lt;BR /&gt;c) &lt;STRONG&gt;The audio data recorded on the bus does not match the audio data of the source (microphone)!&lt;/STRONG&gt;&lt;BR /&gt;d) One isochronous transaction occurs every 3ms, instead of the expected 1ms (Full Speed)&lt;BR /&gt;e) It seems there’s a delay&amp;nbsp;in the stack that is preventing the reads from happening fast enough&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 22px; "&gt;Code and Operation Description&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Below are snippets of my software that implement the USB Audio Host, which I based off of the USB HID mouse example.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;There are two tasks: one that&amp;nbsp;calls the&amp;nbsp;USB_HostEhciTaskFunction, and another that manages the USB application state. The application state task (_MicrophoneApplicationTask) blocks on a FreeRTOS Event Group bit, which is set in&amp;nbsp;_HostAudioControlCallback and _HostAudioInCallback. This allows the&amp;nbsp;&lt;SPAN&gt;_MicrophoneApplicationTask to immediately react to events and handle any state changes.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;&lt;SPAN class="comment token"&gt;/*! @brief USB host audio instance structure */&lt;/SPAN&gt;
&lt;SPAN class="keyword token"&gt;typedef&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;struct&lt;/SPAN&gt; USBHostAudioInstance
&lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
    usb_host_configuration_handle configHandle&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;/*!&amp;lt; the audio configuration handle */&lt;/SPAN&gt;
    usb_device_handle deviceHandle&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;             &lt;SPAN class="comment token"&gt;/*!&amp;lt; the audio device handle */&lt;/SPAN&gt;
    usb_host_class_handle classHandle&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;          &lt;SPAN class="comment token"&gt;/*!&amp;lt; the audio class handle */&lt;/SPAN&gt;
    usb_host_interface_handle streamingInterfaceHandle&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;  &lt;SPAN class="comment token"&gt;/*!&amp;lt; the audio streaming interface handle */&lt;/SPAN&gt;
    usb_host_interface_handle controlInterfaceHandle&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;    &lt;SPAN class="comment token"&gt;/*!&amp;lt; the audio control interface handle */&lt;/SPAN&gt;
    uint8_t deviceState&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;                        &lt;SPAN class="comment token"&gt;/*!&amp;lt; device attach/detach status */&lt;/SPAN&gt;
    uint8_t prevState&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;                          &lt;SPAN class="comment token"&gt;/*!&amp;lt; device attach/detach previous status */&lt;/SPAN&gt;
    uint8_t runState&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;                           &lt;SPAN class="comment token"&gt;/*!&amp;lt; audio application run status */&lt;/SPAN&gt;
    uint8_t runWaitState&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;   &lt;SPAN class="comment token"&gt;/*!&amp;lt; audio application wait status, go to next run status when the wait status success */&lt;/SPAN&gt;
    uint16_t maxPacketSize&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;/*!&amp;lt; Interrupt in max packet size */&lt;/SPAN&gt;
    uint8_t &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;audioBuffer&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;   &lt;SPAN class="comment token"&gt;/*!&amp;lt; use to receive data */&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt; USBHostAudioInstance_t&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;


&lt;SPAN class="comment token"&gt;/*! @brief host app run status */&lt;/SPAN&gt;
&lt;SPAN class="keyword token"&gt;typedef&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;enum&lt;/SPAN&gt; USBHostAudioRunState
&lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
    USBHostAudioRunState_Idle &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;                      &lt;SPAN class="comment token"&gt;/*!&amp;lt; idle */&lt;/SPAN&gt;
    USBHostAudioRunState_SetControlInterface&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;           &lt;SPAN class="comment token"&gt;/*!&amp;lt; execute set interface code */&lt;/SPAN&gt;
    USBHostAudioRunState_WaitSetControlInterface&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;       &lt;SPAN class="comment token"&gt;/*!&amp;lt; wait set interface done */&lt;/SPAN&gt;
    USBHostAudioRunState_SetStreamingInterface&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;         &lt;SPAN class="comment token"&gt;/*!&amp;lt; execute set interface code */&lt;/SPAN&gt;
    USBHostAudioRunState_WaitSetStreamingInterface&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;     &lt;SPAN class="comment token"&gt;/*!&amp;lt; wait set interface done */&lt;/SPAN&gt;
    USBHostAudioRunState_ReceiveStream&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;                 &lt;SPAN class="comment token"&gt;/*!&amp;lt; set interface is done, start streaming */&lt;/SPAN&gt;
    USBHostAudioRunState_WaitReceiveStream              &lt;SPAN class="comment token"&gt;/*!&amp;lt; wait for streaming callback */&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt; USBHostAudioRunState_t&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;


&lt;SPAN class="keyword token"&gt;static&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;void&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;_HostAudioControlCallback&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;
 &lt;SPAN class="keyword token"&gt;void&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;param&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
 uint8_t &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;data&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
 uint32_t dataLength&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
 usb_status_t status&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
    &lt;SPAN class="token function"&gt;UNUSED_PARAMETER&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;data&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="token function"&gt;UNUSED_PARAMETER&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;dataLength&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="token function"&gt;UNUSED_PARAMETER&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;status&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

    USBHostAudioInstance_t &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;audioInstance &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;USBHostAudioInstance_t &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;param&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

    &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;runWaitState &lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt; USBHostAudioRunState_WaitSetControlInterface&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;runState &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; USBHostAudioRunState_SetStreamingInterface&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;else&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;runWaitState &lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt; USBHostAudioRunState_WaitSetStreamingInterface&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;runState &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; USBHostAudioRunState_GetSamplingFrequency&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;else&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;runWaitState &lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt; USBHostAudioRunState_WaitGetSamplingFrequency&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;runState &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; USBHostAudioRunState_ReceiveStream&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;else&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
     &lt;SPAN class="token function"&gt;DEBUG_USB&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"%s: Unhandled runWaitState\r\n"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; __func__&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;

     &lt;SPAN class="token function"&gt;xEventGroupSetBits&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;_USBEventGroup&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;    &lt;SPAN class="comment token"&gt;/* The event group being updated. */&lt;/SPAN&gt;
                        BIT_0&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;            &lt;SPAN class="comment token"&gt;/* The bits being set. */&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;

&lt;SPAN class="keyword token"&gt;static&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;void&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;_HostAudioInCallback&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;
 &lt;SPAN class="keyword token"&gt;void&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;param&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
 uint8_t &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;data&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
 uint32_t dataLength&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
 usb_status_t status&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
    USBHostAudioInstance_t &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;audioInstance &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;USBHostAudioInstance_t &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;param&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

 &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;deviceState &lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt; kStatus_DEV_Attached&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
  &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;status &lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt; kStatus_USB_Success&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
  &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
   &lt;SPAN class="comment token"&gt;//DEBUG_USB("%s: Successfully received %u bytes\r\n", __func__, dataLength);&lt;/SPAN&gt;

   &lt;SPAN class="token function"&gt;VoiceProcessor_ReceivedDataCallback&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;data&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; dataLength&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

   &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;runWaitState &lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt; USBHostAudioRunState_WaitReceiveStream&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
   &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
       audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;runState &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; USBHostAudioRunState_ReceiveStream&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
   &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
   &lt;SPAN class="keyword token"&gt;else&lt;/SPAN&gt;
   &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
       &lt;SPAN class="comment token"&gt;/* unhandled condition */&lt;/SPAN&gt;
       &lt;SPAN class="token function"&gt;ASSERT_FAILURE&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
   &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
  &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
  &lt;SPAN class="keyword token"&gt;else&lt;/SPAN&gt;
  &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
      &lt;SPAN class="token function"&gt;ASSERT_FAILURE&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
   &lt;SPAN class="token function"&gt;DEBUG_USB&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"%s: Receive unsuccessful\r\n"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; __func__&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
  &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
 &lt;SPAN class="keyword token"&gt;else&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
     &lt;SPAN class="token function"&gt;ASSERT_FAILURE&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
  &lt;SPAN class="token function"&gt;DEBUG_USB&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"%s: Device not attached\r\n"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; __func__&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
 &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;

    &lt;SPAN class="token function"&gt;xEventGroupSetBits&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;_USBEventGroup&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;    &lt;SPAN class="comment token"&gt;/* The event group being updated. */&lt;/SPAN&gt;
                       BIT_0&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;            &lt;SPAN class="comment token"&gt;/* The bits being set. */&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;


&lt;SPAN class="comment token"&gt;/***************************************************************************/&lt;/SPAN&gt;&lt;SPAN class="comment token"&gt;/**
    USB Host Task

    \param[in] param - Task input parameter
*/&lt;/SPAN&gt;&lt;SPAN class="comment token"&gt;/****************************************************************************/&lt;/SPAN&gt;
&lt;SPAN class="keyword token"&gt;static&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;void&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;_USBHostTask&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;void&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;param&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;while&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        &lt;SPAN class="token function"&gt;USB_HostEhciTaskFunction&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;param&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;

&lt;SPAN class="comment token"&gt;/***************************************************************************/&lt;/SPAN&gt;&lt;SPAN class="comment token"&gt;/**
    USB Host Application Task

    \param[in] param - Task input parameter
*/&lt;/SPAN&gt;&lt;SPAN class="comment token"&gt;/****************************************************************************/&lt;/SPAN&gt;
&lt;SPAN class="keyword token"&gt;static&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;void&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;_MicrophoneApplicationTask&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;void&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;param&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
    EventBits_t uxBits&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

    &lt;SPAN class="keyword token"&gt;while&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        uxBits &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;xEventGroupWaitBits&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;_USBEventGroup&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;   &lt;SPAN class="comment token"&gt;/* The event group being tested. */&lt;/SPAN&gt;
                                     BIT_USBEvent&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="comment token"&gt;/* The bits within the event group to wait for. */&lt;/SPAN&gt;
                                     pdTRUE&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;        &lt;SPAN class="comment token"&gt;/* Cleared bits before returning. */&lt;/SPAN&gt;
                                     pdFALSE&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;       &lt;SPAN class="comment token"&gt;/* Don't wait for both bits, either bit will do. */&lt;/SPAN&gt;
                                     portMAX_DELAY&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;&lt;SPAN class="comment token"&gt;/* Wait forever. */&lt;/SPAN&gt;

        &lt;SPAN class="token function"&gt;_HostAudioStateManager&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;param&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;

&lt;SPAN class="comment token"&gt;/***************************************************************************/&lt;/SPAN&gt;&lt;SPAN class="comment token"&gt;/**
    Task to handle the current device state

 \param[in] param - the device instance

*/&lt;/SPAN&gt;&lt;SPAN class="comment token"&gt;/****************************************************************************/&lt;/SPAN&gt;
&lt;SPAN class="keyword token"&gt;static&lt;/SPAN&gt; &lt;SPAN class="keyword token"&gt;void&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;_HostAudioStateManager&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="keyword token"&gt;void&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;param&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
 usb_status_t status&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    USBHostAudioInstance_t &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;audioInstance &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;USBHostAudioInstance_t &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;param&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

    &lt;SPAN class="comment token"&gt;/* Process device state changes (process once for each state) */&lt;/SPAN&gt;

    &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;deviceState &lt;SPAN class="operator token"&gt;!=&lt;/SPAN&gt; audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;prevState&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;prevState &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;deviceState&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
        &lt;SPAN class="keyword token"&gt;switch&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;deviceState&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
        &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
            &lt;SPAN class="keyword token"&gt;case&lt;/SPAN&gt; kStatus_DEV_Idle&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
                &lt;SPAN class="keyword token"&gt;break&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

            &lt;SPAN class="comment token"&gt;/* Device is attached and enumeration is done */&lt;/SPAN&gt;
            &lt;SPAN class="keyword token"&gt;case&lt;/SPAN&gt; kStatus_DEV_Attached&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
             &lt;SPAN class="token function"&gt;DEBUG_USB&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Mic device attached\r\n"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

                audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;runState &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; USBHostAudioRunState_SetControlInterface&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
                status &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;USB_HostAudioInit&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;deviceHandle&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt;audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;classHandle&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
                &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;status &lt;SPAN class="operator token"&gt;!=&lt;/SPAN&gt; kStatus_USB_Success&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
     &lt;SPAN class="token function"&gt;DEBUG_USB&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"USB Host Audio class initialize failure\r\n"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
     &lt;SPAN class="token function"&gt;ASSERT_FAILURE&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
                &lt;SPAN class="keyword token"&gt;break&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

            &lt;SPAN class="comment token"&gt;/* Device is detached */&lt;/SPAN&gt;
            &lt;SPAN class="keyword token"&gt;case&lt;/SPAN&gt; kStatus_DEV_Detached&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
                audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;deviceState &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; kStatus_DEV_Idle&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
                audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;runState &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; USBHostAudioRunState_Idle&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

                &lt;SPAN class="comment token"&gt;/* Audio class de-initialization */&lt;/SPAN&gt;
                &lt;SPAN class="token function"&gt;USB_HostAudioDeinit&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;deviceHandle&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
                                  audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;classHandle&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

                audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;classHandle &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; NULL&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
                &lt;SPAN class="token function"&gt;DEBUG_USB&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"USB Audio device detached\r\n"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
                &lt;SPAN class="keyword token"&gt;break&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

            &lt;SPAN class="keyword token"&gt;default&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
                &lt;SPAN class="keyword token"&gt;break&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
        &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;

    &lt;SPAN class="comment token"&gt;/* Process the run state */&lt;/SPAN&gt;

    &lt;SPAN class="keyword token"&gt;switch&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;runState&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        &lt;SPAN class="keyword token"&gt;case&lt;/SPAN&gt; USBHostAudioRunState_Idle&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
            &lt;SPAN class="keyword token"&gt;break&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

        &lt;SPAN class="comment token"&gt;/* Set the audio control interface */&lt;/SPAN&gt;
        &lt;SPAN class="keyword token"&gt;case&lt;/SPAN&gt; USBHostAudioRunState_SetControlInterface&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
            audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;runWaitState &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; USBHostAudioRunState_WaitSetControlInterface&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
            audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;runState &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; USBHostAudioRunState_Idle&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

   status &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;USB_HostAudioControlSetInterface&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;classHandle&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
               audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;controlInterfaceHandle&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
               DEVICE_CONTROL_ALTERNATE_SETTING&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
               _HostAudioControlCallback&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
               audioInstance&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
   &lt;SPAN class="token function"&gt;ASSERT&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;status &lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt; kStatus_USB_Success&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

   &lt;SPAN class="token function"&gt;DEBUG_USB&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Set Control Interface Complete\r\n"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
            &lt;SPAN class="keyword token"&gt;break&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

        &lt;SPAN class="comment token"&gt;/* Set the audio streaming interface */&lt;/SPAN&gt;
        &lt;SPAN class="keyword token"&gt;case&lt;/SPAN&gt; USBHostAudioRunState_SetStreamingInterface&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
   audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;runWaitState &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; USBHostAudioRunState_WaitSetStreamingInterface&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
   audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;runState &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; USBHostAudioRunState_Idle&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

   status &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;USB_HostAudioStreamSetInterface&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;classHandle&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
              audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;streamingInterfaceHandle&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
              DEVICE_MIC_ALTERNATE_SETTING&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
              _HostAudioControlCallback&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
              audioInstance&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
   &lt;SPAN class="token function"&gt;ASSERT&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;status &lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt; kStatus_USB_Success&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

   &lt;SPAN class="token function"&gt;DEBUG_USB&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Set Streaming Interface Complete\r\n"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
            &lt;SPAN class="keyword token"&gt;break&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

        &lt;SPAN class="keyword token"&gt;case&lt;/SPAN&gt; USBHostAudioRunState_ReceiveStream&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
            audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;runWaitState &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; USBHostAudioRunState_WaitReceiveStream&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
            audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;runState &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; USBHostAudioRunState_Idle&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

            uint32_t maxPacketSize &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;USB_HostAudioPacketSize&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;classHandle&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
                                                             USB_ENDPOINT_ISOCHRONOUS&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
                                                             USB_IN&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

            &lt;SPAN class="token function"&gt;ASSERT&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;AUDIO_BUFFER_SIZE &lt;SPAN class="operator token"&gt;&amp;gt;=&lt;/SPAN&gt; maxPacketSize&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

            status &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;USB_HostAudioStreamRecv&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;classHandle&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
                  audioInstance&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;audioBuffer&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
            AUDIO_BUFFER_SIZE&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
            _HostAudioInCallback&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
            audioInstance&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

         &lt;SPAN class="token function"&gt;ASSERT&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;status &lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt; kStatus_USB_Success&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
            &lt;SPAN class="keyword token"&gt;break&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
        &lt;SPAN class="keyword token"&gt;default&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
            &lt;SPAN class="keyword token"&gt;break&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/fangfang" rel="nofollow noopener noreferrer" target="_blank"&gt;fangfang&lt;/A&gt;‌&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 06 Nov 2019 14:56:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016267#M6660</guid>
      <dc:creator>amwilhite</dc:creator>
      <dc:date>2019-11-06T14:56:44Z</dc:date>
    </item>
    <item>
      <title>Re: USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016268#M6661</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Update:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I was able to confirm that even when operating in Mode 1 (More than one packet is requested for transfer at a time&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;), there is still always a 3ms delay between&amp;nbsp;consecutive transfers.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I also confirmed with a spare GPIO and an oscilloscope that there is no delay between the&amp;nbsp;_HostAudioInCallback being called and the state manager calling the&amp;nbsp;USB_HostAudioStreamRecv function again. I believe this definitely points to there being a delay somewhere in the USB stack itself.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="3ms_delay_between_consecutive_transfers.PNG"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/93046i3721770C8B666E95/image-size/large?v=v2&amp;amp;px=999" role="button" title="3ms_delay_between_consecutive_transfers.PNG" alt="3ms_delay_between_consecutive_transfers.PNG" /&gt;&lt;/span&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 06 Nov 2019 21:55:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016268#M6661</guid>
      <dc:creator>amwilhite</dc:creator>
      <dc:date>2019-11-06T21:55:40Z</dc:date>
    </item>
    <item>
      <title>Re: USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016269#M6662</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm continuing to investigate this further, but could really use some help with this. &lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/jeremyzhou" rel="nofollow noopener noreferrer" target="_blank"&gt;jeremyzhou&lt;/A&gt;‌ &lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/jingpan" rel="nofollow noopener noreferrer" target="_blank"&gt;jingpan&lt;/A&gt;&amp;nbsp;&lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/jorge_a_vazquez" rel="nofollow noopener noreferrer" target="_blank"&gt;jorge_a_vazquez&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have been looking at the initialization of the siTD&amp;nbsp;linked list, and I have some questions regarding the memory alignment requirement outlined by the reference manual.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Can anyone explain the significance of the 4K (page) aligned memory addresses that need to be supplied to each siTD structure?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In the case of Mode 1 (More than one packet (greater than 34 bytes) is requested for transfer at a time) with a requested transfer of 4K and the logic in the USB_HostEhciSitdArrayInit function, 121 siTD structures are required.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;&lt;SPAN class="comment token"&gt;/* Calculate the number of siTD structures required */&lt;/SPAN&gt;

sitdNumber &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;transfer&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;transferLength &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ehciPipePointer&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;pipeCommon&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;maxPacketSize&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;/&lt;/SPAN&gt;
                  &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ehciPipePointer&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;pipeCommon&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;maxPacketSize&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Does the 4K (page) aligned memory addresses specified in the reference manual mean that each of the siTD structures must point to a buffer that is 4K (page) aligned?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Based on the existing code, it is clear that each of these addresses is not 4K (page) aligned.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For each siTD, the buffer address is set as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;sitdLength &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; dataLength&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;sitdLength &lt;SPAN class="operator token"&gt;&amp;gt;&lt;/SPAN&gt; ehciPipePointer&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;pipeCommon&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;maxPacketSize&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
    sitdLength &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; ehciPipePointer&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;pipeCommon&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;maxPacketSize&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;

dataBufferValue &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;uint32_t&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;transfer&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;transferBuffer &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;transfer&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;transferLength &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt; dataLength&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
dataLength &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; sitdLength&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

sitdPointer&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;transferResults&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; dataBufferValue&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
sitdPointer&lt;SPAN class="operator token"&gt;-&amp;gt;&lt;/SPAN&gt;transferResults&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;dataBufferValue &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;4&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1024&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;&amp;amp;&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0xFFFFF000U&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 08 Nov 2019 22:42:11 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016269#M6662</guid>
      <dc:creator>amwilhite</dc:creator>
      <dc:date>2019-11-08T22:42:11Z</dc:date>
    </item>
    <item>
      <title>Re: USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016270#M6663</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello, Austin&lt;/P&gt;&lt;P&gt;I apologize for the late response.I forwarded the question to the expert team.&lt;BR /&gt;Due to technical details which may take some times. Let us wait for the expert's reply.&lt;BR /&gt;Sorry for the inconvenience may cause. Have a nice day.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best Regards&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 20 Nov 2019 02:23:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016270#M6663</guid>
      <dc:creator>fangfang</dc:creator>
      <dc:date>2019-11-20T02:23:00Z</dc:date>
    </item>
    <item>
      <title>Re: USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016271#M6664</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello&lt;/P&gt;&lt;P&gt;I get the feedback from the expert team as the below:&lt;/P&gt;&lt;P&gt;"We do not have&amp;nbsp;USB host audio mic demo, where is your code come from? And what is the device connected to host?Is it a special USB MIC? And there is a very long statement for the issue description.Could you please kindly summarize it in a short expression?I see one issue you report is USB HOST&amp;nbsp;missed some package&amp;nbsp;&amp;nbsp;in some frame.Any other issue you want to report?I do not have a USB mic device on hand, I have a USB mic+speaker device, but it is not recognized by the USB HOST demo. Anyway, I'll check if I can do some work and make a quick test on it.If any progress, I'll share to you."&lt;/P&gt;&lt;P&gt;Thanks for your patience.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 20 Nov 2019 09:06:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016271#M6664</guid>
      <dc:creator>fangfang</dc:creator>
      <dc:date>2019-11-20T09:06:50Z</dc:date>
    </item>
    <item>
      <title>Re: USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016272#M6665</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;STRONG&gt;Description of problem:&lt;/STRONG&gt; &lt;SPAN&gt;The audio data received when operating the NXP RT1050 as a USB Host&amp;nbsp;with the Audio class does not represent the audio data spoken into a connected USB microphone device.&lt;SPAN&gt;&amp;nbsp;This is true regardless of the USB device (microphone) that is used.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;STRONG&gt;Identified Issues:&lt;/STRONG&gt; Depending on how the USB Stream Recieve API is used, either packets of data are missing, or the data that is received is corrupt.&amp;nbsp;See details in first post.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;&lt;STRONG&gt;USB Devices used&lt;/STRONG&gt;: I have used three different microphones with the USB Audio Host. All three lead to the RT1050 Host exhibiting the above problems. Two of the devices are the &lt;A href="https://www.seeedstudio.com/ReSpeaker-Mic-Array-v2-0.html"&gt;ReSpeaker Mic Array v2.0&lt;/A&gt; and the &lt;A href="https://www.amazon.com/Labtec-Verse-704-Stand-up-Microphone/dp/B000063ILN"&gt;Labtec Verse 704&lt;/A&gt;.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;I included&amp;nbsp;the main pieces of the code required for setting up the USB Audio host in the first post.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;If there's anything I can do to assist in your testing and debugging, please let me know.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;SPAN&gt;Thank you for getting back to me.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 20 Nov 2019 14:26:19 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016272#M6665</guid>
      <dc:creator>amwilhite</dc:creator>
      <dc:date>2019-11-20T14:26:19Z</dc:date>
    </item>
    <item>
      <title>Re: USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016273#M6666</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Austin.&lt;/P&gt;&lt;P&gt;Thanks for your updated information. I will let you know if has any update.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 21 Nov 2019 02:01:38 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016273#M6666</guid>
      <dc:creator>fangfang</dc:creator>
      <dc:date>2019-11-21T02:01:38Z</dc:date>
    </item>
    <item>
      <title>Re: USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016274#M6667</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Austin.&lt;/P&gt;&lt;P&gt;&amp;nbsp;The question will may take some time. Thanks for your patience.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 22 Nov 2019 02:05:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016274#M6667</guid>
      <dc:creator>fangfang</dc:creator>
      <dc:date>2019-11-22T02:05:56Z</dc:date>
    </item>
    <item>
      <title>Re: USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016275#M6668</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Austin,&lt;/P&gt;&lt;P&gt;I get the feedback as the below:&lt;/P&gt;&lt;P&gt;"we are&amp;nbsp;trying to reproduce this issue by a USB MIC+SPERKER DEVICE, default code&amp;nbsp;can't reproduce the issue. Would you please the&amp;nbsp; HOST AUDIO MIC code for your demo?"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 25 Nov 2019 02:53:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016275#M6668</guid>
      <dc:creator>fangfang</dc:creator>
      <dc:date>2019-11-25T02:53:12Z</dc:date>
    </item>
    <item>
      <title>Re: USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016276#M6669</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I have attached the USB Host Audio project that can be used to reproduce the issue on the NXP IMXRT1050 EVK-B evaluation board. The project is setup to use the default evaluation board Hyperflash configuration. Connector J9 is the USB Host port.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Note that this application is setup to recognize the ReSpeaker v2 Mic Array by default, but&amp;nbsp;parameters for a different USB device such as VID, PID, and interface numbers can be set using defines such as&amp;nbsp;DEVICE_VENDOR_ID,&amp;nbsp;DEVICE_PRODUCT_ID, etc. found in host_audio.c.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 25 Nov 2019 21:03:31 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016276#M6669</guid>
      <dc:creator>amwilhite</dc:creator>
      <dc:date>2019-11-25T21:03:31Z</dc:date>
    </item>
    <item>
      <title>Re: USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016277#M6670</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;Got. I will provide the process for it.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 26 Nov 2019 02:23:51 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016277#M6670</guid>
      <dc:creator>fangfang</dc:creator>
      <dc:date>2019-11-26T02:23:51Z</dc:date>
    </item>
    <item>
      <title>Re: USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016278#M6671</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi&amp;nbsp;&lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/fangfang"&gt;fangfang&lt;/A&gt;,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Are any updates available for this?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 02 Dec 2019 15:05:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016278#M6671</guid>
      <dc:creator>amwilhite</dc:creator>
      <dc:date>2019-12-02T15:05:47Z</dc:date>
    </item>
    <item>
      <title>Re: USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016279#M6672</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;Unfortunately, I can't get the feedback now. Sorry for the inconvenience may cause.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Dec 2019 01:56:13 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016279#M6672</guid>
      <dc:creator>fangfang</dc:creator>
      <dc:date>2019-12-03T01:56:13Z</dc:date>
    </item>
    <item>
      <title>Re: USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016280#M6673</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi &lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/fangfang"&gt;fangfang&lt;/A&gt;‌,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Do you know when a progress update may be available?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Dec 2019 20:01:22 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016280#M6673</guid>
      <dc:creator>amwilhite</dc:creator>
      <dc:date>2019-12-03T20:01:22Z</dc:date>
    </item>
    <item>
      <title>Re: USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016281#M6674</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;I get the update information today as the below:&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;/P&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class="" data-object-id="518331" data-object-type="1"&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;DIV class=""&gt;&lt;UL class=""&gt;&lt;LI class="" data-object-id="1240329" data-object-type="2"&gt;&lt;DIV class=""&gt;&lt;DIV&gt;&lt;DIV class=""&gt;&lt;P&gt;In fact, I failed to reproduce this issue on my side so far.&lt;/P&gt;&lt;P&gt;As we have a demo: usb_device_composite_hid_audio_unified, in which there is a MIC.&lt;/P&gt;&lt;P&gt;If customer can reproduce this issue based on this demo, then share the code to us, that would be much useful in this case.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best Regards&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 04 Dec 2019 02:11:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016281#M6674</guid>
      <dc:creator>fangfang</dc:creator>
      <dc:date>2019-12-04T02:11:40Z</dc:date>
    </item>
    <item>
      <title>Re: USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016282#M6675</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi &lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/fangfang"&gt;fangfang&lt;/A&gt;‌,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The issue does not necessarily exist with the RT1050 operating as a USB Device. The issue &lt;EM&gt;does&lt;/EM&gt; exist with the RT1050 operating as a USB Host. Please use the example application I provided to reproduce the issue. Otherwise, create another USB Host Audio application to reproduce the issue.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 04 Dec 2019 13:43:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016282#M6675</guid>
      <dc:creator>amwilhite</dc:creator>
      <dc:date>2019-12-04T13:43:07Z</dc:date>
    </item>
    <item>
      <title>Re: USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016283#M6676</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi &lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/fangfang"&gt;fangfang&lt;/A&gt;‌,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I've attached an updated version of the&amp;nbsp;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;USB Host Audio project that can be used to reproduce the issue on an evaluation board.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;The update includes a large buffer (_audioPlaybackBuffer in host_audio.c) for collecting received audio data. Once the buffer is full, all of the audio data that has been received by the USB Audio Host can be viewed&amp;nbsp;or exported to a binary file.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;The audio software Audacity can be used to play the binary file as audio (File -&amp;gt; Import -&amp;gt; Raw Data...).&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; background-color: #ffffff;"&gt;Thank you&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 04 Dec 2019 16:56:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016283#M6676</guid>
      <dc:creator>amwilhite</dc:creator>
      <dc:date>2019-12-04T16:56:07Z</dc:date>
    </item>
    <item>
      <title>Re: USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016284#M6677</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;Thanks. Got it.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 05 Dec 2019 03:04:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016284#M6677</guid>
      <dc:creator>fangfang</dc:creator>
      <dc:date>2019-12-05T03:04:18Z</dc:date>
    </item>
    <item>
      <title>Re: USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016285#M6678</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P style="color: #000000; background-color: #ffffff; border: 0px;"&gt;Hi &lt;A class="jx-jive-macro-user" href="https://community.nxp.com/people/fangfang"&gt;fangfang&lt;/A&gt;‌&lt;/P&gt;&lt;P style="color: #000000; background-color: #ffffff; border: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="color: #000000; background-color: #ffffff; border: 0px;"&gt;Great. Do you know when a progress update may be available?&lt;/P&gt;&lt;P style="color: #000000; background-color: #ffffff; border: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="color: #000000; background-color: #ffffff; border: 0px;"&gt;Thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 06 Dec 2019 20:24:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016285#M6678</guid>
      <dc:creator>amwilhite</dc:creator>
      <dc:date>2019-12-06T20:24:12Z</dc:date>
    </item>
    <item>
      <title>Re: USB Host Audio Stream Receive Data Corruption</title>
      <link>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016286#M6679</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;In order to&amp;nbsp;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;reproduce the issue ,would you please provide&amp;nbsp; how to test the USB device?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;Have a nice day.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;Best regards&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 09 Dec 2019 09:13:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs/USB-Host-Audio-Stream-Receive-Data-Corruption/m-p/1016286#M6679</guid>
      <dc:creator>fangfang</dc:creator>
      <dc:date>2019-12-09T09:13:01Z</dc:date>
    </item>
  </channel>
</rss>

