Fix structure definition audio_control_range_X_n_t
This commit is contained in:
		| @@ -874,7 +874,7 @@ typedef struct TU_ATTR_PACKED { | ||||
| // 5.2.3.1 1-byte Control RANGE Parameter Block | ||||
| #define audio_control_range_1_n_t(numSubRanges) \ | ||||
| 		struct TU_ATTR_PACKED {         		\ | ||||
| 	uint16_t wNumSubRanges = numSubRanges; 		\ | ||||
| 	uint16_t wNumSubRanges; 					\ | ||||
| 	struct TU_ATTR_PACKED {    	  				\ | ||||
| 			int8_t bMin				; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/\ | ||||
| 		int8_t bMax					; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/\ | ||||
| @@ -884,8 +884,8 @@ typedef struct TU_ATTR_PACKED { | ||||
|  | ||||
| 		// 5.2.3.2 2-byte Control RANGE Parameter Block | ||||
| #define audio_control_range_2_n_t(numSubRanges) \ | ||||
| 		struct TU_ATTR_PACKED {         				\ | ||||
| 	uint16_t wNumSubRanges = numSubRanges; 		\ | ||||
| 		struct TU_ATTR_PACKED {         		\ | ||||
| 	uint16_t wNumSubRanges; 					\ | ||||
| 	struct TU_ATTR_PACKED {    	  				\ | ||||
| 			int16_t bMin			; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/\ | ||||
| 		int16_t bMax			; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/\ | ||||
| @@ -895,8 +895,8 @@ typedef struct TU_ATTR_PACKED { | ||||
|  | ||||
| 		// 5.2.3.3 4-byte Control RANGE Parameter Block | ||||
| #define audio_control_range_4_n_t(numSubRanges) \ | ||||
| 		struct TU_ATTR_PACKED {         				\ | ||||
| 	uint16_t wNumSubRanges = numSubRanges; 		\ | ||||
| 		struct TU_ATTR_PACKED {         		\ | ||||
| 	uint16_t wNumSubRanges; 					\ | ||||
| 	struct TU_ATTR_PACKED {    	  				\ | ||||
| 			int32_t bMin			; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/\ | ||||
| 		int32_t bMax			; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/\ | ||||
|   | ||||
| @@ -694,6 +694,8 @@ static bool audiod_get_interface(uint8_t rhport, tusb_control_request_t const * | ||||
| 	TU_VERIFY(audiod_get_AS_interface_index(itf, &idxDriver, &idxItf, &dummy)); | ||||
| 	TU_VERIFY(tud_control_xfer(rhport, p_request, &_audiod_itf[idxDriver].altSetting[idxItf], 1)); | ||||
|  | ||||
| 	TU_LOG2("  Get itf: %u - current alt: %u\r\n", itf, _audiod_itf[idxDriver].altSetting[idxItf]); | ||||
|  | ||||
| 	return true; | ||||
|  | ||||
| #else | ||||
| @@ -709,9 +711,9 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const * | ||||
|  | ||||
| 	// Here we need to do the following: | ||||
|  | ||||
| 	// 1. Find the audio driver interface which was assigned to the given interface which is to be set | ||||
| 	// 1. Find the audio driver assigned to the given interface to be set | ||||
| 	// Since one audio driver interface has to be able to cover an unknown number of interfaces (AC, AS + its alternate settings), the best memory efficient way to solve this is to always search through the descriptors. | ||||
| 	// The audio driver interface is mapped to an audio function by a reference pointer to the corresponding AC interface of this audio function which serves as a starting point for searching | ||||
| 	// The audio driver is mapped to an audio function by a reference pointer to the corresponding AC interface of this audio function which serves as a starting point for searching | ||||
|  | ||||
| 	// 2. Close EPs which are currently open | ||||
| 	// To do so it is not necessary to know the current active alternate interface since we already save the current EP addresses - we simply close them | ||||
| @@ -721,6 +723,8 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const * | ||||
| 	uint8_t const itf = tu_u16_low(p_request->wIndex); | ||||
| 	uint8_t const alt = tu_u16_low(p_request->wValue); | ||||
|  | ||||
| 	TU_LOG2("  Set itf: %u - alt: %u\r\n", itf, alt); | ||||
|  | ||||
| 	// Find index of audio streaming interface and index of interface | ||||
| 	uint8_t idxDriver, idxItf; | ||||
| 	uint8_t const *p_desc; | ||||
| @@ -768,7 +772,8 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const * | ||||
| 			{ | ||||
| 				if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) | ||||
| 				{ | ||||
| 					TU_ASSERT(dcd_edpt_open(rhport, (tusb_desc_endpoint_t const *) p_desc), false); | ||||
| //					TU_ASSERT(dcd_edpt_open(rhport, (tusb_desc_endpoint_t const *) p_desc), false); | ||||
| 					TU_ASSERT(usbd_edpt_open(rhport, (tusb_desc_endpoint_t const *)p_desc)); | ||||
| 					uint8_t ep_addr = ((tusb_desc_endpoint_t const *) p_desc)->bEndpointAddress; | ||||
|  | ||||
| #if CFG_TUD_AUDIO_EPSIZE_IN > 0 | ||||
| @@ -813,18 +818,15 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const * | ||||
| 	// Check for nothing found - we can rely on this since EP descriptors are never the last descriptors, there are always also class specific EP descriptors following! | ||||
| 	TU_VERIFY(p_desc < p_desc_end); | ||||
|  | ||||
| 	// Save current alternative interface setting | ||||
| 	_audiod_itf[idxDriver].altSetting[idxItf] = alt; | ||||
|  | ||||
| 	// Invoke callback | ||||
| 	if (tud_audio_set_itf_cb) | ||||
| 	{ | ||||
| 		if (!tud_audio_set_itf_cb(rhport, p_request)) | ||||
| 		{ | ||||
| 			return false; | ||||
| 		} | ||||
| 		if (!tud_audio_set_itf_cb(rhport, p_request)) return false; | ||||
| 	} | ||||
|  | ||||
| 	// Save current alternative interface setting | ||||
| 	_audiod_itf[idxDriver].altSetting[idxItf] = alt; | ||||
|  | ||||
| 	tud_control_status(rhport, p_request); | ||||
|  | ||||
| 	return true; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Reinhard Panhuber
					Reinhard Panhuber