适用范围:MStar的V59 V69 MSD3393
关键字:CEC HDMI 无法开机
问题: HDMI接先锋DVD时整机关机,DVD随着关机,但DVD再开机,电视却无法通过CEC唤醒开机。
分析及解决办法:
1、对比测试发现3391是正常的;
2、众所周知,整机在收到以下三者之一才会通过CEC唤醒开机;
case E_MSG_ACTIVE_SOURCE: //broadcast, if addressed, ignored
case E_MSG_OTP_IMAGE_VIEW_ON: //if in standby, firstly power on
case E_MSG_OTP_TEXT_VIEW_ON: //if in standby, firstly power on
3、接上882E,发现在DVD开机后,DVD并没有向3393发送能够通过CEC唤醒的命令(以上第2条三者之一),如附件图“DVDPowerOn_And_3393NotPowerOn.jpg”所示;
4、接上882E,发现与3391相比,3393在整机关机时与DVD的CEC通信多了许多CEC ping,如附件图“3393_整机_power_off.jpg”所示;
5、查看PM Code(3393 PM code与Sboot在一块),发现3393的PM Code中的void msAPI_CEC_ProcessCmd(void)里面多了如下代码,这些代码会导致整机在关机进入standby后会向DVD发送一些CEC指令,结果DVD在开机起来后就没有发送以上第2条三者之一的命令,所以把以下这段代码屏蔽掉后,整机关机DVD跟着关机后,当DVD再开机这时DVD就会有发送CEC唤醒命令给整机,于是整机就可以开机起来。
#if SYSTEM_INFORMATION_SUPPORT
case E_MSG_SI_REQUEST_PHY_ADDR:
CEC_DPRINTF(printf("got E_MSG_SI_REQUEST_PHY_ADDR \r\n"));
if (MApi_CEC_CheckFrame(E_TRANS_DIRECT_MSG, 2)==0) break;
CEC_DPRINTF(printf("Report Power Status \r\n"));
MApi_CEC_Msg_ReportPhycalAddress();
break;
case E_MSG_SI_REPORT_PHY_ADDR:
{
MS_U8 txbuf[2];
txbuf[0] = para0;
txbuf[1] = para1;
CEC_DPRINTF(printf("got E_MSG_SI_REPORT_PHY_ADDR \r\n"));
if(MApi_CEC_CheckFrame(E_TRANS_BROADCAST_MSG, 5) == 0) break;
MApi_CEC_SetActivePhysicalAddress(para0, para1);
CEC_DPRINTF(printf(" = SetActivePhysicalAddress 0x%x", para0));
CEC_DPRINTF(printf(" 0x%x = \r\n", para1));
MApi_CEC_SetActiveDeviceType((MsCEC_DEVICE_TYPE) para2);
CEC_DPRINTF(printf(" = SetActiveDeviceType 0x%x = \r\n", para2));
if (enDevice != E_LA_BROADCAST)
{
MApi_CEC_TxSendMsg(MApi_CEC_GetActiveLogicalAddress(), E_MSG_OSDNT_GIVE_OSD_NAME, 0, 0);
}
}
break;
#endif
|