首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有MSP430 USB API的USB-HID游戏板-带有描述符的问题

带有MSP430 USB API的USB-HID游戏板-带有描述符的问题
EN

Stack Overflow用户
提问于 2021-07-30 14:25:46
回答 1查看 183关注 0票数 0

我试图模拟一个USB游戏垫/控制器使用MSP430与7-14模拟输入,但我有困难,为我的自定义USB设备正确的描述符。

我在网上看到了这段代码:https://github.com/TI-FIRST/MSP430-Gamepad,它很好地实现了MSP430的启动并作为一个游戏板运行,只有8个模拟输入。

C文件包含更改报表结构的说明:

  • 此示例作为主机上的游戏垫。游戏垫有一个HID报告,描述为描述符中的in
  • report_desc_HID0变量。请注意,如果此报表结构发生了变化,则需要在描述符中更新以下长度的-
    1. #define report_desc_size_HID0。h需要用描述符size

更新

    1. report_desc_size和report_len_input无需在descriptors.c

中更新

这个演示将枚举18字节的输入报告和2字节的输出报告( USB_gamepad.h

  • The input reports )中描述的游戏垫的输入和输出报告结构,用于报告ADC值和按钮的状态(
  • )
  • ,输出报告用于设置/重置指示符(GPIO)

描述符.c文件中当前的描述符是:

代码语言:javascript
复制
UsagePage(USB_HID_GENERIC_DESKTOP),
Usage(USB_HID_JOYSTICK),
Collection(USB_HID_APPLICATION),
//
// The axis for the controller.
//
UsagePage(USB_HID_GENERIC_DESKTOP),
Usage (USB_HID_POINTER),
Collection (USB_HID_PHYSICAL),

    //
    // The X, Y and Z values which are specified as 8-bit absolute
    // position values.
    //
    Usage (USB_HID_X),
    Usage (USB_HID_Y),
    Usage (USB_HID_Z),
    Usage (USB_HID_RX),
    Usage (USB_HID_RY),
    Usage (USB_HID_RZ),
    Usage (USB_HID_SLIDER),
    Usage (USB_HID_DIAL),
    //
    // 8 16-bit absolute values.
    //
    ReportSize(16),
    ReportCount(8),
    Input(USB_HID_INPUT_DATA | USB_HID_INPUT_VARIABLE |
          USB_HID_INPUT_ABS),

    //
    // Max 32 buttons.
    //
    UsagePage(USB_HID_BUTTONS),
    UsageMinimum(1),
    UsageMaximum(NUM_BUTTONS),
    LogicalMinimum(0),
    LogicalMaximum(1),
    PhysicalMinimum(0),
    PhysicalMaximum(1),

    //
    // 8 - 1 bit values for the buttons.
    //
    ReportSize(1),
    ReportCount(32),
    Input(USB_HID_INPUT_DATA | USB_HID_INPUT_VARIABLE |
          USB_HID_INPUT_ABS),

     //
     // Max 16 indicator bits
     //
     UsagePage(USB_HID_BUTTONS),
     UsageMinimum(1),
     UsageMaximum(NUM_INDICATORS),
     LogicalMinimum(0),
     LogicalMaximum(1),
     PhysicalMinimum(0),
     PhysicalMaximum(1),

     //
     // 8 - 1 bit values for the leds.
     //
     ReportSize(1),
     ReportCount(16),
     Output(USB_HID_INPUT_DATA | USB_HID_INPUT_VARIABLE |
           USB_HID_INPUT_ABS),

EndCollection,
EndCollection

我想把它改为14位16位模拟输入,如下所示:

代码语言:javascript
复制
UsagePage(USB_HID_GENERIC_DESKTOP),
Usage(USB_HID_JOYSTICK),
Collection(USB_HID_APPLICATION),
//
// The axis for the controller.
//
UsagePage(USB_HID_GENERIC_DESKTOP),
Usage (USB_HID_POINTER),
Collection (USB_HID_PHYSICAL),

    //
    // The X, Y and Z values which are specified as 8-bit absolute
    // position values.
    //
    Usage (USB_HID_X),
    Usage (USB_HID_Y),
    Usage (USB_HID_Z),
    Usage (USB_HID_RX),
    Usage (USB_HID_RY),
    Usage (USB_HID_RZ),
    Usage (USB_HID_SLIDER),
    Usage (USB_HID_DIAL),
    Usage (USB_HID_VX),
    Usage (USB_HID_VY),
    Usage (USB_HID_VZ),
    Usage (USB_HID_VRX),
    Usage (USB_HID_VRY),
    Usage (USB_HID_VRZ),
    //
    // 8 16-bit absolute values.
    //
    ReportSize(16),
    ReportCount(14),
    Input(USB_HID_INPUT_DATA | USB_HID_INPUT_VARIABLE |
          USB_HID_INPUT_ABS),

    //
    // Max 32 buttons.
    //
    UsagePage(USB_HID_BUTTONS),
    UsageMinimum(1),
    UsageMaximum(6),
    LogicalMinimum(0),
    LogicalMaximum(1),
    PhysicalMinimum(0),
    PhysicalMaximum(1),

    //
    // 8 - 1 bit values for the buttons.
    //
    ReportSize(1),
    ReportCount(32),
    Input(USB_HID_INPUT_DATA | USB_HID_INPUT_VARIABLE |
          USB_HID_INPUT_ABS),

     //
     // Max 16 indicator bits
     //
     UsagePage(USB_HID_BUTTONS),
     UsageMinimum(1),
     UsageMaximum(6),
     LogicalMinimum(0),
     LogicalMaximum(1),
     PhysicalMinimum(0),
     PhysicalMaximum(1),

     //
     // 8 - 1 bit values for the leds.
     //
     ReportSize(1),
     ReportCount(16),
     Output(USB_HID_INPUT_DATA | USB_HID_INPUT_VARIABLE |
           USB_HID_INPUT_ABS),

EndCollection,
EndCollection

但是,我不知道如何计算描述符的长度/大小/字节。我试着检查了USB规范( HID 1.11 \USB-IF的设备类定义),它声明项目有一个字节前缀,但我无法真正弄清楚哪些项需要计数,以及它们是如何加起来的。对不起,但我在USB方面非常缺乏经验。

有人能看一下代码吗,让我知道我在report_desc_size中需要什么值,描述符文件中的report_len_input值,再加上我需要更改的任何东西,以扩展这段代码用于14个16位模拟输入的功能。

要复制和查看工作的游戏板,只需将代码上传到开发工具包中,并在Windows上搜索“设置USB游戏控制器”,如果一切正常运行且报告被接受,Windows就应该将其识别为游戏垫。

EN

回答 1

Stack Overflow用户

发布于 2021-08-02 19:56:49

报表描述符的大小为sizeof(report_desc_HID0)。为了方便起见,我建议对代码进行重构,以便在编译时计算描述符长度,而不是硬编码。

您正在使用宏来构造描述符,并且每个宏都添加了一个固定的字节数。您添加了六个新的Usage项,每个项扩展为两个字节:

代码语言:javascript
复制
#define Usage(ui8Value)          0x09, ((ui8Value) & 0xff)

如果原来的描述符是80字节,我猜新描述符的大小是92字节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68592610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档