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

📄 tmbslsaa7104.c

📁 PNX1500上7104芯片设置源代码!标准的C代码。
💻 C
📖 第 1 页 / 共 5 页
字号:
            return tmRetVal;
        }
        bData = (UInt8)(bData & 0x7F) ;
        tmRetVal =  saa7104SetReg(avoUnit, 0x2C, bData);
        DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Set reg 0x2C = 0X%x",tmRetVal));
        if(tmRetVal != TM_OK)
        {
            return tmRetVal;
        }

        // turn of VPS
        tmRetVal = saa7104GetReg (pInstance->unitNumber, 0x54/*VPSEN*/, &bData);
        DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Get reg 0x54 = 0X%x",tmRetVal));
        if(tmRetVal != TM_OK)
        {
            return tmRetVal;
        }
        bData = (UInt8)(bData & 0x7F) ;
        tmRetVal =  saa7104SetReg(avoUnit, 0x54, bData);
        DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Set reg 0x54 = 0X%x",tmRetVal));
        if(tmRetVal != TM_OK)
        {
            return tmRetVal;
        }
 
        
        for (i = 0; i < tblSize; i++)
        {
            if ((localField1[i]&vdsUSClosedCaption)||(localField2[i]&vdsUSClosedCaption))
            {
                // Enable CC
                tmRetVal = saa7104GetReg (pInstance->unitNumber, 0x6F/*CCEN*/, &bData);
                DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Get reg 0x6F = 0X%x",tmRetVal));
                if(tmRetVal != TM_OK)
                    return tmRetVal;

                /* calculate CCEN1 and CCEN0 */
                value = (UInt8)( (((field1[i]&vdsUSClosedCaption)==vdsUSClosedCaption) << 6) | 
                                 (((field2[i]&vdsUSClosedCaption)==vdsUSClosedCaption) << 7));

                // calculate SCCLIN 
                switch (pInstance->currentColorSystem)
                {
                case tmbslVencAna_PalM:
                case tmbslVencAna_NtscM:
                    // line = (SCCLN + 4) for M-systems; 
                    value |= (21 - 4);
                    break;

                case tmbslVencAna_PalBg:
                case tmbslVencAna_PalN:
                case tmbslVencAna_Secam:
                default:       				  
                    // line = (SCCLN + 1) for other systems 
                    value |= (21 - 1);
                    break;
                }
                				
                bData = (UInt8)((bData & 0x20) | value);
                tmRetVal =  saa7104SetReg(avoUnit, 0x6F, bData);
                DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Set reg 0x6F = 0X%x",tmRetVal));
                if(tmRetVal != TM_OK)
                    return tmRetVal;
            }
			
            // WSS 
            if ((localField1[i]&vdsWSS)||(localField2[i]&vdsWSS))
            {
		// Enable WSS
                tmRetVal = saa7104GetReg (avoUnit, 0x27/*WSS*/, &bData);
                DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Get reg 0x27 = 0X%x",tmRetVal));
                if(tmRetVal != TM_OK)
                    return tmRetVal;
                bData = (UInt8)((bData & 0x7F) | (1 << 7));
                tmRetVal =  saa7104SetReg(avoUnit, 0x27, bData);
                DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Set reg 0x27 = 0X%x",tmRetVal));
                if(tmRetVal != TM_OK)
                    return tmRetVal;
            }

            // CGMS 
            if ((localField1[i]&vdsCGMS)||(localField2[i]&vdsCGMS))
            {
                // Get byte with line number
                tmRetVal = saa7104GetReg (pInstance->unitNumber, 0x6F/*CCEN*/, &bData);
                DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Get reg 0x6F = 0X%x",tmRetVal));
                if(tmRetVal != TM_OK)
                    return tmRetVal; 
                // calculate SCCLIN 
                switch (pInstance->currentColorSystem)
                {
                case tmbslVencAna_PalM:
                case tmbslVencAna_NtscM:
                    // line = (SCCLN + 4) for M-systems; 
                    value = (21 - 4);
                    break;

                case tmbslVencAna_PalBg:
                case tmbslVencAna_PalN:
                case tmbslVencAna_Secam:
                default:       				  
                    // line = (SCCLN + 1) for other systems 
                    value = (21 - 1);
                    break;
                }
                bData = (UInt8)((bData & 0xe0) | value);
                // Set line number
                tmRetVal =  saa7104SetReg(avoUnit, 0x6F, bData);
                DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Set reg 0x6F = 0X%x",tmRetVal));
                if(tmRetVal != TM_OK)
                    return tmRetVal;
                    
		// Enable CGMS
                tmRetVal = saa7104GetReg (avoUnit, 0x2C/*CG*/, &bData);
                DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Get reg 0x2C = 0X%x",tmRetVal));
                if(tmRetVal != TM_OK)
                    return tmRetVal;

                bData = (UInt8)((bData & 0x7F) | (1 << 7));
                tmRetVal =  saa7104SetReg(avoUnit, 0x2C, bData);
                DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Set reg 0x2C = 0X%x",tmRetVal));
                if(tmRetVal != TM_OK)
                    return tmRetVal;
            }

            //VPS
            if ((localField1[i]&vdsVPS)||(localField2[i]&vdsVPS))
            {
                // Enable VPS
                tmRetVal = saa7104GetReg (avoUnit, 0x54/*WSS*/, &bData);
                DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Get reg 0x54 = 0X%x",tmRetVal));
                if(tmRetVal != TM_OK)
                    return tmRetVal;

                bData = (UInt8)((bData & 0x7F) | (1 << 7));
                tmRetVal =  saa7104SetReg(avoUnit, 0x54, bData);
                DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Set reg 0x54 = 0X%x",tmRetVal));
                if(tmRetVal != TM_OK)
                    return tmRetVal;
            }

            if ( (field1[i] & vdsEuroTeleText) || (field2[i] & vdsEuroTeleText) )
            {
                DBG_ASSERT2(tmRetVal == TM_OK, ("TeleTExt Insertion is not supported"));
                    
            }
        }
    }
  
    return tmRetVal;
}

/******************************************************************************/
tmErrorCode_t tmbsl7104SetVbiData (
    ptmbslVencAnaVbiExt_t  pInstance,
    tmField_t         		field,
    tmVideoDataService_t 	l21Type,
    UInt8               	*pL21Data,
    tmVideoDataService_t 	wssType,
    UInt16              	*pWssData,
    tmVideoDataService_t 	cgmsType,
    UInt8              	        *pCgmsData,
    tmVideoDataService_t 	vpsType,
    UInt8               	*pVpsData,
    tmVideoDataService_t 	ttxtType,
    UInt8               	*pTtxtData,
    int                 	*pTtxtLineNrs,
    int                 	nrTtxtLines
    )
{
    tmErrorCode_t       tmRetVal = TM_OK;
    tmUnitSelect_t 		avoUnit = pInstance->unitNumber;

    (void) pTtxtLineNrs;
    (void) nrTtxtLines;
    (void) pTtxtData;

    DBG_ASSERT(pInstance != Null);
    DBG_ASSERT(pInstance->magic == SAA7104_MAGIC_NUMBER);
	
    // Check if valid unit
    if (pInstance->unitNumber >= SAA7104_MAX_UNITS)
        return TMBSL_ERR_VENCANA_BAD_UNIT_NUMBER;

    // TODO: implemetation
    if (gSaa7104Inst[avoUnit].init != TM_TRUE )
        return TMBSL_ERR_VENCANA_NOT_INITIALIZED;

    DBG_ASSERT2((ttxtType == vdsNone), ("TeleText is not supported!"));
    
    if(ttxtType != vdsNone)
        return TMBSL_ERR_VENCANA_NOT_SUPPORTED;

    //US Closed Caption
    if(l21Type != vdsNone)
    {
        DBG_ASSERT( pL21Data != Null );
        if(field == tmField2)
        {
            tmRetVal = saa7104SetReg(avoUnit, 0x69, pL21Data[0]);
            DBG_ASSERT2(tmRetVal == TM_OK, ("saa7104SetReg Failed with Return Value 0x%x", tmRetVal));
            tmRetVal = saa7104SetReg(avoUnit, 0x6a, pL21Data[1]);
            DBG_ASSERT2(tmRetVal == TM_OK, ("saa7104SetReg Failed with Return Value 0x%x", tmRetVal));
        }
        else
        {
            tmRetVal = saa7104SetReg(avoUnit, 0x67, pL21Data[0]);
            DBG_ASSERT2(tmRetVal == TM_OK, ("saa7104SetReg Failed with Return Value 0x%x", tmRetVal));
            tmRetVal = saa7104SetReg(avoUnit, 0x68, pL21Data[1]);
            DBG_ASSERT2(tmRetVal == TM_OK, ("saa7104SetReg Failed with Return Value 0x%x", tmRetVal));
        }
    }
    
    // WSS
    if (wssType != vdsNone)
    {
        UInt8 bData;

        DBG_ASSERT( pWssData != Null );
		
        tmRetVal = saa7104SetReg(avoUnit, 0x26, (UInt8)pWssData[0]);
        DBG_ASSERT2(tmRetVal == TM_OK, ("saa7104SetReg Failed with Return Value 0x%x", tmRetVal));
		
        tmRetVal = saa7104GetReg(avoUnit, 0x27, &bData);
        DBG_ASSERT2(tmRetVal == TM_OK, ("saa7104GetReg Failed with Return Value 0x%x", tmRetVal));
		
        bData = (UInt8)((bData & 0xF0) | ((pWssData[0] >> 8) & 0x0F));
        tmRetVal = saa7104SetReg(avoUnit, 0x27, bData);
        DBG_ASSERT2(tmRetVal == TM_OK, ("saa7104SetReg Failed with Return Value 0x%x", tmRetVal));
		
    }
    
    // CGMS
    if (cgmsType != vdsNone)
    {
        UInt8 bData;

        DBG_ASSERT( pCgmsData != Null );

	tmRetVal = saa7104GetReg (avoUnit, 0x2C/*CGEN*/, &bData);
        DBG_ASSERT2(tmRetVal == TM_OK, ("saa7104GetReg Failed with Return Value 0x%x", tmRetVal));

	bData = (UInt8)((bData & 0xF0) | ((UInt32)pCgmsData[2] & 0x0F));
	tmRetVal =  saa7104SetReg(avoUnit, 0x2C, bData);
	DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Set reg 0x2C = 0X%x",tmRetVal));

	tmRetVal =  saa7104SetRegM(avoUnit, 0x2A, pCgmsData, 2);
	DBG_ASSERT2(tmRetVal == TM_OK, ("SetReg Failed with Return Value 0x%x", tmRetVal));		
    }
    
    //VPS Byte 5, 11. 12, 13, 14 
    if (vpsType != vdsNone)
    {		
        DBG_ASSERT( pVpsData != Null );
        /*
          tmRetVal = saa7104SetReg(avoUnit, 0x55, pVpsData[0]);
          DBG_ASSERT2(tmRetVal == TM_OK, ("saa7104SetReg Failed with Return Value 0x%x", tmRetVal));

          tmRetVal = saa7104SetReg(avoUnit, 0x56, pVpsData[1]);
          DBG_ASSERT2(tmRetVal == TM_OK, ("saa7104SetReg Failed with Return Value 0x%x", tmRetVal));

          tmRetVal = saa7104SetReg(avoUnit, 0x57, pVpsData[2]);
          DBG_ASSERT2(tmRetVal == TM_OK, ("saa7104SetReg Failed with Return Value 0x%x", tmRetVal));

          tmRetVal = saa7104SetReg(avoUnit, 0x58, pVpsData[3]);
          DBG_ASSERT2(tmRetVal == TM_OK, ("saa7104SetReg Failed with Return Value 0x%x", tmRetVal));

          tmRetVal = saa7104SetReg(avoUnit, 0x59, pVpsData[4]);
          DBG_ASSERT2(tmRetVal == TM_OK, ("saa7104SetReg Failed with Return Value 0x%x", tmRetVal));
        */
        tmRetVal =  saa7104SetRegM(avoUnit, 0x55, pVpsData, 5);
        DBG_ASSERT2(tmRetVal == TM_OK, ("saa7104SetReg Failed with Return Value 0x%x", tmRetVal));
    }

    return tmRetVal;
}

/******************************************************************************/
tmErrorCode_t tmbsl7104SetCGMSData(
    ptmbslVencAnaVbiExt_t  	pInstance,
    UInt8               	*pCgmsData
    )
{
    tmErrorCode_t 	tmRetVal = TM_OK;
    UInt8 			bData;
    tmUnitSelect_t 	avoUnit = pInstance->unitNumber;

    DBG_ASSERT(pInstance != Null);
    DBG_ASSERT(pInstance->magic == SAA7104_MAGIC_NUMBER);
    DBG_ASSERT(pCgmsData != Null);
	
    tmRetVal = saa7104GetReg (avoUnit, 0x2C/*CGEN*/, &bData);
    DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Get reg 0x2C = 0X%x",tmRetVal));
    if(tmRetVal != TM_OK)
        return tmRetVal;

    bData = (UInt8)((bData & 0xF0) | ((UInt32)pCgmsData[2] & 0x0F));
    tmRetVal =  saa7104SetReg(avoUnit, 0x2C, bData);
    DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Set reg 0x2C = 0X%x",tmRetVal));
    if(tmRetVal != TM_OK)
        return tmRetVal;
	
    /*
      tmRetVal =  saa7104SetReg(avoUnit, 0x2B, pCgmsData[1]);
      DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Set reg 0x2B = 0X%x",tmRetVal));
      if(tmRetVal != TM_OK)
      return tmRetVal;

      tmRetVal =  saa7104SetReg(avoUnit, 0x2A, pCgmsData[0]);
      DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Set reg 0x2A = 0X%x",tmRetVal));
      if(tmRetVal != TM_OK)
      return tmRetVal;
    */
	
    tmRetVal =  saa7104SetRegM(avoUnit, 0x2A, pCgmsData, 2);
    DBG_ASSERT2(tmRetVal == TM_OK, ("saa7104SetReg Failed with Return Value 0x%x", tmRetVal));
    
    return tmRetVal;
}

