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 (johannes.anderwald@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;
96 WideCharToMultiByte(CP_ACP
, 0, ProductName
, -1, DriverNameA
, sizeof(DriverNameA
) / sizeof(char), NULL
, NULL
);
97 DriverNameA
[(sizeof(DriverNameA
) / sizeof(char))-1] = 0;
100 return lpDSEnumCallbackA(DeviceGuid
, (LPSTR
)Buffer
, DriverNameA
, lpContext
);
107 LPDSENUMCALLBACKA lpDSEnumCallbackA
,
108 LPDSENUMCALLBACKW lpDSEnumCallbackW
,
114 LPFILTERINFO CurInfo
;
115 WAVEOUTCAPSW WaveOutCaps
;
116 WAVEINCAPSW WaveInCaps
;
120 EnumAudioDeviceInterfaces(&RootInfo
);
123 if (lpDSEnumCallbackA
== NULL
&& lpDSEnumCallbackW
== NULL
)
125 DPRINT("No callback\n");
126 return DSERR_INVALIDPARAM
;
131 /* use resource id of playback string */
132 ResourceId
= IDS_PRIMARY_PLAYBACK_DEVICE
;
136 /* use resource id of playback string */
137 ResourceId
= IDS_PRIMARY_RECORD_DEVICE
;
142 /* perform first callback */
143 bResult
= DoDSoundCallback(lpDSEnumCallbackA
, lpDSEnumCallbackW
, NULL
, ResourceId
, NULL
, L
"", lpContext
);
146 /* callback asked as to stop */
150 /* now iterate through all devices */
155 if (bPlayback
&& !IsEqualGUID(&CurInfo
->DeviceGuid
[1], &GUID_NULL
))
157 RtlZeroMemory(&WaveOutCaps
, sizeof(WAVEOUTCAPSW
));
160 ASSERT(CurInfo
->MappedId
[1] != ULONG_MAX
);
162 /* get wave out caps */
163 waveOutGetDevCapsW((UINT_PTR
)CurInfo
->MappedId
[1], &WaveOutCaps
, sizeof(WAVEOUTCAPSW
));
164 WaveOutCaps
.szPname
[MAXPNAMELEN
-1] = L
'\0';
166 bResult
= DoDSoundCallback(lpDSEnumCallbackA
, lpDSEnumCallbackW
, &CurInfo
->DeviceGuid
[1], 0, WaveOutCaps
.szPname
, L
"" /* FIXME */, lpContext
);
169 /* callback asked as to stop */
173 else if (!bPlayback
&& !IsEqualGUID(&CurInfo
->DeviceGuid
[0], &GUID_NULL
))
175 RtlZeroMemory(&WaveInCaps
, sizeof(WAVEINCAPSW
));
178 ASSERT(CurInfo
->MappedId
[1] != ULONG_MAX
);
180 /* get wave in caps */
181 waveInGetDevCapsW((UINT_PTR
)CurInfo
->MappedId
[0], &WaveInCaps
, sizeof(WAVEINCAPSW
));
182 WaveInCaps
.szPname
[MAXPNAMELEN
-1] = L
'\0';
184 bResult
= DoDSoundCallback(lpDSEnumCallbackA
, lpDSEnumCallbackW
, &CurInfo
->DeviceGuid
[0], 0, WaveInCaps
.szPname
, L
"" /* FIXME */, lpContext
);
187 /* callback asked as to stop */
192 /* move to next entry */
193 CurInfo
= CurInfo
->lpNext
;
201 DirectSoundEnumerateA(
202 LPDSENUMCALLBACKA lpDSEnumCallback
,
205 return DSoundEnumerate(lpDSEnumCallback
, NULL
, lpContext
, TRUE
);
210 DirectSoundEnumerateW(
211 LPDSENUMCALLBACKW lpDSEnumCallback
,
214 return DSoundEnumerate(NULL
, lpDSEnumCallback
, lpContext
, TRUE
);
219 DirectSoundCaptureEnumerateA(
220 LPDSENUMCALLBACKA lpDSEnumCallback
,
223 return DSoundEnumerate(lpDSEnumCallback
, NULL
, lpContext
, FALSE
);
228 DirectSoundCaptureEnumerateW(
229 LPDSENUMCALLBACKW lpDSEnumCallback
,
232 return DSoundEnumerate(NULL
, lpDSEnumCallback
, lpContext
, FALSE
);