本帖最后由 cz1129 于 2013-8-13 10:29 编辑
问题描述:
USB host驱动 HID 扫描枪,插入扫描枪时枚举已经完成,进入 USBH_HID_Handle() 状态机内,一直在 HID_GET_DATA 状态和 HID_POLL 状态之间跳转。
扫描枪扫描数据时,有些扫描扫描枪的数据能够读到,而有扫描枪的数据读不到。
跟踪进入 USBH_InterruptReceiveData()函数
USBH_Status USBH_InterruptReceiveData( USB_OTG_CORE_HANDLE *pdev,
uint8_t *buff,
uint8_t length,
uint8_t hc_num)
{
pdev->host.hc[hc_num].ep_is_in = 1;
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;//HC_PID_DATA0 /改成 HC_PID_DATA1,
}
else
{
pdev->host.hc[hc_num].data_pid = HC_PID_DATA1;//同时 HC_PID_DATA1 /改成 HC_PID_DATA0,就可以接收异常的数据,但原来的枪又不能用了
}
/* toggle DATA PID */
pdev->host.hc[hc_num].toggle_in ^= 1;
HCD_SubmitRequest (pdev , hc_num);
return USBH_OK;
}
按注释中的修改后可以读出之前不能读的扫描枪的数据,而之前正常的扫描枪的数据又读不出了!!
求大神们帮着分析一下,谢谢!
|