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