如何更改使用同一 USBComposite 实例的每两个操纵杆的名称?

问题描述 投票:0回答:1

我是 HID 设备和创建 USB 外围设备的新手。作为一个研究项目,我创建了一个在单个设备上使用两个操纵杆的项目。

#include <Arduino.h>
#include <USBComposite.h>

const uint8_t reportDescription[] = {
   HID_MOUSE_REPORT_DESCRIPTOR(),
   HID_KEYBOARD_REPORT_DESCRIPTOR(),
   HID_JOYSTICK_REPORT_DESCRIPTOR(),
   HID_JOYSTICK_REPORT_DESCRIPTOR(HID_JOYSTICK_REPORT_ID+1),
};

USBCompositeSerial CompositeSerial;
USBHID HID;
HIDJoystick Joystick(HID);
HIDJoystick Joystick2(HID, HID_JOYSTICK_REPORT_ID+1);

void setup(){
  // Setup device
  HID.begin(CompositeSerial, reportDescription, sizeof(reportDescription));
  while (!USBComposite);
  Joystick.setManualReportMode(true);
  Joystick2.setManualReportMode(true);
}

void loop(){  
  Joystick.send();
  Joystick2.send();
}

此代码片段使用:https://github.com/arpruss/USBComposite_stm32f1(库)

https://github.com/arpruss/USBComposite_stm32f1/blob/master/examples/twojoysticks/twojoysticks.ino

问题是,当我尝试校准它们时,两个操纵杆具有相同的名称。因此,我想在其中使用此设备的许多程序每次运行都会丢失其设置。

不幸的是,操纵 USBComposite 实例的解决方案是更改其 VendorID 和 ProductString 或在 regEdit 中手动更改其名称,如下所示:

重命名 HID - USB GamePad

https://www.stm32duino.com/viewtopic.php?t=624

对我不起作用,因为它再次更改名称,以便两个操纵杆具有相同的名称。

c++ usb stm32 hid
1个回答
0
投票

OEMName
下的
HKEY_CURRENT_USER\System\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM\VID_XXXX&PID_XXXX\
用于缓存操纵杆名称以供DirectInput使用。

joy.cpl
是一个 DirectInput 面板。

根据泄露的Windows XP源代码中的

dihid.c
代码(在
DIPROP_PRODUCTNAME
方法中查找
CHid_GetProperty
),DirectInput正在尝试从几个不同的地方获取操纵杆设备名称。其中之一是 HidD_GetProductString 调用。

所以看来你只需要为你的操纵杆设备接口设置

USB_INTERFACE_DESCRIPTOR.iInterface

© www.soinside.com 2019 - 2024. All rights reserved.