Ver código fonte

audio_device : clear fifo on intf change.

MasterPhi 4 anos atrás
pai
commit
204f3152cb
1 arquivos alterados com 10 adições e 0 exclusões
  1. 10 0
      src/class/audio/audio_device.c

+ 10 - 0
src/class/audio/audio_device.c

@@ -1481,6 +1481,9 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
     audio->ep_in_as_intf_num = 0;
     audio->ep_in_as_intf_num = 0;
     usbd_edpt_close(rhport, audio->ep_in);
     usbd_edpt_close(rhport, audio->ep_in);
 
 
+    // Clear FIFOs, since data is no longer valid
+    tu_fifo_clear(&audio->ep_in_ff);
+    
     // Invoke callback - can be used to stop data sampling
     // Invoke callback - can be used to stop data sampling
     if (tud_audio_set_itf_close_EP_cb) TU_VERIFY(tud_audio_set_itf_close_EP_cb(rhport, p_request));
     if (tud_audio_set_itf_close_EP_cb) TU_VERIFY(tud_audio_set_itf_close_EP_cb(rhport, p_request));
 
 
@@ -1502,6 +1505,13 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
   {
   {
     audio->ep_out_as_intf_num = 0;
     audio->ep_out_as_intf_num = 0;
     usbd_edpt_close(rhport, audio->ep_out);
     usbd_edpt_close(rhport, audio->ep_out);
+
+    // Clear FIFOs, since data is no longer valid
+    tu_fifo_clear(&audio->ep_out_ff);
+
+    // Invoke callback - can be used to stop data sampling
+    if (tud_audio_set_itf_close_EP_cb) TU_VERIFY(tud_audio_set_itf_close_EP_cb(rhport, p_request));
+
     audio->ep_out = 0;                          // Necessary?
     audio->ep_out = 0;                          // Necessary?
 
 
     // Clear support FIFOs if used
     // Clear support FIFOs if used