乐鑫技术交流
直播中

潘飘稚

7年用户 826经验值
私信 关注
[问答]

esp32s3想通过hid直接实现与电脑的数据交互,无法实现通信怎么解决?

我想通过hid直接实现与电脑的数据交互,尝试在tusb_hid例程上做修改,目前测试工具可以识别到键盘,鼠标外的第三个报告描述符,但是无法实现通信,想知道是在哪里配置出现了问题。
下面是我在例程上做出修改的地方:

const uint8_t hid_report_descriptor[] = {
    TUD_HID_REPORT_DESC_KEYBOARD(HID_REPORT_ID(HID_ITF_PROTOCOL_KEYBOARD) ),
    TUD_HID_REPORT_DESC_MOUSE(HID_REPORT_ID(HID_ITF_PROTOCOL_MOUSE) ),
    TUD_HID_REPORT_DESC_GENERIC_INOUT(63,HID_REPORT_ID(3)),  //添加第三个描述符
   
};

static const uint8_t hid_configuration_descriptor[] = {
    // Configuration number, interface count, string index, total length, attribute, power in mA
    TUD_CONFIG_DESCRIPTOR(1, 1, 0, TUSB_DESC_TOTAL_LEN, TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP, 100),

    // Interface number, string index, boot protocol, report descriptor len, EP In address, size & polling interval
    //TUD_HID_DESCRIPTOR(0, 4, false, sizeof(hid_report_descriptor), 0x81, 16, 10),

    TUD_HID_INOUT_DESCRIPTOR(0,0,HID_ITF_PROTOCOL_NONE,sizeof(hid_report_descriptor), 0x01, 0x81, 64, 10),
};

//数据发送函数
void hid_data_send(uint8_t data[], uint8_t length)
{
    uint8_t reportData[63] = {0};

    if (tud_hid_ready())
    {
        tud_hid_report(3,reportData,63);
    }
}

下图是使用调试工具的连接结果                                                                                                                                                

回帖(1)

你又知道了

2024-6-5 16:06:03
根据您的描述,您已经成功地在ESP32-S3上实现了键盘和鼠标的HID通信,并且已经添加了第三个报告描述符。但是,您无法实现与电脑的数据交互。为了解决这个问题,我们可以按照以下步骤进行排查和修改:

1. 确保您的ESP32-S3设备已经正确连接到电脑,并且电脑已经识别到了该设备。

2. 检查您的代码中是否正确配置了HID设备的端点。在tusb_config.h文件中,确保以下宏定义已经设置为合适的值:
   - CFG_TUD_HID_EP_BUFSIZE:设置为足够的缓冲区大小,以满足您的数据传输需求。
   - CFG_TUD_HID_EP_IN_SW:设置为1,以使用软件控制的输入端点。

3. 在您的代码中,确保您已经正确地初始化了HID设备。在tusb_init()函数中,添加以下代码:
   ```c
   hid_gamepad_init();
   ```

4. 在您的代码中,确保您已经正确地实现了HID报告描述符。根据您的描述,您已经添加了第三个报告描述符,但是请确保它与您的实际设备和需求相匹配。例如,如果您的设备是一个游戏手柄,您需要使用TUD_HID_REPORT_DESC_GAMEPAD宏定义。

5. 在您的代码中,确保您已经正确地实现了数据传输函数。例如,如果您使用的是TUD_HID_REPORT_DESC_GENERIC_INOUT宏定义,您需要实现以下函数:
   ```c
   bool tud_hid_n_report_complete(uint8_t itf, uint8_t report_id, uint8_t const *buffer, uint16_t bufsize);
   ```
   在这个函数中,您可以处理从电脑接收到的数据。

6. 在您的代码中,确保您已经正确地实现了数据发送函数。例如,如果您使用的是TUD_HID_REPORT_DESC_GENERIC_INOUT宏定义,您需要实现以下函数:
   ```c
   void tud_hid_n_incoming_report(uint8_t itf, uint8_t report_id, uint8_t const *buffer, uint16_t bufsize);
   ```
   在这个函数中,您可以处理要发送到电脑的数据。

7. 最后,确保您的电脑已经正确地安装了所需的驱动程序。在某些情况下,电脑可能需要特定的驱动程序才能与您的ESP32-S3设备进行通信。

通过以上步骤,您应该能够找到问题所在并解决无法实现通信的问题。如果问题仍然存在,请检查您的硬件连接和电源供应,以确保设备正常工作。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分