本帖最后由 abc2001 于 2014-7-31 10:00 编辑
现在在用STM32_USB-Host-Device_Lib_V2.1.0调试HID键鼠,用2个接口描述符(不能在报告描述符增加ID的方法),请大家帮忙看看,谢谢!
接口1描述是键盘,接口2描述是鼠标,现在枚举已经成本,PC也已经识别出
现在情况是这样的,HID_IN_EP(0X81),和HID_OUT_EP(0X01)可以正常工作,但HID_IN_EP2现在无法将数据发出,不能工作。
具体对STM32_USB-Host-Device_Lib_V2.1.0库的更改如下:
1. usbd_conf.h:文件中增加需要的端点
#define HID_IN_EP 0x81
#define HID_OUT_EP 0x01
#define HID_IN_EP2 0x82
#define HID_IN_PACKET 4
#define HID_OUT_PACKET 4
2. usb_conf.h:文件中定义了相关端点的FIFO长度
#ifdef USB_OTG_FS_CORE
#define RX_FIFO_FS_SIZE 128
#define TX0_FIFO_FS_SIZE 64
#define TX1_FIFO_FS_SIZE 64//128
#define TX2_FIFO_FS_SIZE 64//0
#define TX3_FIFO_FS_SIZE 0
3. USBD_HID_Init函数中增加了对HID_IN_EP2初始化
/* Open EP IN */
DCD_EP_Open(pdev,
HID_IN_EP,
HID_IN_PACKET,
USB_OTG_EP_INT);
/* Open EP OUT */
DCD_EP_Open(pdev,
HID_OUT_EP,
HID_OUT_PACKET,
USB_OTG_EP_INT);
/* Open EP IN */
DCD_EP_Open(pdev,
HID_IN_EP2,
HID_IN_PACKET,
USB_OTG_EP_INT);
// <----- add these lines
/* Prepare Out endpoint to receive next packet */
DCD_EP_PrepareRx(pdev,
HID_OUT_EP,
(uint8_t*)(USB_Rx_Buffer),
HID_OUT_PACKET);
4. USBD_HID_DeInit函数增加了对端点的处理
/* Close HID EPs */
DCD_EP_Close (pdev , HID_IN_EP);
DCD_EP_Close (pdev , HID_OUT_EP);
DCD_EP_Close (pdev , HID_IN_EP2);
5. 增加了USBD_HID_SendReport_EP2函数,用于发送EP2的数据
uint8_t USBD_HID_SendReport_EP2 (USB_OTG_CORE_HANDLE *pdev,
uint8_t *report,
uint16_t len)
{
if (pdev->dev.device_status == USB_OTG_CONFIGURED )
{
DCD_EP_Tx (pdev, HID_IN_EP2, report, len);
}
return USBD_OK;
}
6. 在应用层,调用USBD_HID_SendReport_EP2发送数据
buf = USBD_HID_GetPos();
if((buf[1] != 0) ||(buf[2] != 0))
{
USBD_HID_SendReport_EP2 (&USB_OTG_dev,
buf,
4);
现在只要通过USBD_HID_SendReport_EP2发送数据,BUS HOUND收不数据,并出来一些看不懂的信息。
|