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

📄 tuner.cpp

📁 windows 底层驱动
💻 CPP
📖 第 1 页 / 共 5 页
字号:
*
*
\******************************************************************** --*/
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 + -