From: Mark Harmstone Subject: [PATCH 3/5] mmdevapi: add device path variables to DeviceProps struct Message-Id: <545CDE09.5000900@burntcomma.com> Date: Fri, 07 Nov 2014 14:58:17 +0000 --- dlls/mmdevapi/devenum.c | 2 ++ dlls/mmdevapi/mmdevapi.h | 8 ++++++++ dlls/winealsa.drv/mmdevdrv.c | 11 +++++++++++ dlls/winecoreaudio.drv/mmdevdrv.c | 9 +++++++++ dlls/wineoss.drv/mmdevdrv.c | 9 +++++++++ 5 files changed, 39 insertions(+) diff --git a/dlls/mmdevapi/devenum.c b/dlls/mmdevapi/devenum.c index cf2d709..4d77ec9 100644 --- a/dlls/mmdevapi/devenum.c +++ b/dlls/mmdevapi/devenum.c @@ -410,6 +410,8 @@ static HRESULT load_devices_from_reg(void) props.id = HeapAlloc(GetProcessHeap(), 0, size_bytes); memcpy(props.id, pv.u.pwszVal, size_bytes); props.form_factor = (curflow == eRender) ? Speakers : Microphone; + props.connection_type = AudioDeviceConnectionType_Unknown; // use current registry values + MMDevice_Create(&props, &guid, curflow, DEVICE_STATE_NOTPRESENT, FALSE); CoTaskMemFree(pv.u.pwszVal); diff --git a/dlls/mmdevapi/mmdevapi.h b/dlls/mmdevapi/mmdevapi.h index ec29902..1677f10 100644 --- a/dlls/mmdevapi/mmdevapi.h +++ b/dlls/mmdevapi/mmdevapi.h @@ -32,9 +32,17 @@ enum _DriverPriority { Priority_Preferred /* driver thinks it's correct */ }; +enum _AudioDeviceConnectionType { + AudioDeviceConnectionType_Unknown = 0, + AudioDeviceConnectionType_PCI, + AudioDeviceConnectionType_USB +}; + typedef struct { WCHAR *id; EndpointFormFactor form_factor; + enum _AudioDeviceConnectionType connection_type; + USHORT vendor_id, product_id; } DeviceProps; typedef struct _DriverFuncs { diff --git a/dlls/winealsa.drv/mmdevdrv.c b/dlls/winealsa.drv/mmdevdrv.c index e40d401..19dac54 100644 --- a/dlls/winealsa.drv/mmdevdrv.c +++ b/dlls/winealsa.drv/mmdevdrv.c @@ -254,9 +254,17 @@ enum DriverPriority { Priority_Preferred }; +enum _AudioDeviceConnectionType { + AudioDeviceConnectionType_Unknown = 0, + AudioDeviceConnectionType_PCI, + AudioDeviceConnectionType_USB +}; + typedef struct { WCHAR *id; EndpointFormFactor form_factor; + enum _AudioDeviceConnectionType connection_type; + USHORT vendor_id, product_id; } DeviceProps; int WINAPI AUDDRV_GetPriority(void) @@ -459,6 +467,7 @@ static HRESULT alsa_get_card_devices(EDataFlow flow, snd_pcm_stream_t stream, (*props)[*num].id = construct_device_id(flow, cardnameW, devname); (*props)[*num].form_factor = (flow == eRender) ? Speakers : Microphone; + (*props)[*num].connection_type = AudioDeviceConnectionType_Unknown; get_device_guid(flow, devnode, &(*guids)[*num]); ++(*num); @@ -510,6 +519,7 @@ static void get_reg_devices(EDataFlow flow, snd_pcm_stream_t stream, DeviceProps } (*props)[*num].id = construct_device_id(flow, p, NULL); (*props)[*num].form_factor = (flow == eRender) ? Speakers : Microphone; + (*props)[*num].connection_type = AudioDeviceConnectionType_Unknown; // don't change existing registry entry get_device_guid(flow, devname, &(*guids)[*num]); ++*num; @@ -537,6 +547,7 @@ static HRESULT alsa_enum_devices(EDataFlow flow, DeviceProps **props, GUID **gui *props = HeapAlloc(GetProcessHeap(), 0, sizeof(DeviceProps)); (*props)[0].id = construct_device_id(flow, defaultW, NULL); (*props)[0].form_factor = (flow == eRender) ? Speakers : Microphone; + (*props)[0].connection_type = AudioDeviceConnectionType_Unknown; *guids = HeapAlloc(GetProcessHeap(), 0, sizeof(GUID)); get_device_guid(flow, defname, &(*guids)[0]); diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c index 4ff84cf..3d37cc0 100644 --- a/dlls/winecoreaudio.drv/mmdevdrv.c +++ b/dlls/winecoreaudio.drv/mmdevdrv.c @@ -291,9 +291,17 @@ enum DriverPriority { Priority_Preferred }; +enum _AudioDeviceConnectionType { + AudioDeviceConnectionType_Unknown = 0, + AudioDeviceConnectionType_PCI, + AudioDeviceConnectionType_USB +}; + typedef struct { WCHAR *id; EndpointFormFactor form_factor; + enum _AudioDeviceConnectionType connection_type; + USHORT vendor_id, product_id; } DeviceProps; int WINAPI AUDDRV_GetPriority(void) @@ -531,6 +539,7 @@ HRESULT WINAPI AUDDRV_GetEndpointIDs(EDataFlow flow, DeviceProps **props, CFRelease(name); (*props)[*num].form_factor = (flow == eRender) ? Speakers : Microphone; + (*props)[*num].connection_type = AudioDeviceConnectionType_Unknown; get_device_guid(flow, devices[i], &(*guids)[*num]); diff --git a/dlls/wineoss.drv/mmdevdrv.c b/dlls/wineoss.drv/mmdevdrv.c index fdd9b4b..f08f288 100644 --- a/dlls/wineoss.drv/mmdevdrv.c +++ b/dlls/wineoss.drv/mmdevdrv.c @@ -267,9 +267,17 @@ enum DriverPriority { Priority_Preferred }; +enum _AudioDeviceConnectionType { + AudioDeviceConnectionType_Unknown = 0, + AudioDeviceConnectionType_PCI, + AudioDeviceConnectionType_USB +}; + typedef struct { WCHAR *id; EndpointFormFactor form_factor; + enum _AudioDeviceConnectionType connection_type; + USHORT vendor_id, product_id; } DeviceProps; int WINAPI AUDDRV_GetPriority(void) @@ -575,6 +583,7 @@ HRESULT WINAPI AUDDRV_GetEndpointIDs(EDataFlow flow, DeviceProps **props, GUID * (*props)[*num].id + prefix_len, len - prefix_len); (*props)[*num].form_factor = (flow == eRender) ? Speakers : Microphone; + (*props)[*num].connection_type = AudioDeviceConnectionType_Unknown; list_add_tail(&g_devices, &dev_item->entry);