当Main LCD在Multimedia App时刷新Sub LCD系统黑屏重启
0赞[DESCRIPTION]
出现这种情况比较常见的现象,Dual LCD项目是在Camera/Video Preview的时候收到信息时会在Sub LCD上显示显示一
个信息提醒,或者是Sub LCD上显示时间,然后在更新时间的时候出现问题。通过Catcher.exe Log或者Memory Dump可
以分析出,出现问题的地方如下:lcd_update_idp_series_6236.clcd_fb_update_19_26_28_series(){
……#ifdef DUAL_LCD …… ASSERT((LCD_STANDBY_STATE == main_lcd_operation_state) ||
(LCD_SLEEP_STATE == main_lcd_operation_state)); ……}通过代码可以看出Main LCD必须处于Sleep或Standby状态
的时候才允许更新Sub LCD。因为Main LCD & Sub LCD是共用Data Bus & Control Pin的,只是通过CS信号来选择当前
需要刷新的LCD,所以在Camera/Video Preview的时候,Main LCD牌HW/FW Update状态,自然不允许Sub LCD更新。若此
时将Camera Preview停下来,那必需Drop掉1~2或再多帧(取决于Sub LCD刷屏速度),这样子就会看到Preview画面卡
一下,是没法接受的。
[KEYWORD]
Camera MMI
Camera Hang
[SOLUTION]来自半导体社区
解决方案有两种:
1、 从MMI修改,当Camera处于Preview的时候,不让Sub LCD更新。 [建议使用这种方法]
A、 在进入Camera/Video Preview的时候加下面的代码
gdi_lcd_set_active(GDI_LCD_SUB_LCD_HANDLE);
gdi_lcd_freeze(TRUE); // Freeze the sub lcd
gdi_lcd_set_active(GDI_LCD_MAIN_LCD_HANDLE);
B、 在退出的时候加下面的代码
gdi_lcd_set_active(GDI_LCD_SUB_LCD_HANDLE);
gdi_lcd_freeze(FALSE); // Un-freeze the sub lcd.
gdi_lcd_set_active(GDI_LCD_MAIN_LCD_HANDLE);
2、 从LCD Interface里挡,判断当前如果处于HW/FW Update状态,则Return,添加下面蓝色部分的代码。
lcd_update_idp_series_6236.c
void lcd_fb_update_19_26_28_series(xxx)
{
#ifdef DUAL_LCD
... ...
{
if ((KAL_FALSE == lcd_para->block_mode_flag) && (LCD_UPDATE_MODULE_MMI == lcd_para-
>module_id))
lcd_para->lcd_block_mode_cb();
lcd_power_ctrl(KAL_FALSE);
return;
}
if (LCD_UPDATE_MODULE_MMI == lcd_para->module_id)
{
if ((main_lcd_operation_state == LCD_HW_UPDATE_STATE)
|| (main_lcd_operation_state == LCD_FW_UPDATE_STATE)
|| (main_lcd_operation_state == LCD_DC_UPDATE_STATE))
{
if (KAL_FALSE == lcd_para->block_mode_flag)
{
if (lcd_para->lcd_block_mode_cb != NULL)
{
lcd_para->lcd_block_mode_cb();
}
}
lcd_power_ctrl(KAL_FALSE);
return;
}
}
ASSERT((LCD_STANDBY_STATE == main_lcd_operation_state) || (LCD_SLEEP_STATE ==
main_lcd_operation_state));
……
}
