usbh_audio.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /*
  2. * Copyright (c) 2022, sakumisu
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #ifndef USBH_AUDIO_H
  7. #define USBH_AUDIO_H
  8. #include "usb_audio.h"
  9. #ifndef CONFIG_USBHOST_AUDIO_MAX_STREAMS
  10. #define CONFIG_USBHOST_AUDIO_MAX_STREAMS 3
  11. #endif
  12. struct usbh_audio_ac_msg {
  13. struct audio_cs_if_ac_input_terminal_descriptor ac_input;
  14. struct audio_cs_if_ac_feature_unit_descriptor ac_feature_unit;
  15. struct audio_cs_if_ac_output_terminal_descriptor ac_output;
  16. };
  17. struct usbh_audio_as_msg {
  18. const char *stream_name;
  19. uint8_t stream_intf;
  20. uint8_t input_terminal_id;
  21. uint8_t feature_terminal_id;
  22. uint8_t output_terminal_id;
  23. uint8_t ep_attr;
  24. uint8_t num_of_altsetting;
  25. uint16_t volume_min;
  26. uint16_t volume_max;
  27. uint16_t volume_res;
  28. uint16_t volume_cur;
  29. bool mute;
  30. struct audio_cs_if_as_general_descriptor as_general;
  31. struct audio_cs_if_as_format_type_descriptor as_format[CONFIG_USBHOST_MAX_INTF_ALTSETTINGS];
  32. };
  33. struct usbh_audio {
  34. struct usbh_hubport *hport;
  35. struct usb_endpoint_descriptor *isoin; /* ISO IN endpoint */
  36. struct usb_endpoint_descriptor *isoout; /* ISO OUT endpoint */
  37. uint8_t ctrl_intf; /* interface number */
  38. uint8_t minor;
  39. uint16_t isoin_mps;
  40. uint16_t isoout_mps;
  41. bool is_opened;
  42. uint16_t bcdADC;
  43. uint8_t bInCollection;
  44. uint8_t stream_intf_num;
  45. struct usbh_audio_as_msg as_msg_table[CONFIG_USBHOST_AUDIO_MAX_STREAMS];
  46. void *user_data;
  47. };
  48. #ifdef __cplusplus
  49. extern "C" {
  50. #endif
  51. int usbh_audio_open(struct usbh_audio *audio_class, const char *name, uint32_t samp_freq, uint8_t bitresolution);
  52. int usbh_audio_close(struct usbh_audio *audio_class, const char *name);
  53. int usbh_audio_set_volume(struct usbh_audio *audio_class, const char *name, uint8_t ch, int volume_db);
  54. int usbh_audio_set_mute(struct usbh_audio *audio_class, const char *name, uint8_t ch, bool mute);
  55. void usbh_audio_run(struct usbh_audio *audio_class);
  56. void usbh_audio_stop(struct usbh_audio *audio_class);
  57. #ifdef __cplusplus
  58. }
  59. #endif
  60. #endif /* USBH_AUDIO_H */