Commit 5430fafa authored by André Hentschel's avatar André Hentschel Committed by Alexandre Julliard

include: Add bdaiface.idl.

parent e8ac5892
...@@ -153,6 +153,7 @@ include/atliface.h ...@@ -153,6 +153,7 @@ include/atliface.h
include/audioclient.h include/audioclient.h
include/audiopolicy.h include/audiopolicy.h
include/austream.h include/austream.h
include/bdaiface.h
include/bits.h include/bits.h
include/bits1_5.h include/bits1_5.h
include/bits3_0.h include/bits3_0.h
......
...@@ -12,6 +12,7 @@ PUBLIC_IDL_H_SRCS = \ ...@@ -12,6 +12,7 @@ PUBLIC_IDL_H_SRCS = \
audioclient.idl \ audioclient.idl \
audiopolicy.idl \ audiopolicy.idl \
austream.idl \ austream.idl \
bdaiface.idl \
bits.idl \ bits.idl \
bits1_5.idl \ bits1_5.idl \
bits3_0.idl \ bits3_0.idl \
...@@ -161,6 +162,8 @@ SRCDIR_INCLUDES = \ ...@@ -161,6 +162,8 @@ SRCDIR_INCLUDES = \
basetsd.h \ basetsd.h \
basetyps.h \ basetyps.h \
bcrypt.h \ bcrypt.h \
bdaiface_enums.h \
bdatypes.h \
binres.idl \ binres.idl \
bitsmsg.h \ bitsmsg.h \
cderr.h \ cderr.h \
......
/*
* Copyright 2013 André Hentschel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef DO_NO_IMPORTS
import "unknwn.idl";
import "strmif.idl";
import "bdatypes.h";
#endif
#include "bdaiface_enums.h"
[
object,
uuid(fd501041-8ebe-11ce-8183-00aa00577da2),
pointer_default(unique)
]
interface IBDA_NetworkProvider : IUnknown
{
HRESULT PutSignalSource([in] ULONG ulSignalSource);
HRESULT GetSignalSource([in, out] ULONG *pulSignalSource);
HRESULT GetNetworkType([in, out] GUID *pguidNetworkType);
HRESULT PutTuningSpace([in] REFGUID guidTuningSpace);
HRESULT GetTuningSpace([in, out] GUID *pguidTuingSpace);
HRESULT RegisterDeviceFilter([in] IUnknown *pUnkFilterControl, [in, out] ULONG *ppvRegisitrationContext);
HRESULT UnRegisterDeviceFilter([in] ULONG pvRegistrationContext);
}
[
object,
uuid(71985F43-1CA1-11d3-9CC8-00C04F7971E0),
pointer_default(unique)
]
interface IBDA_EthernetFilter : IUnknown
{
HRESULT GetMulticastListSize([in, out] ULONG *pulcbAddresses);
HRESULT PutMulticastList([in] ULONG ulcbAddresses, [in, size_is(ulcbAddresses)] BYTE pAddressList []);
HRESULT GetMulticastList([in, out] ULONG *pulcbAddresses, [in, out, size_is(*pulcbAddresses)] BYTE pAddressList[]);
HRESULT PutMulticastMode([in] ULONG ulModeMask);
HRESULT GetMulticastMode([out] ULONG *pulModeMask);
}
[
object,
uuid(71985F44-1CA1-11d3-9CC8-00C04F7971E0),
pointer_default(unique)
]
interface IBDA_IPV4Filter : IUnknown
{
HRESULT GetMulticastListSize([in, out] ULONG *pulcbAddresses);
HRESULT PutMulticastList([in] ULONG ulcbAddresses, [in, size_is(ulcbAddresses)] BYTE pAddressList[]);
HRESULT GetMulticastList([in, out] ULONG *pulcbAddresses,[out, size_is(*pulcbAddresses)] BYTE pAddressList[]);
HRESULT PutMulticastMode([in] ULONG ulModeMask);
HRESULT GetMulticastMode([out] ULONG* pulModeMask);
}
[
object,
uuid(E1785A74-2A23-4fb3-9245-A8F88017EF33),
pointer_default(unique)
]
interface IBDA_IPV6Filter : IUnknown
{
HRESULT GetMulticastListSize([in, out] ULONG *pulcbAddresses);
HRESULT PutMulticastList([in] ULONG ulcbAddresses, [in, size_is(ulcbAddresses)] BYTE pAddressList[]);
HRESULT GetMulticastList([in, out] ULONG *pulcbAddresses,[out, size_is(*pulcbAddresses)] BYTE pAddressList[]);
HRESULT PutMulticastMode([in] ULONG ulModeMask);
HRESULT GetMulticastMode([out] ULONG* pulModeMask);
}
[
object,
uuid(FD0A5AF3-B41D-11d2-9C95-00C04F7971E0),
pointer_default(unique)
]
interface IBDA_DeviceControl : IUnknown
{
HRESULT StartChanges(void);
HRESULT CheckChanges(void);
HRESULT CommitChanges(void);
HRESULT GetChangeState([in, out] ULONG *pState);
}
[
object,
uuid(0DED49D5-A8B7-4d5d-97A1-12B0C195874D),
pointer_default(unique)
]
interface IBDA_PinControl : IUnknown
{
HRESULT GetPinID([in, out] ULONG *pulPinID);
HRESULT GetPinType([in, out] ULONG *pulPinType);
HRESULT RegistrationContext([in, out] ULONG *pulRegistrationCtx);
}
[
object,
uuid(D2F1644B-B409-11d2-BC69-00A0C9EE9E16),
pointer_default(unique)
]
interface IBDA_SignalProperties : IUnknown
{
HRESULT PutNetworkType([in] REFGUID guidNetworkType);
HRESULT GetNetworkType([in, out] GUID *pguidNetworkType);
HRESULT PutSignalSource([in] ULONG ulSignalSource);
HRESULT GetSignalSource([in, out] ULONG *pulSignalSource);
HRESULT PutTuningSpace([in] REFGUID guidTuningSpace);
HRESULT GetTuningSpace([in, out] GUID *pguidTuingSpace);
}
[
object,
uuid(1347D106-CF3A-428a-A5CB-AC0D9A2A4338),
pointer_default(unique)
]
interface IBDA_SignalStatistics : IUnknown
{
HRESULT put_SignalStrength ([in] LONG lDbStrength);
HRESULT get_SignalStrength ([in, out] LONG *plDbStrength);
HRESULT put_SignalQuality ([in] LONG lPercentQuality);
HRESULT get_SignalQuality ([in, out] LONG *plPercentQuality);
HRESULT put_SignalPresent ([in] BOOLEAN fPresent);
HRESULT get_SignalPresent ([in, out] BOOLEAN *pfPresent);
HRESULT put_SignalLocked ([in] BOOLEAN fLocked);
HRESULT get_SignalLocked ([in, out] BOOLEAN *pfLocked);
HRESULT put_SampleTime ([in] LONG lmsSampleTime);
HRESULT get_SampleTime ([in, out] LONG *plmsSampleTime);
}
[
object,
uuid(79B56888-7FEA-4690-B45D-38FD3C7849BE),
pointer_default(unique)
]
interface IBDA_Topology : IUnknown
{
HRESULT GetNodeTypes([in, out] ULONG *pulcNodeTypes,
[in] ULONG ulcNodeTypesMax,
[in, out, size_is (ulcNodeTypesMax)] ULONG rgulNodeTypes[]);
HRESULT GetNodeDescriptors([in, out] ULONG *ulcNodeDescriptors,
[in] ULONG ulcNodeDescriptorsMax,
[in, out, size_is(ulcNodeDescriptorsMax)] BDANODE_DESCRIPTOR rgNodeDescriptors[]);
HRESULT GetNodeInterfaces([in] ULONG ulNodeType,
[in, out] ULONG *pulcInterfaces,
[in] ULONG ulcInterfacesMax,
[in, out, size_is (ulcInterfacesMax)] GUID rgguidInterfaces[]);
HRESULT GetPinTypes([in, out] ULONG *pulcPinTypes,
[in] ULONG ulcPinTypesMax,
[in, out, size_is (ulcPinTypesMax)] ULONG rgulPinTypes[]);
HRESULT GetTemplateConnections([in, out] ULONG *pulcConnections,
[in] ULONG ulcConnectionsMax,
[in, out, size_is (ulcConnectionsMax)] BDA_TEMPLATE_CONNECTION rgConnections[]);
HRESULT CreatePin([in] ULONG ulPinType, [in, out] ULONG *pulPinId);
HRESULT DeletePin([in] ULONG ulPinId);
HRESULT SetMediaType([in] ULONG ulPinId, [in] AM_MEDIA_TYPE *pMediaType);
HRESULT SetMedium([in] ULONG ulPinId, [in] REGPINMEDIUM *pMedium);
HRESULT CreateTopology([in] ULONG ulInputPinId, [in] ULONG ulOutputPinId);
HRESULT GetControlNode([in] ULONG ulInputPinId,
[in] ULONG ulOutputPinId,
[in] ULONG ulNodeType,
[in, out] IUnknown **ppControlNode);
}
[
object,
uuid(71985F46-1CA1-11d3-9CC8-00C04F7971E0),
pointer_default(unique)
]
interface IBDA_VoidTransform : IUnknown
{
HRESULT Start(void);
HRESULT Stop(void);
}
[
object,
uuid(DDF15B0D-BD25-11d2-9CA0-00C04F7971E0),
pointer_default(unique)
]
interface IBDA_NullTransform : IUnknown
{
HRESULT Start(void);
HRESULT Stop(void);
}
[
object,
uuid(71985F47-1CA1-11d3-9CC8-00C04F7971E0),
pointer_default(unique)
]
interface IBDA_FrequencyFilter : IUnknown
{
HRESULT put_Autotune([in] ULONG ulTransponder);
HRESULT get_Autotune([in, out] ULONG *pulTransponder);
HRESULT put_Frequency([in] ULONG ulFrequency);
HRESULT get_Frequency([in, out] ULONG *pulFrequency);
HRESULT put_Polarity([in] Polarisation Polarity);
HRESULT get_Polarity([in, out] Polarisation *pPolarity);
HRESULT put_Range([in] ULONG ulRange);
HRESULT get_Range([in, out] ULONG *pulRange);
HRESULT put_Bandwidth([in] ULONG ulBandwidth);
HRESULT get_Bandwidth([in, out] ULONG *pulBandwidth);
HRESULT put_FrequencyMultiplier([in] ULONG ulMultiplier);
HRESULT get_FrequencyMultiplier([in, out] ULONG *pulMultiplier);
}
[
object,
uuid(992CF102-49F9-4719-A664-C4F23E2408F4),
pointer_default(unique)
]
interface IBDA_LNBInfo : IUnknown
{
HRESULT put_LocalOscilatorFrequencyLowBand([in] ULONG ulLOFLow);
HRESULT get_LocalOscilatorFrequencyLowBand([in, out] ULONG *pulLOFLow);
HRESULT put_LocalOscilatorFrequencyHighBand([in] ULONG ulLOFHigh);
HRESULT get_LocalOscilatorFrequencyHighBand([in, out] ULONG *pulLOFHigh);
HRESULT put_HighLowSwitchFrequency([in] ULONG ulSwitchFrequency);
HRESULT get_HighLowSwitchFrequency([in, out] ULONG *pulSwitchFrequency);
}
[
object,
uuid(F84E2AB0-3C6B-45e3-A0FC-8669D4B81F11),
pointer_default(unique)
]
interface IBDA_DiseqCommand : IUnknown
{
HRESULT put_EnableDiseqCommands([in] BOOLEAN bEnable);
HRESULT put_DiseqLNBSource([in] ULONG ulLNBSource);
HRESULT put_DiseqUseToneBurst([in] BOOLEAN bUseToneBurst);
HRESULT put_DiseqRepeats([in] ULONG ulRepeats);
HRESULT put_DiseqSendCommand([in] ULONG ulRequestId,
[in] ULONG ulcbCommandLen,
[in, size_is(ulcbCommandLen)] BYTE *pbCommand);
HRESULT get_DiseqResponse([in] ULONG ulRequestId,
[in, out] ULONG *pulcbResponseLen,
[in, out, size_is(*pulcbResponseLen)] BYTE pbResponse[]);
}
[
object,
uuid(DDF15B12-BD25-11d2-9CA0-00C04F7971E0),
pointer_default(unique)
]
interface IBDA_AutoDemodulate : IUnknown
{
HRESULT put_AutoDemodulate(void);
}
[
object,
uuid(34518D13-1182-48e6-B28F-B24987787326),
pointer_default(unique)
]
interface IBDA_AutoDemodulateEx : IBDA_AutoDemodulate
{
HRESULT get_SupportedDeviceNodeTypes([in] ULONG ulcDeviceNodeTypesMax,
[out] ULONG *pulcDeviceNodeTypes,
[in, out] GUID *pguidDeviceNodeTypes);
HRESULT get_SupportedVideoFormats([out] ULONG *pulAMTunerModeType,
[out] ULONG *pulAnalogVideoStandard);
HRESULT get_AuxInputCount([in, out] ULONG *pulCompositeCount,
[in, out] ULONG *pulSvideoCount);
}
[
object,
uuid(EF30F379-985B-4d10-B640-A79D5E04E1E0),
pointer_default(unique)
]
interface IBDA_DigitalDemodulator : IUnknown
{
HRESULT put_ModulationType([in] ModulationType *pModulationType);
HRESULT get_ModulationType([in, out] ModulationType *pModulationType);
HRESULT put_InnerFECMethod([in] FECMethod *pFECMethod);
HRESULT get_InnerFECMethod([in, out] FECMethod *pFECMethod);
HRESULT put_InnerFECRate([in] BinaryConvolutionCodeRate *pFECRate);
HRESULT get_InnerFECRate([in, out] BinaryConvolutionCodeRate *pFECRate);
HRESULT put_OuterFECMethod([in] FECMethod *pFECMethod);
HRESULT get_OuterFECMethod([in, out] FECMethod *pFECMethod);
HRESULT put_OuterFECRate([in] BinaryConvolutionCodeRate *pFECRate);
HRESULT get_OuterFECRate([in, out] BinaryConvolutionCodeRate *pFECRate);
HRESULT put_SymbolRate([in] ULONG *pSymbolRate);
HRESULT get_SymbolRate([in, out] ULONG *pSymbolRate);
HRESULT put_SpectralInversion([in] SpectralInversion *pSpectralInversion);
HRESULT get_SpectralInversion([in, out] SpectralInversion *pSpectralInversion);
}
[
object,
uuid(525ED3EE-5CF3-4e1e-9A06-5368A84F9A6E),
pointer_default(unique)
]
interface IBDA_DigitalDemodulator2 : IBDA_DigitalDemodulator
{
HRESULT put_GuardInterval([in] GuardInterval *pGuardInterval);
HRESULT get_GuardInterval([in, out] GuardInterval *pGuardInterval);
HRESULT put_TransmissionMode([in] TransmissionMode *pTransmissionMode);
HRESULT get_TransmissionMode([in, out] TransmissionMode *pTransmissionMode);
HRESULT put_RollOff([in] RollOff *pRollOff);
HRESULT get_RollOff([in, out] RollOff *pRollOff);
HRESULT put_Pilot([in] Pilot *pPilot);
HRESULT get_Pilot([in, out] Pilot *pPilot);
}
[
object,
uuid(13F19604-7D32-4359-93A2-A05205D90AC9),
pointer_default(unique)
]
interface IBDA_DigitalDemodulator3 : IBDA_DigitalDemodulator2
{
HRESULT put_SignalTimeouts([in] BDA_SIGNAL_TIMEOUTS *pSignalTimeouts);
HRESULT get_SignalTimeouts([in, out] BDA_SIGNAL_TIMEOUTS *pSignalTimeouts);
HRESULT put_PLPNumber([in] ULONG *pPLPNumber);
HRESULT get_PLPNumber([in, out] ULONG *pPLPNumber);
}
[
object,
uuid(4B2BD7EA-8347-467b-8DBF-62F784929CC3),
helpstring("ICCSubStreamFiltering Interface"),
pointer_default(unique)
]
interface ICCSubStreamFiltering : IUnknown
{
[propget, helpstring("property SubstreamTypes")] HRESULT SubstreamTypes([out, retval] long *pTypes);
[propput, helpstring("property SubstreamTypes")] HRESULT SubstreamTypes([in] long Types);
}
[
object,
uuid(3F4DC8E2-4050-11d3-8F4B-00C04F7971E2),
pointer_default(unique),
helpstring("Not supported - Use IBDA_IPSinkInfo instead")
]
interface IBDA_IPSinkControl : IUnknown
{
HRESULT GetMulticastList([in, out] unsigned long *pulcbSize, [in, out] BYTE **pbBuffer);
HRESULT GetAdapterIPAddress ([in,out] unsigned long *pulcbSize, [in,out] BYTE **pbBuffer);
}
[
object,
uuid(A750108F-492E-4d51-95F7-649B23FF7AD7),
pointer_default(unique)
]
interface IBDA_IPSinkInfo : IUnknown
{
HRESULT get_MulticastList([in, out] ULONG *pulcbAddresses,
[out, size_is(*pulcbAddresses)] BYTE **ppbAddressList);
HRESULT get_AdapterIPAddress([out] BSTR *pbstrBuffer);
HRESULT get_AdapterDescription([out] BSTR *pbstrBuffer);
}
[
object,
uuid (afb6c2a2-2c41-11d3-8a60-0000f81e0e4a),
pointer_default(unique)
]
interface IEnumPIDMap : IUnknown
{
HRESULT Next([in] ULONG cRequest,
[in, out, size_is (cRequest)] PID_MAP *pPIDMap,
[out] ULONG *pcReceived);
HRESULT Skip([in] ULONG cRecords);
HRESULT Reset(void);
HRESULT Clone([out] IEnumPIDMap **ppIEnumPIDMap);
}
[
object,
uuid (afb6c2a1-2c41-11d3-8a60-0000f81e0e4a),
pointer_default(unique)
]
interface IMPEG2PIDMap : IUnknown
{
HRESULT MapPID([in] ULONG culPID,
[in] ULONG *pulPID,
[in] MEDIA_SAMPLE_CONTENT MediaSampleContent);
HRESULT UnmapPID([in] ULONG culPID, [in] ULONG *pulPID);
HRESULT EnumPIDMap([out] IEnumPIDMap **pIEnumPIDMap);
}
[
object,
uuid(06FB45C1-693C-4ea7-B79F-7A6A54D8DEF2),
helpstring("IFrequencyMap Interface"),
pointer_default(unique),
hidden, restricted
]
interface IFrequencyMap : IUnknown
{
HRESULT get_FrequencyMapping([out] ULONG *ulCount, [out, size_is(1, *ulCount)] ULONG **ppulList);
HRESULT put_FrequencyMapping([in] ULONG ulCount, [in, size_is(ulCount)] ULONG pList[]);
HRESULT get_CountryCode([out] ULONG *pulCountryCode);
HRESULT put_CountryCode([in] ULONG ulCountryCode);
HRESULT get_DefaultFrequencyMapping([in] ULONG ulCountryCode,
[out] ULONG *pulCount,
[out, size_is(1, *pulCount)] ULONG **ppulList);
HRESULT get_CountryCodeList([out] ULONG* pulCount, [out, size_is(1, *pulCount)] ULONG **ppulList);
}
[
object,
uuid(D806973D-3EBE-46de-8FBB-6358FE784208),
helpstring("IBDA_EasMessage Interface"),
pointer_default(unique),
hidden, restricted
]
interface IBDA_EasMessage : IUnknown
{
HRESULT get_EasMessage([in] ULONG ulEventID, [in, out] IUnknown **ppEASObject);
}
[
object,
uuid(8E882535-5F86-47AB-86CF-C281A72A0549),
helpstring("IBDA_TransportStreamInfo Interface"),
pointer_default(unique),
hidden, restricted
]
interface IBDA_TransportStreamInfo : IUnknown
{
HRESULT get_PatTableTickCount([out] ULONG *pPatTickCount);
}
[
object,
uuid(CD51F1E0-7BE9-4123-8482-A2A796C0A6B0),
helpstring("IBDA_ConditionalAccess Interface"),
pointer_default(unique)
]
interface IBDA_ConditionalAccess : IUnknown
{
HRESULT get_SmartCardStatus([out] SmartCardStatusType *pCardStatus,
[out] SmartCardAssociationType *pCardAssociation,
[out] BSTR *pbstrCardError,
[out] VARIANT_BOOL *pfOOBLocked);
HRESULT get_SmartCardInfo([out] BSTR *pbstrCardName,
[out] BSTR *pbstrCardManufacturer,
[out] VARIANT_BOOL *pfDaylightSavings,
[out] BYTE *pbyRatingRegion,
[out] LONG *plTimeZoneOffsetMinutes,
[out] BSTR *pbstrLanguage,
[out] EALocationCodeType *pEALocationCode);
HRESULT get_SmartCardApplications([in, out] ULONG *pulcApplications,
[in] ULONG ulcApplicationsMax,
[in, out, size_is(ulcApplicationsMax)] SmartCardApplication rgApplications[]);
HRESULT get_Entitlement([in] USHORT usVirtualChannel, [out] EntitlementType *pEntitlement);
HRESULT TuneByChannel([in] USHORT usVirtualChannel);
HRESULT SetProgram([in] USHORT usProgramNumber);
HRESULT AddProgram([in] USHORT usProgramNumber);
HRESULT RemoveProgram([in] USHORT usProgramNumber);
HRESULT GetModuleUI([in] BYTE byDialogNumber, [out] BSTR *pbstrURL);
HRESULT InformUIClosed([in] BYTE byDialogNumber, [in] UICloseReasonType CloseReason);
}
[
object,
uuid(20e80cb5-c543-4c1b-8eb3-49e719eee7d4),
helpstring("IBDA_DiagnosticProperties Interface"),
pointer_default(unique),
]
interface IBDA_DiagnosticProperties : IPropertyBag
{
}
[
object,
uuid(F98D88B0-1992-4cd6-A6D9-B9AFAB99330D),
helpstring("IBDA_DRM Interface"),
pointer_default(unique),
]
interface IBDA_DRM : IUnknown
{
HRESULT GetDRMPairingStatus([out] DWORD *pdwStatus, [out] HRESULT *phError);
HRESULT PerformDRMPairing(BOOL fSync);
}
[
object,
uuid(7F0B3150-7B81-4ad4-98E3-7E9097094301),
helpstring("IBDA_NameValueService Interface"),
pointer_default(unique)
]
interface IBDA_NameValueService : IUnknown
{
HRESULT GetValueNameByIndex([in] ULONG ulIndex, [out] BSTR *pbstrName);
HRESULT GetValue([in] BSTR bstrName, [in] BSTR bstrLanguage, [out] BSTR *pbstrValue);
HRESULT SetValue([in] ULONG ulDialogRequest, [in] BSTR bstrLanguage,
[in] BSTR bstrName, [in] BSTR bstrValue, [in] ULONG ulReserved);
}
[
object,
uuid(497C3418-23CB-44ba-BB62-769F506FCEA7),
helpstring("IBDA_ConditionalAccessEx Interface"),
pointer_default(unique)
]
interface IBDA_ConditionalAccessEx : IUnknown
{
HRESULT CheckEntitlementToken([in] ULONG ulDialogRequest, [in] BSTR bstrLanguage,
[in] BDA_CONDITIONALACCESS_REQUESTTYPE RequestType,
[in] ULONG ulcbEntitlementTokenLen,
[in, size_is(ulcbEntitlementTokenLen)] BYTE *pbEntitlementToken,
[out] ULONG *pulDescrambleStatus);
HRESULT SetCaptureToken([in] ULONG ulcbCaptureTokenLen,
[in, size_is(ulcbCaptureTokenLen)] BYTE *pbCaptureToken);
HRESULT OpenBroadcastMmi([in] ULONG ulDialogRequest, [in] BSTR bstrLanguage, [in] ULONG EventId);
HRESULT CloseMmiDialog([in] ULONG ulDialogRequest, [in] BSTR bstrLanguage,
[in] ULONG ulDialogNumber, [in] BDA_CONDITIONALACCESS_MMICLOSEREASON ReasonCode,
[out] ULONG *pulSessionResult);
HRESULT CreateDialogRequestNumber([out] ULONG *pulDialogRequestNumber);
}
[
object,
uuid(5E68C627-16C2-4e6c-B1E2-D00170CDAA0F),
helpstring("IBDA_ISDBConditionalAccess Interface"),
pointer_default(unique)
]
interface IBDA_ISDBConditionalAccess : IUnknown
{
HRESULT SetIsdbCasRequest([in] ULONG ulRequestId, [in] ULONG ulcbRequestBufferLen,
[in, size_is(ulcbRequestBufferLen)] BYTE *pbRequestBuffer);
}
[
object,
uuid(207C413F-00DC-4c61-BAD6-6FEE1FF07064),
helpstring("IBDA_EventingService Interface"),
pointer_default(unique)
]
interface IBDA_EventingService : IUnknown
{
HRESULT CompleteEvent([in] ULONG ulEventID, [in] ULONG ulEventResult);
}
[
object,
uuid(7DEf4C09-6E66-4567-A819-F0E17F4A81AB),
helpstring("IBDA_AUX Interface"),
pointer_default(unique)
]
interface IBDA_AUX : IUnknown
{
HRESULT QueryCapabilities([out] DWORD *pdwNumAuxInputsBSTR);
HRESULT EnumCapability([in] DWORD dwIndex, [out] DWORD *dwInputID, [out] GUID *pConnectorType,
[out] DWORD *ConnTypeNum, [out] DWORD *NumVideoStds,
[out] ULONGLONG *AnalogStds);
}
[
object,
uuid(3a8bad59-59fe-4559-a0ba-396cfaa98ae3),
helpstring("IBDA_ Encoder Interface"),
pointer_default(unique)
]
interface IBDA_Encoder : IUnknown
{
HRESULT QueryCapabilities([out] DWORD *NumAudioFmts, [out] DWORD *NumVideoFmts);
HRESULT EnumAudioCapability([in] DWORD FmtIndex, [out] DWORD *MethodID,
[out] DWORD *AlgorithmType, [out] DWORD *SamplingRate,
[out] DWORD *BitDepth, [out] DWORD *NumChannels);
HRESULT EnumVideoCapability([in] DWORD FmtIndex, [out] DWORD *MethodID,
[out] DWORD *AlgorithmType, [out] DWORD *VerticalSize,
[out] DWORD *HorizontalSize, [out] DWORD *AspectRatio,
[out] DWORD *FrameRateCode, [out] DWORD *ProgressiveSequence);
HRESULT SetParameters([in] DWORD AudioBitrateMode, [in] DWORD AudioBitrate,
[in] DWORD AudioMethodID, [in] DWORD AudioProgram,
[in] DWORD VideoBitrateMode, [in] DWORD VideoBitrate,
[in] DWORD VideoMethodID);
HRESULT GetState([out] DWORD *AudioBitrateMax, [out] DWORD *AudioBitrateMin,
[out] DWORD *AudioBitrateMode, [out] DWORD *AudioBitrateStepping,
[out] DWORD *AudioBitrate, [out] DWORD *AudioMethodID,
[out] DWORD *AvailableAudioPrograms, [out] DWORD *AudioProgram,
[out] DWORD *VideoBitrateMax, [out] DWORD *VideoBitrateMin,
[out] DWORD *VideoBitrateMode, [out] DWORD *VideoBitrate,
[out] DWORD *VideoBitrateStepping, [out] DWORD *VideoMethodID,
[out] DWORD *SignalSourceID, [out] ULONGLONG *SignalFormat,
[out] BOOL *SignalLock, [out] LONG *SignalLevel,
[out] DWORD *SignalToNoiseRatio);
}
[
object,
uuid(138adc7e-58ae-437f-b0b4-c9fe19d5b4ac),
helpstring("IBDA_ FDC Interface"),
pointer_default(unique)
]
interface IBDA_FDC : IUnknown
{
HRESULT GetStatus([out] DWORD *CurrentBitrate, [out] BOOL *CarrierLock,
[out] DWORD *CurrentFrequency, [out] BOOL *CurrentSpectrumInversion,
[out] BSTR *CurrentPIDList, [out] BSTR *CurrentTIDList, [out] BOOL *Overflow);
HRESULT RequestTables([in] BSTR TableIDs);
HRESULT AddPid([in] BSTR PidsToAdd, [out] DWORD *RemainingFilterEntries);
HRESULT RemovePid([in] BSTR PidsToRemove);
HRESULT AddTid([in] BSTR TidsToAdd, [out] BSTR *CurrentTidList);
HRESULT RemoveTid([in] BSTR TidsToRemove);
HRESULT GetTableSection([out] DWORD *Pid, [in] DWORD MaxBufferSize,
[out] DWORD *ActualSize, [out] BYTE *SecBuffer);
}
[
object,
uuid(C0AFCB73-23E7-4bc6-BAFA-FDC167B4719F),
helpstring("IBDA_ GuideDataDeliveryService Interface"),
pointer_default(unique)
]
interface IBDA_GuideDataDeliveryService: IUnknown
{
HRESULT GetGuideDataType([out] GUID *pguidDataType);
HRESULT GetGuideData([in, out] ULONG *pulcbBufferLen, [out] BYTE *pbBuffer,
[out] ULONG *pulGuideDataPercentageProgress);
HRESULT RequestGuideDataUpdate(void);
HRESULT GetTuneXmlFromServiceIdx([in] ULONG64 ul64ServiceIdx, [out] BSTR *pbstrTuneXml);
HRESULT GetServices([in, out] ULONG *pulcbBufferLen, [out] BYTE *pbBuffer);
HRESULT GetServiceInfoFromTuneXml([in] BSTR bstrTuneXml, [out] BSTR *pbstrServiceDescription);
}
[
object,
uuid(BFF6B5BB-B0AE-484c-9DCA-73528FB0B46E),
helpstring("IBDA_DRMService Interface"),
pointer_default(unique)
]
interface IBDA_DRMService: IUnknown
{
HRESULT SetDRM([in] GUID *puuidNewDrm);
HRESULT GetDRMStatus([out] BSTR *pbstrDrmUuidList, [out] GUID *DrmUuid);
}
[
object,
uuid(4BE6FA3D-07CD-4139-8B80-8C18BA3AEC88),
helpstring("IBDA_WMDRMSession Interface"),
pointer_default(unique)
]
interface IBDA_WMDRMSession: IUnknown
{
HRESULT GetStatus([out] ULONG *MaxCaptureToken, [out] ULONG *MaxStreamingPid,
[out] ULONG *MaxLicense, [out] ULONG *MinSecurityLevel,
[out] ULONG *RevInfoSequenceNumber, [out] ULONGLONG *RevInfoIssuedTime,
[out] ULONG *RevInfoTTL, [out] ULONG *RevListVersion, [out] ULONG *ulState);
HRESULT SetRevInfo([in] ULONG ulRevInfoLen, [in, size_is(ulRevInfoLen)] BYTE* pbRevInfo);
HRESULT SetCrl([in] ULONG ulCrlLen, [in, size_is(ulCrlLen)] BYTE *pbCrlLen);
HRESULT TransactMessage([in] ULONG ulcbRequest, [in, size_is(ulcbRequest)] BYTE *pbRequest,
[in, out] ULONG *pulcbResponse, [in, out] BYTE *pbResponse);
HRESULT GetLicense([in] GUID *uuidKey, [in, out] ULONG *pulPackageLen, [in, out] BYTE *pbPackage);
HRESULT ReissueLicense([in] GUID *uuidKey);
HRESULT RenewLicense([in] ULONG ulInXmrLicenseLen,
[in, size_is(ulInXmrLicenseLen)] BYTE *pbInXmrLicense,
[in] ULONG ulEntitlementTokenLen,
[in, size_is(ulEntitlementTokenLen)] BYTE *pbEntitlementToken,
[out] ULONG *pulDescrambleStatus, [in, out] ULONG *pulOutXmrLicenseLen,
[in, out] BYTE *pbOutXmrLicense);
HRESULT GetKeyInfo([in, out] ULONG *pulKeyInfoLen, [in, out] BYTE *pbKeyInfo);
}
[
object,
uuid(86D979CF-A8A7-4f94-B5FB-14C0ACA68FE6),
helpstring("IBDA_WMDRMTuner Interface"),
pointer_default(unique)
]
interface IBDA_WMDRMTuner: IUnknown
{
HRESULT PurchaseEntitlement([in] ULONG ulDialogRequest, [in] BSTR bstrLanguage,
[in] ULONG ulPurchaseTokenLen,
[in, size_is(ulPurchaseTokenLen)] BYTE *pbPurchaseToken,
[out] ULONG *pulDescrambleStatus,
[in, out] ULONG *pulCaptureTokenLen,
[in, out] BYTE *pbCaptureToken);
HRESULT CancelCaptureToken([in] ULONG ulCaptureTokenLen,
[in, size_is(ulCaptureTokenLen)] BYTE *pbCaptureToken);
HRESULT SetPidProtection([in] ULONG ulPid, [in] GUID *uuidKey);
HRESULT GetPidProtection([in] ULONG pulPid, [out] GUID *uuidKey);
HRESULT SetSyncValue([in] ULONG ulSyncValue);
HRESULT GetStartCodeProfile([in, out] ULONG *pulStartCodeProfileLen,
[in, out] BYTE *pbStartCodeProfile);
}
[
object,
uuid(1F9BC2A5-44A3-4c52-AAB1-0BBCE5A1381D),
helpstring("IBDA_DRIDRMService Interface"),
pointer_default(unique)
]
interface IBDA_DRIDRMService: IUnknown
{
HRESULT SetDRM([in] BSTR bstrNewDrm);
HRESULT GetDRMStatus([out] BSTR *pbstrDrmUuidList, [out] GUID *DrmUuid);
HRESULT GetPairingStatus([in, out] BDA_DrmPairingError *penumPairingStatus);
}
[
object,
uuid(05C690F8-56DB-4bb2-B053-79C12098BB26),
helpstring("IBDA_DRIWMDRMSession Interface"),
pointer_default(unique)
]
interface IBDA_DRIWMDRMSession: IUnknown
{
HRESULT AcknowledgeLicense([in] HRESULT hrLicenseAck);
HRESULT ProcessLicenseChallenge([in] DWORD dwcbLicenseMessage,
[in, size_is(dwcbLicenseMessage)] BYTE *pbLicenseMessage,
[in, out] DWORD *pdwcbLicenseResponse,
[in, out, size_is(* pdwcbLicenseResponse)] BYTE **ppbLicenseResponse);
HRESULT ProcessRegistrationChallenge([in] DWORD dwcbRegistrationMessage,
[in, size_is(dwcbRegistrationMessage)] BYTE *pbRegistrationMessage,
[in, out] DWORD *pdwcbRegistrationResponse,
[in, out] BYTE **ppbRegistrationResponse);
HRESULT SetRevInfo([in] DWORD dwRevInfoLen, [in, size_is(dwRevInfoLen)] BYTE *pbRevInfo,
[in, out] DWORD *pdwResponse);
HRESULT SetCrl([in] DWORD dwCrlLen, [in, size_is(dwCrlLen)] BYTE *pbCrlLen,
[in, out] DWORD *pdwResponse);
HRESULT GetHMSAssociationData(void);
HRESULT GetLastCardeaError([in, out] DWORD *pdwError);
}
[
object,
uuid(942AAFEC-4C05-4c74-B8EB-8706C2A4943F),
helpstring("IBDA_MUX Interface"),
pointer_default(unique)
]
interface IBDA_MUX: IUnknown
{
HRESULT SetPidList([in] ULONG ulPidListCount,
[in, size_is(ulPidListCount)] BDA_MUX_PIDLISTITEM *pbPidListBuffer);
HRESULT GetPidList([in, out] ULONG *pulPidListCount,
[in, out] BDA_MUX_PIDLISTITEM *pbPidListBuffer);
}
[
object,
uuid(1DCFAFE9-B45E-41b3-BB2A-561EB129AE98),
helpstring("IBDA_TransportStreamSelector Interface"),
pointer_default(unique)
]
interface IBDA_TransportStreamSelector : IUnknown
{
HRESULT SetTSID([in] USHORT usTSID);
HRESULT GetTSInformation([in, out] ULONG *pulTSInformationBufferLen,
[out, size_is(*pulTSInformationBufferLen)] BYTE *pbTSInformationBuffer);
}
[
object,
uuid(53B14189-E478-4b7a-A1FF-506DB4B99DFE),
helpstring("IBDA_UserActivityService Interface"),
pointer_default(unique)
]
interface IBDA_UserActivityService: IUnknown
{
HRESULT SetCurrentTunerUseReason([in] DWORD dwUseReason);
HRESULT GetUserActivityInterval([out] DWORD *pdwActivityInterval);
HRESULT UserActivityDetected(void);
}
/*
* Copyright 2013 André Hentschel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef BDAIFACE_ENUMS_H
#define BDAIFACE_ENUMS_H
typedef enum EntitlementType
{
Entitled,
NotEntitled,
TechnicalFailure
} EntitlementType;
typedef enum BDA_DrmPairingError
{
BDA_DrmPairing_Succeeded,
BDA_DrmPairing_HardwareFailure,
BDA_DrmPairing_NeedRevocationData,
BDA_DrmPairing_NeedIndiv,
BDA_DrmPairing_Other,
BDA_DrmPairing_DrmInitFailed,
BDA_DrmPairing_DrmNotPaired,
BDA_DrmPairing_DrmRePairSoon,
BDA_DrmPairing_Aborted,
BDA_DrmPairing_NeedSDKUpdate
} BDA_DrmPairingError;
typedef enum UICloseReasonType
{
NotReady,
UserClosed,
SystemClosed,
DeviceClosed,
ErrorClosed
} UICloseReasonType;
typedef enum LocationCodeSchemeType
{
SCTE_18
} LocationCodeSchemeType;
typedef struct SmartCardApplication
{
ApplicationTypeType ApplicationType;
USHORT ApplicationVersion;
BSTR pbstrApplicationName;
BSTR pbstrApplicationURL;
} SmartCardApplication;
typedef struct EALocationCodeType
{
LocationCodeSchemeType LocationCodeScheme;
BYTE state_code;
BYTE county_subdivision;
WORD county_code;
} EALocationCodeType;
typedef enum SmartCardStatusType
{
CardInserted,
CardRemoved,
CardError,
CardDataChanged,
CardFirmwareUpgrade
} SmartCardStatusType;
typedef enum SmartCardAssociationType
{
NotAssociated,
Associated,
AssociationUnknown
} SmartCardAssociationType;
#endif /* BDAIFACE_ENUMS_H */
/*
* Copyright 2013 André Hentschel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef _BDATYPES_
#define _BDATYPES_
typedef struct _BDANODE_DESCRIPTOR
{
ULONG ulBdaNodeType;
GUID guidFunction;
GUID guidName;
} BDANODE_DESCRIPTOR, *PBDANODE_DESCRIPTOR;
typedef struct _BDA_SIGNAL_TIMEOUTS
{
ULONG ulCarrierTimeoutMs;
ULONG ulScanningTimeoutMs;
ULONG ulTuningTimeoutMs;
} BDA_SIGNAL_TIMEOUTS, *PBDA_SIGNAL_TIMEOUTS;
typedef struct _BDA_TEMPLATE_CONNECTION
{
ULONG FromNodeType;
ULONG FromNodePinType;
ULONG ToNodeType;
ULONG ToNodePinType;
} BDA_TEMPLATE_CONNECTION, *PBDA_TEMPLATE_CONNECTION;
typedef enum MEDIA_SAMPLE_CONTENT
{
MEDIA_TRANSPORT_PACKET,
MEDIA_ELEMENTARY_STREAM,
MEDIA_MPEG2_PSI,
MEDIA_TRANSPORT_PAYLOAD
} MEDIA_SAMPLE_CONTENT;
typedef struct
{
ULONG ulPID;
MEDIA_SAMPLE_CONTENT MediaSampleContent;
} PID_MAP;
typedef enum MUX_PID_TYPE
{
PID_OTHER = -1,
PID_ELEMENTARY_STREAM,
PID_MPEG2_SECTION_PSI_SI,
} MUX_PID_TYPE;
#include <pshpack2.h>
typedef struct _BDA_MUX_PIDLISTITEM
{
USHORT usPIDNumber;
USHORT usProgramNumber;
MUX_PID_TYPE ePIDType;
} BDA_MUX_PIDLISTITEM, *PBDA_MUX_PIDLISTITEM;
#include <poppack.h>
typedef enum BDA_CONDITIONALACCESS_REQUESTTYPE
{
CONDITIONALACCESS_ACCESS_UNSPECIFIED,
CONDITIONALACCESS_ACCESS_NOT_POSSIBLE,
CONDITIONALACCESS_ACCESS_POSSIBLE,
CONDITIONALACCESS_ACCESS_POSSIBLE_NO_STREAMING_DISRUPTION
} BDA_CONDITIONALACCESS_REQUESTTYPE;
typedef enum BDA_CONDITIONALACCESS_MMICLOSEREASON
{
CONDITIONALACCESS_UNSPECIFIED,
CONDITIONALACCESS_CLOSED_ITSELF,
CONDITIONALACCESS_TUNER_REQUESTED_CLOSE,
CONDITIONALACCESS_DIALOG_TIMEOUT,
CONDITIONALACCESS_DIALOG_FOCUS_CHANGE,
CONDITIONALACCESS_DIALOG_USER_DISMISSED,
CONDITIONALACCESS_DIALOG_USER_NOT_AVAILABLE
} BDA_CONDITIONALACCESS_MMICLOSEREASON;
typedef enum BDA_CONDITIONALACCESS_SESSION_RESULT
{
CONDITIONALACCESS_SUCCESSFULL,
CONDITIONALACCESS_ENDED_NOCHANGE,
CONDITIONALACCESS_ABORTED
} BDA_CONDITIONALACCESS_SESSION_RESULT;
typedef enum BDA_DISCOVERY_STATE
{
BDA_DISCOVERY_UNSPECIFIED,
BDA_DISCOVERY_REQUIRED,
BDA_DISCOVERY_COMPLETE
} BDA_DISCOVERY_STATE;
typedef enum ApplicationTypeType
{
SCTE28_ConditionalAccess,
SCTE28_POD_Host_Binding_Information,
SCTE28_IPService,
SCTE28_NetworkInterface_SCTE55_2,
SCTE28_NetworkInterface_SCTE55_1,
SCTE28_CopyProtection,
SCTE28_Diagnostic,
SCTE28_Undesignated,
SCTE28_Reserved,
} ApplicationTypeType;
typedef enum GuardInterval
{
BDA_GUARD_NOT_SET = -1,
BDA_GUARD_NOT_DEFINED,
BDA_GUARD_1_32,
BDA_GUARD_1_16,
BDA_GUARD_1_8,
BDA_GUARD_1_4,
BDA_GUARD_1_128,
BDA_GUARD_19_128,
BDA_GUARD_19_256,
BDA_GUARD_MAX,
} GuardInterval;
typedef enum TransmissionMode
{
BDA_XMIT_MODE_NOT_SET = -1,
BDA_XMIT_MODE_NOT_DEFINED,
BDA_XMIT_MODE_2K,
BDA_XMIT_MODE_8K,
BDA_XMIT_MODE_4K,
BDA_XMIT_MODE_2K_INTERLEAVED,
BDA_XMIT_MODE_4K_INTERLEAVED,
BDA_XMIT_MODE_1K,
BDA_XMIT_MODE_16K,
BDA_XMIT_MODE_32K,
BDA_XMIT_MODE_MAX,
} TransmissionMode;
typedef enum SpectralInversion
{
BDA_SPECTRAL_INVERSION_NOT_SET = -1,
BDA_SPECTRAL_INVERSION_NOT_DEFINED,
BDA_SPECTRAL_INVERSION_AUTOMATIC,
BDA_SPECTRAL_INVERSION_NORMAL,
BDA_SPECTRAL_INVERSION_INVERTED,
BDA_SPECTRAL_INVERSION_MAX
} SpectralInversion;
typedef enum BinaryConvolutionCodeRate
{
BDA_BCC_RATE_NOT_SET = -1,
BDA_BCC_RATE_NOT_DEFINED,
BDA_BCC_RATE_1_2,
BDA_BCC_RATE_2_3,
BDA_BCC_RATE_3_4,
BDA_BCC_RATE_3_5,
BDA_BCC_RATE_4_5,
BDA_BCC_RATE_5_6,
BDA_BCC_RATE_5_11,
BDA_BCC_RATE_7_8,
BDA_BCC_RATE_1_4,
BDA_BCC_RATE_1_3,
BDA_BCC_RATE_2_5,
BDA_BCC_RATE_6_7,
BDA_BCC_RATE_8_9,
BDA_BCC_RATE_9_10,
BDA_BCC_RATE_MAX,
} BinaryConvolutionCodeRate;
typedef enum Polarisation
{
BDA_POLARISATION_NOT_SET = -1,
BDA_POLARISATION_NOT_DEFINED,
BDA_POLARISATION_LINEAR_H,
BDA_POLARISATION_LINEAR_V,
BDA_POLARISATION_CIRCULAR_L,
BDA_POLARISATION_CIRCULAR_R,
BDA_POLARISATION_MAX,
} Polarisation;
typedef enum FECMethod
{
BDA_FEC_METHOD_NOT_SET = -1,
BDA_FEC_METHOD_NOT_DEFINED,
BDA_FEC_VITERBI,
BDA_FEC_RS_204_188,
BDA_FEC_LDPC,
BDA_FEC_BCH,
BDA_FEC_RS_147_130,
BDA_FEC_MAX,
} FECMethod;
typedef enum ModulationType
{
BDA_MOD_NOT_SET = -1,
BDA_MOD_NOT_DEFINED,
BDA_MOD_16QAM,
BDA_MOD_32QAM,
BDA_MOD_64QAM,
BDA_MOD_80QAM,
BDA_MOD_96QAM,
BDA_MOD_112QAM,
BDA_MOD_128QAM,
BDA_MOD_160QAM,
BDA_MOD_192QAM,
BDA_MOD_224QAM,
BDA_MOD_256QAM,
BDA_MOD_320QAM,
BDA_MOD_384QAM,
BDA_MOD_448QAM,
BDA_MOD_512QAM,
BDA_MOD_640QAM,
BDA_MOD_768QAM,
BDA_MOD_896QAM,
BDA_MOD_1024QAM,
BDA_MOD_QPSK,
BDA_MOD_BPSK,
BDA_MOD_OQPSK,
BDA_MOD_8VSB,
BDA_MOD_16VSB,
BDA_MOD_ANALOG_AMPLITUDE,
BDA_MOD_ANALOG_FREQUENCY,
BDA_MOD_8PSK,
BDA_MOD_RF,
BDA_MOD_16APSK,
BDA_MOD_32APSK,
BDA_MOD_NBC_QPSK,
BDA_MOD_NBC_8PSK,
BDA_MOD_DIRECTV,
BDA_MOD_ISDB_T_TMCC,
BDA_MOD_ISDB_S_TMCC,
BDA_MOD_MAX,
} ModulationType;
typedef enum RollOff
{
BDA_ROLL_OFF_NOT_SET = -1,
BDA_ROLL_OFF_NOT_DEFINED,
BDA_ROLL_OFF_20,
BDA_ROLL_OFF_25,
BDA_ROLL_OFF_35,
BDA_ROLL_OFF_MAX,
} RollOff;
typedef enum Pilot
{
BDA_PILOT_NOT_SET = -1,
BDA_PILOT_NOT_DEFINED,
BDA_PILOT_OFF,
BDA_PILOT_ON,
BDA_PILOT_MAX,
} Pilot;
#endif /* _BDATYPES_ */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment