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

📄 audio_api.c

📁 The driver of audio processor SGTV5830 音频处理芯片SGTV5830驱动
💻 C
📖 第 1 页 / 共 5 页
字号:

#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 + -