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

📄 tuner.h

📁 windows 底层驱动
💻 H
📖 第 1 页 / 共 2 页
字号:
// Philips 1236D ATSC Video, Inside Tuner Input
const kPhilips1236DATSCInBandCtrlLow   = 0xCEA0;
const kPhilips1236DATSCInBandCtrlMid   = 0xCE90;
const kPhilips1236DATSCInBandCtrlHigh  = 0xCE30;

// Philips 1236D ATSC Video, Inside Tuner Input
const kPhilips1236DATSCOutBandCtrlLow  = 0xCEA1;
const kPhilips1236DATSCOutBandCtrlMid  = 0xCE91;
const kPhilips1236DATSCOutBandCtrlHigh = 0xCE31;

// Philips 1216 ME 4 In 1 tuner Control and Bandswitch bytes
const kPhilips1216InBandCtrlLow        = 0xCE01;
const kPhilips1216InBandCtrlMid        = 0xCE02;
const kPhilips1216InBandCtrlHigh       = 0xCE04;
const kPhilips1216AuxByte_BGDKI        = 0xA0;
const kPhilips1216AuxByte_L_L1         = 0x20;
const kPhilips1216_PAL_BG_Switch       = 0x16;
const kPhilips1216_PAL_BG_Adjust       = 0x70;
const kPhilips1216_PAL_BG_Data         = 0x49;
const kPhilips1216_PAL_DK_Switch       = 0x16;
const kPhilips1216_PAL_DK_Adjust       = 0x70;
const kPhilips1216_PAL_DK_Data         = 0x4B;
const kPhilips1216_PAL_I_Switch        = 0x16;
const kPhilips1216_PAL_I_Adjust        = 0x70;
const kPhilips1216_PAL_I_Data          = 0x4A;
const kPhilips1216_SECAM_L_Switch      = 0x06;
const kPhilips1216_SECAM_L_Adjust      = 0x50;
const kPhilips1216_SECAM_L_Data        = 0x4B;
const kPhilips1216_SECAM_L1_Switch     = 0x86;
const kPhilips1216_SECAM_L1_Adjust     = 0x50;
const kPhilips1216_SECAM_L1_Data       = 0x53;

const kPhilips1216_FM_Stereo_Switch    = 0x0A; //0x4A
const kPhilips1216_FM_Stereo_Adjust    = 0x90;
const kPhilips1216_FM_Stereo_Data      = 0x20;
const kPhilips1216BandCtrlFM           = 0x8819;


// Philips 1236 Bandswitching bytes
const kPhilips1236InBandCtrlLow        = 0xCE01;
const kPhilips1236InBandCtrlMid        = 0xCE02;
const kPhilips1236InBandCtrlHigh       = 0xCE04;

// Philips FQ1236 (and FM1236)  Aux, Switch, Adjust, Data, FM bytes
const kPhilipsFM1236AuxByte           = 0xB0;  // 0xA0;
const kPhilipsFM1236_NTSC_M_Switch    = 0x16;
const kPhilipsFM1236_NTSC_M_Adjust    = 0x10;
const kPhilipsFM1236_NTSC_M_Data      = 0x44;
const kPhilipsFM1236_FM_Stereo_Switch = 0x0A;   //0x4A;
const kPhilipsFM1236_FM_Stereo_Adjust = 0x90;
const kPhilipsFM1236_FM_Stereo_Data   = 0x20;
const kPhilipsFM1236BandCtrlFM        = 0x8819;

// Philips FI1236 Aux, Switch, Adjust, Data bytes
const kPhilipsFI1236AuxByte        = 0xB0;
const kPhilipsFI1236_NTSC_M_Switch = 0x12;
const kPhilipsFI1236_NTSC_M_Adjust = 0x30;
const kPhilipsFI1236_NTSC_M_Data   = 0x44;