/******************************************************************************/
tmErrorCode_t tmbsl7104ChangeCGMSSetup (
    ptmbslVencAnaVbiExt_t  pInstance,
    Bool                   enable
    )
{
    tmErrorCode_t 	tmRetVal = TM_OK;
    UInt8 			bData;
    tmUnitSelect_t 	avoUnit = pInstance->unitNumber;
	
    DBG_ASSERT(pInstance != Null);
    DBG_ASSERT(pInstance->magic == SAA7104_MAGIC_NUMBER);

    tmRetVal = saa7104GetReg (avoUnit, 0x2C/*CGEN*/, &bData);
    DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Get reg 0x2C = 0X%x",tmRetVal));
    if(tmRetVal != TM_OK)
        return tmRetVal;

    bData = (UInt8)((bData & 0x7F) | ((enable & 1) << 7));
    tmRetVal =  saa7104SetReg(avoUnit, 0x2C, bData);
    DBG_ASSERT2(tmRetVal == TM_OK, ("Failed in Set reg 0x2C = 0X%x",tmRetVal));

    return tmRetVal;
}

/******************************************************************************
* EXPORTED FUNCTION PROTOTYPES for specific for Advanced Video Out (AVO)	  *
*******************************************************************************/

/******************************************************************************/
tmErrorCode_t tmbsl7104GetSWVersion(
    ptmSWVersion_t      pVersion
    )
{
    DBG_ASSERT(pVersion != Null);
	
    pVersion->compatibilityNr = SAA7104_BSL_COMP_NUM;
    pVersion->majorVersionNr  = SAA7104_BSL_MAJOR_VER;
    pVersion->minorVersionNr  = SAA7104_BSL_MINOR_VER;

    return TM_OK;
}

/******************************************************************************/
tmErrorCode_t tmbsl7104VoGetPowerState(
    tmUnitSelect_t      avoUnit,
    ptmPowerState_t     pPowerState
    )
{
    DBG_ASSERT(pPowerState != Null);
	
    if (avoUnit >= SAA7104_MAX_UNITS)
        return TMBSL_ERR_VENCANA_BAD_UNIT_NUMBER;

⌨️ 快捷键说明

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