audio_class.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /**
  2. **************************************************************************
  3. * @file audio_class.h
  4. * @version v2.0.6
  5. * @date 2021-12-31
  6. * @brief usb audio class file
  7. **************************************************************************
  8. * Copyright notice & Disclaimer
  9. *
  10. * The software Board Support Package (BSP) that is made available to
  11. * download from Artery official website is the copyrighted work of Artery.
  12. * Artery authorizes customers to use, copy, and distribute the BSP
  13. * software and its related documentation for the purpose of design and
  14. * development in conjunction with Artery microcontrollers. Use of the
  15. * software is governed by this copyright notice and the following disclaimer.
  16. *
  17. * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES,
  18. * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS,
  19. * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR
  20. * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS,
  21. * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
  22. * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
  23. *
  24. **************************************************************************
  25. */
  26. /* define to prevent recursive inclusion -------------------------------------*/
  27. #ifndef __AUDIO_CLASS_H
  28. #define __AUDIO_CLASS_H
  29. #ifdef __cplusplus
  30. extern "C" {
  31. #endif
  32. #include "usb_std.h"
  33. #include "usbd_core.h"
  34. #include "audio_conf.h"
  35. /** @addtogroup AT32F403A_407_middlewares_usbd_class
  36. * @{
  37. */
  38. /** @addtogroup USB_audio_class
  39. * @{
  40. */
  41. /** @defgroup USB_audio_class_definition
  42. * @{
  43. */
  44. /**
  45. * @brief endpoint define
  46. */
  47. #define USBD_AUDIO_MIC_IN_EPT 0x81
  48. #define USBD_AUDIO_SPK_OUT_EPT 0x02
  49. #define USBD_AUDIO_FEEDBACK_EPT 0x83
  50. /**
  51. * @brief endpoint support max size
  52. */
  53. #define AUDIO_REMAIN_SIZE 40
  54. #define AUDIO_MIC_IN_MAXPACKET_SIZE (AUDIO_SUPPORT_MAX_FREQ * AUDIO_MIC_CHANEL_NUM * (AUDIO_MIC_DEFAULT_BITW / 8) + AUDIO_REMAIN_SIZE)
  55. #define AUDIO_SPK_OUT_MAXPACKET_SIZE (AUDIO_SUPPORT_MAX_FREQ * AUDIO_SPK_CHANEL_NUM * (AUDIO_SPK_DEFAULT_BITW / 8) + AUDIO_REMAIN_SIZE)
  56. #define AUDIO_FEEDBACK_MAXPACKET_SIZE 0x3
  57. #define FEEDBACK_REFRESH_TIME 0x8
  58. /**
  59. * @brief request type define
  60. */
  61. #define AUDIO_REQ_CONTROL_INTERFACE 0x01
  62. #define AUDIO_REQ_CONTROL_ENDPOINT 0x02
  63. #define AUDIO_REQ_CONTROL_MASK 0x03
  64. /**
  65. * @brief audio set cur type define
  66. */
  67. #define AUDIO_MUTE_CONTROL 0x01
  68. #define AUDIO_VOLUME_CONTROL 0x02
  69. #define AUDIO_FREQ_SET_CONTROL 0x03
  70. /**
  71. * @brief audio descriptor type
  72. */
  73. #define AUDIO_DESCRIPTOR_TYPE 0x21
  74. #define AUDIO_DESCRIPTOR_SIZE 0x09
  75. /**
  76. * @brief usb audio control struct
  77. */
  78. typedef struct
  79. {
  80. uint8_t enpd;
  81. uint8_t interface;
  82. uint8_t request_no;
  83. uint8_t spk_mute;
  84. uint8_t mic_mute;
  85. uint16_t spk_volume;
  86. uint16_t mic_volume;
  87. uint32_t spk_freq;
  88. uint32_t mic_freq;
  89. uint16_t spk_volume_limits[3]; /*[0] is mininum value, [1] is maxnum value, [2] is volume resolution */
  90. uint16_t mic_volume_limits[3]; /*[0] is mininum value, [1] is maxnum value, [2] is volume resolution */
  91. uint8_t audio_cmd;
  92. uint32_t audio_cmd_len;
  93. uint32_t spk_alt_setting;
  94. uint32_t mic_alt_setting;
  95. uint8_t g_audio_cur[64];
  96. uint8_t audio_spk_data[AUDIO_SPK_OUT_MAXPACKET_SIZE];
  97. uint8_t audio_mic_data[AUDIO_MIC_IN_MAXPACKET_SIZE];
  98. uint8_t audio_feed_back[AUDIO_FEEDBACK_MAXPACKET_SIZE+1];
  99. }usb_audio_type;
  100. extern usbd_class_handler audio_class_handler;
  101. /**
  102. * @}
  103. */
  104. /**
  105. * @}
  106. */
  107. /**
  108. * @}
  109. */
  110. #ifdef __cplusplus
  111. }
  112. #endif
  113. #endif