📄 dvhdmirx.c
字号:
//! @param outParam(O)丗敾掕寢壥<BR>
//! @note <BR>
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 2007/3/19
//*******************************************************************
IW _HdmiRxVdCheckValidVideoFormat(UB DevNo, THdmiRxDrvVideoFormat cur_video, UB * outParam)
{
IW ret = HDMIDRV_OK;
UB video_code;
UB * avi_info_frame = gHdmiRxDrvAviInfoFrameBuff;
// EDID偵傛傞擖椡塮憸怣崋偺堎忢敾掕傪峴偆
if (cur_video.VideoCode != 0xFF) {
video_code = cur_video.VideoCode & 0x7F;
} else {
return DVHDMI_E_DEV;
}
if (gHdmiRxDrvVideoFormatTbl[video_code].EdidEnable == 1) {
// EDID堘斀枹専弌
*outParam = 0;
} else {
// EDID堘斀専弌
*outParam = 1;
HdmiRxDrvErrCatch("EDID failed:%d\n", video_code);
}
return ret;
}
//*******************************************************************
//! @brief HDMI Rx Virtual Drv 壒惡PLL慖戰
//! @retval 張棟寢壥
//! @param DevNo(I)丗僨僶僀僗斣崋<BR>
//! @param inParam(I)丗壒惡宱楬愝掕忣曬峔憿懱<BR>
//! @note <BR>
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 2007/3/19
//*******************************************************************
IW _HdmiRxVdSetAudioCrystalParamCheck(UB DevNo, UB CrystalNo)
{
IW ret = HDMIDRV_OK;
switch (DevNo) {
case DV_HDMIRX_DEF_DEV_0:
if (CrystalNo > 1) {
ret = DVHDMI_E_INVAL;
}
break;
case DV_HDMIRX_DEF_DEV_1:
// 奜晅偗僨僶僀僗 弶婜壔張棟偼偙偙偵幚憰
ret = DVHDMI_E_DEV;
break;
default :
ret = DVHDMI_E_INVAL;
break;
}
return ret;
}
//*******************************************************************
//! @brief HDMI Rx Virtual Drv 壒惡PLL慖戰
//! @retval 張棟寢壥
//! @param DevNo(I)丗僨僶僀僗斣崋<BR>
//! @param CrystalNo(I)丗奜晹PLL巊梡帪 0x01<BR>
//! 撪憼PLL巊梡帪 0x00<BR>
//! @note <BR>
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 2007/7/31
//*******************************************************************
IW _HdmiRxVdSetAudioCrystal(UB DevNo, UB CrystalNo)
{
IW ret = HDMIDRV_OK;
UB use_crystal = 0;
UB cur_crystal;
switch (DevNo) {
case DV_HDMIRX_DEF_DEV_0:
_HdmiRxVdGetAudioCrystal(DevNo, &cur_crystal);
if (CrystalNo != cur_crystal) {
use_crystal = CrystalNo << 7;
ret = _dvHdmiRxSetR8J66030FTSetAudioCrystal(use_crystal);
}
break;
case DV_HDMIRX_DEF_DEV_1:
// 奜晅偗僨僶僀僗 弶婜壔張棟偼偙偙偵幚憰
ret = DVHDMI_E_DEV;
break;
default :
ret = DVHDMI_E_INVAL;
break;
}
return ret;
}
//*******************************************************************
//! @brief HDMI Rx Virtual Drv 壒惡PLL慖戰
//! @retval 張棟寢壥
//! @param DevNo(I)丗僨僶僀僗斣崋<BR>
//! @param CrystalNo(O)丗奜晹PLL巊梡帪 0x01<BR>
//! 撪憼PLL巊梡帪 0x00<BR>
//! @note <BR>
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 2007/7/31
//*******************************************************************
IW _HdmiRxVdGetAudioCrystal(UB DevNo, UB* CrystalNo)
{
IW ret = HDMIDRV_OK;
UB audo_path1, audo_path2;
switch (DevNo) {
case DV_HDMIRX_DEF_DEV_0:
_dvHdmiRxR8J66030FTGetAudioPath(&audo_path1, &audo_path2);
*CrystalNo = 0x00;
*CrystalNo = (audo_path1 >> 7);
break;
case DV_HDMIRX_DEF_DEV_1:
// 奜晅偗僨僶僀僗 弶婜壔張棟偼偙偙偵幚憰
ret = DVHDMI_E_DEV;
break;
default :
ret = DVHDMI_E_INVAL;
break;
}
return ret;
}
/* #AUDIO_PLL ADD S 2007/11/01 Y.Takeuchi */
//*******************************************************************
//! @brief HDMI Rx Virtual Drv CTS Auto Adjust儌乕僪愝掕
//! @retval 張棟寢壥
//! @param DevNo(I)丗僨僶僀僗斣崋<BR>
//! @param Mode(I) 丗Disable 0x01<BR>
//! Enable 0x00<BR>
//! @note <BR>
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 2007/11/01
//*******************************************************************
IW _HdmiRxVdSetCTSAutoAdjustMode(UB DevNo, UB Mode)
{
UB cur_mode = 0;
IW ret = HDMIDRV_OK;
switch (DevNo) {
case DV_HDMIRX_DEF_DEV_0:
_HdmiRxVdGetCTSAutoAdjustMode(DevNo, &cur_mode);
if (Mode != cur_mode) {
Mode = Mode << 6;
ret = _dvHdmiRxSetR8J66030FTSetCTSAutoAdjustMode(Mode);
}
break;
case DV_HDMIRX_DEF_DEV_1:
// 奜晅偗僨僶僀僗 弶婜壔張棟偼偙偙偵幚憰
ret = DVHDMI_E_DEV;
break;
default :
ret = DVHDMI_E_INVAL;
break;
}
return ret;
}
//*******************************************************************
//! @brief HDMI Rx Virtual Drv CTS Auto Adjust儌乕僪庢摼
//! @retval 張棟寢壥
//! @param DevNo(I)丗僨僶僀僗斣崋<BR>
//! @param Mode(O) 丗Disable 0x01<BR>
//! Enable 0x00<BR>
//! @note <BR>
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 2007/11/01
//*******************************************************************
IW _HdmiRxVdGetCTSAutoAdjustMode(UB DevNo, UB * Mode)
{
IW ret = HDMIDRV_OK;
UB audo_path1, audo_path2;
switch (DevNo) {
case DV_HDMIRX_DEF_DEV_0:
_dvHdmiRxR8J66030FTGetAudioPath(&audo_path1, &audo_path2);
*Mode = 0x00;
*Mode = ((audo_path1 & 0x40) >> 6);
break;
case DV_HDMIRX_DEF_DEV_1:
// 奜晅偗僨僶僀僗 弶婜壔張棟偼偙偙偵幚憰
ret = DVHDMI_E_DEV;
break;
default :
ret = DVHDMI_E_INVAL;
break;
}
return ret;
}
/* #AUDIO_PLL ADD E 2007/11/01 Y.Takeuchi */
//*******************************************************************
//! @brief HDMI Rx Virtual Drv 壒惡宱楬愝掕
//! @retval 張棟寢壥
//! @param DevNo(I)丗僨僶僀僗斣崋<BR>
//! @param inParam(I)丗壒惡宱楬愝掕忣曬峔憿懱<BR>
//! @note <BR>
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 2007/3/19
//*******************************************************************
IW _HdmiRxVdSetAudioPath(UB DevNo, THdmiRxDrvAudioPath* inParam)
{
IW ret = HDMIDRV_OK;
UB sample_freq = 0x00;
UB audio_path1 = 0x00;
UB audio_path2 = 0x00;
switch (DevNo) {
case DV_HDMIRX_DEF_DEV_0:
// 僒儞僾儕儞僌廃攇悢愝掕
switch (inParam->SampleFreq) {
case 0x00 : // 48kHz
sample_freq = 0x02;
break;
case 0x01 : // 44kHz
sample_freq = 0x01;
break;
case 0x02 : // 32kHz
sample_freq = 0x00;
break;
default :
ret = DVHDMI_E_INVAL;
return ret;
}
/* #AUDIO_PLL CHG S 2007/11/01 Y.Takeuchi */
audio_path1 |= sample_freq;
/* #AUDIO_PLL CHG E 2007/11/01 Y.Takeuchi */
// 壒惡庬暿愝掕偼L-PCM偺傒側偺偱Standard(0) 屌掕
// 彨棃揑偵懡條側僼僅乕儅僢僩偵懳墳偡傞応崌偼偙偙傪奼挘偡傞偙偲
// 僒儞僾儕儞僌僒僀僘愝掕
audio_path2 = inParam->SampleSize << 4;
// MCLK廃攇悢愝掕
audio_path2 |= inParam->MasterClockFreq;
ret = _dvHdmiRxSetR8J66030FTSetAudioPath(audio_path1, audio_path2);
if (ret == HDMIDRV_OK) {
// 娗棟忣曬峏怴
memcpy(&gHdmiRxDrvSysInfo.AudioPath[DV_HDMIRX_DEF_DEV_0], inParam, sizeof(THdmiRxDrvAudioPath));
}
break;
case DV_HDMIRX_DEF_DEV_1:
// 奜晅偗僨僶僀僗 弶婜壔張棟偼偙偙偵幚憰
ret = DVHDMI_E_DEV;
break;
default :
ret = DVHDMI_E_INVAL;
break;
}
return ret;
}
//*******************************************************************
//! @brief HDMI Rx Virtual Drv 壒惡宱楬愝掕僷儔儊乕僞敾掕
//! @retval 張棟寢壥
//! @param DevNo(I)丗僨僶僀僗斣崋<BR>
//! @param inParam(I)丗壒惡宱楬愝掕忣曬峔憿懱<BR>
//! @note <BR>
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 2007/3/19
//*******************************************************************
IW _HdmiRxVdSetAudioPathParamCheck(UB DevNo, THdmiRxDrvAudioPath* inParam)
{
IW ret = HDMIDRV_OK;
UB audio_path = 0x00;
switch (DevNo) {
case DV_HDMIRX_DEF_DEV_0:
// 壒惡庬暿敾掕 PCM埲奜偼僄儔乕
if (inParam->AudioType != DV_HDMIRX_DEF_LPCM ) {
ret = DVHDMI_E_INVAL;
}
// 僒儞僾儕儞僌廃攇悢敾掕 32kbps 乣 48kbps 埲奜偼僄儔乕
if (inParam->SampleFreq > 0x02 ) {
ret = DVHDMI_E_INVAL;
}
// 僒儞僾儕儞僌僒僀僘偑16bit埲奜偼僄儔乕
if (inParam->SampleSize > 0) {
ret = DVHDMI_E_INVAL;
}
break;
case DV_HDMIRX_DEF_DEV_1:
// 奜晅偗僨僶僀僗 弶婜壔張棟偼偙偙偵幚憰
ret = DVHDMI_E_DEV;
break;
default :
ret = DVHDMI_E_INVAL;
break;
}
return ret;
}
//*******************************************************************
//! @brief HDMI Rx Virtual Drv 壒惡宱楬庢摼
//! @retval 張棟寢壥
//! @param DevNo(I)丗僨僶僀僗斣崋<BR>
//! @param outParam(O)丗壒惡宱楬愝掕忣曬峔憿懱<BR>
//! @note <BR>
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 2007/3/19
//*******************************************************************
IW _HdmiRxVdGetAudioPath(UB DevNo, THdmiRxDrvAudioPath* outParam)
{
IW ret = HDMIDRV_OK;
switch (DevNo) {
case DV_HDMIRX_DEF_DEV_0:
// 娗棟忣曬庢摼
memcpy(outParam, &gHdmiRxDrvSysInfo.AudioPath[DV_HDMIRX_DEF_DEV_0], sizeof(THdmiRxDrvAudioPath));
break;
case DV_HDMIRX_DEF_DEV_1:
// 奜晅偗僨僶僀僗 弶婜壔張棟偼偙偙偵幚憰
ret = DVHDMI_E_DEV;
break;
default :
ret = DVHDMI_E_INVAL;
break;
}
return ret;
}
//*******************************************************************
//! @brief HDMI Rx Virtual Drv 壒惡怣崋忣曬庢摼
//! @retval 張棟寢壥
//! @param DevNo(I)丗僨僶僀僗斣崋<BR>
//! @param outParam(O)丗壒惡怣崋忣曬<BR>
//! @note <BR>
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 2007/3/19
//*******************************************************************
IW _HdmiRxVdGetInputAudioFormat(UB DevNo, THdmiRxDrvAudioFormat* outParam)
{
IW ret = HDMIDRV_OK;
switch (DevNo) {
case DV_HDMIRX_DEF_DEV_0:
// 壒惡怣崋忣曬庢摼
ret = HdmiRxGetInputAudioFormatDev0(outParam);
break;
case DV_HDMIRX_DEF_DEV_1:
// 奜晅偗僨僶僀僗 弶婜壔張棟偼偙偙偵幚憰
ret = DVHDMI_E_DEV;
break;
default :
ret = DVHDMI_E_INVAL;
break;
}
return ret;
}
//*******************************************************************
//! @brief HDMI Rx Virtual Drv 壒惡怣崋僼僅乕儅僢僩堎忢敾掕
//! @retval 張棟寢壥
//! @param DevNo(I)丗僨僶僀僗斣崋<BR>
//! @param cur_audio(I)丗擖椡壒惡僼僅乕儅僢僩
//! @param outParam(O)丗敾掕寢壥<BR>
//! @note <BR>
//! @attention <BR>
//! @author Y.Takeuchi
//! @date 07/04/27
//*******************************************************************
IW _HdmiRxVdCheckValidAudioFormat(UB DevNo, THdmiRxDrvAudioFormat * cur_audio, UB * outParam)
{
IW ret = HDMIDRV_OK;
UB i;
UB tbl_max = 0;
UB tbl_idx = 0;
UB sample_freq = 0;
UB sample_size = cur_audio->SampleSize;
*outParam = 0;
// EDID偵傛傞擖椡壒惡庬暿偺堎忢敾掕傪峴偆
tbl_max = sizeof(gHdmiRxDrvAudioFormatTbl) / sizeof(gHdmiRxDrvAudioFormatTbl[0]);
for (tbl_idx=0; tbl_idx < tbl_max; tbl_idx++) {
if (gHdmiRxDrvAudioFormatTbl[tbl_idx].AudioFormatCode == cur_audio->AudioType) {
break;
}
}
// EDID偐傜夝愅偟偨僥乕僽儖偵尰嵼庴怣偟偰偄傞壒惡僼僅乕儅僢僩偑娷傑傟偰偄傞偐妋擣
if (tbl_idx >= tbl_max) {
// 僥乕僽儖偵奩摉偡傞壒惡僼僅乕儅僢僩側偟
if ((cur_audio->AudioType != 0xFF) && (cur_audio->Sts & DV_HDMIRX_DEF_AUDIO_TYPE_DET)) {
// 壒惡庬暿晄掕帪偼EDID堎忢側偟偲埖偆
// 壒惡庬暿偺EDID堘斀専弌
*outParam = 1;
return ret;
}
}
// EDID偵傛傞僒儞僾儕儞僌廃攇悢偺堎忢敾掕傪峴偆
sample_freq = gHdmiRxDrvAudioFormatTbl[tbl_idx].SampleFreq >> 1;
if ((sample_freq <= cur_audio->SampleFreq) && (cur_audio->SampleFreq != 0xFF) && (cur_audio->Sts & DV_HDMIRX_DEF_SAMPLE_FREQ_DET)) {
// 僒儞僾儕儞僌廃攇悢偺EDID堘斀専弌
*outParam = 1;
return ret;
}
#if 0
// EDID偵傛傞僒儞僾儕儞僌僒僀僘偺堎忢敾掕傪峴偆
if (
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -