Skip to content

Commit 525884a

Browse files
committed
feat(class/audio/usb_audio): add audio altsetting desc init macros
1 parent 2c52445 commit 525884a

File tree

1 file changed

+115
-8
lines changed

1 file changed

+115
-8
lines changed

class/audio/usb_audio.h

Lines changed: 115 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,11 @@
132132
#define AUDIO_FORMAT_ALAW 0x0004
133133
#define AUDIO_FORMAT_MULAW 0x0005
134134

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
140140

141141
/* bmChannelConfig: a bitmap field that indicates which spatial locations
142142
* are occupied by the channels present in the cluster. The bit allocations
@@ -812,6 +812,60 @@ struct audio_cs_ep_ep_general_descriptor {
812812

813813
#define AUDIO_AS_DESCRIPTOR_INIT_LEN(n) (0x09 + 0x09 + 0x07 + 0x08 + 3 * n + 0x09 + 0x07)
814814

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+
815869
#define AUDIO_MS_STANDARD_DESCRIPTOR_INIT(bInterfaceNumber, bNumEndpoints) \
816870
0x09, /* bLength */ \
817871
USB_DESCRIPTOR_TYPE_INTERFACE, /* bDescriptorType */ \
@@ -1096,6 +1150,58 @@ struct audio_v2_control_range3_param_block {
10961150
0x00, /* wLockDelay */ \
10971151
0x00
10981152

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+
10991205
#define AUDIO_V2_AS_FEEDBACK_DESCRIPTOR_INIT(bInterfaceNumber, bTerminalLink, bNrChannels, bmChannelConfig, bSubslotSize, bBitResolution, bEndpointAddress, wMaxPacketSize, bInterval, bFeedbackEndpointAddress) \
11001206
0x09, /* bLength */ \
11011207
USB_DESCRIPTOR_TYPE_INTERFACE, /* bDescriptorType */ \
@@ -1150,12 +1256,13 @@ struct audio_v2_control_range3_param_block {
11501256
bFeedbackEndpointAddress, /* bFeedbackEndpointAddress Revise Dir to bEndpointAddress */ \
11511257
0x11, /* bmAttributes: TransferType=Isochronous SyncType=None EndpointType=Feedback */ \
11521258
WBVAL(4), /* XXXX wMaxPacketSize in Bytes */ \
1153-
bInterval /* bInterval */ \
1259+
bInterval /* bInterval */
11541260

11551261
// clang-format on
11561262

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)
11591266

11601267
#define AUDIO_SAMPLE_FREQ_NUM(num) (uint8_t)(num), (uint8_t)((num >> 8))
11611268
#define AUDIO_SAMPLE_FREQ_3B(frq) (uint8_t)(frq), (uint8_t)((frq >> 8)), (uint8_t)((frq >> 16))

0 commit comments

Comments
 (0)