//------------------------------------------------------------------------------
// File: MSTve.idl
//
// Desc: IDL source for MSTvE.dll
//
// Copyright (c) 1999-2001, Microsoft Corporation.  All rights reserved.
//------------------------------------------------------------------------------

//
// This file will be processed by the MIDL tool to
// produce the type library (TveContr.tlb) and marshalling code.
//
//      Need to put MIDL attributes of:
//          'noncreatable' on
//          'hidden'       on
//          'nonbrowsable' on
//
//  -- _Helper interfaces need to be in the library section or else
//      can't seen them in the client
//
//  -- None of the _Helper interfaces are marked dual.  Hence they 
//     won't work up on the client... (???)
//
// ---------------------------------------------------
//      CAUTION - if you change methods below, you need to regen the proxy-stub file
//          nmake -f MSTvEps.mk
//          regsvr32 /s MSTvEps.dll
//  
//
//      Also - if you change any of the IID's, you need to 
//      rebuild ..\uuid\[]\strmiids.lib

cpp_quote("//+-------------------------------------------------------------------------")
cpp_quote("//")
cpp_quote("//  Microsoft Windows")
cpp_quote("//  Copyright (C) Microsoft Corporation, 1999-2001.")
cpp_quote("//")
cpp_quote("//--------------------------------------------------------------------------")
cpp_quote("#pragma once")

import "oaidl.idl";
import "ocidl.idl";

// forward declarations
interface ITVETrigger;
interface ITVETrack;
interface ITVEVariation;
interface ITVEEnhancement;
interface ITVEService;
interface ITVEActiveService;
interface ITVESupervisor;
interface ITVEAttrMap;
interface ITVEAttrTimeQ;

interface ITVETracks;
interface ITVEVariations;
interface ITVEEnhancements;
interface ITVEServices;

interface ITVEFile;

interface ITVESupervisor_Helper;

//  Listener..
interface ITVEMCast;
interface ITVEMCasts;
interface ITVEMCastManager;
interface ITVEMCastCallback;

//  interfaces to configure the filter and get events from,
interface ITVEFilter ;
interface ITVEFilter_Helper;

// glue stuff
interface   ITVENavAid;
interface   ITVENavAid_Helper;
interface   ITVENavAid_NoVidCtl;
interface   ITVETriggerCtrl;
interface   ITVETriggerCtrl_Helper;

interface   ITVEFeature;
interface   ITVESupervisorGITProxy;
// ----------------------------------------------------------------------------------

#define COLLECTID_Item      DISPID_VALUE    // (0)  
#define COLLECTID_Count     1               // standard set of collection interfaces
#define COLLECTID_Add       2
#define COLLECTID_Remove    3
#define COLLECTID_RemoveAll 4               // extra for maps
#define COLLECTID_Key       5   
#define COLLECTID_Replace   6       
#define COLLECTID_Insert    7       
#define COLLECTID_Update    8
    
typedef enum NENH_Mode
{
    NENH_New,
    NENH_Duplicate,
    NENH_Updated,
    NENH_Starting,
    NENH_Expired
} NENH_Mode;

typedef enum NPKG_Mode
{
    NPKG_Starting,                          // brand new packet (never seen this UUID before)
    NPKG_Received,                          // correctly received and decoded a package
    NPKG_Duplicate,                         // duplicate send of a one already successfully received (packet 0 only)
    NPKG_Resend,                            // resend of one that wasn't received correctly before (packet 0 only)
    NPKG_Expired
} NPKG_Mode;

typedef enum NTRK_Mode
{
    NTRK_New,
    NTRK_Duplicate,                         // exact duplicate of existing one
    NTRK_Updated,                           // updated version of existing one
    NTRK_Starting,                          // (not used???)
    NTRK_Expired
} NTRK_Mode;

typedef enum NFLE_Mode
{
    NFLE_Received,                          // correctly received and decoded a package
    NFLE_Expired
} NFLE_Mode;

typedef enum NTUN_Mode
{
    NTUN_New,                               // new station (service) never seen before
    NTUN_Retune,                            // tuning back to an existing station
    NTUN_Reactivate,                        // retuning to the current station
    NTUN_Turnoff,                           // turning atvef off
    NTUN_Fail                               // failed to tune for some reason
} NTUN_Mode;


typedef enum NWHAT_Mode                     // used in NotifyAuxInfo
{
    NWHAT_Announcement,
    NWHAT_Trigger,
    NWHAT_Data,
    NWHAT_Other,
    NWHAT_Extra
} NWHAT_Mode;


        

            // ---------------------------------------------------------------------

    [
        object,
        uuid(05500101-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVETrigger Interface"),
        pointer_default(unique)
    ]
    interface ITVETrigger : IDispatch
    {
        [propget, id(1), helpstring("property Parent")]         HRESULT Parent([out, retval] IUnknown* *pVal);
        [propget, id(2), helpstring("property Service")]        HRESULT Service([out, retval] ITVEService* *pVal);
        [propget, id(3), helpstring("property IsValid")]        HRESULT IsValid([out, retval] VARIANT_BOOL *pVal);
        [propget, id(4), helpstring("property URL")]            HRESULT URL([out, retval] BSTR *pVal);
        [propget, id(5), helpstring("property Name")]           HRESULT Name([out, retval] BSTR *pVal);
        [propget, id(6), helpstring("property Expires")]        HRESULT Expires([out, retval] DATE *pVal);
        [propget, id(7), helpstring("property Executes")]       HRESULT Executes([out, retval] DATE *pVal);
        [propget, id(8), helpstring("property Script")]         HRESULT Script([out, retval] BSTR *pVal);
        [propget, id(9), helpstring("property TVELevel")]       HRESULT TVELevel([out, retval] float *pVal);
        [propget, id(10), helpstring("property Rest")]          HRESULT Rest([out, retval] BSTR *pVal);
        [         id(11), helpstring("method ParseTrigger")]    HRESULT ParseTrigger([in] const BSTR rVal);
    };

    [
        object,
        uuid(05500201-FAA5-4df9-8246-BFC23AC5CEA8),
//      dual,
        hidden,
        helpstring("ITVETrigger_Helper Interface"),
        pointer_default(unique)
    ]
    interface ITVETrigger_Helper : IUnknown
    {
        [         id(1), helpstring("method ConnectParent")]    HRESULT ConnectParent([in] ITVETrack *pTrack);
        [propget, id(2), helpstring("property CRC")]            HRESULT CRC([in] const BSTR rVal, [out, retval] BSTR *pbstrCRC);
        [         id(3), helpstring("method UpdateFrom")]       HRESULT UpdateFrom([in] ITVETrigger *pTrigger, [out] long *plgrfTRKChanged);
        [         id(4), helpstring("method RemoveYourself")]   HRESULT RemoveYourself();
        [         id(5), helpstring("method DumpToBSTR")]       HRESULT DumpToBSTR([out] BSTR *pbstrBuff);
    };


// ---------------------------------------------------

    [
        object,
        uuid(05500102-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVETrack Interface"),
        pointer_default(unique)
    ]
    interface ITVETrack : IDispatch
    {
        [propget, id(1), helpstring("property Parent")]         HRESULT Parent([out, retval] IUnknown* *pVal);
        [propget, id(2), helpstring("property Service")]        HRESULT Service([out, retval] ITVEService* *pVal);
        [propget, id(3), helpstring("property Trigger")]        HRESULT Trigger([out, retval] ITVETrigger* *pVal);
        [propget, id(4), helpstring("property Description")]    HRESULT Description([out, retval] BSTR *pVal);
        [propput, id(4), helpstring("property Description")]    HRESULT Description([in] BSTR newVal);
        [         id(5), helpstring("method AttachTrigger")]    HRESULT AttachTrigger([in] ITVETrigger *pTrigger);
        [         id(6), helpstring("method ReleaseTrigger")]   HRESULT ReleaseTrigger();
        [         id(7), helpstring("method CreateTrigger")]    HRESULT CreateTrigger([in] const BSTR bstrDescription);
    };

    [
        object,
        uuid(05500202-FAA5-4df9-8246-BFC23AC5CEA8),
//      dual,
        hidden,
        helpstring("ITVETrack_Helper Interface"),
        pointer_default(unique)
    ]
    interface ITVETrack_Helper : IUnknown
    {
        [id(1), helpstring("method ConnectParent")]     HRESULT ConnectParent(ITVEVariation *pVariation);
        [id(2), helpstring("method RemoveYourself")]    HRESULT RemoveYourself();
        [id(3), helpstring("method DumpToBSTR")]        HRESULT DumpToBSTR([out] BSTR *pbstrBuff);
    };

    [
        object,
        uuid(05500112-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVETracks Interface"),
        pointer_default(unique)
    ]

    interface ITVETracks : IDispatch
    {
        [propget, id(DISPID_NEWENUM), restricted, helpstring("property _NewEnum")] HRESULT _NewEnum([out, retval] IUnknown **pCollection);
        [propget, id(COLLECTID_Count),  helpstring("property Count")]       HRESULT Count([out, retval] long *pVal);
        [propget, id(COLLECTID_Item),   helpstring("property Item")]        HRESULT Item([in] VARIANT var, [out, retval] ITVETrack * *pVal);
        [         id(COLLECTID_Add),    helpstring("method Add")]           HRESULT Add([in] ITVETrack *pTrack);
        [         id(COLLECTID_Remove), helpstring("method Remove")]        HRESULT Remove([in] VARIANT var);
        [         id(COLLECTID_RemoveAll), helpstring("method RemoveAll")]  HRESULT RemoveAll();
        [         id(COLLECTID_Insert), helpstring("method Insert")]        HRESULT Insert([in] int iLoc, [in] ITVETrack *pTrack);
    };

// ---------------------------------------------------

    [
        object,
        uuid(05500103-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVEVariation Interface"),
        pointer_default(unique)
    ]
    interface ITVEVariation : IDispatch
    {
        [propget, id(1), helpstring("property Parent")]             HRESULT Parent([out, retval] IUnknown* *pVal);
        [propget, id(2), helpstring("property Service")]            HRESULT Service([out, retval] ITVEService* *pVal);
        [propget, id(3), helpstring("property Tracks")]             HRESULT Tracks([out, retval] ITVETracks* *pVal);
        [propget, id(4), helpstring("property Description")]        HRESULT Description([out, retval] BSTR *pVal);
        [propput, id(4), helpstring("property Description")]        HRESULT Description([in] BSTR newVal);

        [propget, id(5), helpstring("property IsValid")]            HRESULT IsValid([out, retval] VARIANT_BOOL *pVal);
        [propget, id(6), helpstring("property MediaName")]          HRESULT MediaName([out, retval] BSTR *newVal);
        [propget, id(7), helpstring("property MediaTitle")]         HRESULT MediaTitle([out, retval] BSTR *newVal);
        [propget, id(8), helpstring("property FileIPAdapter")]      HRESULT FileIPAdapter([out, retval] BSTR *newVal);
        [propget, id(9), helpstring("property FileIPAddress")]      HRESULT FileIPAddress([out, retval] BSTR *newVal);
        [propget, id(10), helpstring("property FilePort")]          HRESULT FilePort([out, retval] LONG *lPort);
        [propget, id(11), helpstring("property TriggerIPAdapter")]  HRESULT TriggerIPAdapter([out, retval] BSTR *newVal);
        [propget, id(12), helpstring("property TriggerIPAddress")]  HRESULT TriggerIPAddress([out, retval] BSTR *newVal);
        [propget, id(13), helpstring("property TriggerPort")]       HRESULT TriggerPort([out, retval] LONG *lPort);
        [propget, id(14),helpstring("property Languages")]          HRESULT Languages([out, retval] ITVEAttrMap* *ppVal);
        [propget, id(15),helpstring("property SDPLanguages")]       HRESULT SDPLanguages([out, retval] ITVEAttrMap* *ppVal);
        [propget, id(16),helpstring("property Bandwidth")]          HRESULT Bandwidth([out, retval] LONG *lVal);
        [propget, id(17),helpstring("property BandwidthInfo")]      HRESULT BandwidthInfo([out, retval] BSTR *newVal);
        [propget, id(18),helpstring("property Attributes")]         HRESULT Attributes([out, retval] ITVEAttrMap* *ppVal);

        [propget, id(19),helpstring("property Rest")]               HRESULT Rest([out, retval] ITVEAttrMap* *ppVal);
        [         id(20),helpstring("method Initialize")]           HRESULT Initialize([in] BSTR newVal);
    };

    [
        object,
        uuid(05500203-FAA5-4df9-8246-BFC23AC5CEA8),
//      dual,
        hidden,
        helpstring("ITVEVariation_Helper Interface"),
        pointer_default(unique)
    ]
    interface ITVEVariation_Helper : IUnknown
    {
        [           id(1),  helpstring("method ConnectParent")]         HRESULT ConnectParent([in] ITVEEnhancement *pEnhancement);
        [           id(2),  helpstring("method DefaultTo")]             HRESULT DefaultTo([in] ITVEVariation *pVariationBase);
        [           id(3),  helpstring("method SetTriggerIPAdapter")]   HRESULT SetTriggerIPAdapter([in] BSTR bstrBuff);
        [           id(4),  helpstring("method SetFileIPAdapter")]      HRESULT SetFileIPAdapter([in] BSTR bstrBuff);
        [           id(5),  helpstring("method SubParseSDP")]           HRESULT SubParseSDP(const BSTR *pbstrSDP, BOOL *pfMissingMedia);
        [           id(6),  helpstring("method ParseCBTrigger")]        HRESULT ParseCBTrigger(BSTR bstrTrig);
        [           id(7),  helpstring("method FinalParseSDP")]         HRESULT FinalParseSDP();
        [           id(8),  helpstring("method UpdateVariation")]       HRESULT UpdateVariation(ITVEVariation *pVarNew, long *plNVAR_grfChanged);
        [           id(9),  helpstring("method InitAsXOver")]           HRESULT InitAsXOver();
        [           id(11), helpstring("method NewXOverLink")]          HRESULT NewXOverLink([in] BSTR bstrLine21Trigger);
        [           id(12), helpstring("method RemoveYourself")]        HRESULT RemoveYourself();
        [propput,   id(13), helpstring("property MediaTitle")]          HRESULT MediaTitle([in] BSTR bstrBuff);
        [propput,   id(14), helpstring("property IsValid")]             HRESULT IsValid([in] VARIANT_BOOL fValid);
        [           id(15), helpstring("method DumpToBSTR")]            HRESULT DumpToBSTR([out] BSTR *bstrBuff);
    };

    [
        object,
        uuid(05500113-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVEVariations Interface"),
        pointer_default(unique)
    ]   
    interface ITVEVariations : IDispatch
    {
        [propget, id(DISPID_NEWENUM), restricted, helpstring("property _NewEnum")] HRESULT _NewEnum([out, retval] IUnknown **pCollection);
        [propget, id(COLLECTID_Count),  helpstring("property Count")]       HRESULT Count([out, retval] long *pVal);
        [propget, id(COLLECTID_Item),   helpstring("property Item")]        HRESULT Item([in] VARIANT var, [out, retval] ITVEVariation * *pVal);
        [         id(COLLECTID_Add),    helpstring("method Add")]           HRESULT Add([in] ITVEVariation *pEnh);
        [         id(COLLECTID_Remove), helpstring("method Remove")]        HRESULT Remove([in] VARIANT var);
        [         id(COLLECTID_RemoveAll), helpstring("method RemoveAll")]  HRESULT RemoveAll();
        [         id(COLLECTID_Insert), helpstring("method Insert")]        HRESULT Insert([in] int iLoc, [in] ITVEVariation *pEnh);
    };
// ---------------------------------------------------
    [
        object,
        uuid(05500104-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVEEnhancement Interface"),
        pointer_default(unique)
    ]
    interface ITVEEnhancement : IDispatch
    {
        [propget, id(1),  helpstring("property Parent")]            HRESULT Parent([out, retval] IUnknown* *pVal);
        [propget, id(2),  helpstring("property Service")]           HRESULT Service([out, retval] ITVEService* *pVal);
        [propget, id(3),  helpstring("property Variations")]        HRESULT Variations([out, retval] ITVEVariations* *pVal);

        [propget, id(4),  helpstring("property IsValid")]           HRESULT IsValid([out, retval] VARIANT_BOOL *pVal);
        [propget, id(5),  helpstring("property ProtocolVersion")]   HRESULT ProtocolVersion([out, retval] BSTR *pVal);
        [propget, id(6),  helpstring("property SessionUserName")]   HRESULT SessionUserName([out, retval] BSTR *pVal);
        [propget, id(7),  helpstring("property SessionId")]         HRESULT SessionId([out, retval] LONG *plVal);
        [propget, id(8),  helpstring("property SessionVersion")]    HRESULT SessionVersion([out, retval] LONG *plVal);
        [propget, id(9),  helpstring("property SessionIPAddress")]  HRESULT SessionIPAddress([out, retval] BSTR *pVal);
        [propget, id(10), helpstring("property SessionName")]       HRESULT SessionName([out, retval] BSTR *pVal);
        [propget, id(11), helpstring("property EmailAddresses")]    HRESULT EmailAddresses([out, retval] ITVEAttrMap* *pVal);
        [propget, id(12), helpstring("property PhoneNumbers")]      HRESULT PhoneNumbers([out, retval] ITVEAttrMap* *pVal);

        [propget, id(13), helpstring("property Description")]       HRESULT Description([out, retval] BSTR *pVal);
        [propput, id(13), helpstring("property Description")]       HRESULT Description([in] BSTR newVal);
        [propget, id(14), helpstring("property DescriptionURI")]    HRESULT DescriptionURI([out, retval] BSTR *pVal);

        [propget, id(15), helpstring("property UUID")]              HRESULT UUID([out, retval] BSTR *pVal);
        [propget, id(16), helpstring("property StartTime")]         HRESULT StartTime([out, retval] DATE *pVal);
        [propget, id(17), helpstring("property StopTime")]          HRESULT StopTime([out, retval] DATE *pVal);
        [propget, id(18), helpstring("property IsPrimary")]         HRESULT IsPrimary([out, retval] VARIANT_BOOL *pVal);

        [propget, id(19), helpstring("property Type")]              HRESULT Type([out, retval] BSTR *pVal);
        [propget, id(20), helpstring("property TveType")]           HRESULT TveType([out, retval] BSTR *pVal);
        [propget, id(21), helpstring("property TveSize")]           HRESULT TveSize([out, retval] LONG *plVal);
        [propget, id(23), helpstring("property TveLevel")]          HRESULT TveLevel([out, retval] double *pVal);
    
        [propget, id(24), helpstring("property Attributes")]        HRESULT Attributes([out, retval] ITVEAttrMap* *pVal);
        [propget, id(25), helpstring("property Rest")]              HRESULT Rest([out, retval] ITVEAttrMap* *pVal);

        [propget, id(26), helpstring("property SAPHeaderBits")]     HRESULT SAPHeaderBits([out, retval] short *pVal);
        [propget, id(27), helpstring("property SAPAuthLength")]     HRESULT SAPAuthLength([out, retval] short *pVal);
        [propget, id(28), helpstring("property SAPMsgIDHash")]      HRESULT SAPMsgIDHash([out, retval] LONG *pVal);
        [propget, id(29), helpstring("property SAPSendingIP")]      HRESULT SAPSendingIP([out, retval] BSTR *pVal);
        [propget, id(30), helpstring("property SAPAuthData")]       HRESULT SAPAuthData([out, retval] BSTR *pVal);

        [         id(31), helpstring("method ParseAnnouncement")]   HRESULT ParseAnnouncement([in] BSTR bstrAdapter, [in] const BSTR *pbstVal, [out] long *plgrfParseError, [out] long *plLineError);
    };


    [
        object,
        uuid(05500204-FAA5-4df9-8246-BFC23AC5CEA8),
//      dual,
        hidden,
        helpstring("ITVEEnhancement_Helper Interface"),
        pointer_default(unique)
    ]
    interface ITVEEnhancement_Helper : IUnknown
    {
        [id(0), helpstring("method ConnectParent")]     HRESULT ConnectParent(ITVEService *pService);
        [id(1), helpstring("method Activate")]          HRESULT Activate();
        [id(2), helpstring("method Deactivate")]        HRESULT Deactivate();
        [id(3), helpstring("method UpdateEnhancement")] HRESULT UpdateEnhancement([in] ITVEEnhancement *pEnhNew,[out] long *plNENH_grfChanged);
        [id(4), helpstring("method InitAsXOver")]       HRESULT InitAsXOver();
        [id(5), helpstring("method NewXOverLink")]      HRESULT NewXOverLink([in] BSTR bstrLine21Trigger);
        [id(6), helpstring("method RemoveYourself")]    HRESULT RemoveYourself();
        [id(7), helpstring("method DumpToBSTR")]        HRESULT DumpToBSTR([out] BSTR *pbstrBuff);
    };


    [
        object,
        uuid(05500114-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVEEnhancements Interface"),
        pointer_default(unique)
    ]

    interface ITVEEnhancements : IDispatch
    {
        [propget, id(DISPID_NEWENUM), restricted, helpstring("property _NewEnum")] HRESULT _NewEnum([out, retval] IUnknown **pCollection);
        [propget, id(COLLECTID_Count),  helpstring("property Count")]       HRESULT Count([out, retval] long *pVal);
        [propget, id(COLLECTID_Item),   helpstring("property Item")]        HRESULT Item([in] VARIANT var, [out, retval] ITVEEnhancement * *pVal);
        [         id(COLLECTID_Add),    helpstring("method Add")]           HRESULT Add([in] ITVEEnhancement *pEnh);
        [         id(COLLECTID_Remove), helpstring("method Remove")]        HRESULT Remove([in] VARIANT var);
        [         id(COLLECTID_RemoveAll), helpstring("method RemoveAll")]  HRESULT RemoveAll();
        [         id(COLLECTID_Insert), helpstring("method Insert")]        HRESULT Insert([in] int iLoc, [in] ITVEEnhancement *pEnh);
    };
// ---------------------------------------------------

    [
        object,
        uuid(05500105-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVEService Interface"),
        pointer_default(unique)
    ]
    interface ITVEService : IDispatch
    {
        [propget, id(1), helpstring("property Parent")]         HRESULT Parent([out, retval] IUnknown* *pVal);
        [propget, id(2), helpstring("property Enhancements")]   HRESULT Enhancements([out, retval] ITVEEnhancements* *pVal);
        [propget, id(3), helpstring("property Description")]    HRESULT Description([out, retval] BSTR *pVal);
        [propput, id(3), helpstring("property Description")]    HRESULT Description([in] BSTR newVal);
        [         id(4), helpstring("method Activate")]         HRESULT Activate();     // used in tuning, turns on announcement
        [         id(5), helpstring("method Deactivate")]       HRESULT Deactivate();       // used in tuning, turns off announcement
        [propget, id(6), helpstring("property XOverLinks")]     HRESULT XOverLinks([out, retval] ITVETracks* *pVal);    // returns ITVETracks (Collection)
        [propget, id(7),helpstring("property XOverEnhancement")] HRESULT XOverEnhancement([out, retval] ITVEEnhancement* *pVal);    // special for tree view...
        [         id(8), helpstring("method NewXOverLink")]     HRESULT NewXOverLink([in] BSTR bstrLine21Trigger);
            // Set date offset used added to dates before expiring.  
            //  Used when doing playback recorded shows, offseting expire dates by this amount
        [propget, id(9), helpstring("property ExpireOffset")]   HRESULT ExpireOffset([out, retval] DATE *pVal);
        [propput, id(9), helpstring("property ExpireOffset")]   HRESULT ExpireOffset([in] DATE newVal);
                // return the ITVEAttrTimeQ list giving dates of IUnknowns in this service are due to expire
        [propget, id(10), helpstring("property ExpireQueue")]   HRESULT ExpireQueue([out, retval] ITVEAttrTimeQ* *pVal);
                // Expires any items earlier than the specified date + ExpireOffset
                //    If ezactly zero, Date defaults to <NOW>.
        [         id(11),helpstring("method ExpireForDate")]    HRESULT ExpireForDate([in] DATE dateExpireTime);
                // Mark Service active, only one Active service currently allowed .. turns off all others.
        [propget, id(12), helpstring("IsActive")]               HRESULT IsActive([out, retval] VARIANT_BOOL *fIsActive);
                // save and restore an arbitrary property on this service... (Useful with ITVENavAid::CacheState())
        [propput, id(13), helpstring("Property")]               HRESULT Property([in] BSTR bstrPropName, BSTR bstrPropVal);
        [propget, id(13), helpstring("Property")]               HRESULT Property([in] BSTR bstrPropName, [out, retval] BSTR *pbstrPropVal);
    };

    [
        object,
        uuid(05500205-FAA5-4df9-8246-BFC23AC5CEA8),
//      dual,
        hidden,
        helpstring("ITVEService_Helper Interface"),
        pointer_default(unique)
    ]
    interface ITVEService_Helper : IUnknown
    {
        [         id(1),  helpstring("method ConnectParent")]               HRESULT ConnectParent([in] ITVESupervisor *pSupervisor);
        [         id(2),  helpstring("method ParseCBAnnouncement")]         HRESULT ParseCBAnnouncement([in] BSTR bstrFileTrigAdapter,[in] BSTR *pbstrBuff);
        [         id(3),  helpstring("method SetAnncIPValues")]             HRESULT SetAnncIPValues([in] BSTR bstrAnncIPAdapter,[in] BSTR bstrAnncIPAddress,[in] LONG lAnncPort);
        [         id(4),  helpstring("method GetAnncIPValues")]             HRESULT GetAnncIPValues([in] BSTR *pbstrAnncIPAdapter,[in] BSTR *pbstrAnncIPAddress,[in] LONG *plAnncPort);
        [         id(5),  helpstring("method InitXOverEnhancement")]        HRESULT InitXOverEnhancement();
        [         id(6),  helpstring("method AddToExpireQueue")]            HRESULT AddToExpireQueue([in] DATE dateExpires, [in] IUnknown *punkItem);
        [         id(7),  helpstring("method ChangeInExpireQueue")]         HRESULT ChangeInExpireQueue([in] DATE dateExpires, [in] IUnknown *punkItem);
        [         id(8),  helpstring("method RemoveFromExpireQueue")]       HRESULT RemoveFromExpireQueue([in] IUnknown *punkItem);
        [         id(9),  helpstring("method RemoveEnhFilesFromExpireQueue")]   HRESULT RemoveEnhFilesFromExpireQueue([in] ITVEEnhancement *pEnhancement);
        [propget, id(10), helpstring("method ExpireQueueChangeCount")]      HRESULT ExpireQueueChangeCount([out, retval] long *pChangeCount);
        [         id(11), helpstring("method RemoveYourself")]              HRESULT RemoveYourself();
        [         id(12), helpstring("method DumpToBSTR")]                  HRESULT DumpToBSTR([out] BSTR *pbstrBuff);
    };


    [
        object,
        uuid(05500305-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVEFeature Interface (Inherits ITVEService)"),
        pointer_default(unique)
    ]
    interface ITVEFeature : ITVEService
    {
            // New methods just for the Feature
        [id(101),       helpstring("method TuneTo")]                    HRESULT TuneTo([in] BSTR bstrStation, [in] BSTR bstrIPAdapter);
        [id(102),       helpstring("method ReTune")]                    HRESULT ReTune([in] ITVEService *pService);
        [id(103),       helpstring("method BindToSupervisor")]          HRESULT BindToSupervisor([in] ITVESupervisor *pTVESupervisor);
            // these are incoming events called by Supervisor ((_ITVEvents).. Must match
        [id(2101),  helpstring("method NotifyTVETune")]                 HRESULT NotifyTVETune([in] NTUN_Mode tuneMode, [in] ITVEService *pService, [in] BSTR bstrDescription, [in] BSTR bstrIPAdapter);
        [id(2102),  helpstring("method NotifyTVEEnhancementNew")]       HRESULT NotifyTVEEnhancementNew([in] ITVEEnhancement *pEnh);
        [id(2103),  helpstring("method NotifyTVEEnhancementUpdated")]   HRESULT NotifyTVEEnhancementUpdated([in] ITVEEnhancement *pEnh, [in] long lChangedFlags);   // changedFlags : NENH_grfDiff
        [id(2104),  helpstring("method NotifyTVEEnhancementStarting")]  HRESULT NotifyTVEEnhancementStarting([in] ITVEEnhancement *pEnh);
        [id(2105),  helpstring("method NotifyTVEEnhancementExpired")]   HRESULT NotifyTVEEnhancementExpired([in] ITVEEnhancement *pEnh);
        [id(2106),  helpstring("method NotifyTVETriggerNew")]           HRESULT NotifyTVETriggerNew([in] ITVETrigger *pTrigger,[in]  BOOL fActive);
        [id(2107),  helpstring("method NotifyTVETriggerUpdated")]       HRESULT NotifyTVETriggerUpdated([in] ITVETrigger *pTrigger,[in]  BOOL fActive, [in] long lChangedFlags);    // changedFlags : NTRK_grfDiff
        [id(2108),  helpstring("method NotifyTVETriggerExpired")]       HRESULT NotifyTVETriggerExpired([in] ITVETrigger *pTrigger,[in]  BOOL fActive);
        [id(2109),  helpstring("method NotifyTVEPackage")]              HRESULT NotifyTVEPackage([in] NPKG_Mode engPkgMode, [in] ITVEVariation *pVariation, [in] BSTR bstrUUID, [in] long  cBytesTotal, [in] long  cBytesReceived);
        [id(2110),  helpstring("method NotifyTVEFile")]                 HRESULT NotifyTVEFile([in] NFLE_Mode engFileMode, [in] ITVEVariation *pVariation, [in] BSTR bstrUrlName, [in] BSTR bstrFileName);
        [id(2111),  helpstring("method NotifyTVEAuxInfo")]              HRESULT NotifyTVEAuxInfo([in] NWHAT_Mode engAuxInfoMode, [in] BSTR bstrAuxInfoString, [in] long lChangedFlags, [in] long lErrorLine); // WhatIsIt is NWHAT_Mode - lChangedFlags is NENH_grfDiff or NTRK_grfDiff treated as error bits 

    };

    [
        object,
        uuid(05500115-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVEServices Interface"),
        pointer_default(unique)
    ]
    interface ITVEServices : IDispatch
    {
        [propget, id(DISPID_NEWENUM),   restricted, helpstring("property _NewEnum")] HRESULT _NewEnum([out, retval] IUnknown **pCollection);
        [propget, id(COLLECTID_Count),  helpstring("property Count")]       HRESULT Count([out, retval] long *pVal);
        [propget, id(COLLECTID_Item),   helpstring("property Item")]        HRESULT Item([in] VARIANT var, [out, retval] ITVEService * *pVal);
        [         id(COLLECTID_Add),    helpstring("method Add")]           HRESULT Add([in] ITVEService *pService);
        [         id(COLLECTID_Remove), helpstring("method Remove")]        HRESULT Remove([in] VARIANT var);
        [         id(COLLECTID_RemoveAll), helpstring("method RemoveAll")]  HRESULT RemoveAll();
        [         id(COLLECTID_Insert), helpstring("method Insert")]        HRESULT Insert([in] int iLoc, [in] ITVEService *pService);
    };


// ---------------------------------------------------

    [
        object,
        uuid(05500106-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVESupervisor Interface"),
        pointer_default(unique)
    ]

    interface ITVESupervisor : IDispatch
    {
        [propget, id(1), helpstring("property Services")]       HRESULT Services([out, retval] ITVEServices* *pVal);
        [propget, id(2), helpstring("property Description")]    HRESULT Description([out, retval] BSTR *pVal);
        [propput, id(2), helpstring("property Description")]    HRESULT Description([in] BSTR newVal);
        [         id(3), helpstring("method TuneTo")]           HRESULT TuneTo([in] BSTR bstrDescription, [in] BSTR bstrIPAdapter);
        [         id(4), helpstring("method ReTune")]           HRESULT ReTune([in] ITVEService *pService);

        [         id(5), helpstring("method NewXOverLink")]     HRESULT NewXOverLink([in] BSTR bstrLine21Trigger);
                // Expires any items earlier than the specified date + service.ExpireOffset
                //    If ezactly zero, Date defaults to <NOW>.
        [         id(6), helpstring("method ExpireForDate")]    HRESULT ExpireForDate([in] DATE dateExpireTime);

                // need to be here rather than Helper, since called from Filter, and Supervisor_Helper
                //    not in the proxy-stub DLL
        [         id(7), restricted, helpstring("method InitStats")]    HRESULT InitStats();
        [         id(8), restricted, helpstring("method GetStats")]     HRESULT GetStats([out] BSTR *pbstrBuff);  // CTVEStats
    };

    [
        object,
        uuid(05500206-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        hidden,
        helpstring("ITVESupervisor_Helper Interface"),
        pointer_default(unique)
    ]
    interface ITVESupervisor_Helper : IUnknown
    {
        [id(1), helpstring("method ConnectParent")]             HRESULT ConnectParent([in] IUnknown *pUnk);
        [id(2), helpstring("method GetActiveService")]          HRESULT GetActiveService([out] ITVEService **ppActiveService);
        [id(3), helpstring("method GetMCastManager")]           HRESULT GetMCastManager([out] ITVEMCastManager **pMCastManager);
        [id(4), helpstring("method UnpackBuffer")]              HRESULT UnpackBuffer([in] IUnknown *pTVEVariation, [in] unsigned char *m_rgbData, [in] int cBytes);

        [id(5), helpstring("method NotifyEnhancement")]         HRESULT NotifyEnhancement([in] NENH_Mode enhMode,[in]  ITVEEnhancement *pEnhancement,[in] long lChangedFlags);  // changedFlags NENH_grfDiff
        [id(6), helpstring("method NotifyTrigger")]             HRESULT NotifyTrigger([in] NTRK_Mode trgMode,[in]  ITVETrack *pTrack,[in]  long lChangedFlags);                 // changedFlags NTRK_grfDiff
        [id(7), helpstring("method NotifyPackage")]             HRESULT NotifyPackage([in] NPKG_Mode pkgMode, [in] ITVEVariation *pVariation, [in] BSTR bstrPackageUUID, [in] long cBytesTotal, [in] long cBytesReceived);
        [id(8), helpstring("method NotifyFile")]                HRESULT NotifyFile([in] NFLE_Mode fileMode, [in] ITVEVariation *pVariation, [in] BSTR bstrURLName, [in] BSTR bstrFileName);
        [id(9), helpstring("method NotifyTune")]                HRESULT NotifyTune([in] NTUN_Mode tuneMode, [in] ITVEService *pService, [in] BSTR bstrDescription, [in] BSTR bstrIPAdapter);
                        // WhatIsIt is NWHAT_Mode - lChangedFlags is NENH_grfDiff or NTRK_grfDiff treated as error bits
        [id(10), helpstring("method NotifyAuxInfo")]            HRESULT NotifyAuxInfo([in] NWHAT_Mode whatMode, [in] BSTR bstrAuxInfoString, [in] long lgrfWhatDiff, [in] long lLineError);

        [id(11), helpstring("method NotifyEnhancement_XProxy")] HRESULT NotifyEnhancement_XProxy([in] NENH_Mode enhMode,[in] ITVEEnhancement *pEnhancement,[in] long lChangedFlags);    // changedFlags NENH_grfDiff
        [id(12), helpstring("method NotifyTrigger_XProxy")]     HRESULT NotifyTrigger_XProxy([in] NTRK_Mode trgMode,[in]  ITVETrack *pTrack,[in]  long lChangedFlags);                  // changedFlags NTRK_grfDiff
        [id(13), helpstring("method NotifyPackage_XProxy")]     HRESULT NotifyPackage_XProxy( NPKG_Mode pkgMode, ITVEVariation *pVariation,BSTR bstrPackageUUID, long cBytesTotal,long cBytesReceived);
        [id(14), helpstring("method NotifyFile_XProxy")]        HRESULT NotifyFile_XProxy([in] NFLE_Mode fileMode, [in] ITVEVariation *pVariation, [in] BSTR bstrURLName, [in] BSTR bstrFileName);
        [id(15), helpstring("method NotifyTune_XProxy")]        HRESULT NotifyTune_XProxy([in] NTUN_Mode tuneMode, [in] ITVEService *pService, [in] BSTR bstrDescription, [in] BSTR bstrIPAdapter);
        [id(16), helpstring("method NotifyAuxInfo_XProxy")]     HRESULT NotifyAuxInfo_XProxy([in] NWHAT_Mode whatMode, [in] BSTR bstrAuxInfoString, [in] long lgrfWhatDiff,[in] long lLineError);

        [propget, id(17),  helpstring("property HaltFlags")]    HRESULT HaltFlags([out, retval] LONG *plGrfHaltFlags);
        [propput, id(17),  helpstring("property HaltFlags")]    HRESULT HaltFlags([in] LONG lGrfHaltFlags);

        [         id(18),  helpstring("method RemoveAllListenersOnAdapter")]    HRESULT RemoveAllListenersOnAdapter([in] BSTR bstrAdapter);
        [propget, id(19),  helpstring("method PossibleIPAdapterAddress")]       HRESULT PossibleIPAdapterAddress([in] int iAdapter, [out,retval] BSTR *pbstrIPAdapterAddr);
        [         id(20), helpstring("method DumpToBSTR")]              HRESULT DumpToBSTR([out] BSTR *pbstrBuff);

        [propget, id(21), helpstring("property SupervisorGITProxy")]        HRESULT SupervisorGITProxy([out] ITVESupervisorGITProxy **ppSupervisorGITProxy);        // internal GIT refcounted pointer to supervisor 
    };

    [
        hidden,
        object,
        uuid(05500306-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVESupervisorGITProxy Interface"),
        pointer_default(unique)
    ]

    interface ITVESupervisorGITProxy: IUnknown
    {
        [propget, id(1), helpstring("property Supervisor")]     HRESULT Supervisor([out, retval] ITVESupervisor **ppVal);
        [propput, id(1), helpstring("property Supervisor")]     HRESULT Supervisor([in] ITVESupervisor  *pVal);
    };

// ---------------------------------------------------

            // ---------------------------------
    [
        object,
        uuid(05500121-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVEAttrMap Interface"),
        pointer_default(unique)
    ]
    interface ITVEAttrMap : IDispatch
    {
        [propget, id(DISPID_NEWENUM), restricted, helpstring("property _NewEnum")] HRESULT _NewEnum([out, retval] IUnknown **pCollection);
        [propget, id(COLLECTID_Count),     helpstring("property Count")]   HRESULT Count([out, retval] long *pVal);
        [propget, id(COLLECTID_Item),      helpstring("property Item")]    HRESULT Item([in] VARIANT var, [out, retval] BSTR *pVal);
        [propget, id(COLLECTID_Key),       helpstring("property Key")]     HRESULT Key([in] VARIANT var, [out, retval] BSTR *pKey);
        [         id(COLLECTID_Add),       helpstring("method Add")]       HRESULT Add([in] BSTR bstrKey, [in] BSTR bstrValue);
        [         id(COLLECTID_Replace),   helpstring("method Replace")]   HRESULT Replace([in] BSTR bstrKey, [in] BSTR bstrValue);
        [         id(COLLECTID_Remove),    helpstring("method Remove")]    HRESULT Remove([in] VARIANT var);
        [         id(COLLECTID_RemoveAll), helpstring("method RemoveAll")] HRESULT RemoveAll();
        [         id(7),                   helpstring("method Add1")]      HRESULT Add1(BSTR bstrValue);
        [         id(8),                   helpstring("method DumpToBSTR")] HRESULT DumpToBSTR([out] BSTR *pDump);
    };

// ---------------------------------------------------

            // ---------------------------------
    [
        object,
        uuid(05500122-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVEAttrTimeQ Interface"),
        pointer_default(unique)
    ]
    interface ITVEAttrTimeQ : IDispatch
    {
        [propget, id(DISPID_NEWENUM), restricted, helpstring("property _NewEnum")] HRESULT _NewEnum([out, retval] IUnknown **pCollection);
        [propget, id(COLLECTID_Count),     helpstring("property Count")]   HRESULT Count([out, retval] long *pVal);
        [propget, id(COLLECTID_Item),      helpstring("property Item")]    HRESULT Item([in] VARIANT var, [out, retval] IUnknown **ppVal);
        [propget, id(COLLECTID_Key),       helpstring("property Key")]     HRESULT Key([in] VARIANT var, [out, retval] DATE *pKey);
        [         id(COLLECTID_Add),       helpstring("method Add")]       HRESULT Add([in] DATE dateKey, [in] IUnknown *pUnk);
        [         id(COLLECTID_Remove),    helpstring("method Remove")]    HRESULT Remove([in] VARIANT var);
        [         id(COLLECTID_RemoveAll), helpstring("method RemoveAll")] HRESULT RemoveAll();
        [         id(COLLECTID_Update),    helpstring("method Update")]    HRESULT Update([in] DATE dateKey, [in] IUnknown *pUnk);
        [         id(9),                   helpstring("method LockRead")]    HRESULT LockRead();
        [         id(10),                  helpstring("method LockWrite")]   HRESULT LockWrite();
        [         id(11),                  helpstring("method Unlock")]      HRESULT Unlock();
        [         id(12),                  helpstring("method RemoveSimple")]    HRESULT RemoveSimple([in] VARIANT var);    // remove without calling var->RemoveYourself()
        [         id(13),                  helpstring("method DumpToBSTR")] HRESULT DumpToBSTR([out] BSTR *pDump);
    };

// ---------------------------------------------------
    [
        object,
        uuid(05500130-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVEMCast Interface"),
        pointer_default(unique)
    ]
    interface ITVEMCast : IDispatch
    {
        [propget, id(1),  helpstring("property IPAdapter")]     HRESULT IPAdapter([out, retval] BSTR *pVal);
        [propput, id(1),  helpstring("property IPAdapter")]     HRESULT IPAdapter([in] BSTR newVal);
        [propget, id(2),  helpstring("property IPAddress")]     HRESULT IPAddress([out, retval] BSTR *pVal);
        [propput, id(2),  helpstring("property IPAddress")]     HRESULT IPAddress([in] BSTR newVal);
        [propget, id(3),  helpstring("property IPPort")]        HRESULT IPPort([out, retval] long *pVal);
        [propput, id(3),  helpstring("property IPPort")]        HRESULT IPPort([in] long newVal);
        [         id(4),  helpstring("method Join")]            HRESULT Join();
        [         id(5),  helpstring("method Leave")]           HRESULT Leave();
        [propget, id(6),  helpstring("property IsJoined")]      HRESULT IsJoined([out, retval] VARIANT_BOOL *pVal);
        [propget, id(7),  helpstring("property IsSuspended")]   HRESULT IsSuspended([out, retval] VARIANT_BOOL *pVal);
        [         id(8),  helpstring("method Suspend")]         HRESULT Suspend(VARIANT_BOOL fSuspend);
        [propget, id(9),  helpstring("property PacketCount")]   HRESULT PacketCount([out, retval] long *pVal);
        [propget, id(10), helpstring("property ByteCount")]     HRESULT ByteCount([out, retval] long *pVal);
        [         id(11), helpstring("method KeepStats")]       HRESULT KeepStats(VARIANT_BOOL fKeepStats);
        [         id(12), helpstring("method ResetStats")]      HRESULT ResetStats();
        [         id(13), helpstring("method SetReadCallback")] HRESULT SetReadCallback([in] int nBuffers, [in] int iPrioritySetback, [in] IUnknown *pVal);
        [         id(14), helpstring("method ConnectManager")]  HRESULT ConnectManager([in] ITVEMCastManager* pVal);
        [propget, id(15), helpstring("property Manager")]       HRESULT Manager([out, retval] IUnknown* *ppVal);
        [propget, id(16), helpstring("property QueueThreadId")] HRESULT QueueThreadId([out, retval] long* pVal);
        [propput, id(16), helpstring("property QueueThreadId")] HRESULT QueueThreadId([in] long pVal);
        [propget, id(17), helpstring("property WhatType")]      HRESULT WhatType([out, retval] NWHAT_Mode *pWhatType);
        [propput, id(17), helpstring("property WhatType")]      HRESULT WhatType([in] NWHAT_Mode whatType);
    };

    [
        object,
        uuid(05500131-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVEMCasts Interface"),
        pointer_default(unique)
    ]
    interface ITVEMCasts : IDispatch
    {
        [propget, id(DISPID_NEWENUM), restricted, helpstring("property _NewEnum")] HRESULT _NewEnum([out, retval] IUnknown **pCollection);
        [propget, id(COLLECTID_Count),  helpstring("property Count")]       HRESULT Count([out, retval] long *pVal);
        [propget, id(COLLECTID_Item),   helpstring("property Item")]        HRESULT Item([in] VARIANT var, [out, retval] ITVEMCast * *pVal);
        [         id(COLLECTID_Add),    helpstring("method Add")]           HRESULT Add([in] ITVEMCast *punk);
        [         id(COLLECTID_Remove), helpstring("method Remove")]        HRESULT Remove([in] VARIANT var);
        [         id(COLLECTID_RemoveAll), helpstring("method RemoveAll")]  HRESULT RemoveAll();
    };
    [
        object,
        uuid(05500132-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVEMCastManager Interface"),
        pointer_default(unique)
    ]
    interface ITVEMCastManager : IDispatch
    {
        [propget, id(1), helpstring("property MCasts")]         HRESULT MCasts([out, retval] ITVEMCasts* *pVal);
        [propget, id(2), helpstring("property Supervisor")]     HRESULT Supervisor([out, retval] ITVESupervisor* *ppSupervisor);
        [propput, id(2), helpstring("property Supervisor")]     HRESULT Supervisor([in] ITVESupervisor *pSupervisor);
        [         id(3), helpstring("method AddMulticast")]     HRESULT AddMulticast([in] NWHAT_Mode whatType, [in] BSTR bsAdapter, [in] BSTR bsIPAddress, [in] LONG ulIPPort, [in] LONG cBuffers, [in] IUnknown *pICallback, [out] ITVEMCast **ppMCastAdded);
        [         id(4), helpstring("method FindMulticast")]    HRESULT FindMulticast([in] BSTR bstrIPAdapter, [in] BSTR bstrIPAddress, [in] LONG sPort,  [out] ITVEMCast **ppMCast, [out] LONG *pcMatches);
        [         id(5), helpstring("method RemoveMulticast")]  HRESULT RemoveMulticast(ITVEMCast *pMCast);
        [         id(6), helpstring("method JoinAll")]          HRESULT JoinAll();
        [         id(7), helpstring("method LeaveAll")]         HRESULT LeaveAll();
        [         id(8), helpstring("method SuspendAll")]       HRESULT SuspendAll([in] VARIANT_BOOL fSuspend);
        [         id(9), helpstring("method Lock_")]            HRESULT Lock_();
        [         id(10), helpstring("method Unlock_")]         HRESULT Unlock_();
        [         id(11), helpstring("method DumpStatsToBSTR")] HRESULT DumpStatsToBSTR(int iType, BSTR *pBSTR);
        [propget, id(13), helpstring("property HaltFlags")]     HRESULT HaltFlags([out, retval] LONG *plGrfHaltFlags);
        [propput, id(13), helpstring("property HaltFlags")]     HRESULT HaltFlags([in] LONG lGrfHaltFlags);
    };

    [
        object,
        uuid(05500232-FAA5-4df9-8246-BFC23AC5CEA8),
//      dual,
        hidden,
        helpstring("ITVEMCastManager_Helper Interface"),
        pointer_default(unique)
    ]
    interface ITVEMCastManager_Helper : IUnknown
    {
        [         id(1), helpstring("method DumpString")]           HRESULT DumpString(BSTR bstrDump);  // writes string to a Dump.txt
        [         id(2), helpstring("method CreateQueueThread")]    HRESULT CreateQueueThread();
        [         id(3), helpstring("method KillQueueThread")]      HRESULT KillQueueThread();
        [         id(4), helpstring("method PostToQueueThread")]    HRESULT PostToQueueThread(UINT uiMsg, WPARAM wParam, LPARAM lParam);
        [         id(5), helpstring("method GetPacketCounts")]      HRESULT GetPacketCounts([out] LONG *pCPackets, [out] LONG *pCPacketsDropped, [out] LONG *pCPacketsDroppedTotal);
    };


    [
        object,
        uuid(05500133-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVEMCastCallback Interface"),
        pointer_default(unique)
    ]
    interface ITVEMCastCallback : IDispatch
    {
        [id(1), helpstring("method SetMCast")]              HRESULT SetMCast(ITVEMCast *pMCast);
        [id(2), helpstring("method ProcessPacket")]         HRESULT ProcessPacket(unsigned char *pchBuffer, long cBytes, long lPacketId);
        [id(3), helpstring("method PostPacket")]            HRESULT PostPacket(unsigned char *pchBuffer, long cBytes, long wPacketId);
    };




                    // ................ specific callbacks ..............
    [
        object,
        uuid(05500141-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVECBAnnc Interface"),
        pointer_default(unique)
    ]
    interface ITVECBAnnc : IDispatch
    {
        [id(1), helpstring("method Init")] HRESULT Init(BSTR bstrFileTrigAdapter, ITVEService *pService);           // want ITVEService here
    };
    [
        object,
        uuid(05500142-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVECBTrig Interface"),
        pointer_default(unique)
    ]
    interface ITVECBTrig : IDispatch
    {
        [id(1), helpstring("method Init")] HRESULT Init(ITVEVariation *pIVariation);
    };
    [
        object,
        uuid(05500143-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVECBFile Interface"),
        pointer_default(unique)
    ]
    interface ITVECBFile : IDispatch
    {
        [id(1), helpstring("method Init")] HRESULT Init(ITVEVariation *pIVariation, ITVEService *pIService);
    };
    [
        object,
        uuid(05500144-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVECBDummy Interface"),
        pointer_default(unique)
    ]
    interface ITVECBDummy : IDispatch
    {
        [id(1), helpstring("method Init")] HRESULT Init(int i);
    };


// ----------------------------------------------------
    [
        object,
        uuid(05500151-FAA5-4df9-8246-BFC23AC5CEA8),
        dual,
        helpstring("ITVEFile Interface"),
        pointer_default(unique)
    ]
    interface ITVEFile : IDispatch
    {
        [         id(1),  helpstring("method InitializeFile")]      HRESULT InitializeFile([in] ITVEVariation *pVaria, [in] BSTR bsName, [in] BSTR bsLoc, [in] DATE dateExpires);
        [         id(2),  helpstring("method InitializePackage")]   HRESULT InitializePackage([in] ITVEVariation *pVaria, [in] BSTR bsName, [in] BSTR bsLoc, [in] DATE dateExpires);
        [propget, id(3),  helpstring("property Description")]       HRESULT Description([out, retval] BSTR* pBstrDesc);
        [propget, id(4),  helpstring("property Location")]          HRESULT Location([out, retval] BSTR* pBstrLoc);
        [propget, id(5),  helpstring("property ExpireTime")]        HRESULT ExpireTime([out, retval] DATE* pDateExpires);
        [propget, id(6),  helpstring("property IsPackage")]         HRESULT IsPackage([out, retval] BOOL* pfVal);
        [propget, id(7),  helpstring("property Variation")]         HRESULT Variation([out, retval] ITVEVariation* *pVal);
        [propget, id(8),  helpstring("property Service")]           HRESULT Service([out, retval] ITVEService* *pVal);
        [         id(9),  helpstring("method RemoveYourself")]      HRESULT RemoveYourself();
        [         id(10), helpstring("method DumpToBSTR")]          HRESULT DumpToBSTR([out] BSTR *pBstrDump);
    };


// ----------------------------------------------------
//   ITVENavAid
// ----------------------------------------------------

[
    object,
    uuid (05500160-FAA5-4df9-8246-BFC23AC5CEA8),
    dual,
    helpstring("ITVENavAid Interface"),
    pointer_default(unique)
]
interface ITVENavAid : IDispatch
{
        [propput, id(1),  helpstring("property WebBrowserApp")]         HRESULT WebBrowserApp([in] IDispatch *pWebBrowser);
        [propget, id(1),  helpstring("property WebBrowserApp")]         HRESULT WebBrowserApp([out, retval] IDispatch **ppWebBrowser);
        [propget, id(2),  helpstring("property TVETriggerCtrl")]        HRESULT TVETriggerCtrl([out, retval] ITVETriggerCtrl **ppTriggerCtrl);
        [propput, id(3),  helpstring("property EnableAutoTriggering")]  HRESULT EnableAutoTriggering([in] long lAutoTriggers);
        [propget, id(3),  helpstring("property EnableAutoTriggering")]  HRESULT EnableAutoTriggering([out, retval] long *plAutoTriggers);
        [propget, id(4),  helpstring("property ActiveVariation")]       HRESULT ActiveVariation([out, retval] ITVEVariation **ppActiveVariation);
        [propput, id(4),  helpstring("property ActiveVariation")]       HRESULT ActiveVariation([in] ITVEVariation *pActiveVariation);
        [propget, id(5),  helpstring("property TVEFeature")]            HRESULT TVEFeature([out, retval] ITVEFeature **ppTVEFeature);
        [propget, id(6),  helpstring("property CacheState")]            HRESULT CacheState([out, retval] BSTR *pbstrBuff);
        [propput, id(6),  helpstring("property CacheState")]            HRESULT CacheState([in] BSTR bstrBuff);
        [       , id(7),  helpstring("method NavUsingTVETrigger")]      HRESULT NavUsingTVETrigger([in] ITVETrigger *pTrigger, [in] long lForceNav, [in] long lForceExec);
        [       , id(8),  helpstring("method ExecScript")]              HRESULT ExecScript([in] BSTR bstrScript, [in] BSTR bstrLanguage);
        [       , id(9),  helpstring("method Navigate")]                HRESULT Navigate([in] VARIANT *URL,[in] VARIANT *Flags,[in] VARIANT *TargetFrameName, [in] VARIANT *PostData, [in] VARIANT *Headers);
        [propget, id(10), helpstring("property CurrTVEName")]           HRESULT CurrTVEName([out, retval] BSTR *pbstrName);
        [propget, id(11), helpstring("property CurrTVEURL")]            HRESULT CurrTVEURL([out, retval] BSTR *pbstrURL);

        // these are incoming sinkn events called by Supervisor ((_ITVEvents).. ID's Must match (I think)
        // &DIID__ITVEEvents
        [id(2101),  helpstring("method NotifyTVETune")]                 HRESULT NotifyTVETune([in] NTUN_Mode tuneMode, [in] ITVEService *pService, [in] BSTR bstrDescription, [in] BSTR bstrIPAdapter);
        [id(2102),  helpstring("method NotifyTVEEnhancementNew")]       HRESULT NotifyTVEEnhancementNew([in] ITVEEnhancement *pEnh);
        [id(2103),  helpstring("method NotifyTVEEnhancementUpdated")]   HRESULT NotifyTVEEnhancementUpdated([in] ITVEEnhancement *pEnh, [in] long lChangedFlags);   // changedFlags : NENH_grfDiff
        [id(2104),  helpstring("method NotifyTVEEnhancementStarting")]  HRESULT NotifyTVEEnhancementStarting([in] ITVEEnhancement *pEnh);
        [id(2105),  helpstring("method NotifyTVEEnhancementExpired")]   HRESULT NotifyTVEEnhancementExpired([in] ITVEEnhancement *pEnh);
        [id(2106),  helpstring("method NotifyTVETriggerNew")]           HRESULT NotifyTVETriggerNew([in] ITVETrigger *pTrigger,[in]  BOOL fActive);
        [id(2107),  helpstring("method NotifyTVETriggerUpdated")]       HRESULT NotifyTVETriggerUpdated([in] ITVETrigger *pTrigger,[in]  BOOL fActive, [in] long lChangedFlags);    // changedFlags : NTRK_grfDiff
        [id(2108),  helpstring("method NotifyTVETriggerExpired")]       HRESULT NotifyTVETriggerExpired([in] ITVETrigger *pTrigger,[in]  BOOL fActive);
        [id(2109),  helpstring("method NotifyTVEPackage")]              HRESULT NotifyTVEPackage([in] NPKG_Mode engPkgMode, [in] ITVEVariation *pVariation, [in] BSTR bstrUUID, [in] long  cBytesTotal, [in] long  cBytesReceived);
        [id(2110),  helpstring("method NotifyTVEFile")]                 HRESULT NotifyTVEFile([in] NFLE_Mode engFileMode, [in] ITVEVariation *pVariation, [in] BSTR bstrUrlName, [in] BSTR bstrFileName);
        [id(2111),  helpstring("method NotifyTVEAuxInfo")]              HRESULT NotifyTVEAuxInfo([in] NWHAT_Mode engAuxInfoMode, [in] BSTR bstrAuxInfoString, [in] long lChangedFlags, [in] long lErrorLine); // WhatIsIt is NWHAT_Mode - lChangedFlags is NENH_grfDiff or NTRK_grfDiff treated as error bits 


        // &DIID_DWebBrowserEvents2, 

        [id(0x66),  helpstring("method NotifyStatusTextChange")]        HRESULT NotifyStatusTextChange(BSTR Text);
        [id(0x6c),  helpstring("method NotifyProgressChange")]          HRESULT NotifyProgressChange(LONG Progress, LONG ProgressMax);
        [id(0x69),  helpstring("method NotifyCommandStateChange")]      HRESULT NotifyCommandStateChange(LONG Command, VARIANT_BOOL Enable);
        [id(0x6a),  helpstring("method NotifyDownloadBegin")]           HRESULT NotifyDownloadBegin();
        [id(0x68),  helpstring("method NotifyDownloadComplete")]        HRESULT NotifyDownloadComplete();
        [id(0x71),  helpstring("method NotifyTitleChange")]             HRESULT NotifyTitleChange(BSTR Text);
        [id(0x70),  helpstring("method NotifyPropertyChange")]          HRESULT NotifyPropertyChange(BSTR szProperty);
        [id(0xfa),  helpstring("method NotifyBeforeNavigate2")]         HRESULT NotifyBeforeNavigate2(IDispatch * pDisp, VARIANT * URL, VARIANT * Flags, VARIANT * TargetFrameName, VARIANT * PostData, VARIANT * Headers, VARIANT_BOOL * Cancel);
        [id(0xfb),  helpstring("method NotifyNewWindow2")]              HRESULT NotifyNewWindow2(IDispatch * * ppDisp, VARIANT_BOOL * Cancel);
        [id(0xfc),  helpstring("method NotifyNavigateComplete2")]       HRESULT NotifyNavigateComplete2(IDispatch * pDisp, VARIANT * URL);
        [id(0x103), helpstring("method NotifyDocumentComplete")]        HRESULT NotifyDocumentComplete(IDispatch * pDisp, VARIANT * URL);
        [id(0xfd),  helpstring("method NotifyOnQuit")]                  HRESULT NotifyOnQuit();
        [id(0xfe),  helpstring("method NotifyOnVisible")]               HRESULT NotifyOnVisible(VARIANT_BOOL Visible);
        [id(0xff),  helpstring("method NotifyOnToolBar")]               HRESULT NotifyOnToolBar(VARIANT_BOOL ToolBar);
        [id(0x100), helpstring("method NotifyOnMenuBar")]               HRESULT NotifyOnMenuBar(VARIANT_BOOL MenuBar);
        [id(0x101), helpstring("method NotifyOnStatusBar")]             HRESULT NotifyOnStatusBar(VARIANT_BOOL StatusBar);
        [id(0x102), helpstring("method NotifyOnFullScreen")]            HRESULT NotifyOnFullScreen(VARIANT_BOOL FullScreen);
        [id(0x104), helpstring("method NotifyOnTheaterMode")]           HRESULT NotifyOnTheaterMode(VARIANT_BOOL TheaterMode);

} ;
                // ------
                //    these interfaces for running without the VidControl
                //    - idea is to create CoCreate supervisor, and 'put' it here.
[
    object,
    uuid (05500360-FAA5-4df9-8246-BFC23AC5CEA8),
    hidden,
//  dual,
    helpstring("ITVENavAid_NoVidCtl Interface"),
    pointer_default(unique)
]
interface ITVENavAid_NoVidCtl : IUnknown
{
    [propput ,id(1),  helpstring("property NoVidCtl_Supervisor")]       HRESULT NoVidCtl_Supervisor([in] ITVESupervisor *pSuper);                   
    [propget ,id(1),  helpstring("property NoVidCtl_Supervisor")]       HRESULT NoVidCtl_Supervisor([out,retval] ITVESupervisor **ppSuper);                 
    
} ;

                // ------
[
    object,
    uuid (05500260-FAA5-4df9-8246-BFC23AC5CEA8),
    hidden,
    dual,                                           // - used in proxying, must be marked Dual regardless of what .net says
    helpstring("ITVENavAid_Helper Interface"),
    pointer_default(unique)
]
interface ITVENavAid_Helper : IUnknown
{
        [         id(1),  helpstring("method LocateVidAndTriggerCtrls")]            HRESULT LocateVidAndTriggerCtrls([out] IDispatch **pVidCtrl, [out] IDispatch **pTrigCtrl);
        [         id(2),  helpstring("method NotifyTVETriggerUpdated_XProxy")]      HRESULT NotifyTVETriggerUpdated_XProxy([in] ITVETrigger *pTrigger,[in]  BOOL fActive, [in] long lChangedFlags); // changedFlags : NTRK_grfDiff
        [         id(3),  helpstring("method ReInitCurrNavState")]                  HRESULT ReInitCurrNavState([in] long lReserved);
    
} ; 
// ----------------------------------------------------
//      Filter interfaces
// -----------------------------------------------------
[
    object,
    uuid (05500180-FAA5-4df9-8246-BFC23AC5CEA8),
//  dual,
    helpstring("TVEFilter Interface"),
    pointer_default(unique)
]
interface ITVEFilter : IUnknown
{
//  [propget, id(2),  helpstring("property Supervisor")]        HRESULT Supervisor([out, retval] IDispatch **ppSuperDsp);
    [propget, id(3),  helpstring("property SupervisorPunk")]    HRESULT SupervisorPunk([out, retval] IUnknown **ppSuperPunk);

    [propget, id(4),  helpstring("property IPAdapterAddress")]  HRESULT IPAdapterAddress([out, retval] BSTR *pbstrIPAddr);
    [propput, id(4), helpstring("property IPAdapterAddress")]   HRESULT IPAdapterAddress([in] BSTR bstrIPAddr);

    [propget, id(5),  helpstring("property StationID")]         HRESULT StationID([out, retval] BSTR *pbstrStationID);
    [propput, id(5),  helpstring("property StationID")]         HRESULT StationID([in] BSTR bstrStationID);

    [propget, id(6),  helpstring("property MulticastList")]         HRESULT MulticastList([out, retval] BSTR *pbstrMulticastList);
    [propget, id(7),  helpstring("property AdapterDescription")]    HRESULT AdapterDescription([out, retval] BSTR *pbstrAdapterDescription);

    [         id(8),  helpstring("method ReTune")]              HRESULT ReTune();

                            // should move to FilterHelper
    [propget, id(9),  helpstring("property HaltFlags")]         HRESULT HaltFlags([out, retval] LONG *plGrfHaltFlags);
    [propput, id(9),  helpstring("property HaltFlags")]         HRESULT HaltFlags([in] LONG lGrfHaltFlags);

    [         id(10), helpstring("method ParseCCBytePair")]     HRESULT ParseCCBytePair([in] LONG lByteType, [in] BYTE byte1, [in] BYTE byte2);

    [propget, id(11), helpstring("property IPSinkAdapterAddress")]  HRESULT IPSinkAdapterAddress([out, retval] BSTR *pbstrIPAddr);

//  [propput, id(12),  helpstring("property SupervisorHelperPunk")]     HRESULT get_SupervisorHelperPunk([out] IUnknown **ppSuperHelper);

};

// ------------------------------------------------------
[
    object,
    uuid (05500280-FAA5-4df9-8246-BFC23AC5CEA8),
    hidden,
    helpstring("ITVEFilter_Helper Interface"),
    pointer_default(unique)
]
interface ITVEFilter_Helper : IUnknown
{
//  [id(1),helpstring("method ConnectParent")]      HRESULT ConnectParent([in] ITVEEnhancement *pEnhancement);
} ;


[
    object,
    uuid (05500190-FAA5-4df9-8246-BFC23AC5CEA8),
    dual,
    helpstring("ITVETriggerCtrl Interface"),
    pointer_default(unique)
]
interface ITVETriggerCtrl : IDispatch
{
    [propput, id(1)] HRESULT enabled([in] VARIANT_BOOL newVal);
    [propget, id(1)] HRESULT enabled([out, retval] VARIANT_BOOL* pVal);
    [propget, id(2)] HRESULT sourceID([out, retval] BSTR* pbstrID);
    [propput, id(3)] HRESULT releasable([in] VARIANT_BOOL newVal);
    [propget, id(3)] HRESULT releasable([out, retval] VARIANT_BOOL* pVal);
    [propget, id(4)] HRESULT backChannel([out, retval] BSTR* pVal);
    [propget, id(5)] HRESULT contentLevel([out, retval] double* pVal);
} ;

[
    object,
    uuid (05500191-FAA5-4df9-8246-BFC23AC5CEA8),
    hidden,
    helpstring("ITVETriggerCtrl_Helper Interface"),
    pointer_default(unique)
]
interface ITVETriggerCtrl_Helper : IUnknown
{
    [propput, id(1)] HRESULT sourceID([in] BSTR pSourceUUID);           // cache the SourceID
    [propget, id(2)] HRESULT TopLevelPage([out, retval] BSTR *pURL);    // return the cached URL (???) of the top web page 

} ;

// ---------------------------------------------------------------------------------------
// ***************************************************************************************
// ----------------------------------------------------------------------------------------
[
    uuid(1700C001-6666-4f66-B1E2-BF3C9FBB9BA6),     // new
    version(1.0),
    helpstring("Microsoft TVE Library and DShow Filter")
]
library MSTvELib
{
    importlib("stdole32.tlb");
    importlib("stdole2.tlb");
// -------------------------------------------------------
typedef enum NENH_grfDiff           // need to fill out..
{
    NENH_grfNone                = 0x0000,               // no flags
    NENH_grfDescription         = 0x00000001,
    NENH_grfIsPrimary           = 0x00000002,
    NENH_grfProtocolVersion     = 0x00000004,
    NENH_grfSessionUserName     = 0x00000008,
    NENH_grfSessionId           = 0x00000010,
    NENH_grfSessionVersion      = 0x00000020,
    NENH_grfSessionIPAddress    = 0x00000040,
    NENH_grfSessionName         = 0x00000080,
    NENH_grfEmailAddresses      = 0x00000100,
    NENH_grfPhoneNumbers        = 0x00000200,
    NENH_grfUUID                = 0x00000400,
    NENH_grfStartTime           = 0x00000800,
    NENH_grfStopTime            = 0x00001000,
    NENH_grfType                = 0x00002000,
    NENH_grfTveType             = 0x00004000,
    NENH_grfTveSize             = 0x00008000,
    NENH_grfTveLevel            = 0x00010000,
    NENH_grfAttributes          = 0x00020000,
    NENH_grfRest                = 0x00040000,
    NENH_grfVariationAdded      = 0x00080000,
    NENH_grfVariationRemoved    = 0x00100000,
    NENH_grfDescriptionURI      = 0x00200000,
    NENH_grfSomeVarIP           = 0x00400000,
    NENH_grfSomeVarText         = 0x00800000,
    NENH_grfSomeVarBandwidth    = 0x01000000,
    NENH_grfSomeVarLanguages    = 0x02000000,
    NENH_grfSomeVarAttribute    = 0x04000000,
    NENH_grfUnused              = 0x08000000,
    NENH_grfSAPVersion          = 0x10000000,
    NENH_grfSAPAddressType      = 0x20000000,
    NENH_grfSAPOther            = 0x40000000,
    NENH_grfSAPEncryptComp      = 0x80000000,
    NENH_grfAnyIP               = (NENH_grfSomeVarIP | NENH_grfVariationAdded | NENH_grfVariationRemoved),
    NENH_grfAll                 = (NENH_grfSomeVarAttribute<<1) - 1             // all flags
} NENH_grfDiff;

typedef enum NVAR_grfDiff   
{   
    NVAR_grfNone                = 0x0000,
    NVAR_grfDescription         = 0x0001,
    NVAR_grfMediaName           = 0x0002,
    NVAR_grfMediaTitle          = 0x0004,
    NVAR_grfFilePort            = 0x0008,
    NVAR_grfFileIPAddress       = 0x0010,
    NVAR_grfFileIPAdapter       = 0x0020,
    NVAR_grfTriggerPort         = 0x0040,
    NVAR_grfTriggerIPAddress    = 0x0080,
    NVAR_grfTriggerIPAdapter    = 0x0100,
    NVAR_grfAttributes          = 0x0200,
    NVAR_grfLanguages           = 0x0400,
    NVAR_grfBandwidth           = 0x0800,
    NVAR_grfBandwidthInfo       = 0x1000,
    NVAR_grfRest                = 0x2000,
    NVAR_grfAnyIP               = (NVAR_grfFilePort | NVAR_grfFileIPAddress | NVAR_grfFileIPAdapter |
                                    NVAR_grfTriggerPort | NVAR_grfTriggerIPAddress | NVAR_grfTriggerIPAdapter),         
    NVAR_grfAnyText             = (NVAR_grfDescription | NVAR_grfMediaName | NVAR_grfMediaTitle),           
    NVAR_grfAnyBandwidth        = (NVAR_grfBandwidth | NVAR_grfBandwidthInfo),          
    NVAR_grfAnyAttribute        = (NVAR_grfAttributes | NVAR_grfRest),          

    NVAR_grfAll                 = (NVAR_grfRest<<1) - 1             // all flags
} NVAR_grfDiff;


typedef enum NTRK_grfDiff                   // attempt at a bit-field flag
{
    NTRK_grfNone    = 0x00,
    NTRK_grfURL     = 0x01,
    NTRK_grfName    = 0x02,
    NTRK_grfScript  = 0x04,
    NTRK_grfDate    = 0x08,
    NTRK_grfTVELevel= 0x10,
    NTRK_grfExpired = 0x20,                 // trigger arrived out of date 
    NTRK_grfRest    = 0x40,
    NTRK_grfAll     = (NTRK_grfRest<<1) - 1             // all flags
}   NTRK_grfDiff;

typedef enum NFLT_grfHaltFlags              // flags to turn various processing bits off
{
    NFLT_grfNone            = 0x00,

    NFLT_grfTA_Listen       = 0x01,         // don't listen for CC (XOverLink) triggers
    NFLT_grfTA_Decode       = 0x02,         // don't accumulate byte data for XOverLink triggers into strings
    NFLT_grfTA_Parse        = 0x04,         // don't parse any XOverLink data
    
    NFLT_grfTB_AnncListen   = 0x10,         // suspend listening for announcement packets if set
    NFLT_grfTB_AnncDecode   = 0x20,         // suspend decoding and processing of announcement packets if set
    NFLT_grfTB_AnncParse    = 0x40,         // don't parse any announcements

    NFLT_grfTB_TrigListen   = 0x100,        // suspend listening for transport B triggers
    NFLT_grfTB_TrigDecode   = 0x200,        // suspend listening for transport B triggers
    NFLT_grfTB_TrigParse    = 0x400,        // don't parse any transport B triggers

    NFLT_grfTB_DataListen   = 0x1000,       // suspend listening for transport B data (files)
    NFLT_grfTB_DataDecode   = 0x2000,       // suspend listening for transport B data (files)
    NFLT_grfTB_DataParse    = 0x4000,       // don't parse any transport B data (files)

    NFLT_grf_ExpireQueue    = 0x10000,      // turn expire queue processing on and off
    NFLT_grf_Extra1         = 0x100000,     // extra flag
    NFLT_grf_Extra2         = 0x200000,     // extra flag
    NFLT_grf_Extra3         = 0x400000,     // extra flag
    NFLT_grf_Extra4         = 0x800000      //extra flag 

}   NFLT_grfHaltFlags;


// -------------------------------------------------    
// ---------------------------------------------------
//          CAUTION - if Change events below, need to perform (after MIDL compiling this file): 
//                      CTVESupervisor->Implement Connection Point (_ITVEEvents)
//                  AND 
//                      CTVEFeature->Implement Connection Point (_ITVEEvents)
//                    to regenerate the  CProxy_ITVEEvents<> code.  
//
//                  Select Browse... button, goto filters\tve\mstve\objd\i386 directory, use mstve.tlb 
//
//                  Note thefile MSTvECP.h must be checked out. 
//
    
    [
        uuid(05500000-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("_ITVEEvents Interface")
    ]
    dispinterface _ITVEEvents
    {
        properties:
        methods:
        [id(2101), helpstring("method NotifyTVETune")]                  HRESULT NotifyTVETune([in] NTUN_Mode tuneMode, [in] ITVEService *pService, [in] BSTR bstrDescription, [in] BSTR bstrIPAdapter);
        [id(2102), helpstring("method NotifyTVEEnhancementNew")]        HRESULT NotifyTVEEnhancementNew([in] ITVEEnhancement *pEnh);
        [id(2103), helpstring("method NotifyTVEEnhancementUpdated")]    HRESULT NotifyTVEEnhancementUpdated([in] ITVEEnhancement *pEnh, [in] long lChangedFlags);   // changedFlags : NENH_grfDiff
        [id(2104), helpstring("method NotifyTVEEnhancementStarting")]   HRESULT NotifyTVEEnhancementStarting([in] ITVEEnhancement *pEnh);
        [id(2105), helpstring("method NotifyTVEEnhancementExpired")]    HRESULT NotifyTVEEnhancementExpired([in] ITVEEnhancement *pEnh);
        [id(2106), helpstring("method NotifyTVETriggerNew")]            HRESULT NotifyTVETriggerNew([in] ITVETrigger *pTrigger,[in]  BOOL fActive);
        [id(2107), helpstring("method NotifyTVETriggerUpdated")]        HRESULT NotifyTVETriggerUpdated([in] ITVETrigger *pTrigger,[in]  BOOL fActive, [in] long lChangedFlags);    // changedFlags : NTRK_grfDiff
        [id(2108), helpstring("method NotifyTVETriggerExpired")]        HRESULT NotifyTVETriggerExpired([in] ITVETrigger *pTrigger,[in]  BOOL fActive);
        [id(2109), helpstring("method NotifyTVEPackage")]               HRESULT NotifyTVEPackage([in] NPKG_Mode engPkgMode, [in] ITVEVariation *pVariation, [in] BSTR bstrUUID, [in] long  cBytesTotal, [in] long  cBytesReceived);
        [id(2110), helpstring("method NotifyTVEFile")]                  HRESULT NotifyTVEFile([in] NFLE_Mode engFileMode, [in] ITVEVariation *pVariation, [in] BSTR bstrUrlName, [in] BSTR bstrFileName);
        [id(2111), helpstring("method NotifyTVEAuxInfo")]               HRESULT NotifyTVEAuxInfo([in] NWHAT_Mode engAuxInfoMode, [in] BSTR bstrAuxInfoString, [in] long lChangedFlags, [in] long lErrorLine); // WhatIsIt is NWHAT_Mode - lChangedFlags is NENH_grfDiff or NTRK_grfDiff treated as error bits
    };

    [
        uuid(05500001-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVETrigger Class")
    ]
    coclass TVETrigger
    {
        [default] interface ITVETrigger;
        interface ITVETrigger_Helper;
    };
// ----------------------------------------------------

    [
        uuid(05500002-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVETrack Class")
    ]
    coclass TVETrack
    {
        [default] interface ITVETrack;
        interface ITVETrack_Helper;
    };
// ---------------------------------
//  [
//      uuid(05500012-FAA5-4df9-8246-BFC23AC5CEA8),
//      helpstring("TVETracks Class")
//  ]
//  coclass TVETracks
//  {
//      [default] interface ITVETracks;
//  };
// ----------------------------------------------------

    [
        uuid(05500003-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVEVariation Class")
    ]
    coclass TVEVariation
    {
        [default] interface ITVEVariation;
        interface ITVEVariation_Helper;
    };
//  [
//      uuid(05500013-FAA5-4df9-8246-BFC23AC5CEA8),
//      helpstring("TVEVariations Class")
//  ]
//  coclass TVEVariations
//  {
//      [default] interface ITVEVariations;
//  };
// ---------------------------------------------------
    [
        uuid(05500004-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVEEnhancement Class")
    ]
    coclass TVEEnhancement
    {
        [default] interface ITVEEnhancement;
        interface ITVEEnhancement_Helper;
    };

            // --------------------------------

    [
        uuid(05500014-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVEEnhancements Class")
    ]
    coclass TVEEnhancements
    {
        [default] interface ITVEEnhancements;
    };
// ---------------------------------------------------


    [
        uuid(05500005-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVEService Class")
    ]
    coclass TVEService
    {
        [default] interface ITVEService;
        interface ITVEService_Helper;
    };

        [
        uuid(05500025-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVEFeature Class")
    ]
    coclass TVEFeature
    {
        [default] interface ITVEFeature;
        [default, source] dispinterface _ITVEEvents;        // out going event handler 
        interface _ITVEEvents;                              // incoming event interface
//      interface ITVEService_Helper;
    };

        // -------------------------------

    [
        uuid(05500015-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVEServices Class")
    ]
    coclass TVEServices
    {
        [default] interface ITVEServices;
    };


// ---------------------------------------------------
    [
        uuid(05500006-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVESupervisor Class")
    ]
    coclass TVESupervisor
    {
        [default] interface ITVESupervisor;
        [default, source] dispinterface _ITVEEvents;
        interface ITVESupervisor_Helper;
    };
/*
    [
        hidden,
        uuid(05500406-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("ITVESupervisorGITProxy Class")
    ]
    coclass TVESupervisorGITProxy
    {
        [default] interface ITVESupervisorGITProxy;
    }; 
    */
// ---------------------------------------------------

    [
        uuid(05500021-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVEAttrMap Class")
    ]   
    coclass TVEAttrMap
    {
        [default] interface ITVEAttrMap;
    };

    [
        uuid(05500022-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVEAttrTimeQ Class")
    ]   
    coclass TVEAttrTimeQ
    {
        [default] interface ITVEAttrTimeQ;
    };

    [
        uuid(05500030-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVEMCast Class")
    ]   
    coclass TVEMCast
    {
        [default] interface ITVEMCast;
    };

    [
        uuid(05500031-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVEMCasts Class")
    ]
    coclass TVEMCasts
    {
        [default] interface ITVEMCasts;
    };

    [
        uuid(05500032-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVEMCastManager Class")
    ]
    coclass TVEMCastManager
    {
        [default] interface ITVEMCastManager;
        interface ITVEMCastManager_Helper;
    };


    [
        uuid(05500040-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVEMCastCallback Class")
    ]
    coclass TVEMCastCallback
    {
        [default] interface ITVEMCastCallback;
    };
    [
        uuid(05500041-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVECBAnnc Class")
    ]
                // specific Multicast Callbacks
    coclass TVECBAnnc
    {
        [default] interface ITVECBAnnc;
    };
    [
        uuid(05500042-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVECBTrig Class")
    ]
    coclass TVECBTrig
    {
        [default] interface ITVECBTrig;
    };
    [
        uuid(05500043-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVECBFile Class")
    ]
    coclass TVECBFile
    {
        [default] interface ITVECBFile;
    };
    [
        uuid(05500049-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVECBDummy Class")
    ]
    coclass TVECBDummy
    {
        [default] interface ITVECBDummy;
    };


    [
        uuid(05500050-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVEFile Class")
    ]
    coclass TVEFile
    {
        [default] interface ITVEFile;
    }

                // This control gets CoCreate'ed by an app to handle hooking things together
    [
        uuid(05500070-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVENavAid Class")
    ]
    coclass TVENavAid
    {
        [default] interface ITVENavAid;                     // controllable from HTML
        interface ITVENavAid_Helper;                        // internal control methods
        interface ITVENavAid_NoVidCtl;                      // to work without the VidControl
    };

                // this is the DShow TVE Receiver Filter that encapsulates a TVESupervisor 
                //  object in a in a DShow graph
    [
        uuid(05500080-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVEFilter Class")
    ]
    coclass TVEFilter
    {
//      [default, source] dispinterface _ITVEEvents;
        [default] interface ITVEFilter;
        interface ITVEFilter_Helper;
    };

                // This control gets CoCreated by HTML in <OBJECT TYPE="application\tve-trigger">
                //  Implements the tve-trigger receiver object properties as per Atvef Spec
    [
        uuid(05500091-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("_ITVETriggerCtrlEvents Interface")
    ]
    dispinterface _ITVETriggerCtrlEvents 
    {
        properties:
        methods:
    };


    [
        uuid(05500090-FAA5-4df9-8246-BFC23AC5CEA8),
        helpstring("TVETriggerCtrl Class")
    ]
    coclass TVETriggerCtrl
    {
        [default] interface ITVETriggerCtrl;                    // controllable from HTML
        interface ITVETriggerCtrl_Helper;                       // internal control methods
        [default, source] dispinterface _ITveTriggerCtrlEvents; // fire control events to HTML
//      interface _ITVEvents;                                   // respond to slew of TVE events
    };

};
