add int_on_complete parameter to hcd_pipe_xfer for TD chain class request
fix control transfer request: remove get_control_request_ptr()
This commit is contained in:
		| @@ -252,7 +252,6 @@ static void queue_head_init(ehci_qhd_t *p_qhd, uint8_t dev_addr, uint16_t max_pa | ||||
|  | ||||
| static inline ehci_qhd_t* const get_control_qhd(uint8_t dev_addr) ATTR_ALWAYS_INLINE ATTR_PURE ATTR_WARN_UNUSED_RESULT; | ||||
| static inline ehci_qtd_t* get_control_qtds(uint8_t dev_addr) ATTR_ALWAYS_INLINE ATTR_PURE ATTR_WARN_UNUSED_RESULT; | ||||
| static inline tusb_std_request_t* const get_control_request_ptr(uint8_t dev_addr) ATTR_ALWAYS_INLINE ATTR_PURE ATTR_WARN_UNUSED_RESULT; | ||||
|  | ||||
| //--------------------------------------------------------------------+ | ||||
| // CONTROL PIPE API | ||||
| @@ -316,10 +315,8 @@ tusb_error_t  hcd_pipe_control_xfer(uint8_t dev_addr, tusb_std_request_t const * | ||||
|   ehci_qtd_t *p_status = p_setup + 2; | ||||
|  | ||||
|   //------------- SETUP Phase -------------// | ||||
|   *(get_control_request_ptr(dev_addr)) = *p_request; // copy request | ||||
|  | ||||
|   queue_td_init(p_setup, (uint32_t) get_control_request_ptr(dev_addr), 8); | ||||
|   p_setup->pid = EHCI_PID_SETUP; | ||||
|   queue_td_init(p_setup, (uint32_t) p_request, 8); | ||||
|   p_setup->pid          = EHCI_PID_SETUP; | ||||
|   p_setup->next.address = (uint32_t) p_data; | ||||
|  | ||||
|   //------------- DATA Phase -------------// | ||||
| @@ -343,7 +340,7 @@ tusb_error_t  hcd_pipe_control_xfer(uint8_t dev_addr, tusb_std_request_t const * | ||||
|   p_status->next.terminate  = 1; | ||||
|  | ||||
|   //------------- hook TD List to Queue Head -------------// | ||||
|   p_qhd->p_qtd_list_head               = p_setup; | ||||
|   p_qhd->p_qtd_list_head          = p_setup; | ||||
|   p_qhd->qtd_overlay.next.address = (uint32_t) p_setup; | ||||
|  | ||||
|   return TUSB_ERROR_NONE; | ||||
| @@ -416,7 +413,7 @@ static inline void insert_qtd_to_qhd(ehci_qhd_t *p_qhd, ehci_qtd_t *p_qtd_new) | ||||
| } | ||||
|  | ||||
|  | ||||
| tusb_error_t  hcd_pipe_xfer(pipe_handle_t pipe_hdl, uint8_t buffer[], uint16_t total_bytes) | ||||
| tusb_error_t  hcd_pipe_xfer(pipe_handle_t pipe_hdl, uint8_t buffer[], uint16_t total_bytes, bool int_on_complete) | ||||
| { | ||||
|   //------------- TODO pipe handle validate -------------// | ||||
|  | ||||
| @@ -434,7 +431,7 @@ tusb_error_t  hcd_pipe_xfer(pipe_handle_t pipe_hdl, uint8_t buffer[], uint16_t t | ||||
|  | ||||
|   queue_td_init(p_qtd, (uint32_t) buffer, total_bytes); | ||||
|   p_qtd->pid = p_qhd->pid_non_control; | ||||
|   p_qtd->int_on_complete = 1; | ||||
|   p_qtd->int_on_complete = int_on_complete ? 1 : 0; | ||||
|  | ||||
|   //------------- insert TD to TD list -------------// | ||||
|   insert_qtd_to_qhd(p_qhd, p_qtd); | ||||
| @@ -458,11 +455,6 @@ static inline ehci_qtd_t* get_control_qtds(uint8_t dev_addr) | ||||
|  | ||||
| } | ||||
|  | ||||
| static inline tusb_std_request_t* const get_control_request_ptr(uint8_t dev_addr) | ||||
| { | ||||
|   return &usbh_device_info_pool[dev_addr].control_request; | ||||
| } | ||||
|  | ||||
| // TODO subject to pure function | ||||
| static void queue_head_init(ehci_qhd_t *p_qhd, uint8_t dev_addr, uint16_t max_packet_size, uint8_t endpoint_addr, uint8_t xfer_type) | ||||
| { | ||||
|   | ||||
| @@ -80,7 +80,7 @@ tusb_error_t  hcd_pipe_control_xfer(uint8_t dev_addr, tusb_std_request_t const * | ||||
| tusb_error_t  hcd_pipe_control_close(uint8_t dev_addr) ATTR_WARN_UNUSED_RESULT; | ||||
|  | ||||
| pipe_handle_t hcd_pipe_open(uint8_t dev_addr, tusb_descriptor_endpoint_t const * endpoint_desc) ATTR_WARN_UNUSED_RESULT; | ||||
| tusb_error_t  hcd_pipe_xfer(pipe_handle_t pipe_hdl, uint8_t buffer[], uint16_t total_bytes)  ATTR_WARN_UNUSED_RESULT; | ||||
| tusb_error_t  hcd_pipe_xfer(pipe_handle_t pipe_hdl, uint8_t buffer[], uint16_t total_bytes, bool int_on_complete)  ATTR_WARN_UNUSED_RESULT; | ||||
| tusb_error_t  hcd_pipe_close(pipe_handle_t pipe_hdl) ATTR_WARN_UNUSED_RESULT; | ||||
|  | ||||
| #if 0 | ||||
|   | ||||
| @@ -124,7 +124,7 @@ tusb_error_t usbh_control_xfer_subtask(uint8_t dev_addr, tusb_std_request_t cons | ||||
|   OSAL_SUBTASK_BEGIN | ||||
|  | ||||
|   usbh_device_info_pool[dev_addr].control_request = *p_request; | ||||
|   (void) hcd_pipe_control_xfer(dev_addr, p_request, data); | ||||
|   (void) hcd_pipe_control_xfer(dev_addr, &usbh_device_info_pool[dev_addr].control_request, data); | ||||
|  | ||||
|   osal_semaphore_wait(usbh_device_info_pool[dev_addr].sem_hdl, OSAL_TIMEOUT_NORMAL, &error); // careful of local variable without static | ||||
|   SUBTASK_ASSERT_STATUS_WITH_HANDLER(error, tusbh_device_mount_failed_cb(TUSB_ERROR_USBH_MOUNT_DEVICE_NOT_RESPOND, NULL) ); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 hathach
					hathach