PortAudio  2.0
endpointvolume.h
Go to the documentation of this file.
1 
2 
3 /* this ALWAYS GENERATED file contains the definitions for the interfaces */
4 
5 
6  /* File created by MIDL compiler version 7.00.0499 */
7 /* Compiler settings for endpointvolume.idl:
8  Oicf, W1, Zp8, env=Win32 (32b run)
9  protocol : dce , ms_ext, c_ext, robust
10  error checks: allocation ref bounds_check enum stub_data
11  VC __declspec() decoration level:
12  __declspec(uuid()), __declspec(selectany), __declspec(novtable)
13  DECLSPEC_UUID(), MIDL_INTERFACE()
14 */
15 //@@MIDL_FILE_HEADING( )
16 
17 #pragma warning( disable: 4049 ) /* more than 64k source lines */
18 
19 
20 /* verify that the <rpcndr.h> version is high enough to compile this file*/
21 #ifndef __REQUIRED_RPCNDR_H_VERSION__
22 #define __REQUIRED_RPCNDR_H_VERSION__ 500
23 #endif
24 
25 /* verify that the <rpcsal.h> version is high enough to compile this file*/
26 #ifndef __REQUIRED_RPCSAL_H_VERSION__
27 #define __REQUIRED_RPCSAL_H_VERSION__ 100
28 #endif
29 
30 #include "rpc.h"
31 #include "rpcndr.h"
32 
33 #ifndef __RPCNDR_H_VERSION__
34 #error this stub requires an updated version of <rpcndr.h>
35 #endif // __RPCNDR_H_VERSION__
36 
37 #ifndef COM_NO_WINDOWS_H
38 #include "windows.h"
39 #include "ole2.h"
40 #endif /*COM_NO_WINDOWS_H*/
41 
42 #ifndef __endpointvolume_h__
43 #define __endpointvolume_h__
44 
45 #if defined(_MSC_VER) && (_MSC_VER >= 1020)
46 #pragma once
47 #endif
48 
49 /* Forward Declarations */
50 
51 #ifndef __IAudioEndpointVolumeCallback_FWD_DEFINED__
52 #define __IAudioEndpointVolumeCallback_FWD_DEFINED__
54 #endif /* __IAudioEndpointVolumeCallback_FWD_DEFINED__ */
55 
56 
57 #ifndef __IAudioEndpointVolume_FWD_DEFINED__
58 #define __IAudioEndpointVolume_FWD_DEFINED__
60 #endif /* __IAudioEndpointVolume_FWD_DEFINED__ */
61 
62 
63 #ifndef __IAudioMeterInformation_FWD_DEFINED__
64 #define __IAudioMeterInformation_FWD_DEFINED__
66 #endif /* __IAudioMeterInformation_FWD_DEFINED__ */
67 
68 
69 /* header files for imported files */
70 #include "unknwn.h"
71 #include "devicetopology.h"
72 
73 #ifdef __cplusplus
74 extern "C"{
75 #endif
76 
77 
78 /* interface __MIDL_itf_endpointvolume_0000_0000 */
79 /* [local] */
80 
82  {
86  UINT nChannels;
87  float afChannelVolumes[ 1 ];
89 
91 
92 #define ENDPOINT_HARDWARE_SUPPORT_VOLUME 0x00000001
93 #define ENDPOINT_HARDWARE_SUPPORT_MUTE 0x00000002
94 #define ENDPOINT_HARDWARE_SUPPORT_METER 0x00000004
95 
96 
99 
100 #ifndef __IAudioEndpointVolumeCallback_INTERFACE_DEFINED__
101 #define __IAudioEndpointVolumeCallback_INTERFACE_DEFINED__
102 
103 /* interface IAudioEndpointVolumeCallback */
104 /* [unique][helpstring][nonextensible][uuid][local][object] */
105 
106 
108 
109 #if defined(__cplusplus) && !defined(CINTERFACE)
110 
111  MIDL_INTERFACE("657804FA-D6AD-4496-8A60-352752AF4F89")
112  IAudioEndpointVolumeCallback : public IUnknown
113  {
114  public:
115  virtual HRESULT STDMETHODCALLTYPE OnNotify(
116  PAUDIO_VOLUME_NOTIFICATION_DATA pNotify) = 0;
117 
118  };
119 
120 #else /* C style interface */
121 
123  {
124  BEGIN_INTERFACE
125 
126  HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
128  /* [in] */ REFIID riid,
129  /* [iid_is][out] */
130  __RPC__deref_out void **ppvObject);
131 
132  ULONG ( STDMETHODCALLTYPE *AddRef )(
134 
135  ULONG ( STDMETHODCALLTYPE *Release )(
137 
138  HRESULT ( STDMETHODCALLTYPE *OnNotify )(
140  PAUDIO_VOLUME_NOTIFICATION_DATA pNotify);
141 
142  END_INTERFACE
144 
146  {
147  CONST_VTBL struct IAudioEndpointVolumeCallbackVtbl *lpVtbl;
148  };
149 
150 
151 
152 #ifdef COBJMACROS
153 
154 
155 #define IAudioEndpointVolumeCallback_QueryInterface(This,riid,ppvObject) \
156  ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
157 
158 #define IAudioEndpointVolumeCallback_AddRef(This) \
159  ( (This)->lpVtbl -> AddRef(This) )
160 
161 #define IAudioEndpointVolumeCallback_Release(This) \
162  ( (This)->lpVtbl -> Release(This) )
163 
164 
165 #define IAudioEndpointVolumeCallback_OnNotify(This,pNotify) \
166  ( (This)->lpVtbl -> OnNotify(This,pNotify) )
167 
168 #endif /* COBJMACROS */
169 
170 
171 #endif /* C style interface */
172 
173 
174 
175 
176 #endif /* __IAudioEndpointVolumeCallback_INTERFACE_DEFINED__ */
177 
178 
179 #ifndef __IAudioEndpointVolume_INTERFACE_DEFINED__
180 #define __IAudioEndpointVolume_INTERFACE_DEFINED__
181 
182 /* interface IAudioEndpointVolume */
183 /* [unique][helpstring][nonextensible][uuid][local][object] */
184 
185 
186 EXTERN_C const IID IID_IAudioEndpointVolume;
187 
188 #if defined(__cplusplus) && !defined(CINTERFACE)
189 
190  MIDL_INTERFACE("5CDF2C82-841E-4546-9722-0CF74078229A")
191  IAudioEndpointVolume : public IUnknown
192  {
193  public:
194  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE RegisterControlChangeNotify(
195  /* [in] */
197 
198  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE UnregisterControlChangeNotify(
199  /* [in] */
200  __in IAudioEndpointVolumeCallback *pNotify) = 0;
201 
202  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetChannelCount(
203  /* [out] */
204  __out UINT *pnChannelCount) = 0;
205 
206  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetMasterVolumeLevel(
207  /* [in] */
208  __in float fLevelDB,
209  /* [unique][in] */ LPCGUID pguidEventContext) = 0;
210 
211  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetMasterVolumeLevelScalar(
212  /* [in] */
213  __in float fLevel,
214  /* [unique][in] */ LPCGUID pguidEventContext) = 0;
215 
216  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetMasterVolumeLevel(
217  /* [out] */
218  __out float *pfLevelDB) = 0;
219 
220  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetMasterVolumeLevelScalar(
221  /* [out] */
222  __out float *pfLevel) = 0;
223 
224  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetChannelVolumeLevel(
225  /* [in] */
226  __in UINT nChannel,
227  float fLevelDB,
228  /* [unique][in] */ LPCGUID pguidEventContext) = 0;
229 
230  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetChannelVolumeLevelScalar(
231  /* [in] */
232  __in UINT nChannel,
233  float fLevel,
234  /* [unique][in] */ LPCGUID pguidEventContext) = 0;
235 
236  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetChannelVolumeLevel(
237  /* [in] */
238  __in UINT nChannel,
239  /* [out] */
240  __out float *pfLevelDB) = 0;
241 
242  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetChannelVolumeLevelScalar(
243  /* [in] */
244  __in UINT nChannel,
245  /* [out] */
246  __out float *pfLevel) = 0;
247 
248  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetMute(
249  /* [in] */
250  __in BOOL bMute,
251  /* [unique][in] */ LPCGUID pguidEventContext) = 0;
252 
253  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetMute(
254  /* [out] */
255  __out BOOL *pbMute) = 0;
256 
257  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetVolumeStepInfo(
258  /* [out] */
259  __out UINT *pnStep,
260  /* [out] */
261  __out UINT *pnStepCount) = 0;
262 
263  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE VolumeStepUp(
264  /* [unique][in] */ LPCGUID pguidEventContext) = 0;
265 
266  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE VolumeStepDown(
267  /* [unique][in] */ LPCGUID pguidEventContext) = 0;
268 
269  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE QueryHardwareSupport(
270  /* [out] */
271  __out DWORD *pdwHardwareSupportMask) = 0;
272 
273  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetVolumeRange(
274  /* [out] */
275  __out float *pflVolumeMindB,
276  /* [out] */
277  __out float *pflVolumeMaxdB,
278  /* [out] */
279  __out float *pflVolumeIncrementdB) = 0;
280 
281  };
282 
283 #else /* C style interface */
284 
286  {
287  BEGIN_INTERFACE
288 
289  HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
290  IAudioEndpointVolume * This,
291  /* [in] */ REFIID riid,
292  /* [iid_is][out] */
293  __RPC__deref_out void **ppvObject);
294 
295  ULONG ( STDMETHODCALLTYPE *AddRef )(
296  IAudioEndpointVolume * This);
297 
298  ULONG ( STDMETHODCALLTYPE *Release )(
299  IAudioEndpointVolume * This);
300 
301  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *RegisterControlChangeNotify )(
302  IAudioEndpointVolume * This,
303  /* [in] */
305 
306  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *UnregisterControlChangeNotify )(
307  IAudioEndpointVolume * This,
308  /* [in] */
310 
311  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )(
312  IAudioEndpointVolume * This,
313  /* [out] */
315 
316  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetMasterVolumeLevel )(
317  IAudioEndpointVolume * This,
318  /* [in] */
319  __in float fLevelDB,
320  /* [unique][in] */ LPCGUID pguidEventContext);
321 
322  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetMasterVolumeLevelScalar )(
323  IAudioEndpointVolume * This,
324  /* [in] */
325  __in float fLevel,
326  /* [unique][in] */ LPCGUID pguidEventContext);
327 
328  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetMasterVolumeLevel )(
329  IAudioEndpointVolume * This,
330  /* [out] */
331  __out float *pfLevelDB);
332 
333  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetMasterVolumeLevelScalar )(
334  IAudioEndpointVolume * This,
335  /* [out] */
336  __out float *pfLevel);
337 
338  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetChannelVolumeLevel )(
339  IAudioEndpointVolume * This,
340  /* [in] */
342  float fLevelDB,
343  /* [unique][in] */ LPCGUID pguidEventContext);
344 
345  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetChannelVolumeLevelScalar )(
346  IAudioEndpointVolume * This,
347  /* [in] */
349  float fLevel,
350  /* [unique][in] */ LPCGUID pguidEventContext);
351 
352  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetChannelVolumeLevel )(
353  IAudioEndpointVolume * This,
354  /* [in] */
356  /* [out] */
357  __out float *pfLevelDB);
358 
359  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetChannelVolumeLevelScalar )(
360  IAudioEndpointVolume * This,
361  /* [in] */
363  /* [out] */
364  __out float *pfLevel);
365 
366  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetMute )(
367  IAudioEndpointVolume * This,
368  /* [in] */
370  /* [unique][in] */ LPCGUID pguidEventContext);
371 
372  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetMute )(
373  IAudioEndpointVolume * This,
374  /* [out] */
376 
377  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetVolumeStepInfo )(
378  IAudioEndpointVolume * This,
379  /* [out] */
380  __out UINT *pnStep,
381  /* [out] */
382  __out UINT *pnStepCount);
383 
384  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *VolumeStepUp )(
385  IAudioEndpointVolume * This,
386  /* [unique][in] */ LPCGUID pguidEventContext);
387 
388  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *VolumeStepDown )(
389  IAudioEndpointVolume * This,
390  /* [unique][in] */ LPCGUID pguidEventContext);
391 
392  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *QueryHardwareSupport )(
393  IAudioEndpointVolume * This,
394  /* [out] */
396 
397  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetVolumeRange )(
398  IAudioEndpointVolume * This,
399  /* [out] */
401  /* [out] */
402  __out float *pflVolumeMaxdB,
403  /* [out] */
404  __out float *pflVolumeIncrementdB);
405 
406  END_INTERFACE
408 
409  interface IAudioEndpointVolume
410  {
411  CONST_VTBL struct IAudioEndpointVolumeVtbl *lpVtbl;
412  };
413 
414 
415 
416 #ifdef COBJMACROS
417 
418 
419 #define IAudioEndpointVolume_QueryInterface(This,riid,ppvObject) \
420  ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
421 
422 #define IAudioEndpointVolume_AddRef(This) \
423  ( (This)->lpVtbl -> AddRef(This) )
424 
425 #define IAudioEndpointVolume_Release(This) \
426  ( (This)->lpVtbl -> Release(This) )
427 
428 
429 #define IAudioEndpointVolume_RegisterControlChangeNotify(This,pNotify) \
430  ( (This)->lpVtbl -> RegisterControlChangeNotify(This,pNotify) )
431 
432 #define IAudioEndpointVolume_UnregisterControlChangeNotify(This,pNotify) \
433  ( (This)->lpVtbl -> UnregisterControlChangeNotify(This,pNotify) )
434 
435 #define IAudioEndpointVolume_GetChannelCount(This,pnChannelCount) \
436  ( (This)->lpVtbl -> GetChannelCount(This,pnChannelCount) )
437 
438 #define IAudioEndpointVolume_SetMasterVolumeLevel(This,fLevelDB,pguidEventContext) \
439  ( (This)->lpVtbl -> SetMasterVolumeLevel(This,fLevelDB,pguidEventContext) )
440 
441 #define IAudioEndpointVolume_SetMasterVolumeLevelScalar(This,fLevel,pguidEventContext) \
442  ( (This)->lpVtbl -> SetMasterVolumeLevelScalar(This,fLevel,pguidEventContext) )
443 
444 #define IAudioEndpointVolume_GetMasterVolumeLevel(This,pfLevelDB) \
445  ( (This)->lpVtbl -> GetMasterVolumeLevel(This,pfLevelDB) )
446 
447 #define IAudioEndpointVolume_GetMasterVolumeLevelScalar(This,pfLevel) \
448  ( (This)->lpVtbl -> GetMasterVolumeLevelScalar(This,pfLevel) )
449 
450 #define IAudioEndpointVolume_SetChannelVolumeLevel(This,nChannel,fLevelDB,pguidEventContext) \
451  ( (This)->lpVtbl -> SetChannelVolumeLevel(This,nChannel,fLevelDB,pguidEventContext) )
452 
453 #define IAudioEndpointVolume_SetChannelVolumeLevelScalar(This,nChannel,fLevel,pguidEventContext) \
454  ( (This)->lpVtbl -> SetChannelVolumeLevelScalar(This,nChannel,fLevel,pguidEventContext) )
455 
456 #define IAudioEndpointVolume_GetChannelVolumeLevel(This,nChannel,pfLevelDB) \
457  ( (This)->lpVtbl -> GetChannelVolumeLevel(This,nChannel,pfLevelDB) )
458 
459 #define IAudioEndpointVolume_GetChannelVolumeLevelScalar(This,nChannel,pfLevel) \
460  ( (This)->lpVtbl -> GetChannelVolumeLevelScalar(This,nChannel,pfLevel) )
461 
462 #define IAudioEndpointVolume_SetMute(This,bMute,pguidEventContext) \
463  ( (This)->lpVtbl -> SetMute(This,bMute,pguidEventContext) )
464 
465 #define IAudioEndpointVolume_GetMute(This,pbMute) \
466  ( (This)->lpVtbl -> GetMute(This,pbMute) )
467 
468 #define IAudioEndpointVolume_GetVolumeStepInfo(This,pnStep,pnStepCount) \
469  ( (This)->lpVtbl -> GetVolumeStepInfo(This,pnStep,pnStepCount) )
470 
471 #define IAudioEndpointVolume_VolumeStepUp(This,pguidEventContext) \
472  ( (This)->lpVtbl -> VolumeStepUp(This,pguidEventContext) )
473 
474 #define IAudioEndpointVolume_VolumeStepDown(This,pguidEventContext) \
475  ( (This)->lpVtbl -> VolumeStepDown(This,pguidEventContext) )
476 
477 #define IAudioEndpointVolume_QueryHardwareSupport(This,pdwHardwareSupportMask) \
478  ( (This)->lpVtbl -> QueryHardwareSupport(This,pdwHardwareSupportMask) )
479 
480 #define IAudioEndpointVolume_GetVolumeRange(This,pflVolumeMindB,pflVolumeMaxdB,pflVolumeIncrementdB) \
481  ( (This)->lpVtbl -> GetVolumeRange(This,pflVolumeMindB,pflVolumeMaxdB,pflVolumeIncrementdB) )
482 
483 #endif /* COBJMACROS */
484 
485 
486 #endif /* C style interface */
487 
488 
489 
490 
491 #endif /* __IAudioEndpointVolume_INTERFACE_DEFINED__ */
492 
493 
494 #ifndef __IAudioMeterInformation_INTERFACE_DEFINED__
495 #define __IAudioMeterInformation_INTERFACE_DEFINED__
496 
497 /* interface IAudioMeterInformation */
498 /* [unique][helpstring][nonextensible][uuid][local][object] */
499 
500 
501 EXTERN_C const IID IID_IAudioMeterInformation;
502 
503 #if defined(__cplusplus) && !defined(CINTERFACE)
504 
505  MIDL_INTERFACE("C02216F6-8C67-4B5B-9D00-D008E73E0064")
506  IAudioMeterInformation : public IUnknown
507  {
508  public:
509  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetPeakValue(
510  /* [out] */ float *pfPeak) = 0;
511 
512  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetMeteringChannelCount(
513  /* [out] */
514  __out UINT *pnChannelCount) = 0;
515 
516  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetChannelsPeakValues(
517  /* [in] */ UINT32 u32ChannelCount,
518  /* [size_is][out] */ float *afPeakValues) = 0;
519 
520  virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE QueryHardwareSupport(
521  /* [out] */
522  __out DWORD *pdwHardwareSupportMask) = 0;
523 
524  };
525 
526 #else /* C style interface */
527 
529  {
530  BEGIN_INTERFACE
531 
532  HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
533  IAudioMeterInformation * This,
534  /* [in] */ REFIID riid,
535  /* [iid_is][out] */
536  __RPC__deref_out void **ppvObject);
537 
538  ULONG ( STDMETHODCALLTYPE *AddRef )(
539  IAudioMeterInformation * This);
540 
541  ULONG ( STDMETHODCALLTYPE *Release )(
542  IAudioMeterInformation * This);
543 
544  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetPeakValue )(
545  IAudioMeterInformation * This,
546  /* [out] */ float *pfPeak);
547 
548  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetMeteringChannelCount )(
549  IAudioMeterInformation * This,
550  /* [out] */
552 
553  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetChannelsPeakValues )(
554  IAudioMeterInformation * This,
555  /* [in] */ UINT32 u32ChannelCount,
556  /* [size_is][out] */ float *afPeakValues);
557 
558  /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *QueryHardwareSupport )(
559  IAudioMeterInformation * This,
560  /* [out] */
562 
563  END_INTERFACE
565 
566  interface IAudioMeterInformation
567  {
568  CONST_VTBL struct IAudioMeterInformationVtbl *lpVtbl;
569  };
570 
571 
572 
573 #ifdef COBJMACROS
574 
575 
576 #define IAudioMeterInformation_QueryInterface(This,riid,ppvObject) \
577  ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
578 
579 #define IAudioMeterInformation_AddRef(This) \
580  ( (This)->lpVtbl -> AddRef(This) )
581 
582 #define IAudioMeterInformation_Release(This) \
583  ( (This)->lpVtbl -> Release(This) )
584 
585 
586 #define IAudioMeterInformation_GetPeakValue(This,pfPeak) \
587  ( (This)->lpVtbl -> GetPeakValue(This,pfPeak) )
588 
589 #define IAudioMeterInformation_GetMeteringChannelCount(This,pnChannelCount) \
590  ( (This)->lpVtbl -> GetMeteringChannelCount(This,pnChannelCount) )
591 
592 #define IAudioMeterInformation_GetChannelsPeakValues(This,u32ChannelCount,afPeakValues) \
593  ( (This)->lpVtbl -> GetChannelsPeakValues(This,u32ChannelCount,afPeakValues) )
594 
595 #define IAudioMeterInformation_QueryHardwareSupport(This,pdwHardwareSupportMask) \
596  ( (This)->lpVtbl -> QueryHardwareSupport(This,pdwHardwareSupportMask) )
597 
598 #endif /* COBJMACROS */
599 
600 
601 #endif /* C style interface */
602 
603 
604 
605 
606 #endif /* __IAudioMeterInformation_INTERFACE_DEFINED__ */
607 
608 
609 /* Additional Prototypes for ALL interfaces */
610 
611 /* end of Additional Prototypes */
612 
613 #ifdef __cplusplus
614 }
615 #endif
616 
617 #endif
618 
619 
620