2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Configuration of network devices
4 * FILE: dll/directx/dsound_new/enum.c
5 * PURPOSE: Handles DSound device enumeration
7 * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
22 /* load localized string */
23 if (!LoadStringW(dsound_hInstance
, ResourceId
, (LPWSTR
)Buffer
, ccount
))
25 /* default device name */
26 wcscpy((LPWSTR
)Buffer
, (LPWSTR
)DefaultString
);
31 /* load localized string */
32 if (!LoadStringA(dsound_hInstance
, ResourceId
, (LPSTR
)Buffer
, ccount
))
34 /* default device name */
35 strcpy((LPSTR
)Buffer
, (LPSTR
)DefaultString
);
43 LPDSENUMCALLBACKA lpDSEnumCallbackA
,
44 LPDSENUMCALLBACKW lpDSEnumCallbackW
,
51 WCHAR Buffer
[200] = {0};
52 char DriverNameA
[200];
54 static LPWSTR SoundDriverW
= L
"Primary Sound Driver";
55 static LPWSTR SoundDriverA
= L
"Primary Sound Driver";
57 if (lpDSEnumCallbackW
)
61 /* load resource string */
63 LoadResourceString(ResourceId
, (LPVOID
)Buffer
, sizeof(Buffer
)/sizeof(WCHAR
), (LPVOID
)SoundDriverW
, TRUE
);
64 Buffer
[(sizeof(Buffer
)/sizeof(WCHAR
))-1] = '\0';
68 /* use passed string */
70 wcscpy(Buffer
, ProductName
);
73 /* perform callback */
74 return lpDSEnumCallbackW(DeviceGuid
, Buffer
, DriverName
, lpContext
);
80 /* load resource string */
82 LoadResourceString(ResourceId
, (LPVOID
)Buffer
, sizeof(Buffer
)/sizeof(char), (LPVOID
)SoundDriverA
, FALSE
);
83 Buffer
[(sizeof(Buffer
)/sizeof(WCHAR
))-1] = 0;
87 /* use passed string */
89 WideCharToMultiByte(CP_ACP
, 0, ProductName
, -1, (LPSTR
)Buffer
, sizeof(Buffer
) / sizeof(char), NULL
, NULL
);
90 Buffer
[(sizeof(Buffer
)/sizeof(WCHAR
))-1] = 0;
94 WideCharToMultiByte(CP_ACP
, 0, ProductName
, -1, DriverNameA
, sizeof(DriverNameA
) / sizeof(char), NULL
, NULL
);
96 return lpDSEnumCallbackA(DeviceGuid
, (LPSTR
)Buffer
, DriverNameA
, lpContext
);
103 LPDSENUMCALLBACKA lpDSEnumCallbackA
,
104 LPDSENUMCALLBACKW lpDSEnumCallbackW
,
110 LPFILTERINFO CurInfo
;
111 WAVEOUTCAPSW WaveOutCaps
;
112 WAVEINCAPSW WaveInCaps
;
116 EnumAudioDeviceInterfaces(&RootInfo
);
119 if (lpDSEnumCallbackA
== NULL
&& lpDSEnumCallbackW
== NULL
)
121 DPRINT("No callback\n");
122 return DSERR_INVALIDPARAM
;
127 /* use resource id of playback string */
128 ResourceId
= IDS_PRIMARY_PLAYBACK_DEVICE
;
132 /* use resource id of playback string */
133 ResourceId
= IDS_PRIMARY_RECORD_DEVICE
;
138 /* perform first callback */
139 bResult
= DoDSoundCallback(lpDSEnumCallbackA
, lpDSEnumCallbackW
, NULL
, ResourceId
, NULL
, L
"", lpContext
);
142 /* callback asked as to stop */
146 /* now iterate through all devices */
151 if (bPlayback
&& !IsEqualGUID(&CurInfo
->DeviceGuid
[1], &GUID_NULL
))
153 RtlZeroMemory(&WaveOutCaps
, sizeof(WAVEOUTCAPSW
));
156 ASSERT(CurInfo
->MappedId
[1] != ULONG_MAX
);
158 /* get wave out caps */
159 waveOutGetDevCapsW((UINT_PTR
)CurInfo
->MappedId
[1], &WaveOutCaps
, sizeof(WAVEOUTCAPSW
));
160 WaveOutCaps
.szPname
[MAXPNAMELEN
-1] = L
'\0';
162 bResult
= DoDSoundCallback(lpDSEnumCallbackA
, lpDSEnumCallbackW
, &CurInfo
->DeviceGuid
[1], 0, WaveOutCaps
.szPname
, L
"" /* FIXME */, lpContext
);
165 /* callback asked as to stop */
169 else if (!bPlayback
&& !IsEqualGUID(&CurInfo
->DeviceGuid
[0], &GUID_NULL
))
171 RtlZeroMemory(&WaveInCaps
, sizeof(WAVEINCAPSW
));
174 ASSERT(CurInfo
->MappedId
[1] != ULONG_MAX
);
176 /* get wave in caps */
177 waveInGetDevCapsW((UINT_PTR
)CurInfo
->MappedId
[0], &WaveInCaps
, sizeof(WAVEINCAPSW
));
178 WaveInCaps
.szPname
[MAXPNAMELEN
-1] = L
'\0';
180 bResult
= DoDSoundCallback(lpDSEnumCallbackA
, lpDSEnumCallbackW
, &CurInfo
->DeviceGuid
[0], 0, WaveInCaps
.szPname
, L
"" /* FIXME */, lpContext
);
183 /* callback asked as to stop */
188 /* move to next entry */
189 CurInfo
= CurInfo
->lpNext
;
197 DirectSoundEnumerateA(
198 LPDSENUMCALLBACKA lpDSEnumCallback
,
201 return DSoundEnumerate(lpDSEnumCallback
, NULL
, lpContext
, TRUE
);
206 DirectSoundEnumerateW(
207 LPDSENUMCALLBACKW lpDSEnumCallback
,
210 return DSoundEnumerate(NULL
, lpDSEnumCallback
, lpContext
, TRUE
);
215 DirectSoundCaptureEnumerateA(
216 LPDSENUMCALLBACKA lpDSEnumCallback
,
219 return DSoundEnumerate(lpDSEnumCallback
, NULL
, lpContext
, FALSE
);
224 DirectSoundCaptureEnumerateW(
225 LPDSENUMCALLBACKW lpDSEnumCallback
,
228 return DSoundEnumerate(NULL
, lpDSEnumCallback
, lpContext
, FALSE
);