📄 tuner.h
字号:
// 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 + -