|
@@ -62,6 +62,9 @@
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
/* Includes ------------------------------------------------------------------*/
|
|
|
#include "usbd_audio.h"
|
|
#include "usbd_audio.h"
|
|
|
#include "usbd_ctlreq.h"
|
|
#include "usbd_ctlreq.h"
|
|
|
|
|
+#include "main.h"
|
|
|
|
|
+
|
|
|
|
|
+void ADC_to_MIC(void);
|
|
|
|
|
|
|
|
/** @addtogroup STM32_USB_DEVICE_LIBRARY
|
|
/** @addtogroup STM32_USB_DEVICE_LIBRARY
|
|
|
* @{
|
|
* @{
|
|
@@ -336,29 +339,17 @@ static uint8_t USBD_AUDIO_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx) {
|
|
|
pdev->ep_out[AUDIOOutEpAdd & 0xFU].bInterval = AUDIO_FS_BINTERVAL;
|
|
pdev->ep_out[AUDIOOutEpAdd & 0xFU].bInterval = AUDIO_FS_BINTERVAL;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /* Open EP OUT */
|
|
|
|
|
- (void) USBD_LL_OpenEP(pdev, AUDIOOutEpAdd, USBD_EP_TYPE_ISOC,
|
|
|
|
|
- AUDIO_OUT_PACKET);
|
|
|
|
|
- pdev->ep_out[AUDIOOutEpAdd & 0xFU].is_used = 1U;
|
|
|
|
|
-
|
|
|
|
|
- haudio->alt_setting = 0U;
|
|
|
|
|
- haudio->offset = AUDIO_OFFSET_UNKNOWN;
|
|
|
|
|
- haudio->wr_ptr = 0U;
|
|
|
|
|
- haudio->rd_ptr = 0U;
|
|
|
|
|
- haudio->rd_enable = 0U;
|
|
|
|
|
-
|
|
|
|
|
- /* Initialize the Audio output Hardware layer */
|
|
|
|
|
- if (((USBD_AUDIO_ItfTypeDef*) pdev->pUserData[pdev->classId])->Init(
|
|
|
|
|
- USBD_AUDIO_FREQ,
|
|
|
|
|
- AUDIO_DEFAULT_VOLUME, 0U) != 0U) {
|
|
|
|
|
- return (uint8_t) USBD_FAIL;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ /* Open IN endpoint (mic) */
|
|
|
|
|
+ USBD_LL_OpenEP (pdev, AUDIO_IN_EP, USBD_EP_TYPE_ISOC, AUDIO_IN_PACKET);
|
|
|
|
|
+ pdev->ep_in[AUDIO_IN_EP & 0xFU].is_used = 1U;
|
|
|
|
|
|
|
|
- /* Prepare Out endpoint to receive 1st packet */
|
|
|
|
|
- (void) USBD_LL_PrepareReceive(pdev, AUDIOOutEpAdd, haudio->buffer,
|
|
|
|
|
- AUDIO_OUT_PACKET);
|
|
|
|
|
|
|
|
|
|
- return (uint8_t) USBD_OK;
|
|
|
|
|
|
|
+ /* Make a dummy transfer */
|
|
|
|
|
+ USBD_LL_FlushEP (pdev, AUDIO_IN_EP);
|
|
|
|
|
+ USBD_LL_Transmit (pdev, AUDIO_IN_EP,
|
|
|
|
|
+ (uint8_t*)&haudio->in_buffer[AUDIO_IN_PACKET * !!haudio->in_buffer_half], AUDIO_IN_PACKET);
|
|
|
|
|
+
|
|
|
|
|
+ return (uint8_t)USBD_OK;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -520,11 +511,22 @@ static uint8_t* USBD_AUDIO_GetCfgDesc(uint16_t *length) {
|
|
|
* @retval status
|
|
* @retval status
|
|
|
*/
|
|
*/
|
|
|
static uint8_t USBD_AUDIO_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum) {
|
|
static uint8_t USBD_AUDIO_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum) {
|
|
|
- UNUSED(pdev);
|
|
|
|
|
- UNUSED(epnum);
|
|
|
|
|
|
|
+ USBD_AUDIO_HandleTypeDef *haudio;
|
|
|
|
|
+ uint8_t retval = USBD_OK;
|
|
|
|
|
|
|
|
- /* Only OUT data are processed */
|
|
|
|
|
- return (uint8_t) USBD_OK;
|
|
|
|
|
|
|
+ haudio = (USBD_AUDIO_HandleTypeDef*) pdev->pClassData;
|
|
|
|
|
+
|
|
|
|
|
+ if (epnum == (AUDIO_IN_EP & 0x7F))
|
|
|
|
|
+ {
|
|
|
|
|
+ haudio->in_buffer_half = !haudio->in_buffer_half; // also serves as init to 1 or 0
|
|
|
|
|
+ uint16_t prev = (AUDIO_IN_PACKET / 2) * !haudio->in_buffer_half;
|
|
|
|
|
+ ADC_to_MIC();
|
|
|
|
|
+
|
|
|
|
|
+ USBD_LL_FlushEP (pdev, AUDIO_IN_EP);
|
|
|
|
|
+ USBD_LL_Transmit (pdev, AUDIO_IN_EP, (uint8_t*)(haudio->in_buffer + prev), AUDIO_IN_PACKET);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return (uint8_t)USBD_OK;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|