//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// This source code is licensed under Microsoft Shared Source License
// Version 1.0 for Windows CE.
// For a copy of the license visit http://go.microsoft.com/fwlink/?LinkId=3223.

//
// av_dcp.idl
//

// This file will be processed by the MIDL tool to
// produce the type library (av_dcp.tlb) and marshalling code.

import "oaidl.idl";


//
// Interface IUPnPService_ConnectionManager1
//
typedef [v1_enum] enum CONNECTIONMANAGER1_DISPIDS
{
	 DISPID_SOURCEPROTOCOLINFO = 1,
	 DISPID_SINKPROTOCOLINFO,
	 DISPID_CURRENTCONNECTIONIDS,
	 DISPID_A_ARG_TYPE_CONNECTIONSTATUS,
	 DISPID_A_ARG_TYPE_CONNECTIONMANAGER,
	 DISPID_A_ARG_TYPE_DIRECTION,
	 DISPID_A_ARG_TYPE_PROTOCOLINFO,
	 DISPID_A_ARG_TYPE_CONNECTIONID,
	 DISPID_A_ARG_TYPE_AVTRANSPORTID,
	 DISPID_A_ARG_TYPE_RCSID,
	 DISPID_GETPROTOCOLINFO,
	 DISPID_PREPAREFORCONNECTION,
	 DISPID_CONNECTIONCOMPLETE,
	 DISPID_GETCURRENTCONNECTIONIDS,
	 DISPID_GETCURRENTCONNECTIONINFO

} CONNECTIONMANAGER1_DISPIDS;

[
	 uuid(ff271439-4bba-4644-a206-bf9d136db66b),
	 oleautomation,
     helpstring("ConnectionManagerService Interface"),
	 pointer_default(unique)
]
interface IUPnPService_ConnectionManager1 : IDispatch {
	[propget, id(DISPID_SOURCEPROTOCOLINFO), helpstring("Property SourceProtocolInfo")]
	HRESULT SourceProtocolInfo(
		[out, retval] BSTR *pSourceProtocolInfo);

	[propget, id(DISPID_SINKPROTOCOLINFO), helpstring("Property SinkProtocolInfo")]
	HRESULT SinkProtocolInfo(
		[out, retval] BSTR *pSinkProtocolInfo);

	[propget, id(DISPID_CURRENTCONNECTIONIDS), helpstring("Property CurrentConnectionIDs")]
	HRESULT CurrentConnectionIDs(
		[out, retval] BSTR *pCurrentConnectionIDs);

	[propget, id(DISPID_A_ARG_TYPE_CONNECTIONSTATUS), helpstring("Property A_ARG_TYPE_ConnectionStatus")]
	HRESULT A_ARG_TYPE_ConnectionStatus(
		[out, retval] BSTR *pA_ARG_TYPE_ConnectionStatus);

	[propget, id(DISPID_A_ARG_TYPE_CONNECTIONMANAGER), helpstring("Property A_ARG_TYPE_ConnectionManager")]
	HRESULT A_ARG_TYPE_ConnectionManager(
		[out, retval] BSTR *pA_ARG_TYPE_ConnectionManager);

	[propget, id(DISPID_A_ARG_TYPE_DIRECTION), helpstring("Property A_ARG_TYPE_Direction")]
	HRESULT A_ARG_TYPE_Direction(
		[out, retval] BSTR *pA_ARG_TYPE_Direction);

	[propget, id(DISPID_A_ARG_TYPE_PROTOCOLINFO), helpstring("Property A_ARG_TYPE_ProtocolInfo")]
	HRESULT A_ARG_TYPE_ProtocolInfo(
		[out, retval] BSTR *pA_ARG_TYPE_ProtocolInfo);

	[propget, id(DISPID_A_ARG_TYPE_CONNECTIONID), helpstring("Property A_ARG_TYPE_ConnectionID")]
	HRESULT A_ARG_TYPE_ConnectionID(
		[out, retval] long *pA_ARG_TYPE_ConnectionID);

	[propget, id(DISPID_A_ARG_TYPE_AVTRANSPORTID), helpstring("Property A_ARG_TYPE_AVTransportID")]
	HRESULT A_ARG_TYPE_AVTransportID(
		[out, retval] long *pA_ARG_TYPE_AVTransportID);

	[propget, id(DISPID_A_ARG_TYPE_RCSID), helpstring("Property A_ARG_TYPE_RcsID")]
	HRESULT A_ARG_TYPE_RcsID(
		[out, retval] long *pA_ARG_TYPE_RcsID);


	[ id(DISPID_GETPROTOCOLINFO), helpstring("Method GetProtocolInfo")]
	HRESULT GetProtocolInfo(
		[in, out] BSTR *pSource,
		[in, out] BSTR *pSink);

	[ id(DISPID_PREPAREFORCONNECTION), helpstring("Method PrepareForConnection")]
	HRESULT PrepareForConnection(
		[in] BSTR RemoteProtocolInfo,
		[in] BSTR PeerConnectionManager,
		[in] long PeerConnectionID,
		[in] BSTR Direction,
		[in, out] long *pConnectionID,
		[in, out] long *pAVTransportID,
		[in, out] long *pRcsID);

	[ id(DISPID_CONNECTIONCOMPLETE), helpstring("Method ConnectionComplete")]
	HRESULT ConnectionComplete(
		[in] long ConnectionID);

	[ id(DISPID_GETCURRENTCONNECTIONIDS), helpstring("Method GetCurrentConnectionIDs")]
	HRESULT GetCurrentConnectionIDs(
		[in, out] BSTR *pConnectionIDs);

	[ id(DISPID_GETCURRENTCONNECTIONINFO), helpstring("Method GetCurrentConnectionInfo")]
	HRESULT GetCurrentConnectionInfo(
		[in] long ConnectionID,
		[in, out] long *pRcsID,
		[in, out] long *pAVTransportID,
		[in, out] BSTR *pProtocolInfo,
		[in, out] BSTR *pPeerConnectionManager,
		[in, out] long *pPeerConnectionID,
		[in, out] BSTR *pDirection,
		[in, out] BSTR *pStatus);
};


//
// Interface IUPnPService_AVTransport1
//
typedef [v1_enum] enum AVTRANSPORT1_DISPIDS
{
	 DISPID_TRANSPORTSTATE = 1,
	 DISPID_TRANSPORTSTATUS,
	 DISPID_PLAYBACKSTORAGEMEDIUM,
	 DISPID_RECORDSTORAGEMEDIUM,
	 DISPID_POSSIBLEPLAYBACKSTORAGEMEDIA,
	 DISPID_POSSIBLERECORDSTORAGEMEDIA,
	 DISPID_CURRENTPLAYMODE,
	 DISPID_TRANSPORTPLAYSPEED,
	 DISPID_RECORDMEDIUMWRITESTATUS ,
	 DISPID_CURRENTRECORDQUALITYMODE,
	 DISPID_POSSIBLERECORDQUALITYMODES,
	 DISPID_NUMBEROFTRACKS,
	 DISPID_CURRENTTRACK,
	 DISPID_CURRENTTRACKDURATION,
	 DISPID_CURRENTMEDIADURATION,
	 DISPID_CURRENTTRACKMETADATA,
	 DISPID_CURRENTTRACKURI,
	 DISPID_AVTRANSPORTURI,
	 DISPID_AVTRANSPORTURIMETADATA,
	 DISPID_NEXTAVTRANSPORTURI,
	 DISPID_NEXTAVTRANSPORTURIMETADATA,
	 DISPID_RELATIVETIMEPOSITION,
	 DISPID_ABSOLUTETIMEPOSITION,
	 DISPID_RELATIVECOUNTERPOSITION,
	 DISPID_ABSOLUTECOUNTERPOSITION,
	 DISPID_CURRENTTRANSPORTACTIONS,
	 DISPID_LASTCHANGE_AVT, /* also defined during RenderingControl enum, appened _AVT to differentiate */
	 DISPID_A_ARG_TYPE_SEEKMODE,
	 DISPID_A_ARG_TYPE_SEEKTARGET,
	 DISPID_A_ARG_TYPE_INSTANCEID_AVT, /* also defined during RenderingControl enum, appened _AVT to differentiate */
	 DISPID_SETAVTRANSPORTURI,
	 DISPID_SETNEXTAVTRANSPORTURI,
	 DISPID_GETMEDIAINFO,
	 DISPID_GETTRANSPORTINFO,
	 DISPID_GETPOSITIONINFO,
	 DISPID_GETDEVICECAPABILITIES,
	 DISPID_GETTRANSPORTSETTINGS,
	 DISPID_STOP,
	 DISPID_PLAY,
	 DISPID_PAUSE,
	 DISPID_RECORD,
	 DISPID_SEEK,
	 DISPID_NEXT,
	 DISPID_PREVIOUS,
	 DISPID_SETPLAYMODE,
	 DISPID_SETRECORDQUALITYMODE,
	 DISPID_GETCURRENTTRANSPORTACTIONS

} AVTRANSPORT1_DISPIDS;

[
	 uuid(44ba72e2-6f72-477e-b3bf-297a677c84fa),
	 oleautomation,
     helpstring("AVTransportService Interface"),
	 pointer_default(unique)
]
interface IUPnPService_AVTransport1 : IDispatch {
	[propget, id(DISPID_TRANSPORTSTATE), helpstring("Property TransportState")]
	HRESULT TransportState(
		[out, retval] BSTR *pTransportState);

	[propget, id(DISPID_TRANSPORTSTATUS), helpstring("Property TransportStatus")]
	HRESULT TransportStatus(
		[out, retval] BSTR *pTransportStatus);

	[propget, id(DISPID_PLAYBACKSTORAGEMEDIUM), helpstring("Property PlaybackStorageMedium")]
	HRESULT PlaybackStorageMedium(
		[out, retval] BSTR *pPlaybackStorageMedium);

	[propget, id(DISPID_RECORDSTORAGEMEDIUM), helpstring("Property RecordStorageMedium")]
	HRESULT RecordStorageMedium(
		[out, retval] BSTR *pRecordStorageMedium);

	[propget, id(DISPID_POSSIBLEPLAYBACKSTORAGEMEDIA), helpstring("Property PossiblePlaybackStorageMedia")]
	HRESULT PossiblePlaybackStorageMedia(
		[out, retval] BSTR *pPossiblePlaybackStorageMedia);

	[propget, id(DISPID_POSSIBLERECORDSTORAGEMEDIA), helpstring("Property PossibleRecordStorageMedia")]
	HRESULT PossibleRecordStorageMedia(
		[out, retval] BSTR *pPossibleRecordStorageMedia);

	[propget, id(DISPID_CURRENTPLAYMODE), helpstring("Property CurrentPlayMode")]
	HRESULT CurrentPlayMode(
		[out, retval] BSTR *pCurrentPlayMode);

	[propget, id(DISPID_TRANSPORTPLAYSPEED), helpstring("Property TransportPlaySpeed")]
	HRESULT TransportPlaySpeed(
		[out, retval] BSTR *pTransportPlaySpeed);

	[propget, id(DISPID_RECORDMEDIUMWRITESTATUS ), helpstring("Property RecordMediumWriteStatus ")]
	HRESULT RecordMediumWriteStatus (
		[out, retval] BSTR *pRecordMediumWriteStatus );

	[propget, id(DISPID_CURRENTRECORDQUALITYMODE), helpstring("Property CurrentRecordQualityMode")]
	HRESULT CurrentRecordQualityMode(
		[out, retval] BSTR *pCurrentRecordQualityMode);

	[propget, id(DISPID_POSSIBLERECORDQUALITYMODES), helpstring("Property PossibleRecordQualityModes")]
	HRESULT PossibleRecordQualityModes(
		[out, retval] BSTR *pPossibleRecordQualityModes);

	[propget, id(DISPID_NUMBEROFTRACKS), helpstring("Property NumberOfTracks")]
	HRESULT NumberOfTracks(
		[out, retval] unsigned long *pNumberOfTracks);

	[propget, id(DISPID_CURRENTTRACK), helpstring("Property CurrentTrack")]
	HRESULT CurrentTrack(
		[out, retval] unsigned long *pCurrentTrack);

	[propget, id(DISPID_CURRENTTRACKDURATION), helpstring("Property CurrentTrackDuration")]
	HRESULT CurrentTrackDuration(
		[out, retval] BSTR *pCurrentTrackDuration);

	[propget, id(DISPID_CURRENTMEDIADURATION), helpstring("Property CurrentMediaDuration")]
	HRESULT CurrentMediaDuration(
		[out, retval] BSTR *pCurrentMediaDuration);

	[propget, id(DISPID_CURRENTTRACKMETADATA), helpstring("Property CurrentTrackMetaData")]
	HRESULT CurrentTrackMetaData(
		[out, retval] BSTR *pCurrentTrackMetaData);

	[propget, id(DISPID_CURRENTTRACKURI), helpstring("Property CurrentTrackURI")]
	HRESULT CurrentTrackURI(
		[out, retval] BSTR *pCurrentTrackURI);

	[propget, id(DISPID_AVTRANSPORTURI), helpstring("Property AVTransportURI")]
	HRESULT AVTransportURI(
		[out, retval] BSTR *pAVTransportURI);

	[propget, id(DISPID_AVTRANSPORTURIMETADATA), helpstring("Property AVTransportURIMetaData")]
	HRESULT AVTransportURIMetaData(
		[out, retval] BSTR *pAVTransportURIMetaData);

	[propget, id(DISPID_NEXTAVTRANSPORTURI), helpstring("Property NextAVTransportURI")]
	HRESULT NextAVTransportURI(
		[out, retval] BSTR *pNextAVTransportURI);

	[propget, id(DISPID_NEXTAVTRANSPORTURIMETADATA), helpstring("Property NextAVTransportURIMetaData")]
	HRESULT NextAVTransportURIMetaData(
		[out, retval] BSTR *pNextAVTransportURIMetaData);

	[propget, id(DISPID_RELATIVETIMEPOSITION), helpstring("Property RelativeTimePosition")]
	HRESULT RelativeTimePosition(
		[out, retval] BSTR *pRelativeTimePosition);

	[propget, id(DISPID_ABSOLUTETIMEPOSITION), helpstring("Property AbsoluteTimePosition")]
	HRESULT AbsoluteTimePosition(
		[out, retval] BSTR *pAbsoluteTimePosition);

	[propget, id(DISPID_RELATIVECOUNTERPOSITION), helpstring("Property RelativeCounterPosition")]
	HRESULT RelativeCounterPosition(
		[out, retval] long *pRelativeCounterPosition);

	[propget, id(DISPID_ABSOLUTECOUNTERPOSITION), helpstring("Property AbsoluteCounterPosition")]
	HRESULT AbsoluteCounterPosition(
		[out, retval] long *pAbsoluteCounterPosition);

	[propget, id(DISPID_CURRENTTRANSPORTACTIONS), helpstring("Property CurrentTransportActions")]
	HRESULT CurrentTransportActions(
		[out, retval] BSTR *pCurrentTransportActions);

	[propget, id(DISPID_LASTCHANGE_AVT), helpstring("Property LastChange")]
	HRESULT LastChange(
		[out, retval] BSTR *pLastChange);

	[propget, id(DISPID_A_ARG_TYPE_SEEKMODE), helpstring("Property A_ARG_TYPE_SeekMode")]
	HRESULT A_ARG_TYPE_SeekMode(
		[out, retval] BSTR *pA_ARG_TYPE_SeekMode);

	[propget, id(DISPID_A_ARG_TYPE_SEEKTARGET), helpstring("Property A_ARG_TYPE_SeekTarget")]
	HRESULT A_ARG_TYPE_SeekTarget(
		[out, retval] BSTR *pA_ARG_TYPE_SeekTarget);

	[propget, id(DISPID_A_ARG_TYPE_INSTANCEID_AVT), helpstring("Property A_ARG_TYPE_InstanceID")]
	HRESULT A_ARG_TYPE_InstanceID(
		[out, retval] unsigned long *pA_ARG_TYPE_InstanceID);


	[ id(DISPID_SETAVTRANSPORTURI), helpstring("Method SetAVTransportURI")]
	HRESULT SetAVTransportURI(
		[in] unsigned long InstanceID,
		[in] BSTR CurrentURI,
		[in] BSTR CurrentURIMetaData);

	[ id(DISPID_SETNEXTAVTRANSPORTURI), helpstring("Method SetNextAVTransportURI")]
	HRESULT SetNextAVTransportURI(
		[in] unsigned long InstanceID,
		[in] BSTR NextURI,
		[in] BSTR NextURIMetaData);

	[ id(DISPID_GETMEDIAINFO), helpstring("Method GetMediaInfo")]
	HRESULT GetMediaInfo(
		[in] unsigned long InstanceID,
		[in, out] unsigned long *pNrTracks,
		[in, out] BSTR *pMediaDuration,
		[in, out] BSTR *pCurrentURI,
		[in, out] BSTR *pCurrentURIMetaData,
		[in, out] BSTR *pNextURI,
		[in, out] BSTR *pNextURIMetaData,
		[in, out] BSTR *pPlayMedium,
		[in, out] BSTR *pRecordMedium,
		[in, out] BSTR *pWriteStatus);

	[ id(DISPID_GETTRANSPORTINFO), helpstring("Method GetTransportInfo")]
	HRESULT GetTransportInfo(
		[in] unsigned long InstanceID,
		[in, out] BSTR *pCurrentTransportState,
		[in, out] BSTR *pCurrentTransportStatus,
		[in, out] BSTR *pCurrentSpeed);

	[ id(DISPID_GETPOSITIONINFO), helpstring("Method GetPositionInfo")]
	HRESULT GetPositionInfo(
		[in] unsigned long InstanceID,
		[in, out] unsigned long *pTrack,
		[in, out] BSTR *pTrackDuration,
		[in, out] BSTR *pTrackMetaData,
		[in, out] BSTR *pTrackURI,
		[in, out] BSTR *pRelTime,
		[in, out] BSTR *pAbsTime,
		[in, out] long *pRelCount,
		[in, out] long *pAbsCount);

	[ id(DISPID_GETDEVICECAPABILITIES), helpstring("Method GetDeviceCapabilities")]
	HRESULT GetDeviceCapabilities(
		[in] unsigned long InstanceID,
		[in, out] BSTR *pPlayMedia,
		[in, out] BSTR *pRecMedia,
		[in, out] BSTR *pRecQualityModes);

	[ id(DISPID_GETTRANSPORTSETTINGS), helpstring("Method GetTransportSettings")]
	HRESULT GetTransportSettings(
		[in] unsigned long InstanceID,
		[in, out] BSTR *pPlayMode,
		[in, out] BSTR *pRecQualityMode);

	[ id(DISPID_STOP), helpstring("Method Stop")]
	HRESULT Stop(
		[in] unsigned long InstanceID);

	[ id(DISPID_PLAY), helpstring("Method Play")]
	HRESULT Play(
		[in] unsigned long InstanceID,
		[in] BSTR Speed);

	[ id(DISPID_PAUSE), helpstring("Method Pause")]
	HRESULT Pause(
		[in] unsigned long InstanceID);

	[ id(DISPID_RECORD), helpstring("Method Record")]
	HRESULT Record(
		[in] unsigned long InstanceID);

	[ id(DISPID_SEEK), helpstring("Method Seek")]
	HRESULT Seek(
		[in] unsigned long InstanceID,
		[in] BSTR Unit,
		[in] BSTR Target);

	[ id(DISPID_NEXT), helpstring("Method Next")]
	HRESULT Next(
		[in] unsigned long InstanceID);

	[ id(DISPID_PREVIOUS), helpstring("Method Previous")]
	HRESULT Previous(
		[in] unsigned long InstanceID);

	[ id(DISPID_SETPLAYMODE), helpstring("Method SetPlayMode")]
	HRESULT SetPlayMode(
		[in] unsigned long InstanceID,
		[in] BSTR NewPlayMode);

	[ id(DISPID_SETRECORDQUALITYMODE), helpstring("Method SetRecordQualityMode")]
	HRESULT SetRecordQualityMode(
		[in] unsigned long InstanceID,
		[in] BSTR NewRecordQualityMode);

	[ id(DISPID_GETCURRENTTRANSPORTACTIONS), helpstring("Method GetCurrentTransportActions")]
	HRESULT GetCurrentTransportActions(
		[in] unsigned long InstanceID,
		[in, out] BSTR *pActions);
};


//
// Interface IUPnPService_RenderingControl1
//
typedef [v1_enum] enum RENDERINGCONTROL1_DISPIDS
{
	 DISPID_PRESETNAMELIST = 1,
	 DISPID_LASTCHANGE_RC, /* also defined during AVTransport enum, appened _RC to differentiate */
	 DISPID_BRIGHTNESS,
	 DISPID_CONTRAST,
	 DISPID_SHARPNESS,
	 DISPID_REDVIDEOGAIN,
	 DISPID_GREENVIDEOGAIN,
	 DISPID_BLUEVIDEOGAIN,
	 DISPID_REDVIDEOBLACKLEVEL,
	 DISPID_GREENVIDEOBLACKLEVEL,
	 DISPID_BLUEVIDEOBLACKLEVEL,
	 DISPID_COLORTEMPERATURE,
	 DISPID_HORIZONTALKEYSTONE,
	 DISPID_VERTICALKEYSTONE,
	 DISPID_MUTE,
	 DISPID_VOLUME,
	 DISPID_VOLUMEDB,
	 DISPID_LOUDNESS,
	 DISPID_A_ARG_TYPE_CHANNEL,
	 DISPID_A_ARG_TYPE_INSTANCEID_RC, /* also defined during AVTransport enum, appened _RC to differentiate */
	 DISPID_A_ARG_TYPE_PRESETNAME,
	 DISPID_LISTPRESETS,
	 DISPID_SELECTPRESET,
	 DISPID_GETBRIGHTNESS,
	 DISPID_SETBRIGHTNESS,
	 DISPID_GETCONTRAST,
	 DISPID_SETCONTRAST,
	 DISPID_GETSHARPNESS,
	 DISPID_SETSHARPNESS,
	 DISPID_GETREDVIDEOGAIN,
	 DISPID_SETREDVIDEOGAIN,
	 DISPID_GETGREENVIDEOGAIN,
	 DISPID_SETGREENVIDEOGAIN,
	 DISPID_GETBLUEVIDEOGAIN,
	 DISPID_SETBLUEVIDEOGAIN,
	 DISPID_GETREDVIDEOBLACKLEVEL,
	 DISPID_SETREDVIDEOBLACKLEVEL,
	 DISPID_GETGREENVIDEOBLACKLEVEL,
	 DISPID_SETGREENVIDEOBLACKLEVEL,
	 DISPID_GETBLUEVIDEOBLACKLEVEL,
	 DISPID_SETBLUEVIDEOBLACKLEVEL,
	 DISPID_GETCOLORTEMPERATURE ,
	 DISPID_SETCOLORTEMPERATURE,
	 DISPID_GETHORIZONTALKEYSTONE,
	 DISPID_SETHORIZONTALKEYSTONE,
	 DISPID_GETVERTICALKEYSTONE,
	 DISPID_SETVERTICALKEYSTONE,
	 DISPID_GETMUTE,
	 DISPID_SETMUTE,
	 DISPID_GETVOLUME,
	 DISPID_SETVOLUME,
	 DISPID_GETVOLUMEDB,
	 DISPID_SETVOLUMEDB,
	 DISPID_GETVOLUMEDBRANGE,
	 DISPID_GETLOUDNESS,
	 DISPID_SETLOUDNESS

} RENDERINGCONTROL1_DISPIDS;

[
	 uuid(0298b219-dd69-451d-bb93-2923839c6dc7),
	 oleautomation,
     helpstring("RenderingControlService Interface"),
	 pointer_default(unique)
]
interface IUPnPService_RenderingControl1 : IDispatch {
	[propget, id(DISPID_PRESETNAMELIST), helpstring("Property PresetNameList")]
	HRESULT PresetNameList(
		[out, retval] BSTR *pPresetNameList);

	[propget, id(DISPID_LASTCHANGE_RC), helpstring("Property LastChange")]
	HRESULT LastChange(
		[out, retval] BSTR *pLastChange);

