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

📄 tmbsl10086.c

📁 卫星接收机器卫星 自动搜索, 包括优化处理
💻 C
📖 第 1 页 / 共 5 页
字号:
// NOTES:       the value stocked in the object is returned
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086GetRF (
    tmUnitSelect_t      demodUnit,      //  I: Demod unit number
    UInt32             *puRF            //  O: RF freqency (KHz)
)
{
    UInt32             uRF;
    //----------------------
    // test input parameters
    //----------------------
    // test the instance number
    if (demodUnit > TDA10086_MAX_UNITS)
        return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;

    // test the object
    if (g10086Instance[demodUnit].Init == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    //----------------------
    // Core function
    //----------------------
    if ( !bAutoScan || (bAutoScan && bAutoScanReallyStarted))
    {
        *puRF = g10086Instance[demodUnit].sCurrentChannel.uRF;
    }
    else if (bAutoScan && !bAutoScanReallyStarted)
    {
        uRF = (g10086Instance[demodUnit].uStartFrequency + 3000000);
        *puRF = uRF;
    }

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10086SetSR
//
// DESCRIPTION: this function calculates the frequency symbol for registers
//              BDR_LSB, BDR_MID, BDR_MSB, BDR_INV
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED
//              TMBSL_ERR_DEMOD_BAD_PARAMETER
//              TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086SetSR (
    tmUnitSelect_t      demodUnit,        //  I: Demod unit number
    UInt32              uSR               //  I: Symbol Rate (Bauds)
)
{
    //----------------------
    // test input parameters
    //----------------------
    // test the instance number
    if (demodUnit > TDA10086_MAX_UNITS)
        return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;

    // test the object
    if (g10086Instance[demodUnit].Init == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    // test the parameter value
    if (uSR < TDA10086_SR_MIN || uSR > TDA10086_SR_MAX)
        return TMBSL_ERR_DEMOD_BAD_PARAMETER;

    //----------------------
    // Core function
    //----------------------
    //update uSRui only one time at beginning to keep the value setting by user : modif PR1047 YFL
    g10086Instance[demodUnit].sCurrentChannel.uSRui = uSR;
   
    if (Tda10086WriteSR(&g10086Instance[demodUnit], &uSR) == False)
        return TM_FALSE;

    // update return value
    g10086Instance[demodUnit].sCurrentChannel.uSR = uSR;

    // set limits
    g10086Instance[demodUnit].uStartSymbolRate = g10086Instance[demodUnit].uStopSymbolRate = uSR;

    // start algo
    g10086Instance[demodUnit].bStartAlgo = True;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10086GetSR
//
// DESCRIPTION: this function reads the current frequency symbol.
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED
//              TM_OK
//
// NOTES:       the value stocked in the object is returned
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086GetSR (
    tmUnitSelect_t      demodUnit,          //  I: Demod unit number
    UInt32             *puSR                //  I: Symbol Rate (Bauds)
)
{
    //----------------------
    // test input parameters
    //----------------------
    // test the instance number
    if (demodUnit > TDA10086_MAX_UNITS)
        return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;

    // test the object
    if (g10086Instance[demodUnit].Init == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    //----------------------
    // Core function
    //----------------------
    *puSR = g10086Instance[demodUnit].sCurrentChannel.uSRui; //modif PR1047 YFL

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10086SetSI
//
// DESCRIPTION: this function programs the spectral inversion
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED
//              TMBSL_ERR_DEMOD_BAD_PARAMETER
//              TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086SetSI (
    tmUnitSelect_t      demodUnit,          //  I: Demod unit number
    tmhalFESpectrum_t   eSI                 //  I: Spectral Inversion
)
{
    //----------------------
    // test input parameters
    //----------------------
    // test the instance number
    if (demodUnit > TDA10086_MAX_UNITS)
        return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;

    // test the object
    if (g10086Instance[demodUnit].Init == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    // test the parameter value
    if (eSI >= tmhalFESpectralInvMax)
        return TMBSL_ERR_DEMOD_BAD_PARAMETER;

    //----------------------
    // Core function
    //----------------------
    if (!g10086Instance[demodUnit].sConfig.bIQ_Swapped)
    {
        // if IQ not swapped
        switch(eSI)
        {
            case tmhalFESpectrumNormal:
                g10086Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10086Instance[demodUnit].uDemodHwAdd, 
                    TDA10086_CONF_IND, 
                    TDA10086_CONF_SPECINV_MSK, 
                    TDA10086_CONF_NOSPECINV_VAL);
                g10086Instance[demodUnit].sApiStatus.iAutoSpecInv = 0;
                break;
            case tmhalFESpectrumInverted:
                g10086Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10086Instance[demodUnit].uDemodHwAdd, 
                    TDA10086_CONF_IND, 
                    TDA10086_CONF_SPECINV_MSK, 
                    TDA10086_CONF_SPECINV_VAL);
                g10086Instance[demodUnit].sApiStatus.iAutoSpecInv = 0;
                break;
            default:
                g10086Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10086Instance[demodUnit].uDemodHwAdd, 
                    TDA10086_CONF_IND, 
                    TDA10086_CONF_SPECINV_MSK, 
                    TDA10086_CONF_AUTOSPECINV_VAL);
                g10086Instance[demodUnit].sApiStatus.iAutoSpecInv = 1;
                break;
        }
    }
    else
    {
        // if IQ swapped
        switch(eSI)
        {
            case tmhalFESpectrumNormal:
                g10086Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10086Instance[demodUnit].uDemodHwAdd, 
                    TDA10086_CONF_IND, 
                    TDA10086_CONF_SPECINV_MSK, 
                    TDA10086_CONF_SPECINV_VAL);
                g10086Instance[demodUnit].sApiStatus.iAutoSpecInv = 0;
                break;
            case tmhalFESpectrumInverted:
                g10086Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10086Instance[demodUnit].uDemodHwAdd, 
                    TDA10086_CONF_IND, 
                    TDA10086_CONF_SPECINV_MSK, 
                    TDA10086_CONF_NOSPECINV_VAL);
                g10086Instance[demodUnit].sApiStatus.iAutoSpecInv = 0;
                break;
            default:
                g10086Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10086Instance[demodUnit].uDemodHwAdd, 
                    TDA10086_CONF_IND, 
                    TDA10086_CONF_SPECINV_MSK, 
                    TDA10086_CONF_AUTOSPECINV_VAL);
                g10086Instance[demodUnit].sApiStatus.iAutoSpecInv = 1;
                break;
        }
    }

    // start algo
    g10086Instance[demodUnit].bStartAlgo = True;

    // update value
    g10086Instance[demodUnit].sCurrentChannel.eSI = eSI;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10086GetSI
