• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 struct usbh_audio_format_type {
12     uint8_t channels;
13     uint8_t format_type;
14     uint8_t bitresolution;
15     uint8_t sampfreq_num;
16     uint32_t sampfreq[3];
17 };
18 
19 /**
20  * bSourceID in feature_unit = input_terminal_id
21  * bSourceID in output_terminal = feature_unit_id
22  * terminal_link_id = input_terminal_id or output_terminal_id (if input_terminal_type or output_terminal_type is 0x0101)
23  *
24  *
25 */
26 struct usbh_audio_module {
27     const char *name;
28     uint8_t data_intf;
29     uint8_t input_terminal_id;
30     uint16_t input_terminal_type;
31     uint16_t input_channel_config;
32     uint8_t output_terminal_id;
33     uint16_t output_terminal_type;
34     uint8_t feature_unit_id;
35     uint8_t feature_unit_controlsize;
36     uint8_t feature_unit_controls[8];
37     uint8_t terminal_link_id;
38     struct usbh_audio_format_type altsetting[CONFIG_USBHOST_MAX_INTF_ALTSETTINGS];
39 };
40 
41 struct usbh_audio {
42     struct usbh_hubport *hport;
43 
44     uint8_t ctrl_intf; /* interface number */
45     uint8_t minor;
46     usbh_pipe_t isoin;  /* ISO IN endpoint */
47     usbh_pipe_t isoout; /* ISO OUT endpoint */
48     uint16_t isoin_mps;
49     uint16_t isoout_mps;
50     bool is_opened;
51     uint16_t bcdADC;
52     uint8_t bInCollection;
53     uint8_t num_of_intf_altsettings;
54     struct usbh_audio_module module[2];
55     uint8_t module_num;
56 };
57 
58 #ifdef __cplusplus
59 extern "C" {
60 #endif
61 
62 int usbh_audio_open(struct usbh_audio *audio_class, const char *name, uint32_t samp_freq);
63 int usbh_audio_close(struct usbh_audio *audio_class, const char *name);
64 int usbh_audio_set_volume(struct usbh_audio *audio_class, const char *name, uint8_t ch, uint8_t volume);
65 int usbh_audio_set_mute(struct usbh_audio *audio_class, const char *name, uint8_t ch, bool mute);
66 
67 void usbh_audio_run(struct usbh_audio *audio_class);
68 void usbh_audio_stop(struct usbh_audio *audio_class);
69 
70 #ifdef __cplusplus
71 }
72 #endif
73 
74 #endif /* USBH_AUDIO_H */
75