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

📄 prop.cpp

📁 windows 底层驱动
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                    break;
                case XUGUANG_126:
                    pCaps->MinFrequency = BAND_LOW_XG126;
                    pCaps->MaxFrequency = BAND_HIGH_XG126;
                    break;
                case TCL_2002_MI3:
                    pCaps->MinFrequency = BAND_LOW_TCL2002MI3;
                    pCaps->MaxFrequency = BAND_HIGH_TCL2002MI3;
					break;
                case PHILIPS_FMD1216_ME:
                    pCaps->MinFrequency = BAND_LOW_FMD1216ME;
                    pCaps->MaxFrequency = BAND_MAX_FMD1216ME;
                    break;
                default: 
                    pCaps->MinFrequency = BAND_LOW;
                    pCaps->MaxFrequency = BAND_HI;
                    break;
                }


                break;
            }

            pSrb->ActualBytesTransferred = sizeof( KSPROPERTY_TUNER_MODE_CAPS_S );

            break;
        }

        // tuner tuning process
        case KSPROPERTY_TUNER_STATUS:
        {
            PKSPROPERTY_TUNER_STATUS_S pStat = (PKSPROPERTY_TUNER_STATUS_S)pSPD->Property;
            pStat = PKSPROPERTY_TUNER_STATUS_S( pSPD->PropertyInfo );
            pStat->PLLOffset = TunerGetPllOffset( pSrb, &pStat->Busy );
            pStat->CurrentFrequency = pTunerDataExt->ulCurrentFrequency;
            pStat->SignalStrength = 0;

            if (pTunerDataExt->ulTunerMode == KSPROPERTY_TUNER_MODE_FM_RADIO)
            {
                if(pStat->PLLOffset == 0)
                    pStat->SignalStrength = 100;
            }


            // Workaround for lock detect, if we're in ATSC mode, and the NxtWave chip
            // is locked, return 100 for the signal strength, otherwise return zero.

            if (pTunerDataExt->ulTunerMode == KSPROPERTY_TUNER_MODE_ATSC)
            {
                BOOL bFrameLock = FALSE;
                NxtGetLockStatus( pTunerDataExt, &bFrameLock );

                if ( bFrameLock )
                {
                    DbgLogInfo(("Signal Strength = 100\n"));
                    pStat->SignalStrength = 100;
                }
                else
                {
                    DbgLogInfo(("Signal Strength = 0\n"));
                    pStat->SignalStrength = 0;
                }
            }
            pSrb->ActualBytesTransferred = sizeof(KSPROPERTY_TUNER_STATUS_S);

            break;
        }

        // tuning standard
        case KSPROPERTY_TUNER_STANDARD:
        {
            PKSPROPERTY_TUNER_STANDARD_S pStd = (PKSPROPERTY_TUNER_STANDARD_S)pSPD->Property;
            pStd = PKSPROPERTY_TUNER_STANDARD_S( pSPD->PropertyInfo );
            pStd->Standard = pTunerDataExt->ulStandard;
            pSrb->ActualBytesTransferred = sizeof(KSPROPERTY_TUNER_STANDARD_S);
            break;
        }

        // current tuner input no.
        case KSPROPERTY_TUNER_INPUT:
        {
            PKSPROPERTY_TUNER_INPUT_S pIn = (PKSPROPERTY_TUNER_INPUT_S)pSPD->Property;
            pIn = PKSPROPERTY_TUNER_INPUT_S( pSPD->PropertyInfo );
            pIn->InputIndex = pTunerDataExt->ulTunerInput;
            pSrb->ActualBytesTransferred = sizeof(KSPROPERTY_TUNER_INPUT_S);
            break;
        }

        case KSPROPERTY_TUNER_FREQUENCY:
        {
            PKSPROPERTY_TUNER_FREQUENCY_S pFreq = (PKSPROPERTY_TUNER_FREQUENCY_S)pSPD->PropertyInfo;
			pFreq->Frequency = pTunerDataExt->ulCurrentFrequency;
            pSrb->ActualBytesTransferred = sizeof( KSPROPERTY_TUNER_FREQUENCY_S );
			break;
        }

        default:
            DbgLogWarn(( "AdapterGetTunerProperty( <other> 0x%08X )", pSrb->Command ));
            pSrb->Status = STATUS_NOT_IMPLEMENTED;
            break;
    }
}

/*++ ********************************************************************\
*
*   Function:
*
*       void AdapterSetTunerProperty( PHW_STREAM_REQUEST_BLOCK pSrb )
*
*   Purpose:
*
*       Set the standard property value
*
*   Return:
*
*       None
*
*   History:
*
*
\******************************************************************** --*/
void
AdapterSetTunerProperty( PHW_STREAM_REQUEST_BLOCK pSrb )
{
    PTUNER_DATA_EXTENSION pTunerDataExt = (PTUNER_DATA_EXTENSION)pSrb->HwDeviceExtension;
    PSTREAM_PROPERTY_DESCRIPTOR pSPD = pSrb->CommandData.PropertyInfo;
    PVOID pV = pSPD->PropertyInfo;

    //DbgLogTrace(("AdapterSetTunerProperty(%x))\n", pSrb));

    pSrb->Status = STATUS_SUCCESS; // assume success

    switch( pSPD->Property->Id )
    {
        case KSPROPERTY_TUNER_FREQUENCY:
        {
            PKSPROPERTY_TUNER_FREQUENCY_S pFreq = (PKSPROPERTY_TUNER_FREQUENCY_S)pV;
            DbgLog(("*** Country = %d (%02xh)\n", pFreq->Country, pFreq->Country));
            pTunerDataExt->country_code = pFreq->Country;
            if(pFreq->Frequency != pTunerDataExt->ulCurrentFrequency)
            {
                pTunerDataExt->Channel = pFreq->Channel;
                if ( !TunerSetFrequency( pTunerDataExt, pFreq->Frequency ) )
				{
					pSrb->Status = STATUS_UNSUCCESSFUL;
                }
            }
            break;
        }

        case KSPROPERTY_TUNER_MODE:
        {
            PKSPROPERTY_TUNER_MODE_S pMode = (PKSPROPERTY_TUNER_MODE_S)pV;

            // 13 May 2003 - If tuning to FM from TV on an MK3 tuner,
            //                   force a set to stable high-frequency TV channel first
            if ((pTunerDataExt->uiTunerType == PHILIPS_FM1216_MK3 ||
                 pTunerDataExt->uiTunerType == PHILIPS_FM1236_MK3 ||
                 pTunerDataExt->uiTunerType == PHILIPS_FMD1216_ME ||
                 pTunerDataExt->uiTunerType == PHILIPS_FM1286_MK3) &&
                (pTunerDataExt->ulTunerMode == KSPROPERTY_TUNER_MODE_TV) &&
                (pMode->Mode == KSPROPERTY_TUNER_MODE_FM_RADIO))
            {
                if ( !TunerSetFrequency( pTunerDataExt, 150000000 ) )
            	{
					pSrb->Status = STATUS_UNSUCCESSFUL;
                }
            }

            pTunerDataExt->ulTunerMode = pMode->Mode;
            TunerSetTunerMode( pTunerDataExt );
            break;
        }

        case KSPROPERTY_TUNER_STANDARD:
        {
            PKSPROPERTY_TUNER_STANDARD_S pStandard = (PKSPROPERTY_TUNER_STANDARD_S)pV;
            ULONG Standard = pStandard->Standard;
            TunerSetStandard( pSrb, Standard );
            break;
        }
        case KSPROPERTY_TUNER_INPUT:
        {
            PKSPROPERTY_TUNER_INPUT_S pIn = (PKSPROPERTY_TUNER_INPUT_S)pSPD->Property;
            pIn = PKSPROPERTY_TUNER_INPUT_S( pSPD->PropertyInfo );

            pTunerDataExt->ulTunerInput = pIn->InputIndex;
            TunerSetTunerInput( pSrb );
            break;
        }
        default:
            DbgLog(( "AdapterSetTunerProperty( <other> 0x%08X )", pSrb->Command ));
            pSrb->Status = STATUS_NOT_IMPLEMENTED;
            break;
    }

    if(pSrb->Status == STATUS_SUCCESS)
    {
        if(!pTunerDataExt->pHDALL_Device && !pTunerDataExt->bAttemptedToOpenHDALL)
        {
            GetHDAllDevice(&pTunerDataExt->pHDALL_Device, &pTunerDataExt->pHDALL_File);
            pTunerDataExt->bAttemptedToOpenHDALL = TRUE;
        }

        //If the request succeeded, notify HDALL of the change.
        if(pTunerDataExt->pHDALL_Device)
        {
            HDALL_INTERFACE Interface;
            Interface.Command = HDALL_COMMAND_NOTIFY;
            Interface.Data.NotificationInfo.TunerMode = pTunerDataExt->ulTunerMode;
            Interface.Data.NotificationInfo.Channel = pTunerDataExt->Channel;

            SendHDALLCommand(&Interface, pTunerDataExt->pHDALL_Device);
        }
    }

}

/*++ ********************************************************************\
*
*   Function:
*
*       void AdapterSetProperty( PHW_STREAM_REQUEST_BLOCK pSrb )
*
*   Purpose:
*
*       Selects either standard, custom or shared custom
*       property to set
*
*   Return:
*
*       None
*
*   History:
*
*
\******************************************************************** --*/
VOID
AdapterSetProperty( PHW_STREAM_REQUEST_BLOCK pSrb )
{
    PSTREAM_PROPERTY_DESCRIPTOR pSPD = pSrb->CommandData.PropertyInfo;

    //DbgLogTrace(("AdapterSetProperty(%x))\n", pSrb));

    if ( IsEqualGUID( PROPSETID_TUNER, pSPD->Property->Set ))
    {
        AdapterSetTunerProperty( pSrb );
    }
    else
    {
        DbgLogWarn((0, "AdapterSetProperty unrecognized GUID: pSrb(%x), pSPD->Property->Set(%x)\n", pSrb, pSPD->Property->Set));
        pSrb->Status = STATUS_INVALID_PARAMETER;
    }
}

/*++ ********************************************************************\
*
*   Function:
*
*       void AdapterSetSharedCustomProperty( PHW_STREAM_REQUEST_BLOCK pSrb )
*
*   Purpose:
*
*       Selects either standard, custom or shared custom
*       property to get
*
*   Return:
*
*       None
*
*   History:
*
*
\******************************************************************** --*/
VOID
AdapterGetProperty( PHW_STREAM_REQUEST_BLOCK pSrb )
{
    PSTREAM_PROPERTY_DESCRIPTOR pSPD = pSrb->CommandData.PropertyInfo;

    //DbgLogTrace(("AdapterGetProperty(%x))\n", pSrb));

    if ( IsEqualGUID( PROPSETID_TUNER, pSPD->Property->Set ))
    {
        AdapterGetTunerProperty( pSrb );
    }
    else
    {
        DbgLogWarn((0, "AdapterGetProperty unrecognized GUID: pSrb(%x), pSPD->Property->Set(%x)\n", pSrb, pSPD->Property->Set));
        pSrb->Status = STATUS_INVALID_PARAMETER;
    }
}


⌨️ 快捷键说明

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