// Philips FM1286 Aux, Switch, Adjust, Data bytes. FM bytes are the same as FM1236
const kPhilipsFM1286_NTSC_M_Switch    = kPhilipsFM1236_NTSC_M_Switch;
const kPhilipsFM1286_NTSC_M_Adjust    = 0x30;
const kPhilipsFM1286_NTSC_M_Data      = 0x40;

// Kittyhawk Demod. I2C address
const BYTE kKittyhawkDemodI2CAddr = 0x2A;
// Thomson 761x Bandswitching bytes
const kThomson761xInBandCtrlLow   = 0x8E11;
const kThomson761xInBandCtrlMid   = 0x8E12;
const kThomson761xInBandCtrlHigh  = 0x8E14;
const kThomson761xAuxByte         = 0xB0;
const kThomson761x_NTSC_Switch    = 0xD4;
const kThomson761x_NTSC_Adjust    = 0x30;
const kThomson761x_NTSC_Data      = 0x04;
const kThomson761x_FM_Switch      = 0xDC;
const kThomson761x_FM_Adjust      = 0x30;
const kThomson761x_FM_Data        = 0x04;
const kThomson761xBandCtrlFM      = 0x8811;

// Special case for Temic 4049 4-in-1 tuner
const kTemic4049_PAL_Switch     = 0xD4;
const kTemic4049_PAL_Adjust     = 0x70;
const kTemic4049_PALBG_Data     = 0x09;
const kTemic4049_PALDK_Data     = 0x0B;
const kTemic4049_PALI_Data      = 0x0A;

const kTemic4049_SECAML_Switch  = 0xC4;
const kTemic4049_SECAML_Adjust  = 0x10;
const kTemic4049_SECAML_Data    = 0x0B;

const kTemic4049_SECAML1_Switch = 0x44;
const kTemic4049_SECAML1_Data   = 0x13;

const kTemic4049_FM_Switch      = 0xDA;
const kTemic4049_FM_Adjust      = 0x10;
const kTemic4049_FM_Data        = 0x09;

// TCL2002MI-3 Bandswitching bytes
const kTCL2002MI3InBandCtrlLow  = 0xCE01;
const kTCL2002MI3InBandCtrlMid  = 0xCE02;
const kTCL2002MI3InBandCtrlHigh = 0xCE08;

// Philips FMD1216ME 4 In 1 PAL/DVB-T tuner Control and Bandswitch bytes
const kPhilipsFMD1216InBandCtrlLow    = 0x8651;
const kPhilipsFMD1216InBandCtrlMid    = 0x8652;
const kPhilipsFMD1216InBandCtrlHigh   = 0x8654;
const kPhilipsFMD1216AuxByte          = 0x60;
const kPhilipsFMD1216_PAL_BG_Switch   = 0x56;
const kPhilipsFMD1216_PAL_BG_Adjust   = 0x72;
const kPhilipsFMD1216_PAL_BG_Data     = 0x49;
const kPhilipsFMD1216_PAL_DK_Switch   = 0x56;
const kPhilipsFMD1216_PAL_DK_Adjust   = 0x72;
const kPhilipsFMD1216_PAL_DK_Data     = 0x4B;
const kPhilipsFMD1216_PAL_I_Switch    = 0x56;
const kPhilipsFMD1216_PAL_I_Adjust    = 0x72;
const kPhilipsFMD1216_PAL_I_Data      = 0x4A;
const kPhilipsFMD1216_SECAM_L_Switch  = 0x46;
const kPhilipsFMD1216_SECAM_L_Adjust  = 0x50;
const kPhilipsFMD1216_SECAM_L_Data    = 0x4B;
const kPhilipsFMD1216_SECAM_L1_Switch = 0xC6;
const kPhilipsFMD1216_SECAM_L1_Adjust = 0x50;
const kPhilipsFMD1216_SECAM_L1_Data   = 0x53;