//
// DESCRIPTION: this function reads the spectral inversion regarding to the value 
//              of the IQswapped at the input of the tuner.
//              0: no spectral inversion else spectral inversion.
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED
//              TM_OK
//
// NOTES:       the register is read each time
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086GetSI (
    tmUnitSelect_t      demodUnit,          //  I: Demod unit number
    tmhalFESpectrum_t  *peSI                //  O: Spectral Inversion
)
{
    UInt32 uRegister;

    //----------------------
    // test input parameters
    //----------------------
    // test the instance number
    if (demodUnit > TDA10086_MAX_UNITS)
        return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;

    // test the object
    if (g10086Instance[demodUnit].Init == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    //----------------------
    // Core function
    //----------------------
    // Read the spectral inversion in the register
    g10086Instance[demodUnit].systemFunc.SY_Read(
        g10086Instance[demodUnit].uDemodHwAdd, 
        TDA10086_CONF_IND, 
        1, 
        &uRegister);

    // check value
    switch(uRegister & TDA10086_CONF_SPECINV_MSK)
    {
        case TDA10086_CONF_NOSPECINV_VAL:
            *peSI = tmhalFESpectrumNormal;
            break;

        case TDA10086_CONF_SPECINV_VAL:
            *peSI = tmhalFESpectrumInverted;
            break;

        default:
            // Read the result of the auto spectral inversion
            g10086Instance[demodUnit].systemFunc.SY_Read(
                g10086Instance[demodUnit].uDemodHwAdd,
                TDA10086_STATUS_IND,
                1, 
                &uRegister);    
            if (uRegister & TDA10086_STATUS_SIA_MSK)
                *peSI = tmhalFESpectrumInverted;
            else
                *peSI = tmhalFESpectrumNormal;
            break;
    }

    // check if I/Q are swapped
    if (g10086Instance[demodUnit].sConfig.bIQ_Swapped)
    {
        // invert
        if (*peSI == tmhalFESpectrumInverted)
            *peSI = tmhalFESpectrumNormal;
        else
            *peSI = tmhalFESpectrumInverted;
    }

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10086SetVR
//
// DESCRIPTION: this function programs the viterbi rate
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED
//              TMBSL_ERR_DEMOD_BAD_PARAMETER
//              TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086SetVR (
    tmUnitSelect_t          demodUnit,            //  I: Demod unit number
    tmhalFEDepuncRate_t     eVR                   //  I: Viterbi Rate
)
{
    UInt32 uVR;
    
    //----------------------
    // test input parameters
    //----------------------
    // test the instance number
    if (demodUnit > TDA10086_MAX_UNITS)
        return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;

    // test the object
    if (g10086Instance[demodUnit].Init == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    // test the parameter value
    if (eVR >= tmhalFEDepuncRateMax)
        return TMBSL_ERR_DEMOD_BAD_PARAMETER;

    //----------------------
    // Core function
    //----------------------
    uVR = eVR;
    
    if (eVR == tmhalFEDepuncRateAuto)
    {
        // auto viterbi
        g10086Instance[demodUnit].systemFunc.SY_WriteBit(
            g10086Instance[demodUnit].uDemodHwAdd,
            TDA10086_RATE_IND,
            TDA10086_RATE_RAUTO_MSK, 
            TDA10086_RATE_RAUTO_BIT);
        g10086Instance[demodUnit].sApiStatus.iAutoViterbi = True;
    }
    else
    {
        // non auto viterbi
        uVR--;
        g10086Instance[demodUnit].systemFunc.SY_Write(
            g10086Instance[demodUnit].uDemodHwAdd, 
            TDA10086_RATE_IND,
            1, 
            &uVR);
        g10086Instance[demodUnit].sApiStatus.iAutoViterbi = False;
    }

    // start algo
    g10086Instance[demodUnit].bStartAlgo = True;

    // update current config
    g10086Instance[demodUnit].sCurrentChannel.eVR = eVR;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10086GetVR
//
// DESCRIPTION: this function reads the viterbi rate (1:1/2 2:2/3 .... 8:8/9).
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED
//              TM_OK
//
// NOTES:       the register is read each time
//-----------------------------------------------------------------------------
//
tmErrorCode_t

⌨️ 快捷键说明

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