Răsfoiți Sursa

fix(demo): split feedback caculate macro with AUDIO_FREQ_TO_FEEDBACK_XS and AUDIO_FEEDBACK_TO_BUF_XS

Signed-off-by: sakumisu <1203593632@qq.com>
sakumisu 10 luni în urmă
părinte
comite
c09ceb2537

+ 13 - 13
class/audio/usb_audio.h

@@ -874,7 +874,7 @@ struct audio_cs_ep_ep_general_descriptor {
     0x09,                            /* bLength */                                                                       \
     USB_DESCRIPTOR_TYPE_ENDPOINT,    /* bDescriptorType */                                                               \
     bFeedbackEndpointAddress,        /* bFeedbackEndpointAddress Revise Dir to bEndpointAddress */                       \
-    0x15,                            /* bmAttributes: TransferType=Isochronous  SyncType=Asynchronous  EndpointType=Feedback */  \
+    0x11,                            /* bmAttributes: TransferType=Isochronous  SyncType=None  EndpointType=Feedback */  \
     WBVAL(4),                        /* XXXX wMaxPacketSize in Bytes */                                                  \
     bInterval,                       /* bInterval */                                                                     \
     0x03,                            /* bRefresh, 8ms */                                                                 \
@@ -1325,7 +1325,7 @@ struct audio_v2_control_range3_param_block {
     0x07,                            /* bLength */                                                                                                                        \
     USB_DESCRIPTOR_TYPE_ENDPOINT,    /* bDescriptorType */                                                                                                                \
     bFeedbackEndpointAddress,        /* bFeedbackEndpointAddress Revise Dir to bEndpointAddress */                                                                        \
-    0x15,                            /* bmAttributes: TransferType=Isochronous  SyncType=Asynchronous  EndpointType=Feedback */                                                   \
+    0x11,                            /* bmAttributes: TransferType=Isochronous  SyncType=None  EndpointType=Feedback */                                                   \
     WBVAL(4),                        /* XXXX wMaxPacketSize in Bytes */                                                                                                   \
     bInterval                        /* bInterval */
 
@@ -1341,18 +1341,18 @@ struct audio_v2_control_range3_param_block {
                                   (uint8_t)((frq >> 16)), (uint8_t)((frq >> 24))
 
 /* format 10.14 */
-#define AUDIO_UPDATE_FEEDBACK_DATA_FS(buf, freq) \
-    uint32_t value = ((freq << 10) / 1000);      \
-    buf[0] = ((value << 4) & 0xFFU);             \
-    buf[1] = (((value << 4) >> 8U) & 0xFFU);     \
-    buf[2] = (((value << 4) >> 16U) & 0xFFU)
+#define AUDIO_FREQ_TO_FEEDBACK_FS(freq) ((freq << 10) / 1000)
+#define AUDIO_FEEDBACK_TO_BUF_FS(buf, feedback) \
+    buf[0] = ((feedback << 4) & 0xFFU);         \
+    buf[1] = (((feedback << 4) >> 8U) & 0xFFU); \
+    buf[2] = (((feedback << 4) >> 16U) & 0xFFU)
 
 /* format 16.16 */
-#define AUDIO_UPDATE_FEEDBACK_DATA_HS(buf, freq)            \
-    uint32_t value = ((freq << 13) / 1000);                 \
-    buf[0] = (((value & 0x00001FFFu) << 3) & 0xFFu);        \
-    buf[1] = ((((value & 0x00001FFFu) << 3) >> 8) & 0xFFu); \
-    buf[2] = (((value & 0x01FFE000u) >> 13) & 0xFFu);       \
-    buf[3] = (((value & 0x01FFE000u) >> 21) & 0xFFu)
+#define AUDIO_FREQ_TO_FEEDBACK_HS(freq) ((freq << 13) / 1000)
+#define AUDIO_FEEDBACK_TO_BUF_HS(buf, feedback)                \
+    buf[0] = (((feedback & 0x00001FFFu) << 3) & 0xFFu);        \
+    buf[1] = ((((feedback & 0x00001FFFu) << 3) >> 8) & 0xFFu); \
+    buf[2] = (((feedback & 0x01FFE000u) >> 13) & 0xFFu);       \
+    buf[3] = (((feedback & 0x01FFE000u) >> 21) & 0xFFu)
 
 #endif /* USB_AUDIO_H */

+ 4 - 2
demo/audio_v1_mic_speaker_multichan_template.c

@@ -290,7 +290,8 @@ void usbd_audio_open(uint8_t busid, uint8_t intf)
         rx_flag = 1;
         /* setup first out ep read transfer */
         usbd_ep_start_read(busid, AUDIO_OUT_EP, read_buffer, AUDIO_OUT_PACKET);
-        AUDIO_UPDATE_FEEDBACK_DATA_FS(s_speaker_feedback_buffer, AUDIO_SPEAKER_FREQ); /* uac1 can only use 10.14 */
+        uint32_t feedback_value = AUDIO_FREQ_TO_FEEDBACK_FS(AUDIO_SPEAKER_FREQ);
+        AUDIO_FEEDBACK_TO_BUF_FS(s_speaker_feedback_buffer, feedback_value); /* uac1 can only use 10.14 */
         usbd_ep_start_write(busid, AUDIO_OUT_FEEDBACK_EP, s_speaker_feedback_buffer, FEEDBACK_ENDP_PACKET_SIZE);
         printf("OPEN1\r\n");
     } else {
@@ -328,7 +329,8 @@ void usbd_audio_in_callback(uint8_t busid, uint8_t ep, uint32_t nbytes)
 void usbd_audio_iso_out_feedback_callback(uint8_t busid, uint8_t ep, uint32_t nbytes)
 {
     USB_LOG_RAW("actual feedback len:%d\r\n", nbytes);
-    AUDIO_UPDATE_FEEDBACK_DATA_FS(s_speaker_feedback_buffer, AUDIO_SPEAKER_FREQ);
+    uint32_t feedback_value = AUDIO_FREQ_TO_FEEDBACK_FS(AUDIO_SPEAKER_FREQ);
+    AUDIO_FEEDBACK_TO_BUF_FS(s_speaker_feedback_buffer, feedback_value);
     usbd_ep_start_write(busid, AUDIO_OUT_FEEDBACK_EP, s_speaker_feedback_buffer, FEEDBACK_ENDP_PACKET_SIZE);
 }
 #endif

+ 8 - 4
demo/audio_v2_speaker_multichan_template.c

@@ -306,9 +306,11 @@ void usbd_audio_open(uint8_t busid, uint8_t intf)
     /* setup first out ep read transfer */
     usbd_ep_start_read(busid, AUDIO_OUT_EP, read_buffer, AUDIO_OUT_PACKET);
 #ifdef CONFIG_USB_HS
-    AUDIO_UPDATE_FEEDBACK_DATA_HS(s_speaker_feedback_buffer, AUDIO_FREQ);
+    uint32_t feedback_value = AUDIO_FREQ_TO_FEEDBACK_HS(AUDIO_FREQ);
+    AUDIO_FEEDBACK_TO_BUF_HS(s_speaker_feedback_buffer, feedback_value);
 #else
-    AUDIO_UPDATE_FEEDBACK_DATA_FS(s_speaker_feedback_buffer, AUDIO_FREQ);
+    uint32_t feedback_value = AUDIO_FREQ_TO_FEEDBACK_FS(AUDIO_FREQ);
+    AUDIO_FEEDBACK_TO_BUF_FS(s_speaker_feedback_buffer, feedback_value);
 #endif
     usbd_ep_start_write(busid, AUDIO_OUT_FEEDBACK_EP, s_speaker_feedback_buffer, FEEDBACK_ENDP_PACKET_SIZE);
     USB_LOG_RAW("OPEN\r\n");
@@ -338,9 +340,11 @@ void usbd_audio_iso_out_feedback_callback(uint8_t busid, uint8_t ep, uint32_t nb
 {
     USB_LOG_RAW("actual feedback len:%d\r\n", nbytes);
 #ifdef CONFIG_USB_HS
-    AUDIO_UPDATE_FEEDBACK_DATA_HS(s_speaker_feedback_buffer, AUDIO_FREQ);
+    uint32_t feedback_value = AUDIO_FREQ_TO_FEEDBACK_HS(AUDIO_FREQ);
+    AUDIO_FEEDBACK_TO_BUF_HS(s_speaker_feedback_buffer, feedback_value);
 #else
-    AUDIO_UPDATE_FEEDBACK_DATA_FS(s_speaker_feedback_buffer, AUDIO_FREQ);
+    uint32_t feedback_value = AUDIO_FREQ_TO_FEEDBACK_FS(AUDIO_FREQ);
+    AUDIO_FEEDBACK_TO_BUF_FS(s_speaker_feedback_buffer, feedback_value);
 #endif
     usbd_ep_start_write(busid, AUDIO_OUT_FEEDBACK_EP, s_speaker_feedback_buffer, FEEDBACK_ENDP_PACKET_SIZE);
 }