硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2345|回复: 1
收起左侧

[USB] i.MX RT1050 关于kUSB_DeviceEventSetConfiguration的处理问题

[复制链接]

17

主题

248

回帖

299

积分

高级会员

积分
299
发表于 2018-1-27 10:45:19 | 显示全部楼层 |阅读模式
本帖最后由 xieyang__ 于 2018-1-27 10:51 编辑

下面是USB_DeviceCallback中的部分代码
  1. case kUSB_DeviceEventSetInterface:
  2.             if (g_UsbDeviceHidMouse.attach)
  3.             {
  4.                 /* Set device interface request */
  5.                 uint8_t interface = (uint8_t)((*temp16 & 0xFF00U) >> 0x08U);
  6.                 uint8_t alternateSetting = (uint8_t)(*temp16 & 0x00FFU);
  7.                 if (interface < USB_HID_MOUSE_INTERFACE_COUNT)
  8.                 {
  9.                     g_UsbDeviceHidMouse.currentInterfaceAlternateSetting[interface] = alternateSetting;
  10.                     if (alternateSetting == 0U)
  11.                     {
  12.                         usb_echo("usb device callback:kUSB_DeviceEventSetInterface,%d\r\n",error);
  13.                         error = USB_DeviceHidMouseAction();
  14.                         
  15.                     }
  16.                 }
  17.             }
  18.             break;
复制代码

nxp的例程上在处理kUSB_DeviceEventSetConfiguration时加了一个USB_DeviceHidMouseAction(),如果不加这个鼠标就没有动作。并且在抓取的数据包中没有看到发送上去的数据
usb trace pack.png
如果数据发送出去,那么应该出现在53-59号包位置之间。

USB_DeviceHidMouseAction()的周期调用是在函数USB_DeviceHidMouseCallback()中,使得鼠标可以移植移动。
  1. static usb_status_t USB_DeviceHidMouseCallback(class_handle_t handle, uint32_t event, void *param)
  2. {
  3. <p style="line-height: 30px; text-indent: 2em;">    usb_status_t error = kStatus_USB_Error;
  4.          usb_device_endpoint_callback_message_struct_t *message = (usb_device_endpoint_callback_message_struct_t *)param;</p>
  5. <p style="line-height: 30px; text-indent: 2em;">    switch (event)
  6.         {
  7.              case kUSB_DeviceHidEventSendResponse:
  8.                    /* Resport sent */
  9.                   if (g_UsbDeviceHidMouse.attach)
  10.                  {
  11.                         if ((NULL != message) && (message->length == USB_UNINITIALIZED_VAL_32))
  12.                        {
  13.                              return error;
  14.                        }
  15.                        error = USB_DeviceHidMouseAction();
  16.                        usb_echo("usb hid callback:kUSB_DeviceHidEventSendResponse\r\n");
  17.                }
  18.                break;
  19.           case kUSB_DeviceHidEventGetReport:
  20.           case kUSB_DeviceHidEventSetReport:
  21.           case kUSB_DeviceHidEventRequestReportBuffer:
  22.                  error = kStatus_USB_InvalidRequest;
  23.                  usb_echo("usb hid callback:kUSB_DeviceHidEventGetReport,kUSB_DeviceHidEventSetReport,kUSB_DeviceHidEventRequestReportBuffer\r\n");
  24.                  break;
  25.           case kUSB_DeviceHidEventGetIdle:
  26.           case kUSB_DeviceHidEventGetProtocol:
  27.           case kUSB_DeviceHidEventSetIdle:
  28.           case kUSB_DeviceHidEventSetProtocol:
  29.                      usb_echo("usb hid callback:kUSB_DeviceHidEventGetIdle,kUSB_DeviceHidEventGetProtocol,kUSB_DeviceHidEventSetIdle,kUSB_DeviceHidEventSetProtocol\r\n");
  30.               break;
  31.           default:
  32.                      usb_echo("usb hid callback:default event\r\n");
  33.               break;
  34.       }</p>
  35. <p style="line-height: 30px; text-indent: 2em;">    return error;
  36. }</p>
复制代码

函数DeviceHidMouseAction()是在kUSB_DeviceHidEventSendResponse事件下调用的,kUSB_DeviceHidEventSendResponse的含义是 Send data completed,也就是数据发送完成.
所以,在这里我做一个猜想,在kUSB_DeviceEventSetConfiguration时调用DeviceHidMouseAction()将一组数据送入USB栈,等到发送完成时在事件kUSB_DeviceHidEventSendResponse中再送一组数据到USB栈,这样就构成了一个循环。




下面附上工程文件和log信息
usb hid mouse.zip (1.56 MB, 下载次数: 74)
USB Only mouse2.utl (54.06 KB, 下载次数: 72)
usb only mouse2.log (1.84 KB, 下载次数: 59)




评分

参与人数 1金币 +20 收起 理由
eric2013 + 20 赞一个!

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2018-1-27 11:39:53 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-19 22:12 , Processed in 0.226492 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表