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

📄 tmbsl10023.c

📁 三星一体化数字高频头DNQS221PH261A驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
        case IFMIN:
            *puValue = g10023Instance[demodUnit].sConfig.bIFMin;
            break;
        case TUNMAX:
            *puValue = g10023Instance[demodUnit].sConfig.bTUNMax;
            break;
        case TUNMIN:
            *puValue = g10023Instance[demodUnit].sConfig.bTUNMin;
            break;
        case AGCTRESHOLD:
            *puValue = g10023Instance[demodUnit].sConfig.bAGCtreshold;
            break;
        case EQUALTYPE:
            *puValue = g10023Instance[demodUnit].sConfig.bEqualType;
            break;
        case POLAPWM1:
            *puValue = g10023Instance[demodUnit].sConfig.bPolaPWM1;
            break;
        case POLAPWM2:
            *puValue = g10023Instance[demodUnit].sConfig.bPolaPWM2;
            break;
        case BERDEPTH:
            *puValue = g10023Instance[demodUnit].sConfig.bBERdepth;
            break;
        case BERWINDOW:
            *puValue = g10023Instance[demodUnit].sConfig.uBERwindow;
            break;
        case CLKOFFSETRANGE:
            *puValue = g10023Instance[demodUnit].sConfig.bClkOffsetRange;
            break;
        case IQSWAP:
            *puValue = g10023Instance[demodUnit].sConfig.bTUN_IQSwap;
            break;
        case IF:
            *puValue = g10023Instance[demodUnit].sConfig.uTUN_IF;
            break;
        case OCLK1:
            *puValue = g10023Instance[demodUnit].sConfig.bOUT_OClk1;
            break;
        case PARASER1:
            *puValue = g10023Instance[demodUnit].sConfig.bOUT_bParaSer1;
            break;
        case MSBFIRST1:
            *puValue = g10023Instance[demodUnit].sConfig.bOUT_bMSBFirst1;
            break;
        case MODEABC1:
            *puValue = g10023Instance[demodUnit].sConfig.bOUT_ModeABC1;
            break;
        case PARADIV1:
            *puValue = g10023Instance[demodUnit].sConfig.bOUT_ParaDiv1;
            break;
        case OCLK2:
            *puValue = g10023Instance[demodUnit].sConfig.bOUT_OClk2;
            break;
        case MSBFIRST2:
            *puValue = g10023Instance[demodUnit].sConfig.bOUT_bMSBFirst2;
            break;
        case SWDYN:
            *puValue = g10023Instance[demodUnit].sConfig.bSwDyn;
            break;
        case SWSTEP:
            *puValue = g10023Instance[demodUnit].sConfig.bSwStep;
            break;

        // backdoor functions
        case IDENTITY:
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd,
                TDA10023_IDENTITY_IND, 1, &uByte);
            if (uByte != TDA10023_IDENTITY_DEF)
                *puValue = False;
            else
                *puValue = True;
            break;

        case READSYNC:
            if(g10023Instance[demodUnit].sConfig.bModeDvbMcns)
            {
                // MCNS mode
                // MPEGLCK and FRAMELCK
                g10023Instance[demodUnit].systemFunc.SY_Read(
                    g10023Instance[demodUnit].uDemodHwAdd,
                    TDA10023_STATUS_MCNS_IND, 1, &uByte);

                // shift register to the left in order to have an equivalent mapping as in DVB mode
                *puValue = (uByte & (TDA10023_STATUS_MCNS_MPEGLCK_BIT | TDA10023_STATUS_MCNS_FRAMELCK_BIT)) << 1;

                // CARLOCK
                g10023Instance[demodUnit].systemFunc.SY_Read(
                    g10023Instance[demodUnit].uDemodHwAdd,
                    TDA10023_STATUS_IND, 1, &uByte);

                *puValue |= (uByte & TDA10023_STATUS_CARLOCK_BIT);

            }
            else
            {
                // DVB mode
                g10023Instance[demodUnit].systemFunc.SY_Read(
                    g10023Instance[demodUnit].uDemodHwAdd,
                    TDA10023_STATUS_IND, 1, puValue);
            }
            break;

        case READAGC:
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd,
                TDA10023_AGCIF_IND, 1, &uByte);
            *puValue = uByte << 8;
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd,
                TDA10023_AGCTUN_IND, 1, &uByte);
            *puValue |= uByte;
            break;

        case GETNBOFUNIT:
            *puValue = TDA10023_MAX_UNITS;
            break;

        case READIQ:
            return tmbsl10023GetIQ(demodUnit, puValue);

        case READCOEF:
            return tmbsl10023GetCOEF(demodUnit, puValue);

        case READMSE:
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd,
                TDA10023_MSE_IND, 1, puValue);
            break;

        case STOPEQUAL:
            // freeze the equalizer coef only if the algorithm is not working
            if (g10023Instance[demodUnit].bState == 0)
                g10023Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10023Instance[demodUnit].uDemodHwAdd,
                    TDA10023_EQCONF1_IND, TDA10023_EQCONF1_ENADAPT_BIT, 0);
            break;

        case STARTEQUAL:
            // unfreeze the equalizer coef only if the algorithm is not working
            if (g10023Instance[demodUnit].bState == 0)
                g10023Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10023Instance[demodUnit].uDemodHwAdd,
                    TDA10023_EQCONF1_IND, TDA10023_EQCONF1_ENADAPT_BIT, TDA10023_EQCONF1_ENADAPT_BIT);
            break;

        case TUNERLVL:
            // Test if the GetLevel function is implemented
            // NOTE: if the GetLevel function is not implemented or not enabled, we must not 
            // change the I2C switch. The trick used to determine if the function is enabled
            // is to call the getCfgFunc with a null pointer for the last parameter. In this
            // case, the function return TM_OK if the function is enabled.
            if ( g10023Instance[demodUnit].tunerFunc.getCfgFunc(g10023Instance[demodUnit].eTunerUnit, tmhalFETunerLVL, (UInt32*)0) == TM_OK)
            {
                // tuner is accessible
                g10023Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10023Instance[demodUnit].uDemodHwAdd, 
                    TDA10023_TEST_IND, TDA10023_TEST_BYPIIC_BIT, 
                    TDA10023_TEST_BYPIIC_BIT);

                // The last parameter of the getCfgFunc isn't a null pointer
                // so we get the input level
                g10023Instance[demodUnit].tunerFunc.getCfgFunc(g10023Instance[demodUnit].eTunerUnit, tmhalFETunerLVL, puValue);

                // tuner is disconnected from the I2C bus
                g10023Instance[demodUnit].systemFunc.SY_WriteBit(
                    g10023Instance[demodUnit].uDemodHwAdd, 
                    TDA10023_TEST_IND, TDA10023_TEST_BYPIIC_BIT, 0);

                if (*puValue == 0xFFFFFFFF)
                    return TMBSL_ERR_DEMOD_NOT_SUPPORTED;
                else
                    return TM_OK;
            }
            else
            {
                return TMBSL_ERR_DEMOD_NOT_SUPPORTED;
            }
            break;

        
        case JQAMMODE:
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
                TDA10023_JQAM_MODE_IND, 1, puValue);
            break;

        case JQAMREQTS:
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
                TDA10023_REQ_TS_IDH_IND, 2, puBytes);
            *puValue = (puBytes[0] << 8) | puBytes[1];
            break;

        case JQAMREQON:
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
                TDA10023_REQ_ON_IDH_IND, 2, puBytes);
            *puValue = (puBytes[0] << 8) | puBytes[1];
            break;

        case JQAMGETREG5:
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
                TDA10023_REG5_IND, 1, puValue);
            break;

        case JQAMGETTSSTATUS:
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
                TDA10023_TS_STATUS_H_IND, 2, puBytes);
            *puValue = (puBytes[0] << 8) | puBytes[1];
            break;

        case JQAMGETRCVSTATUS:
            g10023Instance[demodUnit].systemFunc.SY_Read(
                g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
                TDA10023_RCV_STATUS4_IND, 4, puBytes);
            *puValue = (puBytes[0] << 24) | (puBytes[1] << 16) | (puBytes[2] << 8) | puBytes[3];
            break;

        case JQAMGETTSON:
            for(i=0 ; i< TDA10023_JQAMFILTER_NB ; i++) 
            {
                g10023Instance[demodUnit].systemFunc.SY_Read(
                    g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
                    TDA10023_TS_ID1H_IND+(4*i), 4, puBytes);

                *puValue = (puBytes[0] << 24) | (puBytes[1] << 16) | (puBytes[2] << 8) | puBytes[3];
                puValue++;
            }
            break;

        default:
            return TM_ERR_BAD_PARAMETER;
    }

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10023Write
//
// 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:       This function can be removed if needed
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023Write (
    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
)
{
    SEND_TRACEFCT1(DEBUG_WRITE_ID, 0);

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

    // test the object
    if (g10023Instance[demodUnit].sApiFlags.iInit == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    //----------------------
    // Implementation
    //----------------------
    if (g10023Instance[demodUnit].systemFunc.SY_Write(
        g10023Instance[demodUnit].uDemodHwAdd,
        uIndex, uNbBytes, puBytes) == False)
        return TM_ERR_IIC_ERR;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10023WriteBit
//
// 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:       This function can be removed if needed
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023WriteBit (
    tmUnitSelect_t     demodUnit,     //  I: Demod unit number
    UInt32             uIndex,        //  I: Index to write
    UInt32             uBitMask,      //  I: byte mask
    UInt32             uByte          //  I: value
)
{
    SEND_TRACEFCT1(DEBUG_WRITEBIT_ID, 0);

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

    // test the object
    if (g10023Instance[demodUnit].sApiFlags.iInit == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

    //----------------------
    // Implementation
    //----------------------
    if (g10023Instance[demodUnit].systemFunc.SY_WriteBit(
        g10023Instance[demodUnit].uDemodHwAdd,
        uIndex, uBitMask, uByte) == False)
        return TM_ERR_IIC_ERR;

    return TM_OK;
}

//-----------------------------------------------------------------------------
// FUNCTION:    tmbsl10023Read
//
// DESCRIPTION: this function reads bytes
//
// RETURN:      TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
//              TMBSL_ERR_DEMOD_NOT_INITIALIZED    
//              TM_ERR_IIC_ERR    
//              TM_OK
//
// NOTES:       This function can be removed if needed
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023Read (
    tmUnitSelect_t     demodUnit,   //  I: Demod unit number
    UInt32             uIndex,      //  I: Start index to write
    UInt32             uNbBytes,    //  I: Number of bytes to read
    UInt32*            puBytes      //  O: Pointer on an array of bytes
)
{
    SEND_TRACEFCT1(DEBUG_READ_ID, 0);

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

    // test the object
    if (g10023Instance[demodUnit].sApiFlags.iInit == False)
        return TMBSL_ERR_DEMOD_NOT_INITIALIZED;

⌨️ 快捷键说明

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