📄 tmbslsaa7104.c
字号:
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 + -