	[propget, id(DISPID_BRIGHTNESS), helpstring("Property Brightness")]
	HRESULT Brightness(
		[out, retval] unsigned short *pBrightness);

	[propget, id(DISPID_CONTRAST), helpstring("Property Contrast")]
	HRESULT Contrast(
		[out, retval] unsigned short *pContrast);

	[propget, id(DISPID_SHARPNESS), helpstring("Property Sharpness")]
	HRESULT Sharpness(
		[out, retval] unsigned short *pSharpness);

	[propget, id(DISPID_REDVIDEOGAIN), helpstring("Property RedVideoGain")]
	HRESULT RedVideoGain(
		[out, retval] unsigned short *pRedVideoGain);

	[propget, id(DISPID_GREENVIDEOGAIN), helpstring("Property GreenVideoGain")]
	HRESULT GreenVideoGain(
		[out, retval] unsigned short *pGreenVideoGain);

	[propget, id(DISPID_BLUEVIDEOGAIN), helpstring("Property BlueVideoGain")]
	HRESULT BlueVideoGain(
		[out, retval] unsigned short *pBlueVideoGain);

	[propget, id(DISPID_REDVIDEOBLACKLEVEL), helpstring("Property RedVideoBlackLevel")]
	HRESULT RedVideoBlackLevel(
		[out, retval] unsigned short *pRedVideoBlackLevel);

	[propget, id(DISPID_GREENVIDEOBLACKLEVEL), helpstring("Property GreenVideoBlackLevel")]
	HRESULT GreenVideoBlackLevel(
		[out, retval] unsigned short *pGreenVideoBlackLevel);

	[propget, id(DISPID_BLUEVIDEOBLACKLEVEL), helpstring("Property BlueVideoBlackLevel")]
	HRESULT BlueVideoBlackLevel(
		[out, retval] unsigned short *pBlueVideoBlackLevel);

	[propget, id(DISPID_COLORTEMPERATURE), helpstring("Property ColorTemperature")]
	HRESULT ColorTemperature(
		[out, retval] unsigned short *pColorTemperature);

	[propget, id(DISPID_HORIZONTALKEYSTONE), helpstring("Property HorizontalKeystone")]
	HRESULT HorizontalKeystone(
		[out, retval] short *pHorizontalKeystone);

	[propget, id(DISPID_VERTICALKEYSTONE), helpstring("Property VerticalKeystone")]
	HRESULT VerticalKeystone(
		[out, retval] short *pVerticalKeystone);

	[propget, id(DISPID_MUTE), helpstring("Property Mute")]
	HRESULT Mute(
		[out, retval] VARIANT_BOOL *pMute);

	[propget, id(DISPID_VOLUME), helpstring("Property Volume")]
	HRESULT Volume(
		[out, retval] unsigned short *pVolume);

	[propget, id(DISPID_VOLUMEDB), helpstring("Property VolumeDB")]
	HRESULT VolumeDB(
		[out, retval] short *pVolumeDB);

	[propget, id(DISPID_LOUDNESS), helpstring("Property Loudness")]
	HRESULT Loudness(
		[out, retval] VARIANT_BOOL *pLoudness);

	[propget, id(DISPID_A_ARG_TYPE_CHANNEL), helpstring("Property A_ARG_TYPE_Channel")]
	HRESULT A_ARG_TYPE_Channel(
		[out, retval] BSTR *pA_ARG_TYPE_Channel);

	[propget, id(DISPID_A_ARG_TYPE_INSTANCEID_RC), helpstring("Property A_ARG_TYPE_InstanceID")]
	HRESULT A_ARG_TYPE_InstanceID(
		[out, retval] unsigned long *pA_ARG_TYPE_InstanceID);

	[propget, id(DISPID_A_ARG_TYPE_PRESETNAME), helpstring("Property A_ARG_TYPE_PresetName")]
	HRESULT A_ARG_TYPE_PresetName(
		[out, retval] BSTR *pA_ARG_TYPE_PresetName);


	[ id(DISPID_LISTPRESETS), helpstring("Method ListPresets")]
	HRESULT ListPresets(
		[in] unsigned long InstanceID,
		[in, out] BSTR *pCurrentPresetNameList);

	[ id(DISPID_SELECTPRESET), helpstring("Method SelectPreset")]
	HRESULT SelectPreset(
		[in] unsigned long InstanceID,
		[in] BSTR PresetName);

	[ id(DISPID_GETBRIGHTNESS), helpstring("Method GetBrightness")]
	HRESULT GetBrightness(
		[in] unsigned long InstanceID,
		[in, out] unsigned short *pCurrentBrightness);

	[ id(DISPID_SETBRIGHTNESS), helpstring("Method SetBrightness")]
	HRESULT SetBrightness(
		[in] unsigned long InstanceID,
		[in] unsigned short DesiredBrightness);

	[ id(DISPID_GETCONTRAST), helpstring("Method GetContrast")]
	HRESULT GetContrast(
		[in] unsigned long InstanceID,
		[in, out] unsigned short *pCurrentContrast);

	[ id(DISPID_SETCONTRAST), helpstring("Method SetContrast")]
	HRESULT SetContrast(
		[in] unsigned long InstanceID,
		[in] unsigned short DesiredContrast);

	[ id(DISPID_GETSHARPNESS), helpstring("Method GetSharpness")]
	HRESULT GetSharpness(
		[in] unsigned long InstanceID,
		[in, out] unsigned short *pCurrentSharpness);

	[ id(DISPID_SETSHARPNESS), helpstring("Method SetSharpness")]
	HRESULT SetSharpness(
		[in] unsigned long InstanceID,
		[in] unsigned short DesiredSharpness);

	[ id(DISPID_GETREDVIDEOGAIN), helpstring("Method GetRedVideoGain")]
	HRESULT GetRedVideoGain(
		[in] unsigned long InstanceID,
		[in, out] unsigned short *pCurrentRedVideoGain);

	[ id(DISPID_SETREDVIDEOGAIN), helpstring("Method SetRedVideoGain")]
	HRESULT SetRedVideoGain(
		[in] unsigned long InstanceID,
		[in] unsigned short DesiredRedVideoGain);

	[ id(DISPID_GETGREENVIDEOGAIN), helpstring("Method GetGreenVideoGain")]
	HRESULT GetGreenVideoGain(
		[in] unsigned long InstanceID,
		[in, out] unsigned short *pCurrentGreenVideoGain);

	[ id(DISPID_SETGREENVIDEOGAIN), helpstring("Method SetGreenVideoGain")]
	HRESULT SetGreenVideoGain(
		[in] unsigned long InstanceID,
		[in] unsigned short DesiredGreenVideoGain);

	[ id(DISPID_GETBLUEVIDEOGAIN), helpstring("Method GetBlueVideoGain")]
	HRESULT GetBlueVideoGain(
		[in] unsigned long InstanceID,
		[in, out] unsigned short *pCurrentBlueVideoGain);

	[ id(DISPID_SETBLUEVIDEOGAIN), helpstring("Method SetBlueVideoGain")]
	HRESULT SetBlueVideoGain(
		[in] unsigned long InstanceID,
		[in] unsigned short DesiredBlueVideoGain);

	[ id(DISPID_GETREDVIDEOBLACKLEVEL), helpstring("Method GetRedVideoBlackLevel")]
	HRESULT GetRedVideoBlackLevel(
		[in] unsigned long InstanceID,
		[in, out] unsigned short *pCurrentRedVideoBlackLevel);

	[ id(DISPID_SETREDVIDEOBLACKLEVEL), helpstring("Method SetRedVideoBlackLevel")]
	HRESULT SetRedVideoBlackLevel(
		[in] unsigned long InstanceID,
		[in] unsigned short DesiredRedVideoBlackLevel);

	[ id(DISPID_GETGREENVIDEOBLACKLEVEL), helpstring("Method GetGreenVideoBlackLevel")]
	HRESULT GetGreenVideoBlackLevel(
		[in] unsigned long InstanceID,
		[in, out] unsigned short *pCurrentGreenVideoBlackLevel);

	[ id(DISPID_SETGREENVIDEOBLACKLEVEL), helpstring("Method SetGreenVideoBlackLevel")]
	HRESULT SetGreenVideoBlackLevel(
		[in] unsigned long InstanceID,
		[in] unsigned short DesiredGreenVideoBlackLevel);

	[ id(DISPID_GETBLUEVIDEOBLACKLEVEL), helpstring("Method GetBlueVideoBlackLevel")]
	HRESULT GetBlueVideoBlackLevel(
		[in] unsigned long InstanceID,
		[in, out] unsigned short *pCurrentBlueVideoBlackLevel);

	[ id(DISPID_SETBLUEVIDEOBLACKLEVEL), helpstring("Method SetBlueVideoBlackLevel")]
	HRESULT SetBlueVideoBlackLevel(
		[in] unsigned long InstanceID,
		[in] unsigned short DesiredBlueVideoBlackLevel);

	[ id(DISPID_GETCOLORTEMPERATURE ), helpstring("Method GetColorTemperature ")]
	HRESULT GetColorTemperature (
		[in] unsigned long InstanceID,
		[in, out] unsigned short *pCurrentColorTemperature);

	[ id(DISPID_SETCOLORTEMPERATURE), helpstring("Method SetColorTemperature")]
	HRESULT SetColorTemperature(
		[in] unsigned long InstanceID,
		[in] unsigned short DesiredColorTemperature);

	[ id(DISPID_GETHORIZONTALKEYSTONE), helpstring("Method GetHorizontalKeystone")]
	HRESULT GetHorizontalKeystone(
		[in] unsigned long InstanceID,
		[in, out] short *pCurrentHorizontalKeystone);

	[ id(DISPID_SETHORIZONTALKEYSTONE), helpstring("Method SetHorizontalKeystone")]
	HRESULT SetHorizontalKeystone(
		[in] unsigned long InstanceID,
		[in] short DesiredHorizontalKeystone);

	[ id(DISPID_GETVERTICALKEYSTONE), helpstring("Method GetVerticalKeystone")]
	HRESULT GetVerticalKeystone(
		[in] unsigned long InstanceID,
		[in, out] short *pCurrentVerticalKeystone);

	[ id(DISPID_SETVERTICALKEYSTONE), helpstring("Method SetVerticalKeystone")]
	HRESULT SetVerticalKeystone(
		[in] unsigned long InstanceID,
		[in] short DesiredVerticalKeystone);

	[ id(DISPID_GETMUTE), helpstring("Method GetMute")]
	HRESULT GetMute(
		[in] unsigned long InstanceID,
		[in] BSTR Channel,
		[in, out] VARIANT_BOOL *pCurrentMute);

	[ id(DISPID_SETMUTE), helpstring("Method SetMute")]
	HRESULT SetMute(
		[in] unsigned long InstanceID,
		[in] BSTR Channel,
		[in] VARIANT_BOOL DesiredMute);

	[ id(DISPID_GETVOLUME), helpstring("Method GetVolume")]
	HRESULT GetVolume(
		[in] unsigned long InstanceID,
		[in] BSTR Channel,
		[in, out] unsigned short *pCurrentVolume);

	[ id(DISPID_SETVOLUME), helpstring("Method SetVolume")]
	HRESULT SetVolume(
		[in] unsigned long InstanceID,
		[in] BSTR Channel,
		[in] unsigned short DesiredVolume);

	[ id(DISPID_GETVOLUMEDB), helpstring("Method GetVolumeDB")]
	HRESULT GetVolumeDB(
		[in] unsigned long InstanceID,
		[in] BSTR Channel,
		[in, out] short *pCurrentVolume);

	[ id(DISPID_SETVOLUMEDB), helpstring("Method SetVolumeDB")]
	HRESULT SetVolumeDB(
		[in] unsigned long InstanceID,
		[in] BSTR Channel,
		[in] short DesiredVolume);

	[ id(DISPID_GETVOLUMEDBRANGE), helpstring("Method GetVolumeDBRange")]
	HRESULT GetVolumeDBRange(
		[in] unsigned long InstanceID,
		[in] BSTR Channel,
		[in, out] short *pMinValue,
		[in, out] short *pMaxValue);

	[ id(DISPID_GETLOUDNESS), helpstring("Method GetLoudness")]
	HRESULT GetLoudness(
		[in] unsigned long InstanceID,
		[in] BSTR Channel,
		[in, out] VARIANT_BOOL *pCurrentLoudness);

	[ id(DISPID_SETLOUDNESS), helpstring("Method SetLoudness")]
	HRESULT SetLoudness(
		[in] unsigned long InstanceID,
		[in] BSTR Channel,
		[in] VARIANT_BOOL DesiredLoudness);
};


//
// Interface IUPnPService_ContentDirectory1
//
typedef [v1_enum] enum CONTENTDIRECTORY1_DISPIDS
{
	 DISPID_TRANSFERIDS = 1,
	 DISPID_A_ARG_TYPE_OBJECTID,
	 DISPID_A_ARG_TYPE_RESULT,
	 DISPID_A_ARG_TYPE_SEARCHCRITERIA,
	 DISPID_A_ARG_TYPE_BROWSEFLAG,
	 DISPID_A_ARG_TYPE_FILTER,
	 DISPID_A_ARG_TYPE_SORTCRITERIA,
	 DISPID_A_ARG_TYPE_INDEX,
	 DISPID_A_ARG_TYPE_COUNT,
	 DISPID_A_ARG_TYPE_UPDATEID,
	 DISPID_A_ARG_TYPE_TRANSFERID,
	 DISPID_A_ARG_TYPE_TRANSFERSTATUS,
	 DISPID_A_ARG_TYPE_TRANSFERLENGTH,
	 DISPID_A_ARG_TYPE_TRANSFERTOTAL,
	 DISPID_A_ARG_TYPE_TAGVALUELIST,
	 DISPID_A_ARG_TYPE_URI,
	 DISPID_SEARCHCAPABILITIES,
	 DISPID_SORTCAPABILITIES,
	 DISPID_SYSTEMUPDATEID,
	 DISPID_CONTAINERUPDATEIDS,
	 DISPID_GETSEARCHCAPABILITIES,
	 DISPID_GETSORTCAPABILITIES,
	 DISPID_GETSYSTEMUPDATEID,
	 DISPID_BROWSE,
	 DISPID_SEARCH,
	 DISPID_CREATEOBJECT,
	 DISPID_DESTROYOBJECT,
	 DISPID_UPDATEOBJECT,
	 DISPID_IMPORTRESOURCE,
	 DISPID_EXPORTRESOURCE,
	 DISPID_STOPTRANSFERRESOURCE,
	 DISPID_GETTRANSFERPROGRESS,
	 DISPID_DELETERESOURCE,
	 DISPID_CREATEREFERENCE

} CONTENTDIRECTORY1_DISPIDS;

[
	 uuid(3eadfae5-00c9-4359-8952-950d832574a0),
	 oleautomation,
     helpstring("ContentDirectoryService Interface"),
	 pointer_default(unique)
]
interface IUPnPService_ContentDirectory1 : IDispatch {
	[propget, id(DISPID_TRANSFERIDS), helpstring("Property TransferIDs")]
	HRESULT TransferIDs(
		[out, retval] BSTR *pTransferIDs);

	[propget, id(DISPID_A_ARG_TYPE_OBJECTID), helpstring("Property A_ARG_TYPE_ObjectID")]
	HRESULT A_ARG_TYPE_ObjectID(
		[out, retval] BSTR *pA_ARG_TYPE_ObjectID);

	[propget, id(DISPID_A_ARG_TYPE_RESULT), helpstring("Property A_ARG_TYPE_Result")]
	HRESULT A_ARG_TYPE_Result(
		[out, retval] BSTR *pA_ARG_TYPE_Result);

	[propget, id(DISPID_A_ARG_TYPE_SEARCHCRITERIA), helpstring("Property A_ARG_TYPE_SearchCriteria")]
	HRESULT A_ARG_TYPE_SearchCriteria(
		[out, retval] BSTR *pA_ARG_TYPE_SearchCriteria);

	[propget, id(DISPID_A_ARG_TYPE_BROWSEFLAG), helpstring("Property A_ARG_TYPE_BrowseFlag")]
	HRESULT A_ARG_TYPE_BrowseFlag(
		[out, retval] BSTR *pA_ARG_TYPE_BrowseFlag);

	[propget, id(DISPID_A_ARG_TYPE_FILTER), helpstring("Property A_ARG_TYPE_Filter")]
	HRESULT A_ARG_TYPE_Filter(
		[out, retval] BSTR *pA_ARG_TYPE_Filter);

	[propget, id(DISPID_A_ARG_TYPE_SORTCRITERIA), helpstring("Property A_ARG_TYPE_SortCriteria")]
	HRESULT A_ARG_TYPE_SortCriteria(
		[out, retval] BSTR *pA_ARG_TYPE_SortCriteria);

	[propget, id(DISPID_A_ARG_TYPE_INDEX), helpstring("Property A_ARG_TYPE_Index")]
	HRESULT A_ARG_TYPE_Index(
		[out, retval] unsigned long *pA_ARG_TYPE_Index);

	[propget, id(DISPID_A_ARG_TYPE_COUNT), helpstring("Property A_ARG_TYPE_Count")]
	HRESULT A_ARG_TYPE_Count(
		[out, retval] unsigned long *pA_ARG_TYPE_Count);

	[propget, id(DISPID_A_ARG_TYPE_UPDATEID), helpstring("Property A_ARG_TYPE_UpdateID")]
	HRESULT A_ARG_TYPE_UpdateID(
		[out, retval] unsigned long *pA_ARG_TYPE_UpdateID);

	[propget, id(DISPID_A_ARG_TYPE_TRANSFERID), helpstring("Property A_ARG_TYPE_TransferID")]
	HRESULT A_ARG_TYPE_TransferID(
		[out, retval] unsigned long *pA_ARG_TYPE_TransferID);

	[propget, id(DISPID_A_ARG_TYPE_TRANSFERSTATUS), helpstring("Property A_ARG_TYPE_TransferStatus")]
	HRESULT A_ARG_TYPE_TransferStatus(
		[out, retval] BSTR *pA_ARG_TYPE_TransferStatus);

	[propget, id(DISPID_A_ARG_TYPE_TRANSFERLENGTH), helpstring("Property A_ARG_TYPE_TransferLength")]
	HRESULT A_ARG_TYPE_TransferLength(
		[out, retval] BSTR *pA_ARG_TYPE_TransferLength);

	[propget, id(DISPID_A_ARG_TYPE_TRANSFERTOTAL), helpstring("Property A_ARG_TYPE_TransferTotal")]
	HRESULT A_ARG_TYPE_TransferTotal(
		[out, retval] BSTR *pA_ARG_TYPE_TransferTotal);

	[propget, id(DISPID_A_ARG_TYPE_TAGVALUELIST), helpstring("Property A_ARG_TYPE_TagValueList")]
	HRESULT A_ARG_TYPE_TagValueList(
		[out, retval] BSTR *pA_ARG_TYPE_TagValueList);

	[propget, id(DISPID_A_ARG_TYPE_URI), helpstring("Property A_ARG_TYPE_URI")]
	HRESULT A_ARG_TYPE_URI(
		[out, retval] BSTR *pA_ARG_TYPE_URI);

	[propget, id(DISPID_SEARCHCAPABILITIES), helpstring("Property SearchCapabilities")]
	HRESULT SearchCapabilities(
		[out, retval] BSTR *pSearchCapabilities);

	[propget, id(DISPID_SORTCAPABILITIES), helpstring("Property SortCapabilities")]
	HRESULT SortCapabilities(
		[out, retval] BSTR *pSortCapabilities);

	[propget, id(DISPID_SYSTEMUPDATEID), helpstring("Property SystemUpdateID")]
	HRESULT SystemUpdateID(
		[out, retval] unsigned long *pSystemUpdateID);

	[propget, id(DISPID_CONTAINERUPDATEIDS), helpstring("Property ContainerUpdateIDs")]
	HRESULT ContainerUpdateIDs(
		[out, retval] BSTR *pContainerUpdateIDs);


	[ id(DISPID_GETSEARCHCAPABILITIES), helpstring("Method GetSearchCapabilities")]
	HRESULT GetSearchCapabilities(
		[in, out] BSTR *pSearchCaps);

	[ id(DISPID_GETSORTCAPABILITIES), helpstring("Method GetSortCapabilities")]
	HRESULT GetSortCapabilities(
		[in, out] BSTR *pSortCaps);

	[ id(DISPID_GETSYSTEMUPDATEID), helpstring("Method GetSystemUpdateID")]
	HRESULT GetSystemUpdateID(
		[in, out] unsigned long *pId);

	[ id(DISPID_BROWSE), helpstring("Method Browse")]
	HRESULT Browse(
		[in] BSTR ObjectID,
		[in] BSTR BrowseFlag,
		[in] BSTR Filter,
		[in] unsigned long StartingIndex,
		[in] unsigned long RequestedCount,
		[in] BSTR SortCriteria,
		[in, out] BSTR *pResult,
		[in, out] unsigned long *pNumberReturned,
		[in, out] unsigned long *pTotalMatches,
		[in, out] unsigned long *pUpdateID);

	[ id(DISPID_SEARCH), helpstring("Method Search")]
	HRESULT Search(
		[in] BSTR ContainerID,
		[in] BSTR SearchCriteria,
		[in] BSTR Filter,
		[in] unsigned long StartingIndex,
		[in] unsigned long RequestedCount,
		[in] BSTR SortCriteria,
		[in, out] BSTR *pResult,
		[in, out] unsigned long *pNumberReturned,
		[in, out] unsigned long *pTotalMatches,
		[in, out] unsigned long *pUpdateID);

	[ id(DISPID_CREATEOBJECT), helpstring("Method CreateObject")]
	HRESULT CreateObject(
		[in] BSTR ContainerID,
		[in] BSTR Elements,
		[in, out] BSTR *pObjectID,
		[in, out] BSTR *pResult);

	[ id(DISPID_DESTROYOBJECT), helpstring("Method DestroyObject")]
	HRESULT DestroyObject(
		[in] BSTR ObjectID);

	[ id(DISPID_UPDATEOBJECT), helpstring("Method UpdateObject")]
	HRESULT UpdateObject(
		[in] BSTR ObjectID,
		[in] BSTR CurrentTagValue,
		[in] BSTR NewTagValue);

	[ id(DISPID_IMPORTRESOURCE), helpstring("Method ImportResource")]
	HRESULT ImportResource(
		[in] BSTR SourceURI,
		[in] BSTR DestinationURI,
		[in, out] unsigned long *pTransferID);

	[ id(DISPID_EXPORTRESOURCE), helpstring("Method ExportResource")]
	HRESULT ExportResource(
		[in] BSTR SourceURI,
		[in] BSTR DestinationURI,
		[in, out] unsigned long *pTransferID);

	[ id(DISPID_STOPTRANSFERRESOURCE), helpstring("Method StopTransferResource")]
	HRESULT StopTransferResource(
		[in] unsigned long TransferID);

	[ id(DISPID_GETTRANSFERPROGRESS), helpstring("Method GetTransferProgress")]
	HRESULT GetTransferProgress(
		[in] unsigned long TransferID,
		[in, out] BSTR *pTransferStatus,
		[in, out] BSTR *pTransferLength,
		[in, out] BSTR *pTransferTotal);

	[ id(DISPID_DELETERESOURCE), helpstring("Method DeleteResource")]
	HRESULT DeleteResource(
		[in] BSTR ResourceURI);

	[ id(DISPID_CREATEREFERENCE), helpstring("Method CreateReference")]
	HRESULT CreateReference(
		[in] BSTR ContainerID,
		[in] BSTR ObjectID,
		[in, out] BSTR *pNewID);
};



//
// UPnP AV toolkit library
//
[
    uuid(2432ad2b-4d63-47fb-9838-beca90e1dc97),
    version(1.0),
    helpstring("UPnP AV toolkit 1.0 Type Library")
]
library UPNPAVTOOLKITlib
{
    importlib("stdole32.tlb");
    importlib("stdole2.tlb");

    interface IUPnPService_ConnectionManager1;
    interface IUPnPService_AVTransport1;
    interface IUPnPService_RenderingControl1;
    interface IUPnPService_ContentDirectory1;
};
