📄 pcbconfig.h
字号:
/*+++ *******************************************************************\
*
* 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.
*
\******************************************************************* ---*/
#ifndef _PCB_CONFIG_H_
#define _PCB_CONFIG_H_
extern "C"
{
#include <wdm.h>
}
#include <windef.h>
class PolarisUsbInterface;
class CUsbInterface;
#define SPEED_MASK 0x1
typedef enum{
FULL_SPEED = 0x0, //0: full speed
HIGH_SPEED = 0x1 //1: high speed
}USB_SPEED;
#define TS_MASK 0x6
typedef enum{
NO_TS_PORT = 0x0, //2'b00: Neither port used. PCB not a Hybrid, only offers Analog TV or Video
TS1_PORT = 0x4, //2'b10: TS1 Input (Hybrid mode : Digital or External Analog/Compressed source)
TS1_TS2_PORT = 0x6, //2'b11: TS1 & TS2 Inputs (Dual inputs from Digital and/or External Analog/Compressed sources)
TS1_EXT_CLOCK = 0x6, //2'b11: TS1 & TS2 as selector to external clock
TS1VIP_TS2_PORT = 0x2 //2'b01: TS1 used as 656/VIP Output, TS2 Input (from Compressor)
}TS_PORT;
#define EAVP_MASK 0x8
typedef enum{
NO_EXTERNAL_AV = 0x0, //0: No External A/V inputs (no need for Flatiron), Analog Tuner must be present
EXTERNAL_AV = 0x8 //1: External A/V inputs present (requires Flatiron)
}EAV_PRESENT;
#define ATM_MASK 0x30
typedef enum{
DIF_TUNER = 0x30, //2'b11: IF Tuner (requires use of DIF)
BASEBAND_SOUND = 0x20, //2'b10: Baseband Composite & Sound-IF Signals present
NO_TUNER = 0x10 //2'b0x: No Analog Tuner present
}AT_MODE;
#define PWR_SEL_MASK 0x40
typedef enum{
SELF_POWER = 0x0, //0: self power
BUS_POWER = 0x40 //1: bus power
}POWE_TYPE;
typedef enum{
USB_SELF_POWER = 0,
USB_BUS_POWER
}USB_POWE_TYPE;
#define BO_0_MASK 0x80
typedef enum{
AVDEC_DISABLE = 0x0, //0: A/V Decoder Disabled
AVDEC_ENABLE = 0x80 //1: A/V Decoder Enabled
}AVDEC_STATUS;
#define BO_1_MASK 0x100
typedef enum{
HAMMERHEAD_ONLY = 0x0, //0:Hammerhead Only
HAMMERHEAD_SC = 0x100 //1:Hammerhead and SC
}HAMMERHEAD__STATUS;
#define BUSPOWER_MASK 0xC4 //for Polaris spec 0.8
#define SELFPOWER_MASK 0x86
////////////////////////////////////////
#define NOT_DECIDE_YET 0xFE
#define NOT_SUPPORTED 0xFF
///for mod field use////////////////////
#define MOD_DIGITAL 0x1
#define MOD_ANALOG 0x2
#define MOD_DIF 0x4
#define MOD_EXTERNAL 0x8
#define CAP_ALL_MOD 0x0f
////////////////////////////////////////
//source define
#define SOURCE_DIGITAL 0x1
#define SOURCE_ANALOG 0x2
#define SOURCE_DIF 0x4
#define SOURCE_EXTERNAL 0x8
#define SOURCE_TS_BDA 0x10
#define SOURCE_TS_ENCODE 0x20
#define SOURCE_TS_EXTERNAL 0x40
/////////////////////////////////////////////////////////////////////////////
//interface information define
typedef struct _INTERFACE_INFO
{
BYTE interrupt_index;
BYTE ts1_index;
BYTE ts2_index;
BYTE audio_index;
BYTE video_index;
BYTE vanc_index; // VBI
BYTE hanc_index; //Sliced CC
BYTE ir_index;
}INTERFACE_INFO,*PINTERFACE_INFO;
typedef enum{
INDEX_INTERRUPT = 0x0,
INDEX_TS1,
INDEX_TS2,
INDEX_AUDIO,
INDEX_VIDEO,
INDEX_VANC,
INDEX_HANC,
INDEX_IR,
}INDEX_INTERFACE_INFO;
/////////////////////////////////////////////////////////////////////////////
//configuration information define
typedef struct _CONFIG_INFO
{
BYTE config_index;
INTERFACE_INFO interface_info;
}CONFIG_INFO,*PCONFIG_INFO;
typedef struct _PCB_CONFIG
{
BYTE index;
BYTE type; //bus power or self power, self power--0, bus_power--1
BYTE speed; //usb speed, 2.0--1, 1.1--0
BYTE mode; //digital , anlog, dif or external A/V
DWORD ts1_source; //three source -- BDA,External,encode
DWORD ts2_source;
DWORD analog_source;
BYTE digital_index; //bus-power used
BYTE analog_index; //bus-power used
BYTE dif_index; //bus-power used
BYTE external_index; //bus-power used
BYTE config_num; //current config num, 0,1,2, for self-power, always 0
CONFIG_INFO hs_config_info[3];
CONFIG_INFO fs_config_info[3];
}PCB_CONFIG,*PPCB_CONFIG;
typedef enum{
INDEX_SELFPOWER_DIGITAL_ONLY = 0x0,
INDEX_SELFPOWER_DUAL_DIGITAL,
INDEX_SELFPOWER_ANALOG_ONLY,
INDEX_SELFPOWER_DUAL,
INDEX_SELFPOWER_TRIPLE,
INDEX_SELFPOWER_COMPRESSOR,
INDEX_BUSPOWER_DIGITAL_ONLY,
INDEX_BUSPOWER_ANALOG_ONLY,
INDEX_BUSPOWER_DIF_ONLY,
INDEX_BUSPOWER_EXTERNAL_ONLY,
INDEX_BUSPOWER_EXTERNAL_ANALOG,
INDEX_BUSPOWER_EXTERNAL_DIF,
INDEX_BUSPOWER_EXTERNAL_DIGITAL,
INDEX_BUSPOWER_DIGITAL_ANALOG,
INDEX_BUSPOWER_DIGITAL_DIF,
INDEX_BUSPOWER_DIGITAL_ANALOG_EXTERNAL,
INDEX_BUSPOWER_DIGITAL_DIF_EXTERNAL,
}INDEX_PCB_CONFIG;
///////////////////////////////////////////////////////////////////////////////////////////
class PcbConfig
{
public:
PcbConfig(PDEVICE_OBJECT pdo,CUsbInterface* p_usb,PolarisUsbInterface* p_usb_firmware);
~PcbConfig();
VOID lock();
VOID unlock();
NTSTATUS initialize_T0();
NTSTATUS initialize_A0();
PPCB_CONFIG getCurrentPcb();
PCONFIG_INFO getCurrentConfig(BYTE index);
BOOLEAN Ts1_Enable();
BOOLEAN Ts2_Enable();
DWORD Ts1_source();
DWORD Ts2_source();
BYTE getPcbMode(); //get source type
BYTE getPowertype();
BYTE getUsbSpeed();
BYTE getIndex();
BOOLEAN Is_Analog_TS_Supported();
protected:
private:
PDEVICE_OBJECT _pdo;
CUsbInterface* _p_usb;
PolarisUsbInterface* _p_usb_firmware;
KMUTEX _mutex;
PPCB_CONFIG _pcurrent_pcb_config;
BYTE _current_scenario_idx;
};
inline PPCB_CONFIG PcbConfig::getCurrentPcb()
{
return _pcurrent_pcb_config;
}
inline PCONFIG_INFO PcbConfig::getCurrentConfig(BYTE index)
{
if(_pcurrent_pcb_config->speed) //high speed
{
return &_pcurrent_pcb_config->hs_config_info[index];
}
else
{
return &_pcurrent_pcb_config->fs_config_info[index];
}
}
inline BOOLEAN PcbConfig::Ts1_Enable()
{
return (_pcurrent_pcb_config->ts1_source != NOT_SUPPORTED);
}
inline BOOLEAN PcbConfig::Ts2_Enable()
{
return (_pcurrent_pcb_config->ts2_source != NOT_SUPPORTED);
}
inline DWORD PcbConfig::Ts1_source()
{
return _pcurrent_pcb_config->ts1_source;
}
inline DWORD PcbConfig::Ts2_source()
{
return _pcurrent_pcb_config->ts2_source;
}
inline BYTE PcbConfig::getPcbMode()
{
return _pcurrent_pcb_config->mode;
}
inline BYTE PcbConfig::getPowertype()
{
return _pcurrent_pcb_config->type;
}
inline BYTE PcbConfig::getUsbSpeed()
{
return _pcurrent_pcb_config->speed;
}
inline BYTE PcbConfig::getIndex()
{
return _pcurrent_pcb_config->index;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -