⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interfacecontrol.cpp

📁 完整的基于Conxant平台的USB电视棒的WIN驱动程序。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*+++ *******************************************************************\ 
* 
*  Copyright and Disclaimer: 
*  
*     --------------------------------------------------------------- 
*     This software is provided "AS IS" without warranty of any kind, 
*     either expressed or implied, including but not limited to the 
*     implied warranties of noninfringement, merchantability and/or 
*     fitness for a particular purpose.
*     --------------------------------------------------------------- 
*   
*     Copyright (c) 2008 Conexant Systems, Inc. 
*     All rights reserved. 
*
\******************************************************************* ---*/ 

//Ignore warnings for deprecated functions used in DXSDK headers
#pragma warning(disable : 4996)
#include <streams.h>
#pragma warning(default : 4996)
#include <stdio.h>
#include <commctrl.h>
#include "resource.h"    // ids used in the dialog
#include <ks.h>
#include <ksmedia.h>     //DDK include file
#include <ksproxy.h>

#include "InterfaceControl.h"
#include "..\inc\CxPolarisControl.h"
typedef enum
{
    ALT_SETTING0 = 0,
    ALT_SETTING1,
    ALT_SETTING2,
    ALT_SETTING3,
    ALT_SETTING4,
    ALT_SETTING5
}ALT_SETTING;

typedef enum
{
    ALT0_32 = 0,
    ALT0_441,
    ALT0_48,
    ALT0_96,
    ALT1_32,
    ALT1_441,
    ALT1_48,
    ALT2_96
}ALT_SETTING_EP3;

////////////////////////////////////////////////////////////////////
typedef enum
{
    MPEG_BDA = 0,
    MPEG_PROGRAM
}MPEG_SOURCE;

typedef enum
{
    CONFIG0 = 0,
    CONFIG1 = 1,
    CONFIG2
}USB_CONFIG;

////////////////////////////////////////////////////////////////////
//**********************************************************************
// CreateInstance
// Override CClassFactory method.
// Set lpUnk to point to an IUnknown interface on a new CGeneralProperties object
// Part of the COM object instantiation mechanism
//**********************************************************************
CUnknown * WINAPI InterfaceControl::CreateInstance(LPUNKNOWN lpunk, HRESULT *phr)
{
    CUnknown *punk = new InterfaceControl(lpunk, phr);
    if (punk == NULL) {
        *phr = E_OUTOFMEMORY;
    }

    return punk;

}

//**********************************************************************
// InterfaceControl::Constructor
// Constructs and initialises a InterfaceControl object
//**********************************************************************
InterfaceControl::InterfaceControl(LPUNKNOWN pUnk, HRESULT *phr)
    : CBasePropertyPage(
        NAME("Alt Setting Properties"),
        pUnk,
        IDD_ALT_SETTING,           //Dialog ID
        IDS_ALT_SETTING_TITLE),
        _p_property_set(NULL)
{
    ASSERT(phr);
}   

//**********************************************************************
// OnConnect
// Override CBasePropertyPage method.
//**********************************************************************
HRESULT InterfaceControl::OnConnect(IUnknown *p_unknown)
{
    // For the proxy, we query the interface on it's output pin
    ASSERT(_p_property_set == NULL);
    
    // Cast our owner to a filter (our owner should be the proxy filter)
    IBaseFilter *p_filter = (IBaseFilter*)p_unknown;
    // Query the proxy filter for the interface that allows us to control the iVAC
    if (FAILED(p_filter->QueryInterface(IID_IKsPropertySet,(void **)&_p_property_set)))
    {
        DbgLog((LOG_TRACE, 0, TEXT("Failed to Query the proxy's interface")));
        return E_NOINTERFACE;
    }
    
    return NOERROR;
}   



HRESULT InterfaceControl::OnDisconnect()
{
    // Release of Interface
    if (_p_property_set == NULL)
        return E_UNEXPECTED;
    
    _p_property_set->Release();
    _p_property_set = NULL;
    
    return NOERROR;
}   


HRESULT InterfaceControl::OnActivate()
{
    HRESULT return_value = NOERROR;
    DWORD bytes_returned;
    ///ep1////////////////////////////////////////////////////////////
    //Get the audio sampling rate from the driver
    CXPOLARIS_ALT_SETTING alt_setting = CXPOLARIS_ALT_SETTING0;
    if (FAILED(_p_property_set->Get(
        PROPSETID_CXPOLARIS_CONTROL_PROPERTIES, 
        CXPOLARIS_CONTROL_EP1, 
        &alt_setting, 
        sizeof(CXPOLARIS_ALT_SETTING),
        &alt_setting, 
        sizeof(CXPOLARIS_ALT_SETTING),
        &bytes_returned)))
    {
        return_value = E_FAIL;
    }
    
    
    ALT_SETTING alt_setting2 = ALT_SETTING0;
    switch(alt_setting)
    {
     case CXPOLARIS_ALT_SETTING0:
        alt_setting2 = ALT_SETTING0;
        break;
        
     case CXPOLARIS_ALT_SETTING1:
        alt_setting2 = ALT_SETTING1;
        break;
        
     case CXPOLARIS_ALT_SETTING2:
        alt_setting2 = ALT_SETTING2;
        break;
     case CXPOLARIS_ALT_SETTING3:
         alt_setting2 = ALT_SETTING3;
         break;
     case CXPOLARIS_ALT_SETTING4:
         alt_setting2 = ALT_SETTING4;
         break;
     case CXPOLARIS_ALT_SETTING5:
         alt_setting2 = ALT_SETTING5;
         break;
    }
    
    
    //Select the current resolution in the list box
    SendDlgItemMessage(m_Dlg, IDC_EP1, CB_SETCURSEL, alt_setting2, 0);
    ////ep2/////////////////////////////////////////////////////////////////////
    alt_setting = CXPOLARIS_ALT_SETTING0;
    if (FAILED(_p_property_set->Get(
        PROPSETID_CXPOLARIS_CONTROL_PROPERTIES, 
        CXPOLARIS_CONTROL_EP2, 
        &alt_setting, 
        sizeof(CXPOLARIS_ALT_SETTING),
        &alt_setting, 
        sizeof(CXPOLARIS_ALT_SETTING),
        &bytes_returned)))
    {
        return_value = E_FAIL;
    }
    
    
    alt_setting2 = ALT_SETTING0;
    switch(alt_setting)
    {
    case CXPOLARIS_ALT_SETTING0:
        alt_setting2 = ALT_SETTING0;
        break;
        
    case CXPOLARIS_ALT_SETTING1:
        alt_setting2 = ALT_SETTING1;
        break;
        
    case CXPOLARIS_ALT_SETTING2:
        alt_setting2 = ALT_SETTING2;
        break;
    case CXPOLARIS_ALT_SETTING3:
        alt_setting2 = ALT_SETTING3;
        break;
    case CXPOLARIS_ALT_SETTING4:
        alt_setting2 = ALT_SETTING4;
        break;
    case CXPOLARIS_ALT_SETTING5:
        alt_setting2 = ALT_SETTING5;
        break;
    }
    
    
    //Select the current resolution in the list box
    SendDlgItemMessage(m_Dlg, IDC_EP2, CB_SETCURSEL, alt_setting2, 0);
    /////ep3//////////////////////////////////////////////////////////////////////////
    CXPOLARIS_ALT_SETTING_EP3 alt_setting_ep3 = CXPOLARIS_ALT0_32;
    if (FAILED(_p_property_set->Get(
        PROPSETID_CXPOLARIS_CONTROL_PROPERTIES, 
        CXPOLARIS_CONTROL_EP3, 
        &alt_setting_ep3, 
        sizeof(CXPOLARIS_ALT_SETTING_EP3),
        &alt_setting_ep3, 
        sizeof(CXPOLARIS_ALT_SETTING_EP3),
        &bytes_returned)))
    {
        return_value = E_FAIL;
    }
    
    
    ALT_SETTING_EP3 alt_setting2_ep3 = ALT0_32;
    switch(alt_setting_ep3)
    {
    case CXPOLARIS_ALT0_32:
        alt_setting2_ep3 = ALT0_32;
        break;
    
    case CXPOLARIS_ALT0_441:
        alt_setting2_ep3 = ALT0_441;
        break;
        
    case CXPOLARIS_ALT0_48:
        alt_setting2_ep3 = ALT0_48;
        break;
    case CXPOLARIS_ALT0_96:
        alt_setting2_ep3 = ALT0_96;
        break;
    case CXPOLARIS_ALT1_32:
        alt_setting2_ep3 = ALT1_32;
        break;
    case CXPOLARIS_ALT1_441:
        alt_setting2_ep3 = ALT1_441;
        break;
    case CXPOLARIS_ALT1_48:
        alt_setting2_ep3 = ALT0_48;
        break;
    case CXPOLARIS_ALT2_96:
        alt_setting2_ep3 = ALT2_96;
        break;
    }
    
    
    //Select the current resolution in the list box
    SendDlgItemMessage(m_Dlg, IDC_EP3, CB_SETCURSEL, alt_setting2_ep3, 0);
    ////ep4////////////////////////////////////////////////////////////////////////
    alt_setting = CXPOLARIS_ALT_SETTING0;
    if (FAILED(_p_property_set->Get(
        PROPSETID_CXPOLARIS_CONTROL_PROPERTIES, 
        CXPOLARIS_CONTROL_EP4, 
        &alt_setting, 
        sizeof(CXPOLARIS_ALT_SETTING),
        &alt_setting, 
        sizeof(CXPOLARIS_ALT_SETTING),
        &bytes_returned)))
    {
        return_value = E_FAIL;
    }
    
    
    alt_setting2 = ALT_SETTING0;
    switch(alt_setting)
    {
    case CXPOLARIS_ALT_SETTING0:
        alt_setting2 = ALT_SETTING0;
        break;
        
    case CXPOLARIS_ALT_SETTING1:
        alt_setting2 = ALT_SETTING1;
        break;
        
    case CXPOLARIS_ALT_SETTING2:
        alt_setting2 = ALT_SETTING2;
        break;
    case CXPOLARIS_ALT_SETTING3:
        alt_setting2 = ALT_SETTING3;
        break;
    case CXPOLARIS_ALT_SETTING4:
        alt_setting2 = ALT_SETTING4;
        break;

    }
    
    
    //Select the current resolution in the list box
    SendDlgItemMessage(m_Dlg, IDC_EP4, CB_SETCURSEL, alt_setting2, 0);
    ///ep5//////////////////////////////////////////////////////////////////
     alt_setting = CXPOLARIS_ALT_SETTING0;
    if (FAILED(_p_property_set->Get(
        PROPSETID_CXPOLARIS_CONTROL_PROPERTIES, 
        CXPOLARIS_CONTROL_EP5, 
        &alt_setting, 
        sizeof(CXPOLARIS_ALT_SETTING),
        &alt_setting, 
        sizeof(CXPOLARIS_ALT_SETTING),
        &bytes_returned)))
    {
        return_value = E_FAIL;
    }
    
    
    alt_setting2 = ALT_SETTING0;
    switch(alt_setting)
    {
    case CXPOLARIS_ALT_SETTING0:
        alt_setting2 = ALT_SETTING0;
        break;
    
    case CXPOLARIS_ALT_SETTING1:
        alt_setting2 = ALT_SETTING1;
        break;
    }
    
    
    //Select the current resolution in the list box
    SendDlgItemMessage(m_Dlg, IDC_EP5, CB_SETCURSEL, alt_setting2, 0);
    ////ep6//////////////////////////////////////////////////////////////////////
    alt_setting = CXPOLARIS_ALT_SETTING0;
    if (FAILED(_p_property_set->Get(
        PROPSETID_CXPOLARIS_CONTROL_PROPERTIES, 
        CXPOLARIS_CONTROL_EP6, 
        &alt_setting, 
        sizeof(CXPOLARIS_ALT_SETTING),
        &alt_setting, 
        sizeof(CXPOLARIS_ALT_SETTING),
        &bytes_returned)))
    {
        return_value = E_FAIL;
    }
    
    
    alt_setting2 = ALT_SETTING0;
    switch(alt_setting)
    {
    case CXPOLARIS_ALT_SETTING0:
        alt_setting2 = ALT_SETTING0;
        break;
        
    case CXPOLARIS_ALT_SETTING1:
        alt_setting2 = ALT_SETTING1;
        break;
    }
    
    
    //Select the current resolution in the list box
    SendDlgItemMessage(m_Dlg, IDC_EP6, CB_SETCURSEL, alt_setting2, 0);
    ////ep15/////////////////////////////////////////////////////////////////
    alt_setting = CXPOLARIS_ALT_SETTING0;
    if (FAILED(_p_property_set->Get(
        PROPSETID_CXPOLARIS_CONTROL_PROPERTIES, 
        CXPOLARIS_CONTROL_EP15, 
        &alt_setting, 
        sizeof(CXPOLARIS_ALT_SETTING),
        &alt_setting, 
        sizeof(CXPOLARIS_ALT_SETTING),
        &bytes_returned)))
    {
        return_value = E_FAIL;
    }
    
    
    alt_setting2 = ALT_SETTING0;
    switch(alt_setting)
    {
    case CXPOLARIS_ALT_SETTING0:
        alt_setting2 = ALT_SETTING0;
        break;
    }
    
    
    //Select the current resolution in the list box
    SendDlgItemMessage(m_Dlg, IDC_EP15, CB_SETCURSEL, alt_setting2, 0);
    ///////////////////////////////////////////////////////////////////////////////

    ///////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////
    //TS2
    ///////////////////////////////////////////////////////////////////////////////
    CXPOLARIS_MPEG_SOURCE mpeg_source = CXPOLARIS_MPEG_BDA;
    if (FAILED(_p_property_set->Get(
        PROPSETID_CXPOLARIS_CONTROL_PROPERTIES, 
        CXPOLARIS_CONTROL_TS2, 
        &mpeg_source, 
        sizeof(CXPOLARIS_MPEG_SOURCE),
        &mpeg_source, 
        sizeof(CXPOLARIS_MPEG_SOURCE),
        &bytes_returned)))
    {
        return_value = E_FAIL;
    }
    
    
    MPEG_SOURCE mpeg_source2 = MPEG_BDA;
    switch(mpeg_source)
    {
    case CXPOLARIS_MPEG_BDA:
        mpeg_source2 = MPEG_BDA;
        break;
        
    case CXPOLARIS_MPEG_PROGRM:
        mpeg_source2 = MPEG_PROGRAM;
        break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -