STM32 USB Host Library 学习笔记 (2) USBH_InterruptSendData() USBH_ClrFeature()
2012-09-01 23:32
651 查看
/** * @brief USBH_InterruptSendData * Sends the data on Interrupt OUT Endpoint * @param pdev: Selected device * @param buff: Buffer pointer from where the data needs to be copied * @param length: Length of the data to be sent * @param hc_num: Host channel Number * @retval Status. */ USBH_Status USBH_InterruptSendData( USB_OTG_CORE_HANDLE *pdev, uint8_t *buff, uint8_t length, uint8_t hc_num) { pdev->host.hc[hc_num].ep_is_in = 0; pdev->host.hc[hc_num].xfer_buff = buff; pdev->host.hc[hc_num].xfer_len = length; if(pdev->host.hc[hc_num].toggle_in == 0) { pdev->host.hc[hc_num].data_pid = HC_PID_DATA0; } else { pdev->host.hc[hc_num].data_pid = HC_PID_DATA1; } pdev->host.hc[hc_num].toggle_in ^= 1; HCD_SubmitRequest (pdev , hc_num); return USBH_OK; }
toggle_in or toggle_out ?
/** * @brief USBH_BulkSendData * Sends the Bulk Packet to the device * @param pdev: Selected device * @param buff: Buffer pointer from which the Data will be sent to Device * @param length: Length of the data to be sent * @param hc_num: Host channel Number * @retval Status */ USBH_Status USBH_BulkSendData ( USB_OTG_CORE_HANDLE *pdev, uint8_t *buff, uint16_t length, uint8_t hc_num) { pdev->host.hc[hc_num].ep_is_in = 0; pdev->host.hc[hc_num].xfer_buff = buff; pdev->host.hc[hc_num].xfer_len = length; /* Set the Data Toggle bit as per the Flag */ if ( pdev->host.hc[hc_num].toggle_out == 0) { /* Put the PID 0 */ pdev->host.hc[hc_num].data_pid = HC_PID_DATA0; } else { /* Put the PID 1 */ pdev->host.hc[hc_num].data_pid = HC_PID_DATA1 ; } HCD_SubmitRequest (pdev , hc_num); return USBH_OK; }
else if (hcint.b.chhltd) // usb_hcd_int.c { MASK_HOST_INT_CHH (num); if(pdev->host.HC_Status[num] == HC_XFRC) { pdev->host.URB_State[num] = URB_DONE; if (hcchar.b.eptype == EP_TYPE_BULK) { pdev->host.hc[num].toggle_out ^= 1; } } }
/** * @brief USBH_ClrFeature * This request is used to clear or disable a specific feature. * @param pdev: Selected device * @param ep_num: endpoint number * @param hc_num: Host channel number * @retval Status */ USBH_Status USBH_ClrFeature(USB_OTG_CORE_HANDLE *pdev, USBH_HOST *phost, uint8_t ep_num, uint8_t hc_num) { phost->Control.setup.b.bmRequestType = USB_H2D | USB_REQ_RECIPIENT_ENDPOINT | USB_REQ_TYPE_STANDARD; phost->Control.setup.b.bRequest = USB_REQ_CLEAR_FEATURE; phost->Control.setup.b.wValue.w = FEATURE_SELECTOR_ENDPOINT; phost->Control.setup.b.wIndex.w = ep_num; phost->Control.setup.b.wLength.w = 0; if ((ep_num & USB_REQ_DIR_MASK ) == USB_D2H) { /* EP Type is IN */ pdev->host.hc[hc_num].toggle_in = 0; } else {/* EP Type is OUT */ pdev->host.hc[hc_num].toggle_out = 0; } return USBH_CtlReq(pdev, phost, 0 , 0 ); }
相关文章推荐
- STM32 USB Host Library 学习笔记 (3) USBH_HandleControl()
- STM32 USB Host Library 学习笔记 (1) USB_OTG_ReadPacket() USB_ReadPacket()
- 基于STM32的USB枚举过程学习笔记(二)
- 基于STM32的USB枚举过程学习笔记(五)
- STM32 USB学习笔记2
- STM32 USB学习笔记3
- 基于STM32的USB枚举过程学习笔记(一)
- 基于STM32的USB枚举过程学习笔记(三)
- STM32学习笔记之USB虚拟串口描述符简介
- STM32学习笔记之 USB驱动usb_endp.c文件和usb_istr.c文件分析
- 基于STM32的USB枚举过程学习笔记
- STM32学习笔记之USB工程目录文件分析
- 基于STM32的USB枚举过程学习笔记(四)
- STM32 USB学习笔记1
- 关于stm32的USB学习笔记之usbcore.c
- STM32 USB学习笔记9
- stm32学习笔记之USB中断配置初始化函数
- 基于STM32的USB枚举过程学习笔记
- STM32学习笔记之USB库文件分析
- STM32 USB学习笔记6