📄 audio_api1.c
字号:
#if 0 //zenghw add for temp
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_DEMOD_CTRL, //zenghw add
SGTV58XX_DEMOD_DEMOD_CTRL__DISABLE_CONT_ASD,
SGTV58XX_DEMOD_DEMOD_CTRL__DISABLE_CONT_ASD);
#endif
// now force the standard
wTemp = SGTV58xx_I2C_Read(SGTV58XX_REG__DEMOD_ASD_CTRL);
// clear auto-detect and disable it
#if 0 //zenghw changed because we do not have auto detect in menu
wTemp &= SGTV58XX_DEMOD_ASD_CTRL__ASD_DISABLE__CLEARMASK;
// if(UserPrefSoundSystem !=0 ) //lsz 060704
if(g_AudioInfo.ucUserPreSelect!=0 ) //lsz 060704 zenghw change temp p001
wTemp |= SGTV58XX_DEMOD_ASD_CTRL__ASD_DISABLE__DISABLE_VALUE;
#else
wTemp |= SGTV58XX_DEMOD_ASD_CTRL__ASD_DISABLE__DISABLE_VALUE;
#endif
#if 1
// set channel change
wTemp |= SGTV58XX_DEMOD_ASD_CTRL__CHANNEL_CHANGE__CHANGE_CHANNEL_VALUE;
#endif
// clear and then set new standard
wTemp &= SGTV58XX_DEMOD_ASD_CTRL__SET_STD__CLEARMASK;
wTemp |= ((WORD)(eStandard)) << SGTV58XX_DEMOD_ASD_CTRL__SET_STD__STARTBIT;
SGTV58xx_I2C_Write(SGTV58XX_REG__DEMOD_ASD_CTRL, wTemp);
//4Tenny at 2k70120 {
#if 1 //zenghw changed
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_DEMOD_CTRL,
SGTV58XX_DEMOD_DEMOD_CTRL__DISABLE_CONT_ASD,
SGTV58XX_DEMOD_DEMOD_CTRL__DISABLE_CONT_ASD);
#else
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_DEMOD_CTRL,
SGTV58XX_DEMOD_DEMOD_CTRL__DISABLE_CONT_ASD,
0x0000);
#endif
//4Tenny at 2k70120 }
}
BOOL SGTV58xx_ASD_StandardGet(void)
{
ESGTV58xxStandard eASDStandard;
eASDStandard = SGTV58xx_I2C_Read(SGTV58XX_REG__DEMOD_ASD_CTRL) & 0x0f;
if(eASDStandard < 0x0c)
{
g_AudioInfo.ucSoundStandard = eASDStandard;
// SGTV58xx_APIStandardGet();
#ifdef ZHW_DEBUG_SGTV_MSG
switch(g_AudioInfo.ucSoundStandard)
{
case 0:
tvDebugPrint("******** Sound standard is A2_BG ********\n");
break;
case 1:
tvDebugPrint("******** Sound standard is A2_DK_625 ********\n");
break;
case 2:
tvDebugPrint("******** Sound standard is A2_DK_674 ********\n");
break;
case 3:
tvDebugPrint("******** Sound standard is A2_DK_6574 ********\n");
break;
case 4:
tvDebugPrint("******** Sound standard is A2_M ********\n");
break;
case 5:
tvDebugPrint("******** Sound standard is NICAM_BG ********\n");
break;
case 6:
tvDebugPrint("******** Sound standard is NICAM_I ********\n");
break;
case 7:
tvDebugPrint("******** Sound standard is NICAM_DK ********\n");
break;
case 8:
tvDebugPrint("******** Sound standard is NICAM_L ********\n");
break;
case 9:
tvDebugPrint("******** Sound standard is EIAJ ********\n");
break;
case 10:
tvDebugPrint("******** Sound standard is BTSC ********\n");
break;
case 11:
tvDebugPrint("******** Sound standard is FM_RADIO ********\n");
break;
}
#endif
return _TRUE_;
}
return _FALSE_;
}
void SGTV58xx_APIStandardGet(void)
{
switch(g_AudioInfo.ucSoundStandard)
{
case Standard_A2_BG:
case Standard_NICAM_BG:
g_AudioInfo.ucSoundSystem= _TVSYSTEM_BG_;
break;
case Standard_A2_DK_574:
case Standard_A2_DK_625:
case Standard_A2_DK_674:
case Standard_NICAM_DK:
default:
g_AudioInfo.ucSoundSystem = _TVSYSTEM_DK_;
break;
// /* lsz 060801 //zenghw removed ntsc
case Standard_A2_M:
case Standard_BTSC:
case Standard_EIAJ: //when no signal, default is DK
g_AudioInfo.ucSoundSystem = _TVSYSTEM_MN_;
break;
// */
case Standard_NICAM_I:
g_AudioInfo.ucSoundSystem = _TVSYSTEM_I_;
break;
case Standard_NICAM_L:
g_AudioInfo.ucSoundSystem = _TVSYSTEM_L_;
break;
}
}
void Audio_TVSoundStandardAutoDetect(void)
{
BYTE i = 0;
SGTV58xx_ASD_SupportSTD(0xfff); // lsz 060706
SGTV58xx_L_DK_SelectL(g_AudioInfo.bNicamLEnabled);
SGTV58xx_AGC_Disable(g_AudioInfo.bNicamLEnabled);
do
{
SGTV58xx_ASD_Enable();
tdSleep(100);
SGTV58xx_ASD_StandardGet();
}while(++i < 5);
SGTV58xx_APIStandardGet();
}
#if 0
void SGTV58xx_StandardAutoDetect(void)
{
BYTE ucTemp;
switch(++g_AudioInfo.ucASDStep)
{
case 0:
case 1:
g_AudioInfo.ucASDStep = 0;
break;
case 2:
#ifdef ZHW_DEBUG_SGTV_MSG
gm_Printf("Start auto standard detected");
#endif
SGTV58xx_L_DK_SelectL(g_AudioInfo.bNicamLEnabled);
SGTV58xx_AGC_Disable(g_AudioInfo.bNicamLEnabled);
SGTV58xx_ASD_Enable();
break;
case 8:
g_AudioInfo.ucASDStep = 0xfe;
break;
case 0xff:
SGTV58xx_StandardForcedTo(g_AudioInfo.ucSoundStandard);
SGTV58xx_APIStandardGet();
g_AudioInfo.ucASDStep = 0;
break;
default:
if(SGTV58xx_ASD_StandardGet())
g_AudioInfo.ucASDStep = 0xfe;
break;
}
#ifdef ZHW_DEBUG_SGTV_MSG
if(g_AudioInfo.ucASDStep > 1)
gm_Print("Auto Standard Detect step ===== %d", g_AudioInfo.ucASDStep);
#endif
}
#endif
// Check Demodulator status: stereo ,mono ,dual
void SGTV58xx_DemodStatusCheck(void)
{
WORD wRegValue;
BYTE ucStereoMode;
#ifdef SUPPORT_NICAM
BOOL bNicamLocked = _FALSE_;
#endif
BOOL bSAPDetected = _FALSE_;
WORD wNicamValue;
static BYTE ucSAPCount = 0; // Tenny at 2k60921 for SAP detection
static BYTE ucStereoModeCount = 0;
static BYTE ucNicamLockCount=0;//
wRegValue =SGTV58xx_I2C_Read(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL);
// Check Stereo Mode
#ifdef SUPPORT_NICAM
wNicamValue = SGTV58xx_I2C_Read(SGTV58XX_REG__DEMOD_NICAM_CTRL);
if(wNicamValue & SGTV58XX_DEMOD_NICAM_CTRL__FORCE_BACKUP__FORCE_VALUE)
{
ucStereoMode = (wNicamValue & SGTV58XX_DEMOD_NICAM_MODE_CTRL__DETECTED_MODE__GETMASK)>>8;
if(ucStereoMode == 0)
{
ucStereoMode = StereoMode_STEREO;
}
else if(ucStereoMode == 2)
{
ucStereoMode = StereoMode_DUALA;
}
else
ucStereoMode = StereoMode_MONO;
if(ucStereoMode != g_AudioInfo.ucStereoModeDetected)
{
#ifdef ZHW_DEBUG_SGTV_MSG
tvDebugPrint1("Detected Stereo Mode is Nicam DUALg_AudioInfo.ucStereoModeDetected=%d\n",g_AudioInfo.ucStereoModeDetected);
#endif
if(++ucStereoModeCount > 3)
{
ucStereoModeCount = 0;
// UserPrefStereoBoardcast =ucStereoMode; // lsz 060701
g_AudioInfo.ucStereoModeDetected = ucStereoMode;
g_AudioInfo.bStatusChanged = _TRUE_;
bNicamLocked = _TRUE_; // lsz 061128
#ifdef ZHW_DEBUG_SGTV_MSG
if(g_AudioInfo.ucStereoModeDetected == StereoMode_MONO)
tvDebugPrint("Detected Stereo Mode is Nicam MONO\n");
else if(g_AudioInfo.ucStereoModeDetected == StereoMode_STEREO)
tvDebugPrint("Detected Stereo Mode is Nicam STEREO\n");
else
tvDebugPrint("Detected Stereo Mode is Nicam DUAL\n");
#endif
}
}
else
ucStereoModeCount = 0;
}
else
#endif
{
if(wRegValue & SGTV58XX_DEMOD_STEREO_MODE_CTRL__DETECT_COMPLETE__GETMASK)
{
ucStereoMode = wRegValue & SGTV58XX_DEMOD_STEREO_MODE_CTRL__DETECTED_MODE__GETMASK;
if(ucStereoMode == 2)
{
ucStereoMode = StereoMode_STEREO;
}
else if(ucStereoMode == 1)
{
// if(wRegValue & SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_LANG__GETMASK)
// ucStereoMode = StereoMode_DUALB;
// else
ucStereoMode = StereoMode_DUALA;
}
else //if(ucStereoMode == 0)
{
ucStereoMode = StereoMode_MONO;
}
if(ucStereoMode != g_AudioInfo.ucStereoModeDetected)
{
if(++ucStereoModeCount > 2)
{
ucStereoModeCount = 0;
#ifdef ZHW_DEBUG_SGTV_MSG
tvDebugPrint1("Detected Stereo Mode is DUAL g_AudioInfo.ucStereoModeDetected=%d\n",g_AudioInfo.ucStereoModeDetected);
#endif
// UserPrefStereoBoardcast =ucStereoMode; // lsz 060701 zenghw remove for temp P001
g_AudioInfo.ucStereoModeDetected = ucStereoMode;
g_AudioInfo.bStatusChanged = _TRUE_;
#ifdef ZHW_DEBUG_SGTV_MSG
if(g_AudioInfo.ucStereoModeDetected == StereoMode_MONO)
tvDebugPrint("Detected Stereo Mode is MONO\n");
else if(g_AudioInfo.ucStereoModeDetected == StereoMode_STEREO)
tvDebugPrint("Detected Stereo Mode is STEREO\n");
else
tvDebugPrint("Detected Stereo Mode is DUAL\n");
#endif
}
}
else
ucStereoModeCount = 0;
}
}
// Check SAP
if(wRegValue & SGTV58XX_DEMOD_STEREO_MODE_CTRL__SAP_DETECTED__GETMASK)
{
bSAPDetected = _TRUE_;
}
// gm_Printf("SAP status detected = %d", bSAPDetected);
if(bSAPDetected != g_AudioInfo.bSAPDetected)
{
if(++ucSAPCount > 3)
{
ucSAPCount = 0;
g_AudioInfo.bSAPDetected = bSAPDetected;
}
g_AudioInfo.bStatusChanged = _TRUE_;
}
else
ucSAPCount = 0;
#ifdef ZHW_DEBUG_SGTV_MSG
// tvDebugPrint1("g_AudioInfo.bSAPDetected = %d", g_AudioInfo.bSAPDetected);
#endif
#ifdef SUPPORT_NICAM
// Check Nicam
wRegValue = SGTV58xx_I2C_Read(SGTV58XX_REG__DEMOD_NICAM_CTRL);
#ifdef ZHW_DEBUG_SGTV_MSG
// tvDebugPrint1("SGTV58XX_REG__DEMOD_NICAM_CTRL = 0x%x", wRegValue);
#endif
if(wRegValue & 0x10)
{
bNicamLocked = _TRUE_;
}
if(bNicamLocked != g_AudioInfo.bNicamLocked)
{
if(++ucNicamLockCount> 2)
{
ucNicamLockCount = 0;
g_AudioInfo.bNicamLocked = bNicamLocked;
g_AudioInfo.bStatusChanged = _TRUE_;
#ifdef ZHW_DEBUG_SGTV_MSG
if(g_AudioInfo.bNicamLocked)
tvDebugPrint("NICAM is Locked \n");
#endif
}
}
else
ucNicamLockCount=0;
#endif
}
void SGTV58xx_ForcedToLangB(BOOL bChannelB)
{
WORD wTemp = SGTV58XX_DEMOD_STEREO_MODE_CTRL__FORCE_LANG_B__LANG_A_VALUE;
if(bChannelB)
wTemp = SGTV58XX_DEMOD_STEREO_MODE_CTRL__FORCE_LANG_B__LANG_B_VALUE;
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL,
SGTV58XX_DEMOD_STEREO_MODE_CTRL__FORCE_LANG_B__GETMASK,
wTemp);
}
void SGTV58xx_SetToChannelB(BOOL bChannelB)
{
WORD wTemp = SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_LANG__LANG_A_VALUE;
if(bChannelB)
wTemp = SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_LANG__LANG_B_VALUE;
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL,
SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_LANG__GETMASK,
wTemp);
}
void SGTV58xx_NicamForceBackup(BOOL bForced)
{
WORD wTemp = SGTV58XX_DEMOD_NICAM_CTRL__FORCE_BACKUP__NO_FORCE_VALUE;
if(bForced)
wTemp = SGTV58XX_DEMOD_NICAM_CTRL__FORCE_BACKUP__FORCE_VALUE;
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_NICAM_CTRL,
SGTV58XX_DEMOD_NICAM_CTRL__FORCE_BACKUP__GETMASK,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -