|
132 | 132 | #define AUDIO_FORMAT_ALAW 0x0004
|
133 | 133 | #define AUDIO_FORMAT_MULAW 0x0005
|
134 | 134 |
|
135 |
| -#define AUDIO_V2_FORMAT_PCM 0x00000001 |
136 |
| -#define AUDIO_V2_FORMAT_PCM8 0x00000002 |
137 |
| -#define AUDIO_V2_FORMAT_IEEE_FLOAT 0x00000004 |
138 |
| -#define AUDIO_V2_FORMAT_ALAW 0x00000008 |
139 |
| -#define AUDIO_V2_FORMAT_MULAW 0x00000010 |
| 135 | +#define AUDIO_V2_FORMAT_PCM 0x00000001 |
| 136 | +#define AUDIO_V2_FORMAT_PCM8 0x00000002 |
| 137 | +#define AUDIO_V2_FORMAT_IEEE_FLOAT 0x00000004 |
| 138 | +#define AUDIO_V2_FORMAT_ALAW 0x00000008 |
| 139 | +#define AUDIO_V2_FORMAT_MULAW 0x00000010 |
140 | 140 |
|
141 | 141 | /* bmChannelConfig: a bitmap field that indicates which spatial locations
|
142 | 142 | * are occupied by the channels present in the cluster. The bit allocations
|
@@ -812,6 +812,60 @@ struct audio_cs_ep_ep_general_descriptor {
|
812 | 812 |
|
813 | 813 | #define AUDIO_AS_DESCRIPTOR_INIT_LEN(n) (0x09 + 0x09 + 0x07 + 0x08 + 3 * n + 0x09 + 0x07)
|
814 | 814 |
|
| 815 | +#define AUDIO_AS_ALTSETTING_DESCRIPTOR_INIT(bInterfaceNumber, bAlternateSetting, bTerminalLink, bNrChannels, bSubFrameSize, bBitResolution, bEndpointAddress, bmAttributes, wMaxPacketSize, bInterval, ...) \ |
| 816 | + 0x09, /* bLength */ \ |
| 817 | + USB_DESCRIPTOR_TYPE_INTERFACE, /* bDescriptorType */ \ |
| 818 | + bInterfaceNumber, /* bInterfaceNumber */ \ |
| 819 | + bAlternateSetting, /* bAlternateSetting */ \ |
| 820 | + 0x01, /* bNumEndpoints */ \ |
| 821 | + USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */ \ |
| 822 | + AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubClass */ \ |
| 823 | + AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol */ \ |
| 824 | + 0x00, /* iInterface */ \ |
| 825 | + 0x07, /* bLength */ \ |
| 826 | + AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ |
| 827 | + AUDIO_STREAMING_GENERAL, /* bDescriptorSubtype */ \ |
| 828 | + bTerminalLink, /* bTerminalLink : Unit ID of the Output Terminal*/ \ |
| 829 | + 0x01, /* bDelay */ \ |
| 830 | + WBVAL(AUDIO_FORMAT_PCM), /* wFormatTag : AUDIO_FORMAT_PCM */ \ |
| 831 | + 0x08 + PP_NARG(__VA_ARGS__), /* bLength */ \ |
| 832 | + AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ |
| 833 | + AUDIO_STREAMING_FORMAT_TYPE, /* bDescriptorSubtype */ \ |
| 834 | + AUDIO_FORMAT_TYPE_I, /* bFormatType */ \ |
| 835 | + bNrChannels, /* bNrChannels */ \ |
| 836 | + bSubFrameSize, /* bSubFrameSize : Bytes per audio subframe */ \ |
| 837 | + bBitResolution, /* bBitResolution : bits per sample */ \ |
| 838 | + (PP_NARG(__VA_ARGS__)/3), /* bSamFreqType : only one frequency supported */ \ |
| 839 | + __VA_ARGS__, /* tSamFreq : Audio sampling frequency coded on 3 bytes */ \ |
| 840 | + 0x09, /* bLength */ \ |
| 841 | + USB_DESCRIPTOR_TYPE_ENDPOINT, /* bDescriptorType */ \ |
| 842 | + bEndpointAddress, /* bEndpointAddress : IN endpoint 1 */ \ |
| 843 | + bmAttributes, /* bmAttributes */ \ |
| 844 | + WBVAL(wMaxPacketSize), /* wMaxPacketSize */ \ |
| 845 | + bInterval, /* bInterval : one packet per frame */ \ |
| 846 | + 0x00, /* bRefresh */ \ |
| 847 | + 0x00, /* bSynchAddress */ \ |
| 848 | + 0x07, /* bLength */ \ |
| 849 | + AUDIO_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ |
| 850 | + AUDIO_ENDPOINT_GENERAL, /* bDescriptor */ \ |
| 851 | + AUDIO_EP_CONTROL_SAMPLING_FEQ, /* bmAttributes AUDIO_SAMPLING_FREQ_CONTROL */ \ |
| 852 | + 0x00, /* bLockDelayUnits */ \ |
| 853 | + 0x00, /* wLockDelay */ \ |
| 854 | + 0x00 |
| 855 | + |
| 856 | +#define AUDIO_AS_ALTSETTING_DESCRIPTOR_INIT_LEN(n) (0x09 + 0x07 + 0x08 + 3 * n + 0x09 + 0x07) |
| 857 | + |
| 858 | +#define AUDIO_AS_ALTSETTING0_DESCRIPTOR_INIT(bInterfaceNumber) \ |
| 859 | + 0x09, /* bLength */ \ |
| 860 | + USB_DESCRIPTOR_TYPE_INTERFACE, /* bDescriptorType */ \ |
| 861 | + bInterfaceNumber, /* bInterfaceNumber */ \ |
| 862 | + 0x00, /* bAlternateSetting */ \ |
| 863 | + 0x01, /* bNumEndpoints */ \ |
| 864 | + USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */ \ |
| 865 | + AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubClass */ \ |
| 866 | + AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol */ \ |
| 867 | + 0x00 /* iInterface */ |
| 868 | + |
815 | 869 | #define AUDIO_MS_STANDARD_DESCRIPTOR_INIT(bInterfaceNumber, bNumEndpoints) \
|
816 | 870 | 0x09, /* bLength */ \
|
817 | 871 | USB_DESCRIPTOR_TYPE_INTERFACE, /* bDescriptorType */ \
|
@@ -1096,6 +1150,58 @@ struct audio_v2_control_range3_param_block {
|
1096 | 1150 | 0x00, /* wLockDelay */ \
|
1097 | 1151 | 0x00
|
1098 | 1152 |
|
| 1153 | +#define AUDIO_V2_AS_ALTSETTING_DESCRIPTOR_INIT(bInterfaceNumber, bAlternateSetting, bTerminalLink, bNrChannels, bmChannelConfig, bSubslotSize, bBitResolution, bEndpointAddress, bmAttributes, wMaxPacketSize, bInterval) \ |
| 1154 | + 0x09, /* bLength */ \ |
| 1155 | + USB_DESCRIPTOR_TYPE_INTERFACE, /* bDescriptorType */ \ |
| 1156 | + bInterfaceNumber, /* bInterfaceNumber */ \ |
| 1157 | + bAlternateSetting, /* bAlternateSetting */ \ |
| 1158 | + 0x01, /* bNumEndpoints */ \ |
| 1159 | + USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */ \ |
| 1160 | + AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubClass */ \ |
| 1161 | + AUDIO_PROTOCOLv20, /* bInterfaceProtocol */ \ |
| 1162 | + 0x00, /* iInterface */ \ |
| 1163 | + 0x10, /* bLength */ \ |
| 1164 | + AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ |
| 1165 | + AUDIO_STREAMING_GENERAL, /* bDescriptorSubtype */ \ |
| 1166 | + bTerminalLink, /* bTerminalLink : Unit ID of the Output or Input Terminal*/ \ |
| 1167 | + 0x00, /* bmControls */ \ |
| 1168 | + AUDIO_FORMAT_TYPE_I, /* bFormatType : AUDIO_FORMAT_TYPE_I */ \ |
| 1169 | + DBVAL(AUDIO_V2_FORMAT_PCM), /* bmFormats PCM */ \ |
| 1170 | + bNrChannels, /* bNrChannels */ \ |
| 1171 | + DBVAL(bmChannelConfig), /* bmChannelConfig */ \ |
| 1172 | + 0x00, /* iChannelNames */ \ |
| 1173 | + 0x06, /* bLength */ \ |
| 1174 | + AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ |
| 1175 | + AUDIO_STREAMING_FORMAT_TYPE, /* bDescriptorSubtype */ \ |
| 1176 | + AUDIO_FORMAT_TYPE_I, /* bFormatType */ \ |
| 1177 | + bSubslotSize, /* bSubslotSize */ \ |
| 1178 | + bBitResolution, /* bBitResolution */ \ |
| 1179 | + 0x07, /* bLength */ \ |
| 1180 | + USB_DESCRIPTOR_TYPE_ENDPOINT, /* bDescriptorType */ \ |
| 1181 | + bEndpointAddress, /* bEndpointAddress 3 out endpoint for Audio */ \ |
| 1182 | + bmAttributes, /* bmAttributes */ \ |
| 1183 | + WBVAL(wMaxPacketSize), /* XXXX wMaxPacketSize in Bytes (SampleRate * SlotByteSize * NumChannels) */ \ |
| 1184 | + bInterval, /* bInterval */ \ |
| 1185 | + 0x08, /* bLength */ \ |
| 1186 | + AUDIO_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ |
| 1187 | + AUDIO_ENDPOINT_GENERAL, /* bDescriptor */ \ |
| 1188 | + 0x00, /* bmAttributes */ \ |
| 1189 | + 0x00, /* bmControls */ \ |
| 1190 | + 0x00, /* bLockDelayUnits */ \ |
| 1191 | + 0x00, /* wLockDelay */ \ |
| 1192 | + 0x00 |
| 1193 | + |
| 1194 | +#define AUDIO_V2_AS_ALTSETTING0_DESCRIPTOR_INIT(bInterfaceNumber) \ |
| 1195 | + 0x09, /* bLength */ \ |
| 1196 | + USB_DESCRIPTOR_TYPE_INTERFACE, /* bDescriptorType */ \ |
| 1197 | + bInterfaceNumber, /* bInterfaceNumber */ \ |
| 1198 | + 0x00, /* bAlternateSetting */ \ |
| 1199 | + 0x01, /* bNumEndpoints */ \ |
| 1200 | + USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */ \ |
| 1201 | + AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubClass */ \ |
| 1202 | + AUDIO_PROTOCOLv20, /* bInterfaceProtocol */ \ |
| 1203 | + 0x00 /* iInterface */ |
| 1204 | + |
1099 | 1205 | #define AUDIO_V2_AS_FEEDBACK_DESCRIPTOR_INIT(bInterfaceNumber, bTerminalLink, bNrChannels, bmChannelConfig, bSubslotSize, bBitResolution, bEndpointAddress, wMaxPacketSize, bInterval, bFeedbackEndpointAddress) \
|
1100 | 1206 | 0x09, /* bLength */ \
|
1101 | 1207 | USB_DESCRIPTOR_TYPE_INTERFACE, /* bDescriptorType */ \
|
@@ -1150,12 +1256,13 @@ struct audio_v2_control_range3_param_block {
|
1150 | 1256 | bFeedbackEndpointAddress, /* bFeedbackEndpointAddress Revise Dir to bEndpointAddress */ \
|
1151 | 1257 | 0x11, /* bmAttributes: TransferType=Isochronous SyncType=None EndpointType=Feedback */ \
|
1152 | 1258 | WBVAL(4), /* XXXX wMaxPacketSize in Bytes */ \
|
1153 |
| - bInterval /* bInterval */ \ |
| 1259 | + bInterval /* bInterval */ |
1154 | 1260 |
|
1155 | 1261 | // clang-format on
|
1156 | 1262 |
|
1157 |
| -#define AUDIO_V2_AS_DESCRIPTOR_INIT_LEN (0x09 + 0x09 + 0x10 + 0x06 + 0x07 + 0x08) |
1158 |
| -#define AUDIO_V2_AS_FEEDBACK_DESCRIPTOR_INIT_LEN (0x09 + 0x09 + 0x10 + 0x06 + 0x07 + 0x08 + 0x07) |
| 1263 | +#define AUDIO_V2_AS_DESCRIPTOR_INIT_LEN (0x09 + 0x09 + 0x10 + 0x06 + 0x07 + 0x08) |
| 1264 | +#define AUDIO_V2_AS_ALTSETTING_DESCRIPTOR_INIT_LEN (0x09 + 0x10 + 0x06 + 0x07 + 0x08) |
| 1265 | +#define AUDIO_V2_AS_FEEDBACK_DESCRIPTOR_INIT_LEN (0x09 + 0x09 + 0x10 + 0x06 + 0x07 + 0x08 + 0x07) |
1159 | 1266 |
|
1160 | 1267 | #define AUDIO_SAMPLE_FREQ_NUM(num) (uint8_t)(num), (uint8_t)((num >> 8))
|
1161 | 1268 | #define AUDIO_SAMPLE_FREQ_3B(frq) (uint8_t)(frq), (uint8_t)((frq >> 8)), (uint8_t)((frq >> 16))
|
|
0 commit comments