Incorporate product / instance directinput device ids

This change generates a more unique device id for derect input devices
by incorporating the product unique identifier and instance unique
identifier. This allows for better disambiguation on device id when
mapping controllers via mapdevice config settings.
This commit is contained in:
Tomer Verona 2016-10-09 21:42:29 -07:00
parent 845b36dae2
commit 28dfa7ce84

View File

@ -81,8 +81,8 @@ public:
// convert instance name to utf8 // convert instance name to utf8
std::string utf8_instance_name = utf8_from_tstring(instance->tszInstanceName); std::string utf8_instance_name = utf8_from_tstring(instance->tszInstanceName);
// set device id to name // set device id to name + product unique identifier + instance unique identifier
std::string utf8_instance_id = utf8_instance_name; std::string utf8_instance_id = utf8_instance_name + " product_" + guid_to_string(instance->guidProduct) + " instance_" + guid_to_string(instance->guidInstance);
// allocate memory for the device object // allocate memory for the device object
TDevice* devinfo = module.devicelist()->create_device<TDevice>(machine, utf8_instance_name.c_str(), utf8_instance_id.c_str(), module); TDevice* devinfo = module.devicelist()->create_device<TDevice>(machine, utf8_instance_name.c_str(), utf8_instance_id.c_str(), module);
@ -133,6 +133,19 @@ public:
} }
HRESULT enum_attached_devices(int devclass, device_enum_interface *enumerate_interface, void *state) const; HRESULT enum_attached_devices(int devclass, device_enum_interface *enumerate_interface, void *state) const;
const std::string guid_to_string(const GUID& guid)
{
char guid_string[37];
sprintf_s(
guid_string, ARRAY_LENGTH(guid_string),
"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
guid.Data1, guid.Data2, guid.Data3,
guid.Data4[0], guid.Data4[1], guid.Data4[2],
guid.Data4[3], guid.Data4[4], guid.Data4[5],
guid.Data4[6], guid.Data4[7]);
return guid_string;
}
}; };
class dinput_device : public device_info class dinput_device : public device_info