@@ -321,9 +321,17 @@ TU_ATTR_ALWAYS_INLINE static inline bool queue_event(dcd_event_t const * event,
321
321
static bool process_control_request (uint8_t rhport , tusb_control_request_t const * p_request );
322
322
static bool process_set_config (uint8_t rhport , uint8_t cfg_num );
323
323
static bool process_get_descriptor (uint8_t rhport , tusb_control_request_t const * p_request );
324
+
324
325
#if CFG_TUD_TEST_MODE
325
- static bool process_test_mode_cb (uint8_t rhport , uint8_t stage , tusb_control_request_t const * request );
326
+ static bool process_test_mode_cb (uint8_t rhport , uint8_t stage , tusb_control_request_t const * request ) {
327
+ TU_VERIFY (CONTROL_STAGE_ACK == stage );
328
+ uint8_t const selector = tu_u16_high (request -> wIndex );
329
+ TU_LOG_USBD (" Enter Test Mode (test selector index: %d)\r\n" , selector );
330
+ dcd_enter_test_mode (rhport , (tusb_feature_test_mode_t ) selector );
331
+ return true;
332
+ }
326
333
#endif
334
+
327
335
// from usbd_control.c
328
336
void usbd_control_reset (void );
329
337
void usbd_control_set_request (tusb_control_request_t const * request );
@@ -695,7 +703,7 @@ static bool process_control_request(uint8_t rhport, tusb_control_request_t const
695
703
}
696
704
697
705
if ( TUSB_REQ_TYPE_STANDARD != p_request -> bmRequestType_bit .type ) {
698
- // Non standard request is not supported
706
+ // Non- standard request is not supported
699
707
TU_BREAKPOINT ();
700
708
return false;
701
709
}
@@ -759,43 +767,27 @@ static bool process_control_request(uint8_t rhport, tusb_control_request_t const
759
767
break ;
760
768
761
769
case TUSB_REQ_SET_FEATURE :
762
- // Handle the feature selector
763
- switch (p_request -> wValue )
764
- {
765
- // Support for remote wakeup
770
+ switch (p_request -> wValue ) {
766
771
case TUSB_REQ_FEATURE_REMOTE_WAKEUP :
767
772
TU_LOG_USBD (" Enable Remote Wakeup\r\n" );
768
-
769
773
// Host may enable remote wake up before suspending especially HID device
770
774
_usbd_dev .remote_wakeup_en = true;
771
775
tud_control_status (rhport , p_request );
772
776
break ;
773
777
774
- #if CFG_TUD_TEST_MODE
775
- // Support for TEST_MODE
778
+ #if CFG_TUD_TEST_MODE
776
779
case TUSB_REQ_FEATURE_TEST_MODE : {
777
780
// Only handle the test mode if supported and valid
778
- TU_VERIFY (dcd_enter_test_mode && dcd_check_test_mode_support && 0 == tu_u16_low (p_request -> wIndex ));
779
-
780
- uint8_t selector = tu_u16_high (p_request -> wIndex );
781
-
782
- // Stall request if the selected test mode isn't supported
783
- if (!dcd_check_test_mode_support ((test_mode_t )selector ))
784
- {
785
- TU_LOG_USBD (" Unsupported Test Mode (test selector index: %d)\r\n" , selector );
781
+ TU_VERIFY (0 == tu_u16_low (p_request -> wIndex ));
786
782
787
- return false;
788
- }
789
-
790
- // Acknowledge request
791
- tud_control_status (rhport , p_request );
792
-
793
- TU_LOG_USBD (" Enter Test Mode (test selector index: %d)\r\n" , selector );
783
+ uint8_t const selector = tu_u16_high (p_request -> wIndex );
784
+ TU_VERIFY (TUSB_FEATURE_TEST_J <= selector && selector <= TUSB_FEATURE_TEST_FORCE_ENABLE );
794
785
795
786
usbd_control_set_complete_callback (process_test_mode_cb );
787
+ tud_control_status (rhport , p_request );
796
788
break ;
797
789
}
798
- #endif /* CFG_TUD_TEST_MODE */
790
+ #endif /* CFG_TUD_TEST_MODE */
799
791
800
792
// Stall unsupported feature selector
801
793
default : return false;
@@ -1127,20 +1119,6 @@ static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const
1127
1119
}
1128
1120
}
1129
1121
1130
- #if CFG_TUD_TEST_MODE
1131
- static bool process_test_mode_cb (uint8_t rhport , uint8_t stage , tusb_control_request_t const * request )
1132
- {
1133
- // At this point it should already be ensured that dcd_enter_test_mode() is defined
1134
-
1135
- // Only enter the test mode after the request for it has completed
1136
- TU_VERIFY (CONTROL_STAGE_ACK == stage );
1137
-
1138
- dcd_enter_test_mode (rhport , (test_mode_t )tu_u16_high (request -> wIndex ));
1139
-
1140
- return true;
1141
- }
1142
- #endif /* CFG_TUD_TEST_MODE */
1143
-
1144
1122
//--------------------------------------------------------------------+
1145
1123
// DCD Event Handler
1146
1124
//--------------------------------------------------------------------+
0 commit comments