STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
usbd_audio.c
Go to the documentation of this file.
1 
64 /* Includes ------------------------------------------------------------------*/
65 #include "usbd_audio.h"
66 #include "usbd_desc.h"
67 #include "usbd_ctlreq.h"
68 
69 #include "AudioPlayer.h"
70 
101 #define AUDIO_SAMPLE_FREQ(frq) (uint8_t)(frq), (uint8_t)((frq >> 8)), (uint8_t)((frq >> 16))
102 
103 #define AUDIO_PACKET_SZE(frq) (uint8_t)(((frq * 2 * 2)/1000) & 0xFF), \
104  (uint8_t)((((frq * 2 * 2)/1000) >> 8) & 0xFF)
105 
106 extern uint32_t EP1PktLen;
107 
116 static uint8_t USBD_AUDIO_Init (USBD_HandleTypeDef *pdev,
117  uint8_t cfgidx);
118 
119 static uint8_t USBD_AUDIO_DeInit (USBD_HandleTypeDef *pdev,
120  uint8_t cfgidx);
121 
122 static uint8_t USBD_AUDIO_Setup (USBD_HandleTypeDef *pdev,
123  USBD_SetupReqTypedef *req);
124 
125 static uint8_t *USBD_AUDIO_GetCfgDesc (uint16_t *length);
126 
127 static uint8_t *USBD_AUDIO_GetDeviceQualifierDesc (uint16_t *length);
128 
129 static uint8_t USBD_AUDIO_DataIn (USBD_HandleTypeDef *pdev, uint8_t epnum);
130 
131 static uint8_t USBD_AUDIO_DataOut (USBD_HandleTypeDef *pdev, uint8_t epnum);
132 
133 static uint8_t USBD_AUDIO_EP0_RxReady (USBD_HandleTypeDef *pdev);
134 
135 static uint8_t USBD_AUDIO_EP0_TxReady (USBD_HandleTypeDef *pdev);
136 
137 static uint8_t USBD_AUDIO_SOF (USBD_HandleTypeDef *pdev);
138 
139 static uint8_t USBD_AUDIO_IsoINIncomplete (USBD_HandleTypeDef *pdev, uint8_t epnum);
140 
141 static uint8_t USBD_AUDIO_IsoOutIncomplete (USBD_HandleTypeDef *pdev, uint8_t epnum);
142 
143 static void AUDIO_REQ_GetCurrent(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
144 
145 static void AUDIO_REQ_SetCurrent(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
146 
156 {
157  USBD_AUDIO_Init,
158  USBD_AUDIO_DeInit,
159  USBD_AUDIO_Setup,
160  USBD_AUDIO_EP0_TxReady,
161  USBD_AUDIO_EP0_RxReady,
162  USBD_AUDIO_DataIn,
163  USBD_AUDIO_DataOut,
164  USBD_AUDIO_SOF,
165  USBD_AUDIO_IsoINIncomplete,
166  USBD_AUDIO_IsoOutIncomplete,
167  USBD_AUDIO_GetCfgDesc,
168  USBD_AUDIO_GetCfgDesc,
169  USBD_AUDIO_GetCfgDesc,
170  USBD_AUDIO_GetDeviceQualifierDesc,
171 };
172 
173 /* USB AUDIO device Configuration Descriptor */
174 __ALIGN_BEGIN static uint8_t USBD_AUDIO_CfgDesc[USB_AUDIO_CONFIG_DESC_SIZ] __ALIGN_END =
175 {
176  /* Configuration 1 */
177  0x09, /* bLength */
178  USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType */
179  LOBYTE(USB_AUDIO_CONFIG_DESC_SIZ), /* wTotalLength 109 bytes*/
181  0x02, /* bNumInterfaces */
182  0x01, /* bConfigurationValue */
183  0x00, /* iConfiguration */
184  0xC0, /* bmAttributes BUS Powred*/
185  0x32, /* bMaxPower = 100 mA*/
186  /* 09 byte*/
187 
188  /* USB Speaker Standard interface descriptor */
189  AUDIO_INTERFACE_DESC_SIZE, /* bLength */
190  USB_DESC_TYPE_INTERFACE, /* bDescriptorType */
191  0x00, /* bInterfaceNumber */
192  0x00, /* bAlternateSetting */
193  0x00, /* bNumEndpoints */
194  USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */
195  AUDIO_SUBCLASS_AUDIOCONTROL, /* bInterfaceSubClass */
196  AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol */
197  0x00, /* iInterface */
198  /* 09 byte*/
199 
200  /* USB Speaker Class-specific AC Interface Descriptor */
201  AUDIO_INTERFACE_DESC_SIZE, /* bLength */
202  AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
203  AUDIO_CONTROL_HEADER, /* bDescriptorSubtype */
204  0x00, /* 1.00 */ /* bcdADC */
205  0x01,
206  0x27, /* wTotalLength = 39*/
207  0x00,
208  0x01, /* bInCollection */
209  0x01, /* baInterfaceNr */
210  /* 09 byte*/
211 
212  /* USB Speaker Input Terminal Descriptor */
213  AUDIO_INPUT_TERMINAL_DESC_SIZE, /* bLength */
214  AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
215  AUDIO_CONTROL_INPUT_TERMINAL, /* bDescriptorSubtype */
216  0x01, /* bTerminalID */
217  0x01, /* wTerminalType AUDIO_TERMINAL_USB_STREAMING 0x0101 */
218  0x01,
219  0x00, /* bAssocTerminal */
220  0x01, /* bNrChannels */
221  0x00, /* wChannelConfig 0x0000 Mono */
222  0x00,
223  0x00, /* iChannelNames */
224  0x00, /* iTerminal */
225  /* 12 byte*/
226 
227  /* USB Speaker Audio Feature Unit Descriptor */
228  0x09, /* bLength */
229  AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
230  AUDIO_CONTROL_FEATURE_UNIT, /* bDescriptorSubtype */
231  AUDIO_OUT_STREAMING_CTRL, /* bUnitID */
232  0x01, /* bSourceID */
233  0x01, /* bControlSize */
234  AUDIO_CONTROL_MUTE,// |AUDIO_CONTROL_VOLUME, /* bmaControls(0) */
235  0, /* bmaControls(1) */
236  0x00, /* iTerminal */
237  /* 09 byte*/
238 
239  /*USB Speaker Output Terminal Descriptor */
240  0x09, /* bLength */
241  AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
242  AUDIO_CONTROL_OUTPUT_TERMINAL, /* bDescriptorSubtype */
243  0x03, /* bTerminalID */
244  0x01, /* wTerminalType 0x0301*/
245  0x03,
246  0x00, /* bAssocTerminal */
247  0x02, /* bSourceID */
248  0x00, /* iTerminal */
249  /* 09 byte*/
250 
251  /* USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwith */
252  /* Interface 1, Alternate Setting 0 */
253  AUDIO_INTERFACE_DESC_SIZE, /* bLength */
254  USB_DESC_TYPE_INTERFACE, /* bDescriptorType */
255  0x01, /* bInterfaceNumber */
256  0x00, /* bAlternateSetting */
257  0x00, /* bNumEndpoints */
258  USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */
259  AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubClass */
260  AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol */
261  0x00, /* iInterface */
262  /* 09 byte*/
263 
264  /* USB Speaker Standard AS Interface Descriptor - Audio Streaming Operational */
265  /* Interface 1, Alternate Setting 1 */
266  AUDIO_INTERFACE_DESC_SIZE, /* bLength */
267  USB_DESC_TYPE_INTERFACE, /* bDescriptorType */
268  0x01, /* bInterfaceNumber */
269  0x01, /* bAlternateSetting */
270  0x01, /* bNumEndpoints */
271  USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */
272  AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubClass */
273  AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol */
274  0x00, /* iInterface */
275  /* 09 byte*/
276 
277  /* USB Speaker Audio Streaming Interface Descriptor */
279  AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
280  AUDIO_STREAMING_GENERAL, /* bDescriptorSubtype */
281  0x01, /* bTerminalLink */
282  0x01, /* bDelay */
283  0x01, /* wFormatTag AUDIO_FORMAT_PCM 0x0001*/
284  0x00,
285  /* 07 byte*/
286 
287  /* USB Speaker Audio Type III Format Interface Descriptor */
288  //0x0B, /* bLength */
289  14,
290  AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
291  AUDIO_STREAMING_FORMAT_TYPE, /* bDescriptorSubtype */
292  AUDIO_FORMAT_TYPE_III, /* bFormatType */
293  0x02, /* bNrChannels */
294  0x02, /* bSubFrameSize : 2 Bytes per frame (16bits) */
295  16, /* bBitResolution (16-bits per sample) */
296  //0x01, /* bSamFreqType only one frequency supported */
297  //AUDIO_SAMPLE_FREQ(USBD_AUDIO_FREQ), /* Audio sampling frequency coded on 3 bytes */
298  /* 11 byte*/
299  0x02, /* bSamFreqType only one frequency supported */
300  AUDIO_SAMPLE_FREQ(USBD_AUDIO_FREQ), /* Audio sampling frequency coded on 3 bytes */
301  AUDIO_SAMPLE_FREQ(USBD_AUDIO_FREQ2), /* Audio sampling frequency coded on 3 bytes */
302  /* 11 byte*/
303 
304  /* Endpoint 1 - Standard Descriptor */
305  AUDIO_STANDARD_ENDPOINT_DESC_SIZE, /* bLength */
306  USB_DESC_TYPE_ENDPOINT, /* bDescriptorType */
307  AUDIO_OUT_EP, /* bEndpointAddress 1 out endpoint*/
308  USBD_EP_TYPE_ISOC, /* bmAttributes */
309  AUDIO_PACKET_SZE(USBD_AUDIO_FREQ), /* wMaxPacketSize in Bytes (Freq(Samples)*2(Stereo)*2(HalfWord)) */
310  0x01, /* bInterval */
311  0x00, /* bRefresh */
312  0x00, /* bSynchAddress */
313  /* 09 byte*/
314 
315  /* Endpoint - Audio Streaming Descriptor*/
317  AUDIO_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */
318  AUDIO_ENDPOINT_GENERAL, /* bDescriptor */
319  0x00, /* bmAttributes */
320  0x00, /* bLockDelayUnits */
321  0x00, /* wLockDelay */
322  0x00,
323  /* 07 byte*/
324 } ;
325 
326 /* USB Standard Device Descriptor */
327 __ALIGN_BEGIN static uint8_t USBD_AUDIO_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END=
328 {
331  0x00,
332  0x02,
333  0x00,
334  0x00,
335  0x00,
336  0x40,
337  0x01,
338  0x00,
339 };
340 
356 static uint8_t USBD_AUDIO_Init (USBD_HandleTypeDef *pdev,
357  uint8_t cfgidx)
358 {
359  USBD_AUDIO_HandleTypeDef *haudio;
360 
361  /* Open EP OUT */
362  USBD_LL_OpenEP(pdev,
363  AUDIO_OUT_EP,
366 
367  /* Allocate Audio structure */
369 
370  if(pdev->pClassData == NULL)
371  {
372  return USBD_FAIL;
373  }
374  else
375  {
376  haudio = (USBD_AUDIO_HandleTypeDef*) pdev->pClassData;
377  haudio->alt_setting = 0;
378  haudio->offset = AUDIO_OFFSET_UNKNOWN;
379  haudio->wr_ptr = 0;
380  haudio->rd_ptr = 0;
381  haudio->rd_enable = 0;
382 
383  /* Initialize the Audio output Hardware layer */
385  {
386  return USBD_FAIL;
387  }
388 
389  /* Prepare Out endpoint to receive 1st packet */
391  AUDIO_OUT_EP,
392  haudio->buffer,
394  }
395  return USBD_OK;
396 }
397 
405 static uint8_t USBD_AUDIO_DeInit (USBD_HandleTypeDef *pdev,
406  uint8_t cfgidx)
407 {
408 
409  /* Open EP OUT */
410  USBD_LL_CloseEP(pdev,
411  AUDIO_OUT_EP);
412 
413  /* DeInit physical Interface components */
414  if(pdev->pClassData != NULL)
415  {
416  ((USBD_AUDIO_ItfTypeDef *)pdev->pUserData)->DeInit(0);
417  USBD_free(pdev->pClassData);
418  pdev->pClassData = NULL;
419  }
420 
421  return USBD_OK;
422 }
423 
431 static uint8_t USBD_AUDIO_Setup (USBD_HandleTypeDef *pdev,
433 {
434  USBD_AUDIO_HandleTypeDef *haudio;
435  uint16_t len;
436  uint8_t *pbuf;
437  uint8_t ret = USBD_OK;
438  haudio = (USBD_AUDIO_HandleTypeDef*) pdev->pClassData;
439 
440  switch (req->bmRequest & USB_REQ_TYPE_MASK)
441  {
442  case USB_REQ_TYPE_CLASS :
443  switch (req->bRequest)
444  {
445  case AUDIO_REQ_GET_CUR:
446  AUDIO_REQ_GetCurrent(pdev, req);
447  break;
448 
449  case AUDIO_REQ_SET_CUR:
450  AUDIO_REQ_SetCurrent(pdev, req);
451  break;
452 
453  default:
454  USBD_CtlError (pdev, req);
455  ret = USBD_FAIL;
456  }
457  break;
458 
460  switch (req->bRequest)
461  {
463  if( (req->wValue >> 8) == AUDIO_DESCRIPTOR_TYPE)
464  {
465  pbuf = USBD_AUDIO_CfgDesc + 18;
466  len = MIN(USB_AUDIO_DESC_SIZ , req->wLength);
467 
468 
469  USBD_CtlSendData (pdev,
470  pbuf,
471  len);
472  }
473  break;
474 
475  case USB_REQ_GET_INTERFACE :
476  USBD_CtlSendData (pdev,
477  (uint8_t *)&(haudio->alt_setting),
478  1);
479  break;
480 
481  case USB_REQ_SET_INTERFACE :
482  if ((uint8_t)(req->wValue) <= USBD_MAX_NUM_INTERFACES)
483  {
484  haudio->alt_setting = (uint8_t)(req->wValue);
485  }
486  else
487  {
488  /* Call the error management function (command will be nacked */
489  USBD_CtlError (pdev, req);
490  }
491  break;
492 
493  default:
494  USBD_CtlError (pdev, req);
495  ret = USBD_FAIL;
496  }
497  }
498  return ret;
499 }
500 
501 
509 static uint8_t *USBD_AUDIO_GetCfgDesc (uint16_t *length)
510 {
511  *length = sizeof (USBD_AUDIO_CfgDesc);
512  return USBD_AUDIO_CfgDesc;
513 }
514 
522 static uint8_t USBD_AUDIO_DataIn (USBD_HandleTypeDef *pdev,
523  uint8_t epnum)
524 {
525 
526  /* Only OUT data are processed */
527  return USBD_OK;
528 }
529 
536 static uint8_t USBD_AUDIO_EP0_RxReady (USBD_HandleTypeDef *pdev)
537 {
538  USBD_AUDIO_HandleTypeDef *haudio;
539  haudio = (USBD_AUDIO_HandleTypeDef*) pdev->pClassData;
540 
541  if (haudio->control.cmd == AUDIO_REQ_SET_CUR)
542  {/* In this driver, to simplify code, only SET_CUR request is managed */
543 
544  if (haudio->control.unit == AUDIO_OUT_STREAMING_CTRL)
545  {
546  ((USBD_AUDIO_ItfTypeDef *)pdev->pUserData)->MuteCtl(haudio->control.data[0]);
547  haudio->control.cmd = 0;
548  haudio->control.len = 0;
549  }
550  }
551 
552  return USBD_OK;
553 }
560 static uint8_t USBD_AUDIO_EP0_TxReady (USBD_HandleTypeDef *pdev)
561 {
562  /* Only OUT control data are processed */
563  return USBD_OK;
564 }
571 static uint8_t USBD_AUDIO_SOF (USBD_HandleTypeDef *pdev)
572 {
573  return USBD_OK;
574 }
575 
583 {
584  int8_t shift = 0;
585  USBD_AUDIO_HandleTypeDef *haudio;
586  haudio = (USBD_AUDIO_HandleTypeDef*) pdev->pClassData;
587 
588  haudio->offset = offset;
589 
590  if(haudio->rd_enable == 1)
591  {
592  haudio->rd_ptr += AUDIO_TOTAL_BUF_SIZE/2;
593 
594  if (haudio->rd_ptr == AUDIO_TOTAL_BUF_SIZE)
595  {
596  /* roll back */
597  haudio->rd_ptr = 0;
598  }
599  }
600 
601  if(haudio->rd_ptr > haudio->wr_ptr)
602  {
603  if((haudio->rd_ptr - haudio->wr_ptr) < AUDIO_OUT_PACKET)
604  {
605  shift = -4;
606  }
607  else if((haudio->rd_ptr - haudio->wr_ptr) > (AUDIO_TOTAL_BUF_SIZE - AUDIO_OUT_PACKET))
608  {
609  shift = 4;
610  }
611 
612  }
613  else
614  {
615  if((haudio->wr_ptr - haudio->rd_ptr) < AUDIO_OUT_PACKET)
616  {
617  shift = 4;
618  }
619  else if((haudio->wr_ptr - haudio->rd_ptr) > (AUDIO_TOTAL_BUF_SIZE - AUDIO_OUT_PACKET))
620  {
621  shift = -4;
622  }
623  }
624 
625  if(haudio->offset == AUDIO_OFFSET_FULL)
626  {
627  ((USBD_AUDIO_ItfTypeDef *)pdev->pUserData)->AudioCmd(&haudio->buffer[0],
628  AUDIO_TOTAL_BUF_SIZE/2 - shift,
629  AUDIO_CMD_PLAY);
630  haudio->offset = AUDIO_OFFSET_NONE;
631  }
632 }
633 
641 static uint8_t USBD_AUDIO_IsoINIncomplete (USBD_HandleTypeDef *pdev, uint8_t epnum)
642 {
643  return USBD_OK;
644 }
652 static uint8_t USBD_AUDIO_IsoOutIncomplete (USBD_HandleTypeDef *pdev, uint8_t epnum)
653 {
654  return USBD_OK;
655 }
656 
664 static uint8_t USBD_AUDIO_DataOut (USBD_HandleTypeDef *pdev,
665  uint8_t epnum)
666 {
667  USBD_AUDIO_HandleTypeDef *haudio;
668  haudio = (USBD_AUDIO_HandleTypeDef*) pdev->pClassData;
669 
670  if (epnum == AUDIO_OUT_EP)
671  {
672  /* Increment the Buffer pointer or roll it back when all buffers are full */
673 
674  //YYYY
675  //haudio->wr_ptr += AUDIO_OUT_PACKET;
676  haudio->wr_ptr += EP1PktLen;
677 
678  if (haudio->wr_ptr >= AUDIO_TOTAL_BUF_SIZE)
679  {
680  uint16_t remSamples;
681 #if 0
682  if(haudio->offset == AUDIO_OFFSET_UNKNOWN)
683  {
684  ((USBD_AUDIO_ItfTypeDef *)pdev->pUserData)->AudioCmd(&haudio->buffer[0],
687  haudio->offset = AUDIO_OFFSET_NONE;
688  }
689 #else
690  AUDIO_Player_CpyBuf(haudio->buffer);
691 #endif
692  remSamples = haudio->wr_ptr - AUDIO_TOTAL_BUF_SIZE;
693  if (remSamples)
694  {
695  memmove(haudio->buffer, &haudio->buffer[AUDIO_TOTAL_BUF_SIZE], remSamples);
696  haudio->wr_ptr = remSamples;
697  }
698  else
699  haudio->wr_ptr = 0;
700  }
701 
702  if(haudio->rd_enable == 0)
703  {
704  if (haudio->wr_ptr == (AUDIO_TOTAL_BUF_SIZE / 2))
705  {
706  haudio->rd_enable = 1;
707  }
708  }
709 
710  /* Prepare Out endpoint to receive next audio packet */
712  AUDIO_OUT_EP,
713  &haudio->buffer[haudio->wr_ptr],
715 
716  }
717 
718  return USBD_OK;
719 }
720 
728 static void AUDIO_REQ_GetCurrent(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
729 {
730  USBD_AUDIO_HandleTypeDef *haudio;
731  haudio = (USBD_AUDIO_HandleTypeDef*) pdev->pClassData;
732 
733  memset(haudio->control.data, 0, 64);
734  /* Send the current mute state */
735  USBD_CtlSendData (pdev,
736  haudio->control.data,
737  req->wLength);
738 }
739 
747 static void AUDIO_REQ_SetCurrent(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
748 {
749  USBD_AUDIO_HandleTypeDef *haudio;
750  haudio = (USBD_AUDIO_HandleTypeDef*) pdev->pClassData;
751 
752  if (req->wLength)
753  {
754  /* Prepare the reception of the buffer over EP0 */
755  USBD_CtlPrepareRx (pdev,
756  haudio->control.data,
757  req->wLength);
758 
759  haudio->control.cmd = AUDIO_REQ_SET_CUR; /* Set the request value */
760  haudio->control.len = req->wLength; /* Set the request data length */
761  haudio->control.unit = HIBYTE(req->wIndex); /* Set the request target unit */
762  }
763 }
764 
765 
772 static uint8_t *USBD_AUDIO_GetDeviceQualifierDesc (uint16_t *length)
773 {
774  *length = sizeof (USBD_AUDIO_DeviceQualifierDesc);
775  return USBD_AUDIO_DeviceQualifierDesc;
776 }
777 
784  USBD_AUDIO_ItfTypeDef *fops)
785 {
786  if(fops != NULL)
787  {
788  pdev->pUserData= fops;
789  }
790  return 0;
791 }
806 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
#define AUDIO_ENDPOINT_DESCRIPTOR_TYPE
Definition: usbd_audio.h:72
#define AUDIO_ENDPOINT_GENERAL
Definition: usbd_audio.h:89
USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
Closes an endpoint of the Low Level Driver.
Definition: usbd_conf.c:492
#define AUDIO_STREAMING_ENDPOINT_DESC_SIZE
Definition: usbd_audio.h:60
uint8_t bmRequest
Definition: usbd_def.h:151
uint16_t wValue
Definition: usbd_def.h:153
#define AUDIO_PROTOCOL_UNDEFINED
Definition: usbd_audio.h:66
#define AUDIO_REQ_SET_CUR
Definition: usbd_audio.h:92
#define AUDIO_CONTROL_FEATURE_UNIT
Definition: usbd_audio.h:78
#define LOBYTE(x)
Definition: usbd_def.h:263
#define AUDIO_CONTROL_OUTPUT_TERMINAL
Definition: usbd_audio.h:77
uint8_t bRequest
Definition: usbd_def.h:152
#define USB_LEN_DEV_QUALIFIER_DESC
Definition: usbd_def.h:57
#define AUDIO_INTERFACE_DESC_SIZE
Definition: usbd_audio.h:57
__IO uint32_t alt_setting
Definition: usbd_audio.h:149
uint32_t EP1PktLen
if(LCD_Lock==DISABLE)
Definition: lcd_log.c:249
#define USB_REQ_GET_DESCRIPTOR
Definition: usbd_def.h:87
#define AUDIO_REQ_GET_CUR
Definition: usbd_audio.h:91
#define AUDIO_DESCRIPTOR_TYPE
Definition: usbd_audio.h:62
#define USB_REQ_GET_INTERFACE
Definition: usbd_def.h:91
#define AUDIO_STREAMING_FORMAT_TYPE
Definition: usbd_audio.h:68
#define USB_AUDIO_CONFIG_DESC_SIZ
Definition: usbd_audio.h:55
#define USBD_free
Definition: usbd_conf.h:74
USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint16_t size)
Prepares an endpoint for reception.
Definition: usbd_conf.c:591
#define AUDIO_OUT_EP
Definition: usbd_audio.h:52
USBD_ClassTypeDef USBD_AUDIO
Definition: usbd_audio.c:155
#define NULL
Definition: usbd_def.h:53
#define __ALIGN_END
#define AUDIO_CONTROL_HEADER
Definition: usbd_audio.h:75
#define AUDIO_TOTAL_BUF_SIZE
Definition: usbd_audio.h:108
#define USBD_malloc
Definition: usbd_conf.h:73
#define USB_DEVICE_CLASS_AUDIO
Definition: usbd_audio.h:63
#define USB_REQ_SET_INTERFACE
Definition: usbd_def.h:92
#define USBD_AUDIO_FREQ
Definition: usbd_audio.h:96
uint16_t wLength
Definition: usbd_def.h:155
void USBD_CtlError(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
USBD_CtlError Handle USB low level Error.
Definition: usbd_ctlreq.c:716
#define USB_DESC_TYPE_ENDPOINT
Definition: usbd_def.h:99
Definition: pbuf.h:108
uint16_t wIndex
Definition: usbd_def.h:154
#define USB_DESC_TYPE_INTERFACE
Definition: usbd_def.h:98
#define AUDIO_INPUT_TERMINAL_DESC_SIZE
Definition: usbd_audio.h:80
#define USB_REQ_TYPE_CLASS
Definition: usbd_def.h:74
#define USB_DESC_TYPE_CONFIGURATION
Definition: usbd_def.h:96
AUDIO_OffsetTypeDef offset
Definition: usbd_audio.h:151
#define USB_REQ_TYPE_STANDARD
Definition: usbd_def.h:73
#define AUDIO_INTERFACE_DESCRIPTOR_TYPE
Definition: usbd_audio.h:71
uint8_t buffer[AUDIO_TOTAL_BUF_SIZE+4+176]
Definition: usbd_audio.h:150
#define AUDIO_PACKET_SZE(frq)
Definition: usbd_audio.c:103
USBD_StatusTypeDef USBD_CtlPrepareRx(USBD_HandleTypeDef *pdev, uint8_t *pbuf, uint16_t len)
USBD_CtlPrepareRx receive data on the ctl pipe.
Definition: usbd_ioreq.c:135
#define AUDIO_SAMPLE_FREQ(frq)
Definition: usbd_audio.c:101
#define USBD_MAX_NUM_INTERFACES
Definition: usbd_conf.h:61
uint8_t USBD_AUDIO_RegisterInterface(USBD_HandleTypeDef *pdev, USBD_AUDIO_ItfTypeDef *fops)
USBD_AUDIO_RegisterInterface.
Definition: usbd_audio.c:783
#define AUDIO_STANDARD_ENDPOINT_DESC_SIZE
Definition: usbd_audio.h:59
#define USBD_EP_TYPE_ISOC
Definition: usbd_def.h:134
USBD_StatusTypeDef USBD_CtlSendData(USBD_HandleTypeDef *pdev, uint8_t *buf, uint16_t len)
USBD_CtlSendData send data on the ctl pipe.
Definition: usbd_ioreq.c:95
#define HIBYTE(x)
Definition: usbd_def.h:264
#define USB_DESC_TYPE_DEVICE_QUALIFIER
Definition: usbd_def.h:100
header file for the usbd_audio.c file.
uint8_t data[USB_MAX_EP0_SIZE]
Definition: usbd_audio.h:139
#define AUDIO_STREAMING_INTERFACE_DESC_SIZE
Definition: usbd_audio.h:82
#define AUDIO_CONTROL_MUTE
Definition: usbd_audio.h:84
#define USB_REQ_TYPE_MASK
Definition: usbd_def.h:76
USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t ep_type, uint16_t ep_mps)
Opens an endpoint of the Low Level Driver.
Definition: usbd_conf.c:473
#define AUDIO_SUBCLASS_AUDIOCONTROL
Definition: usbd_audio.h:64
#define AUDIO_DEFAULT_VOLUME
Definition: usbd_audio.h:100
AUDIO_OffsetTypeDef
Definition: usbd_audio.h:120
#define AUDIO_CONTROL_INPUT_TERMINAL
Definition: usbd_audio.h:76
#define AUDIO_OUT_STREAMING_CTRL
Definition: usbd_audio.h:94
#define USB_AUDIO_DESC_SIZ
Definition: usbd_audio.h:58
void USBD_AUDIO_Sync(USBD_HandleTypeDef *pdev, AUDIO_OffsetTypeDef offset)
USBD_AUDIO_SOF handle SOF event.
Definition: usbd_audio.c:582
USBD_AUDIO_ControlTypeDef control
Definition: usbd_audio.h:155
#define USBD_AUDIO_FREQ2
Definition: usbd_audio.h:97
#define AUDIO_FORMAT_TYPE_III
Definition: usbd_audio.h:87
#define AUDIO_SUBCLASS_AUDIOSTREAMING
Definition: usbd_audio.h:65
#define AUDIO_STREAMING_GENERAL
Definition: usbd_audio.h:67
void AUDIO_Player_CpyBuf(uint8_t *buf)
Copy USB input buffer to SAI output buffer.
Definition: AudioPlayer.c:227
#define MIN(a, b)
Definition: usbd_def.h:265
#define AUDIO_OUT_PACKET
Definition: usbd_audio.h:99