📄 tuner.cpp
字号:
*
*
\******************************************************************** --*/
BOOL TunerQueryUnload( PHW_STREAM_REQUEST_BLOCK pSrb )
{
pSrb->Status = STATUS_SUCCESS;
return ( TRUE );
}
/*++ ********************************************************************\
*
* Function:
*
* BOOL TunerSetCapabilities( PHW_STREAM_REQUEST_BLOCK pSrb )
*
* Purpose:
*
* Set the capabilities of the tuner:
* number of standards supported,
* standards supported,
* number of inputs on the tuner,
* min. freq. of tuner,
* max. freq. of tuner,
* intermediate freq. of tuner,
* supported modes,
* number of pins on tuner filter,
* current tuner mode,
* tuning granularity,
* tuner settling time,
* tuning method
*
* Return:
*
* TRUE - valid tuner id
* FALSE - invalid tuner id
*
* History:
*
*
\******************************************************************** --*/
BOOL TunerSetCapabilities( PHW_STREAM_REQUEST_BLOCK pSrb )
{
PTUNER_DATA_EXTENSION pTunerDataExt = (PTUNER_DATA_EXTENSION)pSrb->HwDeviceExtension;
pTunerDataExt->ulIntermediateFrequency = 0x0L;
switch( pTunerDataExt->uiTunerType )
{
case NTSC_M: // NTSC North America
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_525LINE;
pTunerDataExt->ulIntermediateFrequencyFM = INTERMEDIATE_FREQUENCY_FM;
pTunerDataExt->ulNumberOfPins = 2;
pTunerDataExt->ulSupportedModes = KSPROPERTY_TUNER_MODE_TV |
KSPROPERTY_TUNER_MODE_FM_RADIO;
break;
case PAL_B: // PAL B/G
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_625LINE;
pTunerDataExt->ulIntermediateFrequencyFM = INTERMEDIATE_FREQUENCY_FM;
pTunerDataExt->ulNumberOfPins = 2;
pTunerDataExt->ulSupportedModes = KSPROPERTY_TUNER_MODE_TV |
KSPROPERTY_TUNER_MODE_FM_RADIO;
break;
case PAL_I: // PAL I
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_625LINE;
pTunerDataExt->ulIntermediateFrequencyFM = INTERMEDIATE_FREQUENCY_FM;
pTunerDataExt->ulNumberOfPins = 2;
pTunerDataExt->ulSupportedModes = KSPROPERTY_TUNER_MODE_TV |
KSPROPERTY_TUNER_MODE_FM_RADIO;
break;
case PAL_D: // PAL D/K
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_625LINE;
pTunerDataExt->ulIntermediateFrequencyFM = INTERMEDIATE_FREQUENCY_FM;
pTunerDataExt->ulNumberOfPins = 2;
pTunerDataExt->ulSupportedModes = KSPROPERTY_TUNER_MODE_TV |
KSPROPERTY_TUNER_MODE_FM_RADIO;
break;
case SECAM: // SECAM
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_625LINE;
pTunerDataExt->ulIntermediateFrequencySecamL1 = PICTURE_INTERMEDIATE_FREQUENCY_625LINE;
pTunerDataExt->ulIntermediateFrequencyFM = INTERMEDIATE_FREQUENCY_FM;
pTunerDataExt->ulNumberOfPins = 2;
pTunerDataExt->ulSupportedModes = KSPROPERTY_TUNER_MODE_TV |
KSPROPERTY_TUNER_MODE_FM_RADIO;
break;
case NTSC_M_ATSC: // Analog NTSC-M and Digital ATSC Philips 1236D
pTunerDataExt->ulNumberOfPins = 2;
pTunerDataExt->ulSupportedModes = KSPROPERTY_TUNER_MODE_TV |
KSPROPERTY_TUNER_MODE_ATSC;
if ( pTunerDataExt->ulTunerMode == KSPROPERTY_TUNER_MODE_TV )
{
// Analog TV
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_525LINE;
}
else
{
// ATSC digital TV
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_PHILIPS_ATSC;
}
break;
case TEMIC_4_IN_1: // Temic 4 in 1
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_625LINE_TEMIC4049;
pTunerDataExt->ulIntermediateFrequencySecamL1 = PICTURE_INTERMEDIATE_FREQUENCY_SECAML1_TEMIC4049;
pTunerDataExt->ulIntermediateFrequencyFM = INTERMEDIATE_FREQUENCY_FM_TEMIC4049;
pTunerDataExt->ulNumberOfPins = 2;
pTunerDataExt->ulSupportedModes = KSPROPERTY_TUNER_MODE_TV |
KSPROPERTY_TUNER_MODE_FM_RADIO;
break;
case TEMIC_4039: // Temic 4039
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_525LINE;
pTunerDataExt->ulIntermediateFrequencyFM = INTERMEDIATE_FREQUENCY_FM;
pTunerDataExt->ulNumberOfPins = 2;
pTunerDataExt->ulSupportedModes = KSPROPERTY_TUNER_MODE_TV |
KSPROPERTY_TUNER_MODE_FM_RADIO;
break;
case TEMIC_4136: // Temic 4136
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_525LINE;
pTunerDataExt->ulSupportedModes = KSPROPERTY_TUNER_MODE_TV;
pTunerDataExt->ulNumberOfPins = 2;
break;
case PHILIPS_FM1216_MK3:
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_PHILIPS1216;
pTunerDataExt->ulIntermediateFrequencySecamL1 = PICTURE_INTERMEDIATE_FREQUENCY_PHILIPS1216_L1;
pTunerDataExt->ulIntermediateFrequencyFM = INTERMEDIATE_FREQUENCY_FM_PHILIPS1216;
pTunerDataExt->ulSupportedModes = KSPROPERTY_TUNER_MODE_TV |
KSPROPERTY_TUNER_MODE_FM_RADIO;
pTunerDataExt->ulNumberOfPins = 2;
break;
case PHILIPS_FQ1216_MK3:
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_PHILIPS1216;
pTunerDataExt->ulIntermediateFrequencySecamL1 = PICTURE_INTERMEDIATE_FREQUENCY_PHILIPS1216_L1;
pTunerDataExt->ulSupportedModes = KSPROPERTY_TUNER_MODE_TV;
pTunerDataExt->ulNumberOfPins = 1;
break;
case PHILIPS_FM1236_MK3:
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_525LINE;
pTunerDataExt->ulIntermediateFrequencyFM = INTERMEDIATE_FREQUENCY_FM_PHILIPS1236MK3;
pTunerDataExt->ulNumberOfPins = 2;
pTunerDataExt->ulSupportedModes = KSPROPERTY_TUNER_MODE_TV |
KSPROPERTY_TUNER_MODE_FM_RADIO;
break;
case PHILIPS_FQ1236_MK3:
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_525LINE;
pTunerDataExt->ulNumberOfPins = 1;
pTunerDataExt->ulSupportedModes = KSPROPERTY_TUNER_MODE_TV;
break;
case PHILIPS_FI1236_MK3: // Philips FI1236 MK3
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_525LINE;
pTunerDataExt->ulNumberOfPins = 1;
pTunerDataExt->ulSupportedModes = KSPROPERTY_TUNER_MODE_TV;
break;
case PHILIPS_FM1286_MK3:
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_PHILIPS1286MK3;
pTunerDataExt->ulIntermediateFrequencyFM = INTERMEDIATE_FREQUENCY_FM_PHILIPS1236MK3; // same as 1236 MK3
pTunerDataExt->ulNumberOfPins = 2;
pTunerDataExt->ulSupportedModes = KSPROPERTY_TUNER_MODE_TV |
KSPROPERTY_TUNER_MODE_FM_RADIO;
break;
case XUGUANG_126:
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_PHILIPS1216; // 38.9MHz
pTunerDataExt->ulNumberOfPins = 1;
pTunerDataExt->ulSupportedModes = KSPROPERTY_TUNER_MODE_TV;
break;
case THOMSON_DTT761x:
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_525LINE;
pTunerDataExt->ulIntermediateFrequencyFM = INTERMEDIATE_FREQUENCY_FM_THOMSON761x;
pTunerDataExt->ulNumberOfPins = 1;
pTunerDataExt->ulSupportedModes = KSPROPERTY_TUNER_MODE_TV |
KSPROPERTY_TUNER_MODE_FM_RADIO;
break;
case TCL_2002_MI3:
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_TCL2002MI3; // 38.9MHz
pTunerDataExt->ulNumberOfPins = 1;
pTunerDataExt->ulSupportedModes = KSPROPERTY_TUNER_MODE_TV;
break;
case PHILIPS_FMD1216_ME:
pTunerDataExt->ulIntermediateFrequency = PICTURE_INTERMEDIATE_FREQUENCY_PHILIPS1216;
pTunerDataExt->ulIntermediateFrequencyFM = INTERMEDIATE_FREQUENCY_FM_PHILIPS1216;
pTunerDataExt->ulIntermediateFrequencySecamL1 = PICTURE_INTERMEDIATE_FREQUENCY_PHILIPS1216_L1;
pTunerDataExt->ulNumberOfPins = 2;
pTunerDataExt->ulSupportedModes = KSPROPERTY_TUNER_MODE_TV |
KSPROPERTY_TUNER_MODE_FM_RADIO;
break;
default:
return FALSE;
}
return ( TRUE );
}
/*++ ********************************************************************\
*
* Function:
*
* NTSTATUS TunerSetPowerState( PHW_STREAM_REQUEST_BLOCK pSrb )
*
* Purpose:
*
* None
*
* Return:
*
* NTSTATUS - STATUS_SUCCESS
*
* History:
*
*
\******************************************************************** --*/
NTSTATUS TunerSetPowerState( PHW_STREAM_REQUEST_BLOCK pSrb )
{
PTUNER_DATA_EXTENSION pTunerDataExt = ((PTUNER_DATA_EXTENSION)pSrb->HwDeviceExtension);
//Restore the mode and frequency when powering up
if(pSrb->CommandData.DeviceState == PowerDeviceD0)
{
// Should we create a thread to optimize resume because the resume time
// was too long with the WLAN card (max 5 seconds)
if ( pTunerDataExt->optimizingResumeDisable )
{
TunerPowerUp( pTunerDataExt );
}
else
{
if ( !pTunerDataExt->power_up_thread_object )
startPowerUpThread( pTunerDataExt );
}
}
return ( STATUS_SUCCESS );
}
/*++ ********************************************************************\
*
* Function:
*
* void TunerPageOut( PHW_STREAM_REQUEST_BLOCK pSrb )
*
* Purpose:
*
* Shuts down demod thread when driver is paged out, typically
* after a graph has been built and the application exits
*
* Return:
*
* none
*
* History:
*
* 10-Aug-2000 -by-
* Wrote it.
*
\******************************************************************** --*/
void TunerPageOut( PHW_STREAM_REQUEST_BLOCK pSrb )
{
PTUNER_DATA_EXTENSION pTunerDataExt = (PTUNER_DATA_EXTENSION)pSrb->HwDeviceExtension;
DbgLogInfo(("TunerPageOut\n"));
}
/*++ ********************************************************************\
*
* Function:
*
* void TunerSetTopology( PHW_STREAM_REQUEST_BLOCK pSrb )
*
* Purpose:
*
* Set the tuner topology of pins
*
* Return:
*
* None
*
* History:
*
*
\******************************************************************** --*/
void TunerSetTopology( PHW_STREAM_REQUEST_BLOCK pSrb )
{
PTUNER_DATA_EXTENSION pTunerDataExt = (PTUNER_DATA_EXTENSION)pSrb->HwDeviceExtension;
GUID wdmTunerTopologyCategory[] =
{
STATIC_KSCATEGORY_TVTUNER
};
RtlCopyMemory( &pTunerDataExt->wdmTunerTopologyCategory, wdmTunerTopologyCategory, sizeof(wdmTunerTopologyCategory) );
pTunerDataExt->wdmTunerTopology.CategoriesCount = 1;
pTunerDataExt->wdmTunerTopology.Categories = &pTunerDataExt->wdmTunerTopologyCategory;
pTunerDataExt->wdmTunerTopology.TopologyNodesCount = 0;
pTunerDataExt->wdmTunerTopology.TopologyNodes = NULL;
pTunerDataExt->wdmTunerTopology.TopologyConnectionsCount = 0;
pTunerDataExt->wdmTunerTopology.TopologyConnections = NULL;
}
/*++ ********************************************************************\
*
* Function:
*
* BOOL TunerSetPhilips1236DFreq( PHW_STREAM_REQUEST_BLOCK pSrb,
* ULONG ulFreq,
* WORD wControl )
*
* Purpose:
*
* Set the Philips 1236 tuner freqency for ATSC.
*
* Return:
*
* TRUE - I2C was successful
* FALSE - I2C failed
*
* History:
*
*
\******************************************************************** --*/
BOOL TunerSetPhilips1236DFreq( PTUNER_DATA_EXTENSION pTunerDataExt,
ULONG ulFreq,
WORD wControl )
{
int WaitCount;
BYTE ucStatus;
BYTE aucData[ 4 ];
LONGLONG llTemp = ulFreq;
BOOL bLocked = FALSE;
DbgLogInfo(("TunerSetPhilips1236DFreq\n"));
if( pTunerDataExt->ulTunerMode == KSPROPERTY_TUNER_MODE_ATSC &&
pTunerDataExt->bNxtWaveSetup )
{
DbgLogInfo(("Stop NxtWave tracking before channel change\n"));
DemodNxtWaveExit( pTunerDataExt ); // stop tracking
}
// set the video carrier frequency by controlling the programmable divider.
// Spec. says:
// Divider Bytes = ((Ch. num * 6 + 389) * 1 e6) + FreqIntermediate / 8 * 7.8125 KHz
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -