usbdev.h
5.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
#ifndef __USBDEV_H__
#define __USBDEV_H__
//#define USB_SPEAKER_DONGLE
#if 0//ndef USB_SPEAKER_DONGLE
#define USB_SPEAKER_AUTO_DETECT
#else
#undef USB_SPEAKER_AUTO_DETECT
#endif
#if 1
#define VENDOR_ID 0x0475
#define PRODUCT_ID 0x1503
#else
#define VENDOR_ID 0x0000
#define PRODUCT_ID 0x0005
#endif
/* Allow USB AUDIO_SUB_FRAME_SIZE=3, AUDIO_BIT_RESOLUTION=24 */
//#define AudioData24BIT
//JJ+ for USB audio class 2.0
//#define ADC20
//JJ!!!+ for USB duplex both downwards and upwards pipe
//Normal undef below macros, i.e. both Speaker and Mic exist!
//#undef ONLYSpeakerCFG
//#undef ONLYMicCFG
//#define HIDFUNC
#ifdef HIDFUNC
//for HID Consumer device!
#define HIDKEY
#endif
//2nd ISO IN Intf1/endp3In (#define ENDP_NUM_ISO_INFB 3) for USB Audio Device Async !
//#define USBDEV_ISOIN_ASYNC
//Only function of USB Speaker
//#define ONLYSpeakerCFG
//Only function of USB Microphone
//#define ONLYMicCFG
//JJ+ for DFU
//#define DFUFUNC
//Enable USB SOF Interrupt
#define USB_DEV_LIB_V1P0P10
#ifdef USB_DEV_LIB_V1P0P10
//V1.0.10
#define SOFINTEN
#endif
//Window XP/7 can support only up to 44.1, 48Khz and 16bits !!!
//#define USB_AUDIO_SRC_44100
#define USB_AUDIO_SRC_48000
//#define USB_AUDIO_SRC_88200
//#define USB_AUDIO_SRC_96000
//#define USB_AUDIO_SRC_176400
//#define USB_AUDIO_SRC_192000
/* second USB Audio Out should be mandatory ! */
#if 1//ndef ADC20
#define AUDIO_CHANNELS 2 /*for Audio Out*/
#define AUDIO_OUT_CHANNELS AUDIO_CHANNELS
#define AUDIO_SUB_FRAME_SIZE 2 //pcm16
#define AUDIO_BIT_RESOLUTION 16
#if 0
#define AUDIOIN_CHANNELS 2 /*for Audio In*/
#else
#define AUDIOIN_CHANNELS 1 /*for Audio In*/
#endif
#define AUDIOIN_SUB_FRAME_SIZE 2 //pcm16, Force MIC audio IN to 16bits !!!
#define AUDIOIN_BIT_RESOLUTION 16
//-------------------------------------------------------
#ifdef USB_AUDIO_SRC_44100
#define AUDIO_SAMPLE_FREQ 44100
//for USB Audio In MIC.
#define AUDIOIN_SAMPLE_FREQ 44100
//for second USB Audio Out.
#define AUDIO_SAMPLE_FREQ2 44100
#endif
//-------------------------------------------------------
#ifdef USB_AUDIO_SRC_48000
//for first USB Audio Out.
#define AUDIO_SAMPLE_FREQ 48000
//#define AUDIO_SAMPLE_FREQ 96000
//for USB Audio In MIC.
#if 1
#define AUDIOIN_SAMPLE_FREQ 48000
#else
/* !!! Note xiaomi6 cannot support 24KHz !!! */
#define AUDIOIN_SAMPLE_FREQ 24000
#endif
//#define AUDIOIN_SAMPLE_FREQ 16000
//for second USB Audio Out.
#define AUDIO_SAMPLE_FREQ2 48000
//#define AUDIO_SAMPLE_RATE_HALF
#endif
//-------------------------------------------------------
#ifdef USB_AUDIO_SRC_88200
//for first USB Audio Out.
#define AUDIO_SAMPLE_FREQ 88200
//for USB Audio In MIC.
#define AUDIOIN_SAMPLE_FREQ 88200
//for second USB Audio Out.
#define AUDIO_SAMPLE_FREQ2 44100
#endif
//-------------------------------------------------------
#ifdef USB_AUDIO_SRC_96000
//for first USB Audio Out.
#define AUDIO_SAMPLE_FREQ 96000
//for USB Audio In MIC.
#define AUDIOIN_SAMPLE_FREQ 48000
//for second USB Audio Out.
#define AUDIO_SAMPLE_FREQ2 48000
#endif
//-------------------------------------------------------
#ifdef USB_AUDIO_SRC_176400
//for first USB Audio Out.
#define AUDIO_SAMPLE_FREQ 176400
//for USB Audio In MIC.
#define AUDIOIN_SAMPLE_FREQ 176400
//for second USB Audio Out.
#define AUDIO_SAMPLE_FREQ2 44100
#endif
//-------------------------------------------------------
#ifdef USB_AUDIO_SRC_192000
//for first USB Audio Out.
#define AUDIO_SAMPLE_FREQ 192000
//for USB Audio In MIC.
#define AUDIOIN_SAMPLE_FREQ 192000
//for second USB Audio Out.
#define AUDIO_SAMPLE_FREQ2 48000
#endif
#endif
typedef struct {
BOOL USBOutEnable; //USB Speaker
BOOL USBInEnable; //USB Mic, ONLYMicCFG, USB_DEVICE_IN_OUT_CFG
BOOL USBOutMixInEnable; //Mix USB Out with other data then USB In.
#if 1//def USB_DEV_LIB_V1P0P10
BOOL SOFINTEnable; //Enable SOF Interrupt
#endif
BOOL ADC20Enable; //ADC20
BOOL ISOIN_ASYNCEnable; //USBDEV_ISOIN_ASYNC
BOOL HIDFuncEnable; //HIDFUNC
BOOL HIDKEYEnable; //HIDKEY
BOOL USBAUDIOdata_BITs; //USBAUDIO_BITs 0: 16bits, 1: 24bits
BOOL SECOND_OUTEPEnable; //SECOND_OUTEP, 2nd Ep for USB Audio Out.
//-------- Audio Out/In formats --------
U32 usb_AUDIO_SAMPLE_FREQ; //AUDIO_SAMPLE_FREQ 48000, for first USB Audio Out.
U32 usb_AUDIO_SAMPLE_FREQ2; //AUDIO_SAMPLE_FREQ 44100, for second USB Audio Out.
U8 usb_AUDIO_CHANNELS; //AUDIO_CHANNELS 2
U8 usb_AUDIO_SUB_FRAME_SIZE; //AUDIO_SUB_FRAME_SIZE 2 //pcm16
U8 usb_AUDIO_BIT_RESOLUTION; //AUDIO_BIT_RESOLUTION 16
U32 usb_AUDIOIN_SAMPLE_FREQ; //AUDIOIN_SAMPLE_FREQ 48000, for USB Audio In MIC.
U8 usb_AUDIOIN_CHANNELS; //AUDIOIN_CHANNELS 2 /*for Audio In*/
U8 usb_AUDIOIN_SUB_FRAME_SIZE; //AUDIOIN_SUB_FRAME_SIZE 2 //pcm16, Force MIC audio IN to 16bits !!!
U8 usb_AUDIOIN_BIT_RESOLUTION; //AUDIOIN_BIT_RESOLUTION 16
} USB_DEV_FEATURE_CONF;
extern USB_DEV_FEATURE_CONF usbdev_featureconf;
/*
device
*/
#define VOLUME_MASTER_CHAN_ONLY
typedef enum {
enUSB_DEV_STACK_ATTR_NULL = 0,
enUSB_DEV_STACK_ATTR_PC_SPEAKER,
enUSB_DEV_STACK_ATTR_APPLE_LIGHTNING,
enUSB_DEV_STACK_ATTR_USB_MICROPHONE,
enUSB_DEV_STACK_ATTR_USB_MSC
} enum_USB_DEVICE_STACK_ATTR;
typedef enum {
//Telephony Page
enHUTTELEPHONY_HOOK = 0x01,
enHUTTELEPHONY_DROP = 0x04,
enHUTTELEPHONY_MUTE = 0x04
} enum_USB_HUTTELEPHONY_KEYCODE;
typedef enum {
//Consumer Page
enHUTCONSUMER_VOLUP = 0x01,
enHUTCONSUMER_VOLDOWN = 0x02,
enHUTCONSUMER_PLAY = 0x04,
enHUTCONSUMER_NEXT = 0x08,
enHUTCONSUMER_PREV = 0x10,
enHUTCONSUMER_STOP = 0x20,
enHUTCONSUMER_FF = 0x40,
enHUTCONSUMER_RW = 0x80
} enum_USB_HUTCONSUMER_KEYCODE;
int usb_devStart(enum_USB_DEVICE_STACK_ATTR attr);
int usb_devStop(void);
int usb_devID_get(U16 *pVendorID, U16 *pProductID);
int usb_devAudioSampleRate_get(U32 *pSampleRate);
void daudio_SetFBSamplerateCorrection(int value);
#endif