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

📄 wdmtuner.cpp

📁 ATI显卡Windows驱动
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		{
			// there is unsupported hardware was found
			uiError = WDMMINI_UNKNOWNHARDWARE;
			FAIL;
		}

		m_pTVTunerPinsMediumInfo = ( PKSPIN_MEDIUM) \
			::ExAllocatePool( NonPagedPool, sizeof( KSPIN_MEDIUM) * m_ulNumberOfPins);
		if( m_pTVTunerPinsMediumInfo == NULL)
		{
			uiError = WDMMINI_ERROR_MEMORYALLOCATION;
			FAIL;
		}
		
		m_pTVTunerPinsDirectionInfo = ( PBOOL) \
			::ExAllocatePool( NonPagedPool, sizeof( BOOL) * m_ulNumberOfPins);
		if( m_pTVTunerPinsDirectionInfo == NULL)
		{
			uiError = WDMMINI_ERROR_MEMORYALLOCATION;
			FAIL;
		}

		m_pI2CScript = pCScript;

		SetWDMTunerKSProperties();
		SetWDMTunerKSTopology();

		// Set run-time WDM properties at the last
		m_ulVideoStandard = ( m_ulNumberOfStandards == 1) ?
			// unknown standard or the only one
			m_wdmTunerCaps.ulStandardsSupported : 0x0L;
		m_ulTunerInput = 0L;				// unknown input or the only one
		m_ulTuningFrequency = 0L;			// unknown tuning frequency

#ifndef ATI_TVAUDIO_SUPPORT
		{
			// this code is needed to initilaize TVAudio path off the tuner
			// if there is no separate MiniDriver for TVAudio is assumed
			UINT	uiAudioConfiguration;
			UCHAR	uchAudioI2CAddress;

			if( m_CATIConfiguration.GetAudioConfiguration( &uiAudioConfiguration,
														   &uchAudioI2CAddress))
			{
				m_CATIConfiguration.InitializeAudioConfiguration( pCScript,
																  uiAudioConfiguration,
																  uchAudioI2CAddress);
			}
		}
#endif	// ATI_TVAUDIO_SUPPORT

		* puiErrorCode = WDMMINI_NOERROR;

		OutputDebugTrace(( "CATIWDMTuner:CATIWDMTuner() exit\n"));

		return;

	} END_ENSURE;

	* puiErrorCode = uiError;

    OutputDebugError(( "CATIWDMTuner:CATIWDMTuner() Error = %x\n", uiError));
}



/*^^*
 *		SetTunerCapabilities()
 * Purpose	:  Sets the capabilities ( RO properties) based upon the Tuner Id
 *
 * Inputs	:	UINT puiTunerId	: Tuner Id
 *
 * Outputs	: returns TRUE, if there is a supported Tuner Id specified;
 *				also sets the following WDM Tuner properities:
 * Author	: IKLEBANOV
 *^^*/
