feature(tusb): Added teardown API
This commit is contained in:
		
							
								
								
									
										34
									
								
								src/tusb.c
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								src/tusb.c
									
									
									
									
									
								
							| @@ -136,6 +136,40 @@ void tusb_int_handler(uint8_t rhport, bool in_isr) { | ||||
|   #endif | ||||
| } | ||||
|  | ||||
| bool tusb_rhport_teardown(uint8_t rhport) { | ||||
|   // backward compatible call with tusb_init(void) | ||||
|   #if defined(TUD_OPT_RHPORT) || defined(TUH_OPT_RHPORT) | ||||
|     #if CFG_TUD_ENABLED && defined(TUD_OPT_RHPORT) | ||||
|     // deinit device stack, CFG_TUSB_RHPORTx_MODE must be defined | ||||
|     TU_ASSERT( tud_deinit(TUD_OPT_RHPORT) ); | ||||
|     _tusb_rhport_role[TUD_OPT_RHPORT] = TUSB_ROLE_INVALID; | ||||
|     #endif | ||||
|  | ||||
|     #if CFG_TUH_ENABLED && defined(TUH_OPT_RHPORT) | ||||
|     // deinit host stack CFG_TUSB_RHPORTx_MODE must be defined | ||||
|     TU_ASSERT( tuh_deinit(TUH_OPT_RHPORT) ); | ||||
|     _tusb_rhport_role[TUH_OPT_RHPORT] = TUSB_ROLE_INVALID; | ||||
|     #endif | ||||
|  | ||||
|     return true; | ||||
|   #endif | ||||
|  | ||||
|   // new API with explicit rhport and role | ||||
|   TU_ASSERT(rhport < TUP_USBIP_CONTROLLER_NUM); | ||||
|  | ||||
|   #if CFG_TUD_ENABLED | ||||
|   TU_ASSERT( tud_deinit(rhport) ); | ||||
|   _tusb_rhport_role[rhport] = TUSB_ROLE_INVALID; | ||||
|   #endif | ||||
|  | ||||
|   #if CFG_TUH_ENABLED | ||||
|   TU_ASSERT(  tuh_deinit(rhport) ); | ||||
|   _tusb_rhport_role[rhport] = TUSB_ROLE_INVALID; | ||||
|   #endif | ||||
|  | ||||
|   return true; | ||||
| } | ||||
|  | ||||
| //--------------------------------------------------------------------+ | ||||
| // Descriptor helper | ||||
| //--------------------------------------------------------------------+ | ||||
|   | ||||
							
								
								
									
										14
									
								
								src/tusb.h
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								src/tusb.h
									
									
									
									
									
								
							| @@ -154,14 +154,24 @@ bool tusb_inited(void); | ||||
| // Called to handle usb interrupt/event. tusb_init(rhport, role) must be called before | ||||
| void tusb_int_handler(uint8_t rhport, bool in_isr); | ||||
|  | ||||
| // TODO | ||||
| // bool tusb_teardown(void); | ||||
| // Internal helper for backward compatibility with tusb_init(void) | ||||
| bool tusb_rhport_teardown(uint8_t rhport); | ||||
|  | ||||
| #if defined(TUD_OPT_RHPORT) || defined(TUH_OPT_RHPORT) | ||||
|   #define _tusb_teardown_arg0()        tusb_rhport_teardown(0) | ||||
| #else | ||||
|   #define _tusb_teardown_arg0()        TU_VERIFY_STATIC(false, "CFG_TUSB_RHPORT0_MODE/CFG_TUSB_RHPORT1_MODE must be defined") | ||||
| #endif | ||||
|  | ||||
| #define _tusb_teardown_arg1(_rhport)         tusb_rhport_teardown(_rhport) | ||||
| #define tusb_teardown(...)                   TU_FUNC_OPTIONAL_ARG(_tusb_teardown, __VA_ARGS__) | ||||
|  | ||||
| #else | ||||
|  | ||||
| #define tusb_init(...)  (false) | ||||
| #define tusb_int_handler(...)  do {}while(0) | ||||
| #define tusb_inited()  (false) | ||||
| #define tusb_teardown(...) (false) | ||||
|  | ||||
| #endif | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Roman Leonov
					Roman Leonov