Merge pull request #336 from pigrew/edpt_close
> If you notice my chain of events above, the bulk transfer was started BEFORE the SET_INTERFACE call. The USB device hardware swaps the order of them being delivered. On STM32, it gives priority to the lower-numbered EP index. It shouldn't be a matter, control is 2+ stage, before sending the setup. Host should stop all communication to the endpoint that It wants to close.
This commit is contained in:
		| @@ -123,6 +123,10 @@ void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request_t const * re | ||||
| // Configure endpoint's registers according to descriptor | ||||
| bool dcd_edpt_open        (uint8_t rhport, tusb_desc_endpoint_t const * p_endpoint_desc); | ||||
|  | ||||
| // Close an endpoint. | ||||
| // Since it is weak, caller must TU_ASSERT this function's existence before calling it. | ||||
| void dcd_edpt_close        (uint8_t rhport, uint8_t ep_addr) TU_ATTR_WEAK; | ||||
|  | ||||
| // Submit a transfer, When complete dcd_event_xfer_complete() is invoked to notify the stack | ||||
| bool dcd_edpt_xfer        (uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t total_bytes); | ||||
|  | ||||
|   | ||||
| @@ -1011,4 +1011,20 @@ bool usbd_edpt_stalled(uint8_t rhport, uint8_t ep_addr) | ||||
|   return _usbd_dev.ep_status[epnum][dir].stalled; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * usbd_edpt_close will disable an endpoint. | ||||
|  *  | ||||
|  * In progress transfers on this EP may be delivered after this call. | ||||
|  *  | ||||
|  */ | ||||
| void usbd_edpt_close(uint8_t rhport, uint8_t ep_addr) | ||||
| { | ||||
|   TU_ASSERT(dcd_edpt_close, /**/); | ||||
|   TU_LOG2("  CLOSING Endpoint: 0x%02X\r\n", ep_addr); | ||||
|  | ||||
|   dcd_edpt_close(rhport, ep_addr); | ||||
|  | ||||
|   return; | ||||
| } | ||||
|  | ||||
| #endif | ||||
|   | ||||
| @@ -38,6 +38,7 @@ | ||||
| //--------------------------------------------------------------------+ | ||||
|  | ||||
| //bool usbd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const * p_endpoint_desc); | ||||
| void usbd_edpt_close(uint8_t rhport, uint8_t ep_addr); | ||||
|  | ||||
| // Submit a usb transfer | ||||
| bool usbd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t * buffer, uint16_t total_bytes); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Ha Thach
					Ha Thach