BOOL CATIWDMTuner::SetTunerWDMCapabilities( UINT uiTunerId)
{
	
	::RtlZeroMemory( &m_wdmTunerCaps, sizeof( ATI_KSPROPERTY_TUNER_CAPS));
	m_ulIntermediateFrequency = 0x0L;

	switch( uiTunerId)
	{
		case 0x01:		// FI1236 NTSC M/N North America
			m_ulNumberOfStandards = 3;
			m_wdmTunerCaps.ulStandardsSupported = KS_AnalogVideo_NTSC_M	|
												  KS_AnalogVideo_PAL_M |
                                                  KS_AnalogVideo_PAL_N;
			m_wdmTunerCaps.ulNumberOfInputs = 1;
			m_wdmTunerCaps.ulMinFrequency =  54000000L;
			m_wdmTunerCaps.ulMaxFrequency = 801250000L;
			m_ulIntermediateFrequency = 45750000L;
			m_ulSupportedModes = KSPROPERTY_TUNER_MODE_TV;
			m_ulNumberOfPins = 2;
				break;

		case 0x02:		// FI1236J NTSC M/N Japan
			m_ulNumberOfStandards = 1;
			m_wdmTunerCaps.ulStandardsSupported = KS_AnalogVideo_NTSC_M_J;
			m_wdmTunerCaps.ulNumberOfInputs = 1;
			m_wdmTunerCaps.ulMinFrequency =  54000000L;
			m_wdmTunerCaps.ulMaxFrequency = 765250000L;
			m_ulIntermediateFrequency = 45750000L; 
			m_ulSupportedModes = KSPROPERTY_TUNER_MODE_TV;
			m_ulNumberOfPins = 2;
			break;

		case 0x03:		// FI1216 PAL B/G
			m_ulNumberOfStandards = 2;
			m_wdmTunerCaps.ulStandardsSupported = KS_AnalogVideo_PAL_B	|
												  KS_AnalogVideo_PAL_G;
			m_wdmTunerCaps.ulNumberOfInputs = 1;
			m_wdmTunerCaps.ulMinFrequency =  54000000L;
			m_wdmTunerCaps.ulMaxFrequency = 855250000L;
			m_ulIntermediateFrequency = 38900000L; 
			m_ulSupportedModes = KSPROPERTY_TUNER_MODE_TV;
			m_ulNumberOfPins = 2;
			break;

		case 0x04:		// FI1246 MK2 PAL I
			m_ulNumberOfStandards = 1;
			m_wdmTunerCaps.ulStandardsSupported = KS_AnalogVideo_PAL_I;
			m_wdmTunerCaps.ulNumberOfInputs = 1;
			m_wdmTunerCaps.ulMinFrequency =  45750000L;
			m_wdmTunerCaps.ulMaxFrequency = 855250000L;
			m_ulIntermediateFrequency = 38900000L; 
			m_ulSupportedModes = KSPROPERTY_TUNER_MODE_TV;
			m_ulNumberOfPins = 2;
			break;

		case 0x05:		// FI1216 PAL B/G, SECAM L/L'
			m_ulNumberOfStandards = 3;
			m_wdmTunerCaps.ulStandardsSupported =	KS_AnalogVideo_PAL_B |
													KS_AnalogVideo_PAL_G |
													KS_AnalogVideo_SECAM_L;
			m_wdmTunerCaps.ulNumberOfInputs = 1;
			m_wdmTunerCaps.ulMinFrequency =  54000000L;
			m_wdmTunerCaps.ulMaxFrequency = 855250000L;
			m_ulIntermediateFrequency = 38900000L; 
			m_ulSupportedModes = KSPROPERTY_TUNER_MODE_TV;
			m_ulNumberOfPins = 2;
			break;

		case 0x06:		// FR1236MK2 NTSC M/N North America + Japan
			m_ulNumberOfStandards = 4;
			m_wdmTunerCaps.ulStandardsSupported = KS_AnalogVideo_NTSC_M	|
												  KS_AnalogVideo_PAL_M	|
												  KS_AnalogVideo_NTSC_M_J |
                                                  KS_AnalogVideo_PAL_N;
			m_wdmTunerCaps.ulNumberOfInputs = 1;
			m_wdmTunerCaps.ulMinFrequency =  54000000L;
			m_wdmTunerCaps.ulMaxFrequency = 801250000L;
			m_ulIntermediateFrequency = 45750000L; 
			m_ulSupportedModes = KSPROPERTY_TUNER_MODE_TV;
			m_ulNumberOfPins = 2;
			break;

		case 0x07:		// FI1256 PAL D/K China
			m_ulNumberOfStandards = 1;
			m_wdmTunerCaps.ulStandardsSupported =	KS_AnalogVideo_PAL_D |
													KS_AnalogVideo_SECAM_D;
			m_wdmTunerCaps.ulNumberOfInputs = 1;
			m_wdmTunerCaps.ulMinFrequency =  48250000L;
			m_wdmTunerCaps.ulMaxFrequency = 855250000L;
			m_ulIntermediateFrequency = 38000000L; 
			m_ulSupportedModes = KSPROPERTY_TUNER_MODE_TV;
			m_ulNumberOfPins = 2;
			break;

		case 0x08:		// NTSC North America NEC FM Tuner
			m_ulNumberOfStandards = 3;
			m_wdmTunerCaps.ulStandardsSupported = KS_AnalogVideo_NTSC_M |
												  KS_AnalogVideo_PAL_M |
                                                  KS_AnalogVideo_PAL_N;
			m_wdmTunerCaps.ulNumberOfInputs = 2;
			m_wdmTunerCaps.ulMinFrequency =  54000000L;
			m_wdmTunerCaps.ulMaxFrequency = 801250000L;
			m_ulIntermediateFrequency = 45750000L; 
			m_ulSupportedModes = KSPROPERTY_TUNER_MODE_TV |
								 KSPROPERTY_TUNER_MODE_FM_RADIO;
			m_ulNumberOfPins = 2;
			break;

		case 0x10:		// NTSC North America Alps Tuner
		case 0x11:		// NTSC North America Alps Tuner
			m_ulNumberOfStandards = 3;
			m_wdmTunerCaps.ulStandardsSupported = KS_AnalogVideo_NTSC_M |
												  KS_AnalogVideo_PAL_M |
                                                  KS_AnalogVideo_PAL_N;
			m_wdmTunerCaps.ulNumberOfInputs = 1;
			m_wdmTunerCaps.ulMinFrequency =  54000000L;
			m_wdmTunerCaps.ulMaxFrequency = 801250000L;
			m_ulIntermediateFrequency = 45750000L; 
			m_ulSupportedModes = KSPROPERTY_TUNER_MODE_TV;
			m_ulNumberOfPins = 2;
			break;

		case 0x12:		// NTSC North America Alps Tuner with FM
			m_ulNumberOfStandards = 3;
			m_wdmTunerCaps.ulStandardsSupported = KS_AnalogVideo_NTSC_M |
												  KS_AnalogVideo_PAL_M |
                                                  KS_AnalogVideo_PAL_N;
			m_wdmTunerCaps.ulNumberOfInputs = 1;
			m_wdmTunerCaps.ulMinFrequency =  54000000L;
			m_wdmTunerCaps.ulMaxFrequency = 801250000L;
			m_ulIntermediateFrequency = 45750000L; 
			m_ulSupportedModes = KSPROPERTY_TUNER_MODE_TV |
								 KSPROPERTY_TUNER_MODE_FM_RADIO;
			m_ulNumberOfPins = 2;
			break;

		case 0x0D:		// Temic 4006 FN5 PAL B/G + PAL/I + PAL D + SECAM D/K
			m_ulNumberOfStandards = 6;
			m_wdmTunerCaps.ulStandardsSupported =	KS_AnalogVideo_PAL_B	|
													KS_AnalogVideo_PAL_G	|
													KS_AnalogVideo_PAL_I	|
													KS_AnalogVideo_PAL_D	|
													KS_AnalogVideo_SECAM_D	|
													KS_AnalogVideo_SECAM_K;
			m_wdmTunerCaps.ulNumberOfInputs = 1;
			m_wdmTunerCaps.ulMinFrequency =  45000000L;
			m_wdmTunerCaps.ulMaxFrequency = 868000000L;
			m_ulIntermediateFrequency = 38900000L; 
			m_ulSupportedModes = KSPROPERTY_TUNER_MODE_TV;
			m_ulNumberOfPins = 2;
			break;


		default:
			return( FALSE);
	}

	m_ulTunerMode = KSPROPERTY_TUNER_MODE_TV;

	m_wdmTunerCaps.ulTuningGranularity = 62500L;
	m_wdmTunerCaps.ulSettlingTime = 150;
	m_wdmTunerCaps.ulStrategy = KS_TUNER_STRATEGY_PLL;

	return( TRUE);
}



