[PATCH 2/2] winealsa.drv: Set device path for all devices.
Arkadiusz Hiler
wine at gitlab.winehq.org
Mon Jun 27 09:16:55 CDT 2022
From: Arkadiusz Hiler <ahiler at codeweavers.com>
Signed-off-by: Arkadiusz Hiler <ahiler at codeweavers.com>
---
dlls/winealsa.drv/alsa.c | 77 +++++++++++++++++++---------------------
1 file changed, 36 insertions(+), 41 deletions(-)
diff --git a/dlls/winealsa.drv/alsa.c b/dlls/winealsa.drv/alsa.c
index b91606603a2..d8daca7dff7 100644
--- a/dlls/winealsa.drv/alsa.c
+++ b/dlls/winealsa.drv/alsa.c
@@ -2318,21 +2318,21 @@ static NTSTATUS get_prop_value(void *args)
if(IsEqualPropertyKey(*prop, devicepath_key))
{
+ enum AudioDeviceConnectionType connection = AudioDeviceConnectionType_Unknown;
+ USHORT vendor_id = 0, product_id = 0;
char uevent[MAX_PATH];
- FILE *fuevent;
+ FILE *fuevent = NULL;
int card, device;
+ UINT serial_number;
+ char buf[128];
+ int len;
- /* only implemented for identifiable devices, i.e. not "default" */
- if(!sscanf(name, "plughw:%u,%u", &card, &device)){
- params->result = E_NOTIMPL;
- return STATUS_SUCCESS;
+ if(sscanf(name, "plughw:%u,%u", &card, &device)){
+ sprintf(uevent, "/sys/class/sound/card%u/device/uevent", card);
+ fuevent = fopen(uevent, "r");
}
- sprintf(uevent, "/sys/class/sound/card%u/device/uevent", card);
- fuevent = fopen(uevent, "r");
if(fuevent){
- enum AudioDeviceConnectionType connection = AudioDeviceConnectionType_Unknown;
- USHORT vendor_id = 0, product_id = 0;
char line[256];
while (fgets(line, sizeof(line), fuevent)) {
@@ -2365,41 +2365,36 @@ static NTSTATUS get_prop_value(void *args)
}
fclose(fuevent);
+ }
- if(connection == AudioDeviceConnectionType_USB || connection == AudioDeviceConnectionType_PCI){
- UINT serial_number;
- char buf[128];
- int len;
-
- /* As hardly any audio devices have serial numbers, Windows instead
- appears to use a persistent random number. We emulate this here
- by instead using the last 8 hex digits of the GUID. */
- serial_number = (guid->Data4[4] << 24) | (guid->Data4[5] << 16) | (guid->Data4[6] << 8) | guid->Data4[7];
-
- if(connection == AudioDeviceConnectionType_USB)
- sprintf(buf, "{1}.USB\\VID_%04X&PID_%04X\\%u&%08X",
- vendor_id, product_id, device, serial_number);
- else /* AudioDeviceConnectionType_PCI */
- sprintf(buf, "{1}.HDAUDIO\\FUNC_01&VEN_%04X&DEV_%04X\\%u&%08X",
- vendor_id, product_id, device, serial_number);
-
- len = strlen(buf) + 1;
- if(*params->buffer_size < len * sizeof(WCHAR)){
- params->result = E_NOT_SUFFICIENT_BUFFER;
- *params->buffer_size = len * sizeof(WCHAR);
- return STATUS_SUCCESS;
- }
- out->vt = VT_LPWSTR;
- out->pwszVal = params->buffer;
- ntdll_umbstowcs(buf, len, out->pwszVal, len);
- params->result = S_OK;
- return STATUS_SUCCESS;
- }
- }else{
- WARN("Could not open %s for reading\n", uevent);
- params->result = E_NOTIMPL;
+ /* As hardly any audio devices have serial numbers, Windows instead
+ appears to use a persistent random number. We emulate this here
+ by instead using the last 8 hex digits of the GUID. */
+ serial_number = (guid->Data4[4] << 24) | (guid->Data4[5] << 16) | (guid->Data4[6] << 8) | guid->Data4[7];
+
+ if(connection == AudioDeviceConnectionType_USB)
+ sprintf(buf, "{1}.USB\\VID_%04X&PID_%04X\\%u&%08X",
+ vendor_id, product_id, device, serial_number);
+ else if (connection == AudioDeviceConnectionType_PCI)
+ sprintf(buf, "{1}.HDAUDIO\\FUNC_01&VEN_%04X&DEV_%04X\\%u&%08X",
+ vendor_id, product_id, device, serial_number);
+ else
+ {
+ ERR("name: %s\n", name);
+ sprintf(buf, "{1}.ROOT\\MEDIA\\%04u", serial_number & 0x1FF);
+ }
+
+ len = strlen(buf) + 1;
+ if(*params->buffer_size < len * sizeof(WCHAR)){
+ params->result = E_NOT_SUFFICIENT_BUFFER;
+ *params->buffer_size = len * sizeof(WCHAR);
return STATUS_SUCCESS;
}
+ out->vt = VT_LPWSTR;
+ out->pwszVal = params->buffer;
+ ntdll_umbstowcs(buf, len, out->pwszVal, len);
+ params->result = S_OK;
+ return STATUS_SUCCESS;
} else if (flow != eCapture && IsEqualPropertyKey(*prop, PKEY_AudioEndpoint_PhysicalSpeakers)) {
unsigned int num_speakers, card, device;
char hwname[255];
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/325
More information about the wine-devel
mailing list