// see spec. for important note regarding tuning for FM channel
const kPhilipsFMD1216_FM_Aux_Byte      = 0x40;
const kPhilipsFMD1216_FM_Stereo_Switch = 0x0E;
const kPhilipsFMD1216_FM_Stereo_Adjust = 0xDF;
const kPhilipsFMD1216_FM_Stereo_Data   = 0x7D;
const kPhilipsFMD1216BandCtrlFM        = 0x8019;

typedef struct tagTUNER_DATA_EXTENSION
{
    PDEVICE_OBJECT           pPDO;
    PDEVICE_OBJECT           realPDO;

    DEVICE_POWER_STATE       ulPowerState;
    LIST_ENTRY               leSrbQueueHead;
    KSPIN_LOCK               ksSpinLock;

    I2C_Interface           i2c_interface;

    BOOL                     bAdapterQueueInitialized;
    BOOL                     bProcessingAdapterSRB;

    // Optimizing the Resume time
    ULONG                    optimizingResumeDisable;

    GUID                     wdmTunerTopologyCategory;
    KSTOPOLOGY               wdmTunerTopology;
    PKSPIN_MEDIUM            pTVTunerPinsMediumInfo;
    PBOOL                    pTVTunerPinsDirectionInfo;
    HW_STREAM_HEADER         wdmTunerStreamHeader;
    ULONG                    ulCurrentFrequency;
    ULONG                    ulSupportedModes;
    ULONG                    ulTunerMode;
    ULONG                    ulNumberOfPins;
    ULONG                    ulTunerInput;
    UINT                     uiTunerType;
    ULONG                    ulIntermediateFrequency;
    ULONG                    ulIntermediateFrequencyFM;
    ULONG                    ulIntermediateFrequencySecamL1;
    ULONG                    ulTunerBrand;
    BYTE                     ucTunerI2CAddress;
    WORD                     wTunerBandCtrlFM;
    WORD                     wTunerBandCtrlLow;
    WORD                     wTunerBandCtrlMid;
    WORD                     wTunerBandCtrlHigh;
    ULONG                    ulStandard;

    // demodulator params
    BOOL                     bNxtWaveSetup;
    PFAST_MUTEX              CSNxtTrack;
    PFAST_MUTEX              CSNxtComm;
    BOOL                     bTrackingThreadIsRunning;
    BOOL                     bDemodIsInSerialMode;
    BOOL                     bDemodIsLocked;

    //HDALL device object so we can send it change notifications
    PDEVICE_OBJECT           pHDALL_Device;
    PFILE_OBJECT             pHDALL_File;
    BOOL                     bAttemptedToOpenHDALL;

    ULONG                    Channel;

    ULONG                    country_code;
    BOOL                     received_change_frequency;
    PVOID                    channel_change_thread_object;
    PVOID                    power_up_thread_object;
    ULONG                    ulDebounceFrequency;

    BTTUNERINTERFACE         tuner_interface;

    // Mutex to protect against sending a request/command to the main driver 
    // from more than one thread at a time.
    KMUTEX                  _mutex;

    BOOL                     demod_i2c_channel;

} TUNER_DATA_EXTENSION, *PTUNER_DATA_EXTENSION;


ULONG          DriverEntry( PDRIVER_OBJECT, PUNICODE_STRING );
void           TunerCompleteDeviceSrb( PHW_STREAM_REQUEST_BLOCK );
void STREAMAPI TunerReceivePacket( PHW_STREAM_REQUEST_BLOCK );
void STREAMAPI TunerCancelPacket( PHW_STREAM_REQUEST_BLOCK );
void STREAMAPI TunerTimeoutPacket( PHW_STREAM_REQUEST_BLOCK );
void           TunerInitialize( PHW_STREAM_REQUEST_BLOCK );
void           TunerCompleteInitialization( PHW_STREAM_REQUEST_BLOCK );
BOOL           TunerUnInitialize( PHW_STREAM_REQUEST_BLOCK );
BOOL           TunerGetStreamInfo( PHW_STREAM_REQUEST_BLOCK );
BOOL           TunerQueryUnload( PHW_STREAM_REQUEST_BLOCK );
void           TunerSetFreqBands( PHW_STREAM_REQUEST_BLOCK );
BOOL           TunerSetCapabilities( PHW_STREAM_REQUEST_BLOCK );
NTSTATUS       TunerSetPowerState( PHW_STREAM_REQUEST_BLOCK );
void           TunerPageOut( PHW_STREAM_REQUEST_BLOCK );
void           TunerSetTopology( PHW_STREAM_REQUEST_BLOCK );
void           AdapterGetProperty( PHW_STREAM_REQUEST_BLOCK );
void           AdapterSetProperty( PHW_STREAM_REQUEST_BLOCK );
void           TunerSetTunerMode( PTUNER_DATA_EXTENSION );
BOOL           TunerSetChannelFrequency( PTUNER_DATA_EXTENSION, ULONG, WORD );
BOOL           TunerSetFrequency( PTUNER_DATA_EXTENSION, ULONG );
BOOL           TunerSetStandard( PHW_STREAM_REQUEST_BLOCK, ULONG );
void           TunerSetDefaultValues( PHW_STREAM_REQUEST_BLOCK );
int            TunerGetPllOffset( PHW_STREAM_REQUEST_BLOCK, PULONG );
void           TunerDumpInfo( PTUNER_INFO );
void           TunerReadRegistryValues( PHW_STREAM_REQUEST_BLOCK );
void           TunerSetPhilips1236DCntrlBytes( PTUNER_DATA_EXTENSION );
void           TunerSetTunerInput( PHW_STREAM_REQUEST_BLOCK );
BOOL           TunerSetStandardFreq( PTUNER_DATA_EXTENSION, ULONG, WORD, ULONG );
BOOL           TunerSetPhilips1236DFreq( PTUNER_DATA_EXTENSION, ULONG, WORD );
BOOL           TunerSet4In1TunerAudioMode( PTUNER_DATA_EXTENSION, BOOLEAN turn_on_fm_sensitivity );

void           SendPreTunerI2CBytes( PTUNER_DATA_EXTENSION );
void           SendPostTunerI2CBytes( PTUNER_DATA_EXTENSION );

NTSTATUS GetHDAllDevice(PDEVICE_OBJECT *pDevice, PFILE_OBJECT *pFile);
BOOL SendHDALLCommand( PHDALL_INTERFACE pInterface, PDEVICE_OBJECT pPDO);


// Demodulator functions
void           DemodNxtWaveSetup( PTUNER_DATA_EXTENSION );
void           DemodNxtWaveExit( IN VOID * );
void           DemodNxtWaveTrack( IN PVOID );
void           DemodNxtWaveThreadInit( PTUNER_DATA_EXTENSION );
void           SendDemodCommand( PTUNER_DATA_EXTENSION );
void           GetDemodCommand( PTUNER_DATA_EXTENSION );

// Tuner driver to vcap driver interface routines
NTSTATUS       IoSynchCompletionRoutine( PDEVICE_OBJECT, PIRP, PVOID );
void           SendFMCommand( PTUNER_DATA_EXTENSION );
void           SendTVCommand( PTUNER_DATA_EXTENSION );
BOOL           SendCommand( PBTTUNERINTERFACE, PDEVICE_OBJECT );
DWORD          SendVideoStandardCommand( PTUNER_DATA_EXTENSION );


NTSTATUS startChannelChangeThread(PTUNER_DATA_EXTENSION p_tuner_extension);
NTSTATUS startPowerUpThread(PTUNER_DATA_EXTENSION p_tuner_extension);

VOID TunerPowerUp(PTUNER_DATA_EXTENSION p_tuner_extension);

void     acquireMutex( PTUNER_DATA_EXTENSION );
void     releaseMutex( PTUNER_DATA_EXTENSION );

void setOpenDemodI2CChannel( PTUNER_DATA_EXTENSION p_tuner_extension );

#ifdef __cplusplus
}
#endif


#endif  // TUNER_H


⌨️ 快捷键说明

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