@@ -277,7 +277,7 @@ static USBH_StatusTypeDef USBH_AUDIO_InterfaceInit(USBH_HandleTypeDef *phost)
277277 {
278278 USBH_AUDIO_BuildHeadphonePath (phost );
279279
280- AUDIO_Handle -> headphone .Pipe = USBH_AllocPipe (phost , AUDIO_Handle -> headphone .Ep );
280+ AUDIO_Handle -> headphone .Pipe = USBH_AllocPipe (phost , AUDIO_Handle -> headphone .Ep );
281281
282282 /* Open pipe for IN endpoint */
283283 USBH_OpenPipe (phost ,
@@ -289,13 +289,12 @@ static USBH_StatusTypeDef USBH_AUDIO_InterfaceInit(USBH_HandleTypeDef *phost)
289289 AUDIO_Handle -> headphone .EpSize );
290290
291291 USBH_LL_SetToggle (phost , AUDIO_Handle -> headphone .Pipe , 0U );
292-
293292 }
294293
295294 if (AUDIO_Handle -> microphone .supported == 1U )
296295 {
297296 USBH_AUDIO_BuildMicrophonePath (phost );
298- AUDIO_Handle -> microphone .Pipe = USBH_AllocPipe (phost , AUDIO_Handle -> microphone .Ep );
297+ AUDIO_Handle -> microphone .Pipe = USBH_AllocPipe (phost , AUDIO_Handle -> microphone .Ep );
299298
300299 /* Open pipe for IN endpoint */
301300 USBH_OpenPipe (phost ,
@@ -389,143 +388,178 @@ static USBH_StatusTypeDef USBH_AUDIO_ClassRequest(USBH_HandleTypeDef *phost)
389388 /* Switch AUDIO REQ state machine */
390389 switch (AUDIO_Handle -> req_state )
391390 {
392- case AUDIO_REQ_INIT :
393- case AUDIO_REQ_SET_DEFAULT_IN_INTERFACE :
394- if (AUDIO_Handle -> microphone .supported == 1U )
395- {
396- req_status = USBH_SetInterface (phost ,
397- AUDIO_Handle -> microphone .interface ,
398- 0U );
391+ case AUDIO_REQ_INIT :
392+ case AUDIO_REQ_SET_DEFAULT_IN_INTERFACE :
393+ if (AUDIO_Handle -> microphone .supported == 1U )
394+ {
395+ req_status = USBH_SetInterface (phost ,
396+ AUDIO_Handle -> microphone .interface ,
397+ 0U );
399398
400- if (req_status == USBH_OK )
401- {
402- AUDIO_Handle -> req_state = AUDIO_REQ_SET_DEFAULT_OUT_INTERFACE ;
403- }
399+ if (req_status == USBH_OK )
400+ {
401+ AUDIO_Handle -> req_state = AUDIO_REQ_SET_DEFAULT_OUT_INTERFACE ;
402+ }
403+ else if (req_status == USBH_NOT_SUPPORTED )
404+ {
405+ USBH_ErrLog ("Control error: AUDIO: Device Set interface request failed" );
406+ status = USBH_FAIL ;
404407 }
405408 else
406409 {
407- AUDIO_Handle -> req_state = AUDIO_REQ_SET_DEFAULT_OUT_INTERFACE ;
410+ /* .. */
411+ }
412+ }
413+ else
414+ {
415+ AUDIO_Handle -> req_state = AUDIO_REQ_SET_DEFAULT_OUT_INTERFACE ;
408416
409417#if (USBH_USE_OS == 1U )
410- phost -> os_msg = (uint32_t )USBH_URB_EVENT ;
418+ phost -> os_msg = (uint32_t )USBH_URB_EVENT ;
411419#if (osCMSIS < 0x20000U )
412- (void )osMessagePut (phost -> os_event , phost -> os_msg , 0U );
420+ (void )osMessagePut (phost -> os_event , phost -> os_msg , 0U );
413421#else
414- (void )osMessageQueuePut (phost -> os_event , & phost -> os_msg , 0U , NULL );
422+ (void )osMessageQueuePut (phost -> os_event , & phost -> os_msg , 0U , NULL );
415423#endif
416424#endif
417- }
418- break ;
425+ }
426+ break ;
419427
420- case AUDIO_REQ_SET_DEFAULT_OUT_INTERFACE :
421- if (AUDIO_Handle -> headphone .supported == 1U )
422- {
423- req_status = USBH_SetInterface (phost ,
424- AUDIO_Handle -> headphone .interface ,
425- 0U );
428+ case AUDIO_REQ_SET_DEFAULT_OUT_INTERFACE :
429+ if (AUDIO_Handle -> headphone .supported == 1U )
430+ {
431+ req_status = USBH_SetInterface (phost ,
432+ AUDIO_Handle -> headphone .interface ,
433+ 0U );
426434
427- if (req_status == USBH_OK )
428- {
429- AUDIO_Handle -> req_state = AUDIO_REQ_CS_REQUESTS ;
430- AUDIO_Handle -> cs_req_state = AUDIO_REQ_GET_VOLUME ;
435+ if (req_status == USBH_OK )
436+ {
437+ AUDIO_Handle -> req_state = AUDIO_REQ_CS_REQUESTS ;
438+ AUDIO_Handle -> cs_req_state = AUDIO_REQ_GET_VOLUME ;
431439
432- AUDIO_Handle -> temp_feature = AUDIO_Handle -> headphone .asociated_feature ;
433- AUDIO_Handle -> temp_channels = AUDIO_Handle -> headphone .asociated_channels ;
434- }
440+ AUDIO_Handle -> temp_feature = AUDIO_Handle -> headphone .asociated_feature ;
441+ AUDIO_Handle -> temp_channels = AUDIO_Handle -> headphone .asociated_channels ;
442+ }
443+ else if (req_status == USBH_NOT_SUPPORTED )
444+ {
445+ USBH_ErrLog ("Control error: AUDIO: Device Set interface request failed" );
446+ status = USBH_FAIL ;
435447 }
436448 else
437449 {
438- AUDIO_Handle -> req_state = AUDIO_REQ_CS_REQUESTS ;
439- AUDIO_Handle -> cs_req_state = AUDIO_REQ_GET_VOLUME ;
450+ /* .. */
451+ }
452+ }
453+ else
454+ {
455+ AUDIO_Handle -> req_state = AUDIO_REQ_CS_REQUESTS ;
456+ AUDIO_Handle -> cs_req_state = AUDIO_REQ_GET_VOLUME ;
440457
441458#if (USBH_USE_OS == 1U )
442- phost -> os_msg = (uint32_t )USBH_URB_EVENT ;
459+ phost -> os_msg = (uint32_t )USBH_URB_EVENT ;
443460#if (osCMSIS < 0x20000U )
444- (void )osMessagePut (phost -> os_event , phost -> os_msg , 0U );
461+ (void )osMessagePut (phost -> os_event , phost -> os_msg , 0U );
445462#else
446- (void )osMessageQueuePut (phost -> os_event , & phost -> os_msg , 0U , NULL );
463+ (void )osMessageQueuePut (phost -> os_event , & phost -> os_msg , 0U , NULL );
447464#endif
448465#endif
449- }
450- break ;
466+ }
467+ break ;
468+
469+ case AUDIO_REQ_CS_REQUESTS :
470+ if (USBH_AUDIO_HandleCSRequest (phost ) == USBH_OK )
471+ {
472+ AUDIO_Handle -> req_state = AUDIO_REQ_SET_IN_INTERFACE ;
473+ }
474+ break ;
451475
452- case AUDIO_REQ_CS_REQUESTS :
453- if (USBH_AUDIO_HandleCSRequest (phost ) == USBH_OK )
476+ case AUDIO_REQ_SET_IN_INTERFACE :
477+ if (AUDIO_Handle -> microphone .supported == 1U )
478+ {
479+ req_status = USBH_SetInterface (phost ,
480+ AUDIO_Handle -> microphone .interface ,
481+ AUDIO_Handle -> microphone .AltSettings );
482+
483+ if (req_status == USBH_OK )
454484 {
455- AUDIO_Handle -> req_state = AUDIO_REQ_SET_IN_INTERFACE ;
485+ AUDIO_Handle -> req_state = AUDIO_REQ_SET_OUT_INTERFACE ;
456486 }
457- break ;
458-
459- case AUDIO_REQ_SET_IN_INTERFACE :
460- if (AUDIO_Handle -> microphone .supported == 1U )
487+ else if (req_status == USBH_NOT_SUPPORTED )
461488 {
462- req_status = USBH_SetInterface (phost ,
463- AUDIO_Handle -> microphone .interface ,
464- AUDIO_Handle -> microphone .AltSettings );
465-
466- if (req_status == USBH_OK )
467- {
468- AUDIO_Handle -> req_state = AUDIO_REQ_SET_OUT_INTERFACE ;
469- }
489+ USBH_ErrLog ("Control error: AUDIO: Device Set interface request failed" );
490+ status = USBH_FAIL ;
470491 }
471492 else
472493 {
473- AUDIO_Handle -> req_state = AUDIO_REQ_SET_OUT_INTERFACE ;
494+ /* .. */
495+ }
496+ }
497+ else
498+ {
499+ AUDIO_Handle -> req_state = AUDIO_REQ_SET_OUT_INTERFACE ;
474500
475501#if (USBH_USE_OS == 1U )
476- phost -> os_msg = (uint32_t )USBH_URB_EVENT ;
502+ phost -> os_msg = (uint32_t )USBH_URB_EVENT ;
477503#if (osCMSIS < 0x20000U )
478- (void )osMessagePut (phost -> os_event , phost -> os_msg , 0U );
504+ (void )osMessagePut (phost -> os_event , phost -> os_msg , 0U );
479505#else
480- (void )osMessageQueuePut (phost -> os_event , & phost -> os_msg , 0U , NULL );
506+ (void )osMessageQueuePut (phost -> os_event , & phost -> os_msg , 0U , NULL );
481507#endif
482508#endif
509+ }
510+ break ;
511+ case AUDIO_REQ_SET_OUT_INTERFACE :
512+ if (AUDIO_Handle -> headphone .supported == 1U )
513+ {
514+ req_status = USBH_SetInterface (phost ,
515+ AUDIO_Handle -> headphone .interface ,
516+ AUDIO_Handle -> headphone .AltSettings );
517+
518+ if (req_status == USBH_OK )
519+ {
520+ AUDIO_Handle -> req_state = AUDIO_REQ_IDLE ;
483521 }
484- break ;
485- case AUDIO_REQ_SET_OUT_INTERFACE :
486- if (AUDIO_Handle -> headphone .supported == 1U )
522+ else if (req_status == USBH_NOT_SUPPORTED )
487523 {
488- req_status = USBH_SetInterface (phost ,
489- AUDIO_Handle -> headphone .interface ,
490- AUDIO_Handle -> headphone .AltSettings );
491-
492- if (req_status == USBH_OK )
493- {
494- AUDIO_Handle -> req_state = AUDIO_REQ_IDLE ;
495- }
496-
524+ USBH_ErrLog ("Control error: AUDIO: Device Set interface request failed" );
525+ status = USBH_FAIL ;
497526 }
498527 else
499528 {
500- AUDIO_Handle -> req_state = AUDIO_REQ_IDLE ;
529+ /* .. */
530+ }
531+ }
532+ else
533+ {
534+ AUDIO_Handle -> req_state = AUDIO_REQ_IDLE ;
501535
502536#if (USBH_USE_OS == 1U )
503- phost -> os_msg = (uint32_t )USBH_URB_EVENT ;
537+ phost -> os_msg = (uint32_t )USBH_URB_EVENT ;
504538#if (osCMSIS < 0x20000U )
505- (void )osMessagePut (phost -> os_event , phost -> os_msg , 0U );
539+ (void )osMessagePut (phost -> os_event , phost -> os_msg , 0U );
506540#else
507- (void )osMessageQueuePut (phost -> os_event , & phost -> os_msg , 0U , NULL );
541+ (void )osMessageQueuePut (phost -> os_event , & phost -> os_msg , 0U , NULL );
508542#endif
509543#endif
510- }
511- break ;
512- case AUDIO_REQ_IDLE :
513- AUDIO_Handle -> play_state = AUDIO_PLAYBACK_INIT ;
514- phost -> pUser (phost , HOST_USER_CLASS_ACTIVE );
515- status = USBH_OK ;
544+ }
545+ break ;
546+ case AUDIO_REQ_IDLE :
547+ AUDIO_Handle -> play_state = AUDIO_PLAYBACK_INIT ;
548+ phost -> pUser (phost , HOST_USER_CLASS_ACTIVE );
549+ status = USBH_OK ;
516550
517551#if (USBH_USE_OS == 1U )
518- phost -> os_msg = (uint32_t )USBH_CLASS_EVENT ;
552+ phost -> os_msg = (uint32_t )USBH_CLASS_EVENT ;
519553#if (osCMSIS < 0x20000U )
520- (void )osMessagePut (phost -> os_event , phost -> os_msg , 0U );
554+ (void )osMessagePut (phost -> os_event , phost -> os_msg , 0U );
521555#else
522- (void )osMessageQueuePut (phost -> os_event , & phost -> os_msg , 0U , NULL );
556+ (void )osMessageQueuePut (phost -> os_event , & phost -> os_msg , 0U , NULL );
523557#endif
524558#endif
525- break ;
559+ break ;
526560
527- default :
528- break ;
561+ default :
562+ break ;
529563 }
530564 return status ;
531565}
0 commit comments