/*^^*
 *		AdapterSetPowerState()
 * Purpose	:	Sets Power Managemeny mode
 *
 * Inputs	:	PHW_STREAM_REQUEST_BLOCK pSrb	: pointer to the current Srb
 *
 * Outputs	:	NTSTATUS as the result of operation
 * Author	:	TOM
 *^^*/
NTSTATUS CATIWDMTuner::AdapterSetPowerState( PHW_STREAM_REQUEST_BLOCK pSrb)
{
    PADAPTER_DATA_EXTENSION pPrivateData = 
		( PADAPTER_DATA_EXTENSION)(( PHW_STREAM_REQUEST_BLOCK)pSrb)->HwDeviceExtension;
	CI2CScript *		pCScript	= &pPrivateData->CScript;
    DEVICE_POWER_STATE	nDeviceState = pSrb->CommandData.DeviceState;
	LARGE_INTEGER		liWakeUpTime;
	NTSTATUS			ntStatus;

	m_pPendingDeviceSrb = pSrb;
	ntStatus = STATUS_ADAPTER_HARDWARE_ERROR;

	switch( nDeviceState)
	{
		case PowerDeviceD0:
		case PowerDeviceD3:
			if( nDeviceState != m_ulPowerState)
			{
				m_CATIConfiguration.SetTunerPowerState( m_pI2CScript,
										( nDeviceState == PowerDeviceD0 ? TRUE : FALSE));

				// if transition form D3 to D0 we have to restore frequency
				if(( nDeviceState == PowerDeviceD0) && ( m_ulPowerState == PowerDeviceD3))
				{
					// we have to wait approx. 10ms for tuner to power up
					liWakeUpTime.QuadPart = ATIHARDWARE_TUNER_WAKEUP_DELAY;
					KeDelayExecutionThread( KernelMode, FALSE, &liWakeUpTime);

					// now we have to restore frequency
					if( SetTunerFrequency( m_ulTuningFrequency))
						ntStatus = STATUS_SUCCESS;
					else
						ntStatus = STATUS_ADAPTER_HARDWARE_ERROR;
				}
				else
					ntStatus = STATUS_SUCCESS;

				m_ulPowerState = nDeviceState;
			}
			else
				ntStatus = STATUS_SUCCESS;
			break;

		case PowerDeviceD1:
		case PowerDeviceD2:
			ntStatus = STATUS_SUCCESS;
			break;

		default:
			ntStatus = STATUS_INVALID_PARAMETER;
			break;
	}

	return( ntStatus);
}

⌨️ 快捷键说明

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