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

📄 tmbsl10086.c

📁 卫星接收机器卫星 自动搜索, 包括优化处理
💻 C
📖 第 1 页 / 共 5 页
字号:
tmErrorCode_t
tmbsl10086SetConfig(
    tmUnitSelect_t   demodUnit,        //  I: demodUnit number
    UInt32           uItemId,          //  I: Identifier of the item to modify
    UInt32           uValue            //  I: Value to set for the config item
)
{
    //----------------------
    // 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;

    //--------------
    // set the value
    //--------------
    switch((tm10086cfgIndex_t)uItemId)
    {
        // Board config
        case BOARD:
            // default hardware config
            g10086Instance[demodUnit].sConfig.uXtall          = OM57XX_XTAL_DEF;
            g10086Instance[demodUnit].sConfig.bPLL_M_Factor   = OM57XX_PLLMFACTOR_DEF;
            g10086Instance[demodUnit].sConfig.bPLL_P_Factor   = OM57XX_PLLPFACTOR_DEF;
            g10086Instance[demodUnit].sConfig.bBerDepth       = OM57XX_BERDEPTH_DEF;
            g10086Instance[demodUnit].sConfig.bSearchRange    = OM57XX_SEARCHRANGE_DEF;
            g10086Instance[demodUnit].sConfig.bPolaAGC        = OM57XX_POLAGC_DEF;
            g10086Instance[demodUnit].sConfig.bIQ_Swapped     = OM57XX_IQSWAPPED_DEF;
            g10086Instance[demodUnit].sConfig.bOUT1_ModeABC   = OM57XX_MODEABC1_DEF;
            g10086Instance[demodUnit].sConfig.bOUT1_ParaSer   = OM57XX_PARASER1_DEF;
            g10086Instance[demodUnit].sConfig.bOUT1_POClk     = OM57XX_POCLK1_DEF;
            g10086Instance[demodUnit].sConfig.bOUT1_MSBFirst  = OM57XX_MSBFIRST1_DEF;
            g10086Instance[demodUnit].sConfig.bOUT1_ParBDiv   = OM57XX_PARBDIV1_DEF;
            g10086Instance[demodUnit].sConfig.bOUT2_ModeAB    = OM57XX_MODEAB2_DEF;
            g10086Instance[demodUnit].sConfig.bOUT2_POClk     = OM57XX_POCLK2_DEF;
            g10086Instance[demodUnit].sConfig.bOUT2_MSBFirst  = OM57XX_MSBFIRST2_DEF;

            // specific soft config
            // none

            // specific board config
            switch (uValue & 0xffff0000)
            {
            case OM5751_BOARD_DEF:
            case OM5752_BOARD_DEF:
                g10086Instance[demodUnit].sConfig.bIQ_Swapped = 1;
                g10086Instance[demodUnit].sConfig.bZIFTuner   = 1;
                break;

            case OM5756_BOARD_DEF:
                g10086Instance[demodUnit].sConfig.bIQ_Swapped = 0;
                g10086Instance[demodUnit].sConfig.bZIFTuner   = 1;
                break;

			case OM5761_BOARD_DEF:
                g10086Instance[demodUnit].sConfig.uXtall        = 16000000;
                g10086Instance[demodUnit].sConfig.bPLL_M_Factor = 11;
                g10086Instance[demodUnit].sConfig.bPLL_P_Factor = OM57XX_PLLPFACTOR_DEF;
                g10086Instance[demodUnit].sConfig.bIQ_Swapped   = 0;
                g10086Instance[demodUnit].sConfig.bZIFTuner     = 0;

                break;

            case CUSTOM_BOARD_DEF:
                // do nothing more than setting the default values
                break;

            default:
                // board not supported
                return TM_ERR_NOT_SUPPORTED;
            }

            // store board
            g10086Instance[demodUnit].sConfig.uBoard = uValue;
            break;

        case DSSDVB:
            g10086Instance[demodUnit].sConfig.bDSS_DVB = (UInt8)uValue;
            break;
        case XTALL:
            g10086Instance[demodUnit].sConfig.uXtall = uValue;
            break;
        case PLLMFACTOR:
            g10086Instance[demodUnit].sConfig.bPLL_M_Factor = (UInt8)uValue;
            break;
        case PLLPFACTOR:
            g10086Instance[demodUnit].sConfig.bPLL_P_Factor = (UInt8)uValue;
            break;
        case BERDEPTH:
            g10086Instance[demodUnit].sConfig.bBerDepth = (UInt8)uValue;
            break;
        case SEARCHRANGE:
            g10086Instance[demodUnit].sConfig.bSearchRange = (UInt8)uValue;
            break;
        case POLAAGC:
            g10086Instance[demodUnit].sConfig.bPolaAGC = (UInt8)uValue;
            break;
        case IQSWAPPED:
            g10086Instance[demodUnit].sConfig.bIQ_Swapped = (UInt8)uValue;
            break;
        case OUT1MODEABC:
            g10086Instance[demodUnit].sConfig.bOUT1_ModeABC = (UInt8)uValue;
            break;
        case OUT1PARASER:
            g10086Instance[demodUnit].sConfig.bOUT1_ParaSer = (UInt8)uValue;
            break;
        case OUT1POCLK:
            g10086Instance[demodUnit].sConfig.bOUT1_POClk = (UInt8)uValue;
            break;
        case OUT1MSBFIRST:
            g10086Instance[demodUnit].sConfig.bOUT1_MSBFirst = (UInt8)uValue;
            break;
        case OUT1PARBDIV:
            g10086Instance[demodUnit].sConfig.bOUT1_ParBDiv = (UInt8)uValue;
            break;
        case OUT2MODEAB:
            g10086Instance[demodUnit].sConfig.bOUT2_ModeAB = (UInt8)uValue;
            break;
        case OUT2POCLK:
            g10086Instance[demodUnit].sConfig.bOUT2_POClk = (UInt8)uValue;
            break;
        case OUT2MSBFIRST:
            g10086Instance[demodUnit].sConfig.bOUT2_MSBFirst = (UInt8)uValue;
            break;
        case ZIFTUNER:
            g10086Instance[demodUnit].sConfig.bZIFTuner = (UInt8)uValue;
            break;

        case SRMAX:
            g10086Instance[demodUnit].sConfig.uStartSymbolRate = uValue;
            break;
        case SRMIN:
            g10086Instance[demodUnit].sConfig.uStopSymbolRate = uValue;
            break;
        case SRMAXMARGIN:
            g10086Instance[demodUnit].sConfig.uSrMaxMargin = uValue;
            break;
        case SRMINMARGIN:
            g10086Instance[demodUnit].sConfig.uSrMinMargin = uValue;
            break;
        case DELTATHRESHOLD:
            g10086Instance[demodUnit].sConfig.uDeltaThreshold = uValue;
            break;

        // backdoor functions
        case FEINIT:
            // init
            Tda10086WriteInit(&g10086Instance[demodUnit]);
            break;
        case SWITCH:
            if (uValue)
                // open switch
                g10086Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10086Instance[demodUnit].uDemodHwAdd,
                    TDA10086_CLEAR_IND,
                    TDA10086_CLEAR_IICTRL_MSK,
                    TDA10086_CLEAR_IICTRL_MSK);
            else
                // close switch
                g10086Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10086Instance[demodUnit].uDemodHwAdd,
                    TDA10086_CLEAR_IND,
                    TDA10086_CLEAR_IICTRL_MSK,
                    0);
            break;
        default:
            return TM_ERR_BAD_PARAMETER;
    }

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

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10086GetConfig:
//
// DESCRIPTION: Get the config of the 10086
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED
//              TM_ERR_BAD_PARAMETER
//              TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086GetConfig(
    tmUnitSelect_t  demodUnit,    //  I: Demod unit number
    UInt32          uItemId,      //  I: Identifier of the item to check
    UInt32*         puValue       //  O: Value of the item
)
{
    UInt32 uByte, puByte[2];

    //----------------------
    // 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
    //----------------------
    // get the value
    switch((tm10086cfgIndex_t)uItemId)
    {
        // Board config
        case BOARD:
            *puValue = g10086Instance[demodUnit].sConfig.uBoard;
            break;
        case DSSDVB:
            *puValue = g10086Instance[demodUnit].sConfig.bDSS_DVB;
            break;
        case XTALL:
            *puValue = g10086Instance[demodUnit].sConfig.uXtall;
            break;
        case PLLMFACTOR:
            *puValue = g10086Instance[demodUnit].sConfig.bPLL_M_Factor;
            break;
        case PLLPFACTOR:
            *puValue = g10086Instance[demodUnit].sConfig.bPLL_P_Factor;
            break;
        case BERDEPTH:
            *puValue = g10086Instance[demodUnit].sConfig.bBerDepth;
            break;
        case SEARCHRANGE:
            *puValue = g10086Instance[demodUnit].sConfig.bSearchRange;
            break;
        case POLAAGC:
            *puValue = g10086Instance[demodUnit].sConfig.bPolaAGC;
            break;
        case IQSWAPPED:
            *puValue = g10086Instance[demodUnit].sConfig.bIQ_Swapped;
            break;
        case OUT1MODEABC:
            *puValue = g10086Instance[demodUnit].sConfig.bOUT1_ModeABC;
            break;
        case OUT1PARASER:
            *puValue = g10086Instance[demodUnit].sConfig.bOUT1_ParaSer;
            break;
        case OUT1POCLK:
            *puValue = g10086Instance[demodUnit].sConfig.bOUT1_POClk;
            break;
        case OUT1MSBFIRST:
            *puValue = g10086Instance[demodUnit].sConfig.bOUT1_MSBFirst;
            break;
        case OUT1PARBDIV:
            *puValue = g10086Instance[demodUnit].sConfig.bOUT1_ParBDiv;
            break;
        case OUT2MODEAB:
            *puValue = g10086Instance[demodUnit].sConfig.bOUT2_ModeAB;
            break;
        case OUT2POCLK:
            *puValue = g10086Instance[demodUnit].sConfig.bOUT2_POClk;
            break;
        case OUT2MSBFIRST:
            *puValue = g10086Instance[demodUnit].sConfig.bOUT2_MSBFirst;
            break;
        case ZIFTUNER:
            *puValue = g10086Instance[demodUnit].sConfig.bZIFTuner;
            break;

        case SRMAX:
            *puValue = g10086Instance[demodUnit].sConfig.uStartSymbolRate;
            break;
        case SRMIN:
            *puValue = g10086Instance[demodUnit].sConfig.uStopSymbolRate;
            break;
        case SRMAXMARGIN:
            *puValue = g10086Instance[demodUnit].sConfig.uSrMaxMargin;
            break;
        case SRMINMARGIN:
            *puValue = g10086Instance[demodUnit].sConfig.uSrMinMargin;
            break;
        case DELTATHRESHOLD:
            *puValue = g10086Instance[demodUnit].sConfig.uDeltaThreshold;
            break;

        // backdoor functions
        case IDENTITY:
            g10086Instance[demodUnit].systemFunc.SY_Read(
                g10086Instance[demodUnit].uDemodHwAdd,
                TDA10086_IDENTITY_IND, 
                1, 
                &uByte);
            if (uByte != 0xE1)
                *puValue = False;
            else
                *puValue = True;
            break;
        case READSYNC:
            g10086Instance[demodUnit].systemFunc.SY_Read(
                g10086Instance[demodUnit].uDemodHwAdd,
                TDA10086_SYNC_IND, 
                1, 
                puValue);
            break;
        case READIQ:
            g10086Instance[demodUnit].systemFunc.SY_Read(
                g10086Instance[demodUnit].uDemodHwAdd,
                TDA10086_ISYMB_IND, 
                2, 
                puByte);
            *puValue = puByte[0] << 10 | puByte[1] << 2;
            break;
        case READAGCAD:
            g10086Instance[demodUnit].systemFunc.SY_Read(
                g10086Instance[demodUnit].uDemodHwAdd,
                TDA10086_VAGCA_IND, 
                1, 
                &uByte);
            *puValue = uByte << 8;
            g10086Instance[demodUnit].systemFunc.SY_Read(
                g10086Instance[demodUnit].uDemodHwAdd,
                TDA10086_VAGCN_IND, 
                1, 
                &uByte);
            *puValue |= uByte;
            break;
        case GETNBOFUNIT:
            *puValue = TDA10086_MAX_UNITS;
            break;
		case RSSI:
			Tda10086GetRssi(&g10086Instance[demodUnit], puValue);
			break;  

        default:
            return TM_ERR_BAD_PARAMETER;
    }

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10086Write
//
// DESCRIPTION: this function writes bytes in the demod registers.
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED
//              TM_ERR_IIC_ERR
//              TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086Write (
    tmUnitSelect_t     demodUnit,       //  I: Demod unit number
    UInt32             uIndex,          //  I: Start index to write
    UInt32             uNbBytes,        //  I: Number of bytes to write
    UInt32*            puBytes          //  I: Pointer on an array of bytes
)
{

    //----------------------
    // 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 (g10086Instance[demodUnit].systemFunc.SY_Write(
            g10086Instance[demodUnit].uDemodHwAdd,
            uIndex,
            uNbBytes, 
            puBytes) != uNbBytes)
        return TM_ERR_IIC_ERR;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10086WriteBit
//
// DESCRIPTION: this function writes a bit to the mask position
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED
//              TM_ERR_IIC_ERR
//              TM_OK
//
// NOTES:       
//-----------------------------------------------------------------------------
//

⌨️ 快捷键说明

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