📄 audio_api.c
字号:
#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:
PRINTF("******** Sound standard is A2_BG ********\n");
break;
case 1:
PRINTF("******** Sound standard is A2_DK_625 ********\n");
break;
case 2:
PRINTF("******** Sound standard is A2_DK_674 ********\n");
break;
case 3:
PRINTF("******** Sound standard is A2_DK_6574 ********\n");
break;
case 4:
PRINTF("******** Sound standard is A2_M ********\n");
break;
case 5:
PRINTF("******** Sound standard is NICAM_BG ********\n");
break;
case 6:
PRINTF("******** Sound standard is NICAM_I ********\n");
break;
case 7:
PRINTF("******** Sound standard is NICAM_DK ********\n");
break;
case 8:
PRINTF("******** Sound standard is NICAM_L ********\n");
break;
case 9:
PRINTF("******** Sound standard is EIAJ ********\n");
break;
case 10:
PRINTF("******** Sound standard is BTSC ********\n");
break;
case 11:
PRINTF("******** Sound standard is FM_RADIO ********\n");
break;
}
#endif
return _TRUE_;
}
return _FALSE_;
}
void SGTV58xx_APIStandardGet(void)
{
}
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); //weifer debug
SGTV58xx_ASD_StandardGet();
}while(++i < 5);
SGTV58xx_APIStandardGet();
}
// Check Demodulator status: stereo ,mono ,dual
void SGTV58xx_DemodStatusCheck(void)
{
UWORD32 wRegValue;
BYTE ucStereoMode;
#ifdef SUPPORT_NICAM
BOOL bNicamLocked = _FALSE_;
#endif
BOOL bSAPDetected = _FALSE_;
UWORD32 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
PRINTF("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)
PRINTF("Detected Stereo Mode is Nicam MONO\n");
else if(g_AudioInfo.ucStereoModeDetected == StereoMode_STEREO)
PRINTF("Detected Stereo Mode is Nicam STEREO\n");
else
PRINTF("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
PRINTF("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)
PRINTF("Detected Stereo Mode is MONO\n");
else if(g_AudioInfo.ucStereoModeDetected == StereoMode_STEREO)
PRINTF("Detected Stereo Mode is STEREO\n");
else
PRINTF("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
// PRINTF1("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
// PRINTF1("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)
PRINTF("NICAM is Locked \n");
#endif
}
}
else
ucNicamLockCount=0;
#endif
}
void SGTV58xx_ForcedToLangB(BOOL bChannelB)
{
UWORD32 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)
{
UWORD32 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)
{
UWORD32 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,
wTemp);
}
void SGTV58xx_StereoModeAuto(BOOL bAutoSet)
{
UWORD32 wTemp = SGTV58XX_DEMOD_STEREO_MODE_CTRL__FORCE_MODE__SET_VALUE;
if(bAutoSet)
{
wTemp = SGTV58XX_DEMOD_STEREO_MODE_CTRL__FORCE_MODE__DETECTED_VALUE;
}
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL,
SGTV58XX_DEMOD_STEREO_MODE_CTRL__FORCE_MODE__GETMASK,
wTemp);
}
void SGTV58xx_StereoModeSet(ESGTV58xxStereoMode eStereoMode)
{
// UWORD32 wTemp;
SGTV58xx_StereoModeAuto(_FALSE_);
// M2k60720 with LSZ {
switch(eStereoMode)
{
case StereoMode_MONO:
SGTV58xx_SetToChannelB(_FALSE_); // lsz 060713
SGTV58xx_ForcedToLangB(_FALSE_); // lsz 060713
SGTV58xx_NicamForceBackup(_TRUE_); // lsz 061109 (g_AudioInfo.bForceMono_SAP);
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL,
SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__GETMASK,
SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__MONO_VALUE);
break;
case StereoMode_Nicam_MONO:
SGTV58xx_SetToChannelB(_TRUE_); // lsz 060713
SGTV58xx_ForcedToLangB(_TRUE_); // lsz 060713
SGTV58xx_NicamForceBackup(_FALSE_); // lsz 061109 (g_AudioInfo.bForceMono_SAP);
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL,
SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__GETMASK,
SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__MONO_VALUE);
break;
case StereoMode_STEREO:
SGTV58xx_SetToChannelB(_FALSE_); // lsz 060713
SGTV58xx_ForcedToLangB(_FALSE_); // lsz 060713
#ifdef SUPPORT_NICAM
SGTV58xx_NicamForceBackup(_FALSE_); // lsz 0607614
#endif
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL,
SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__GETMASK,
SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__STEREO_VALUE);
break;
case StereoMode_SAP:
SGTV58xx_SetToChannelB(g_AudioInfo.bForceMono_SAP); // lsz 060713
SGTV58xx_ForcedToLangB(g_AudioInfo.bForceMono_SAP); // lsz 060713
// Tenny at 2k60915 {
#ifdef SUPPORT_NICAM
SGTV58xx_NicamForceBackup(_FALSE_); // lsz 0607614
#endif
if(g_AudioInfo.ucStereoModeDetected == StereoMode_STEREO)
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL,
SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__GETMASK,
SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__STEREO_VALUE);
else
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL,
SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__GETMASK,
SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__MONO_VALUE);
// Tenny at 2k60915 }
break;
case StereoMode_DUALA:
case StereoMode_DUALB:
if(eStereoMode == StereoMode_DUALA)
SGTV58xx_SetToChannelB(_FALSE_);
else
SGTV58xx_SetToChannelB(_TRUE_);
#ifdef SUPPORT_NICAM
SGTV58xx_NicamForceBackup(_FALSE_); // lsz 060714
#endif
SGTV58xx_I2C_MaskWrite(SGTV58XX_REG__DEMOD_STEREO_MODE_CTRL,
SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__GETMASK,
SGTV58XX_DEMOD_STEREO_MODE_CTRL__SET_MODE__DUAL_MONO_VALUE);
break;
}
}
void SGTV58xx_StereoModeConfig(void)
{
Audio_ChannelConfig(_FALSE_); //zenghw add 20061116
if(g_AudioInfo.bStatusChanged)
{
g_AudioInfo.bStatusChanged = _FALSE_;
g_AudioInfo.ucUserPreSelect = g_AudioInfo.ucStereoModeDetected;
SGTV58xx_SetToChannelB(g_AudioInfo.bForceMono_SAP);
#ifdef SUPPORT_NICAM
SGTV58xx_NicamForceBackup(g_AudioInfo.bForceMono_SAP);
#endif
SGTV58xx_StereoModeAuto(_TRUE_);
// lsz 061128
if(( g_AudioInfo.ucStereoModeDetected==StereoMode_MONO)&&g_AudioInfo.bNicamLocked)
{
g_AudioInfo.ucUserPreSelect=StereoMode_Nicam_MONO;
}
// lsz 061128
// SGTV58xx_StereoModeSet(g_AudioInfo.ucUserPreSelect);
}
if(g_AudioInfo.bUserChanged)
{
g_AudioInfo.bUserChanged = _FALSE_;
if(g_AudioInfo.bSAPDetected) // Just valid for BTSC
{
if(g_AudioInfo.ucStereoModeDetected == StereoMode_MONO)
{
if(g_AudioInfo.ucUserPreSelect == StereoMode_MONO)
{
g_AudioInfo.bForceMono_SAP = _TRUE_;
g_AudioInfo.ucUserPreSelect = StereoMode_SAP;
}
else
{
g_AudioInfo.bForceMono_SAP = _FALSE_;
g_AudioInfo.ucUserPreSelect = StereoMode_MONO;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -