This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP-EXP430F5529LP:多个 HID 接口游戏

Guru**** 2555640 points
Other Parts Discussed in Thread: MSP-EXP430F5529LP

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/595347/msp-exp430f5529lp-multiple-hid-interfaces-gamepad

器件型号:MSP-EXP430F5529LP

我正在尝试使用 MSP430dev 软件包资源在 Windows 中创建 USB 游戏 epad 接口。

此时、我能够使单个 HID 游戏界面正常工作。 遗憾的是、我一直在尝试使用相同的实现方式来获取用于双路游戏 epad 的2个 HID 接口。

我已经查看了"HH1_hidDemo2hidDemo"示例、并使用解码器工具重新生成了解码器文件、定义了2个 HID 器件。

我添加了报告 ID、并将其计算为"0x85、0x01"和  0x85、0x02、           //  report_ID (供应商定义)。 我将相应地通过 USB 报告发送 ID。  

typedef 结构{
uint8_t id;
uint8_t btn;
INT8_t DX;
int8_t dy;
int8_t dz;
int8_t DRX;
}Gamepad_report; 

uint16_t const report_desc_size[HID_NUM_interfaces]=
{
48、
48
};
uint8_t const report_len_input[HID_NUM_interfaces]=
{
6、
6}
; 

INT8_t const REPORT_desc_HID0[]=
{
0x05、0x01、 // usage_page (通用桌面)
0x09、0x05、 //用法(游戏板)
0xa1、0x01、 //收集(应用)
0xa1、0x00、 //集合(物理)
0x85、0x01、 // REPORT_ID (供应商定义)
0x05、0x09、 // USAGE_PAGE (按钮)
0x19、0x01、 // USAGE_MINIMUM (按钮1)
0x29、0x08、 // usage_maximum (按钮8)
0x15、0x00、 // logical_minimum (0)
0x25、0x01、 // logical_maximum (1)
0x95、0x08、 // REPORT_COUNT (8)
0x75、0x01、 // REPORT_SIZE (1)
0x81、0x02、 // 输入(数据、VAR、ABS)
0x05、0x01、 // usage_page (通用桌面)
0x09、0x30、 // 用法(X)
0x09、0x31、 // 用法(Y)
0x09、0x32、 // 用法(Z)
0x09、0x33、 // 用法(Rx)
0x15、0x81、 // logical_minimum (-127)
0x25、0x7f、 // logical_maximum (127)
0x75、0x08、 // REPORT_SIZE (8)
0x95、0x04、 // REPORT_COUNT (4)
0x81、0x02、 // 输入(数据、VAR、ABS)
0xc0、 // end_collection
0xc0 // end_collection
}; 

结果是主机(WIN PC)仍然只能识别一个游戏 epad 设备。 由于某种原因、主机似乎未正确编号第二个器件。  

是否有人知道、是否面临相同的问题、或者是否成功实施了类似的方案?

感谢您的任何帮助。

谢谢

Shaun

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shaun、

    如果您希望有两个不同的器件、每个器件都有一个 HID 接口、并且希望 Windows 将其视为两个不同的 HID 器件、则必须为其中一个器件更改 PID。    现在、所有的 HID 示例、如 H1... 具有0x2047/0x315的 VID/PID。  您可以将0x315更改为另一个数字。  编程人员指南列出了可使用的 PID 范围。  如果您确实将其更改为另一个 PID、则请注意、该 VID/PID 将不会获得认证、并且我们所有示例附带的证书都是无效的。  

    在不更改 VID/PID 的情况下、可能还有其他方法可以执行您想要执行的操作、但我尚未对它们进行研究。  如果我找到其他方法、我将发布它。


    此致、

    Arthi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Arthi、

    感谢您的回复。

    因此、如果我正确理解这一点、我应该有两对 VID/PID;每个器件一对? 在这种情况下、我不确定如何实现这一点、因为描述符代码只指向 PID 的一个实例。

    uint8_t const abromDeviceDescriptor[SIZEOF_DEVICE_descriptor]={
    sizeof_device_descriptor、 //此描述符的长度
    DESC_TYPE_DEVICE、 //键入此描述符的代码
    0x00、0x02、 //发布 USB 规范
    0x00、 //器件的基本类代码
    0x00、 //器件的子类代码
    0x00、 //设备的协议类型代码
    EP0_packet_size、 //结束点0的数据包大小
    USB_VID&0xFF、USB_VID>>>8、 //器件的供应商 ID、TI=0x0451
    //您可以在 www.usb.org"上订购自己的 VID
    USB_PID&0xFF、USB_PID>>8、 //器件的产品 ID,
    //此 ID 仅用于此示例
    VER_FW_L、VER_FW_H、 //器件的修订级别
    1、 //制造商名称字符串描述的索引
    2、 //产品名称字符串描述的索引
    USB_STR_index_SERNUM、 //序列号字符串描述的索引
    1 //支持的配置数
    }; 

     您的建议是这样吗? 请注意、我已经尝试过 MSP430 USB API 示例指南中的不同 PID、即使是实验 PID 0x3df、也始终获得相同的结果。

    我想我还缺少一些东西。

    谢谢、

    Shaun

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在 descriptors.h 文件中、为 VID 和 PID 列出了两个#defines。  您在那里更改 PID。  

    #define USB_VID 0x2047 //供应商 ID (VID)

    #define USB_PID 0x0315 //产品 ID (PID)

     

    此致、

    Arthi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我是指这些定义。 仍然无法正常工作。 这是否是驱动程序的问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shaun、

    让我了解一下您的硬件、因为我不确定是否能清楚地看到它。   您是否正在尝试在 单独的游戏接收器上实现一个 HID 接口、或者它是具有两个 HID 接口的一个游戏接收器?   

    如果您在一个游戏上将两个 HID 接口作为复合设备实施、Windows 操作系统将看到它有一个设备、因为它们都使用相同 的 VID/PID 进行定义。  您不能  单独分离两个 HID 接口。    如果您需要独立、则可以使用两个单独的游戏手柄、每个游戏手柄都有其赢得的 HID 接口和 VID/PID。

    我想了解为什么您希望 Windows 将游戏 epad 识别为两个单独的设备、而这两个设备是复合设备。    即使 HH1示例是复合的、Windows 也会识别它、以至于它知道哪个接口和端点数据是在发送还是从接收的。

    此致、

    Arthi  

    。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    那么、这里是完整的图片。

    我正在尝试让一   个 MSP-EXP430F5529LP 硬件平台作为 两个游戏手柄的接口、很明显、它是 USB hid 设备。  因此、只有一个 HID 器件、一切都可以正常工作。 尽管当我尝试使用报告 ID 1和2标识的两个相同的报告描述符来定义两个 HID 时、主机仍会识别第一个 HID、但会遇到数字2、 e2e.ti.com/.../P_E900_riph_E900_rique-USB-composite.htmlthrowing代码10错误的问题。  

    我使用 HH1示例作为参考、因为我认为机制应该是相同的。 使用报告 ID 窗口应该能够同时对两个设备进行编号并相应地进行通信。 我正在附上使用 USB 分析器生成的报告、显示 PC 似乎可以看到第二个端点的部分信息、但出于某种原因、未获取报告解码器编号2。

    Shaun

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Shaun、

    在 HH1示例中、两个 HID 报告的报告 ID 都相同。  也许您可以尝试在 两个 HID 报告中使用相同的报告 ID。   如果这不起作用、则需要重新验证第二个器件的报告描述符。

    此致、

    Arthi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    只是此帖子的更新。 我能够使用稍微不同的方法使我的配置正常工作。 它基于 此帖子中建议的1)多 TLCS (顶层集合)解决方案  、基本将所有内容设置为一个 HID 和 USB 设备、并使用报告说明通过报告 ID 定义两个设备、在我的案例中为1和2。

    现在就这些。

    非常感谢您的帮助。

    Shuan