📄 lcd_update_if.c
字号:
else if (current_update_lcd==SUB_LCD)
{
#ifndef CAMERA_MODULE_WITH_LCD /* do not check while LCD is mount on external camera */
if (lcd_para->lcd_id==MAIN_LCD)
ASSERT(0);
#endif
sub_lcd_fb_update_para.lcd_id=SUB_LCD;
sub_lcd_fb_update_para.module_id=lcd_para->module_id;
sub_lcd_fb_update_para.fb_update_mode=lcd_para->fb_update_mode;
sub_lcd_fb_update_para.lcm_start_x=lcd_para->lcm_start_x;
sub_lcd_fb_update_para.lcm_start_y=lcd_para->lcm_start_y;
sub_lcd_fb_update_para.lcm_end_x=lcd_para->lcm_end_x;
sub_lcd_fb_update_para.lcm_end_y=lcd_para->lcm_end_y;
sub_lcd_fb_update_para.roi_offset_x=lcd_para->roi_offset_x;
sub_lcd_fb_update_para.roi_offset_y=lcd_para->roi_offset_y;
sub_lcd_fb_update_para.update_layer=lcd_para->update_layer;
sub_lcd_operation_state=LCD_CAMERA_CMD_QUEUE_STATE;
}
#endif /* DUAL_LCD */
RestoreIRQMask(save_irq_mask);
kal_retrieve_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR_CONSUME,
&event_group,KAL_SUSPEND);
if ((current_update_lcd==MAIN_LCD)&&(main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
&&(main_lcd_operation_state!=LCD_STANDBY_STATE))
main_lcd_operation_state=LCD_CAMERA_UPDATE_STATE;
#ifdef DUAL_LCD
else if ((current_update_lcd==SUB_LCD)&&(sub_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
&&(sub_lcd_operation_state!=LCD_STANDBY_STATE))
sub_lcd_operation_state=LCD_CAMERA_UPDATE_STATE;
#endif
return;
}
else
{
RestoreIRQMask(save_irq_mask);
}
}
#endif /* CAMERA_MODULE */
ASSERT(!LCD_IS_RUNNING);
lcd_power_up();
ENABLE_LCD_TRANSFER_COMPLETE_INT;
lcd_transfer_complete = KAL_FALSE;
SET_LCD_ROI_WINDOW_OFFSET(lcd_para->roi_offset_x,lcd_para->roi_offset_y);
SET_LCD_ROI_WINDOW_SIZE(lcd_para->lcm_end_x-lcd_para->lcm_start_x+1,
lcd_para->lcm_end_y-lcd_para->lcm_start_y+1);
SET_LCD_ENABLE_LAYER(lcd_para->update_layer);
DISABLE_LCD_ROI_CTRL_W2MEM;
switch (lcd_para->lcd_id)
{
case MAIN_LCD:
if (main_lcd_operation_state==LCD_SLEEP_STATE)
{
lcd_power_down();
return;
}
#if (defined(CAMERA_MODULE))
if (main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
{
config_lcd_layer_window_queue();
main_lcd_operation_state=LCD_CAMERA_UPDATE_STATE;
}
#endif
if (main_lcd_operation_state==LCD_JPEG_VIDEO_CMD_QUEUE_STATE)
{
config_lcd_layer_window_queue();
main_lcd_operation_state=LCD_JPEG_VIDEO_UPDATE_STATE;
}
SET_LCD_ROI_CTRL_OUTPUT_FORMAT(MAIN_LCD_OUTPUT_FORMAT);
DRV_WriteReg32(LCD_ROI_CMD_ADDR_REG,MAIN_LCD_CMD_ADDR);
DRV_WriteReg32(LCD_ROI_DATA_ADDR_REG,MAIN_LCD_DATA_ADDR);
MainLCD->BlockWrite(lcd_para->lcm_start_x,lcd_para->lcm_start_y,
lcd_para->lcm_end_x,lcd_para->lcm_end_y);
for (j=0;j<100;j++);
#if (defined(CAMERA_MODULE))
if ((main_lcd_operation_state!=LCD_CAMERA_UPDATE_STATE)&&
(main_lcd_operation_state!=LCD_JPEG_VIDEO_UPDATE_STATE))
main_lcd_operation_state=LCD_SW_UPDATE_STATE;
#else
if (main_lcd_operation_state!=LCD_JPEG_VIDEO_UPDATE_STATE)
main_lcd_operation_state=LCD_SW_UPDATE_STATE;
#endif /* CAMERA_MODULE */
break;
#ifdef DUAL_LCD
case SUB_LCD:
if (sub_lcd_operation_state==LCD_SLEEP_STATE)
{
lcd_power_down();
return;
}
#if (defined(CAMERA_MODULE))
if (sub_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
{
config_lcd_layer_window_queue();
sub_lcd_operation_state=LCD_CAMERA_UPDATE_STATE;
}
#endif /* CAMERA_MODULE */
if (sub_lcd_operation_state==LCD_JPEG_VIDEO_CMD_QUEUE_STATE)
{
config_lcd_layer_window_queue();
sub_lcd_operation_state=LCD_JPEG_VIDEO_UPDATE_STATE;
}
SET_LCD_ROI_CTRL_OUTPUT_FORMAT(SUB_LCD_OUTPUT_FORMAT);
DRV_WriteReg32(LCD_ROI_CMD_ADDR_REG,SUB_LCD_CMD_ADDR);
DRV_WriteReg32(LCD_ROI_DATA_ADDR_REG,SUB_LCD_DATA_ADDR);
SubLCD->BlockWrite(lcd_para->lcm_start_x,lcd_para->lcm_start_y,
lcd_para->lcm_end_x,lcd_para->lcm_end_y);
for (j=0;j<10;j++);
#if (defined(CAMERA_MODULE))
if ((sub_lcd_operation_state!=LCD_CAMERA_UPDATE_STATE)&&
(sub_lcd_operation_state!=LCD_JPEG_VIDEO_UPDATE_STATE))
sub_lcd_operation_state=LCD_SW_UPDATE_STATE;
#else
if (sub_lcd_operation_state!=LCD_JPEG_VIDEO_UPDATE_STATE)
sub_lcd_operation_state=LCD_SW_UPDATE_STATE;
#endif /* CAMERA_MODULE */
break;
#endif /* DUAL_LCD */
default:
ASSERT(0);
break;
}
current_update_lcd=lcd_para->lcd_id;
if (lcd_para->block_mode_flag==KAL_TRUE)
{
IRQMask(IRQ_LCD_CODE);
wait_lcd_update_flag=KAL_FALSE;
IRQUnmask(IRQ_LCD_CODE);
while (LCD_IS_RUNNING) {};
temp_reg=DRV_Reg(LCD_INT_STATUS_REG);
#ifndef DUAL_LCD
if (main_lcd_operation_state==LCD_SW_UPDATE_STATE)
main_lcd_operation_state=LCD_STANDBY_STATE;
#else
if (current_update_lcd==MAIN_LCD)
{
if (main_lcd_operation_state==LCD_SW_UPDATE_STATE)
main_lcd_operation_state=LCD_STANDBY_STATE;
}
else
{
if (sub_lcd_operation_state==LCD_SW_UPDATE_STATE)
sub_lcd_operation_state=LCD_STANDBY_STATE;
}
#endif /* DUAL_LCD */
}
else
{
lcd_block_cb=lcd_para->lcd_block_mode_cb;
IRQMask(IRQ_LCD_CODE);
wait_lcd_update_flag=KAL_TRUE;
IRQUnmask(IRQ_LCD_CODE);
}
lcd_power_down();
#elif (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
lcd_power_up();
lcd_roi_offset_shadow=DRV_Reg32(LCD_ROI_OFFSET_REG);
lcd_roi_ctrl_shadow=DRV_Reg32(LCD_ROI_CTRL_REG);
lcd_roi_ctrl_shadow |= LCD_ROI_CTRL_CMD_ENABLE_BIT;
lcd_roi_size_shadow=DRV_Reg32(LCD_ROI_SIZE_REG);
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
lcd_mem_out_address_shadow=DRV_Reg32(LCD_ROI_WMEM_ADDR_REG);
lcd_mem_out_ctrl_shadow=DRV_Reg32(LCD_ROI_WMEM_CTRL_REG);
#endif
if (lcd_para->module_id==LCD_UPDATE_MODULE_MMI)
{ /* only SW trigger mode is permitted for MMI task */
if (lcd_para->fb_update_mode!=LCD_SW_TRIGGER_MODE)
ASSERT(0);
}
if ((lcd_para->fb_update_mode==LCD_HW_TRIGGER_MODE)||
(lcd_para->fb_update_mode==LCD_DIRECT_COUPLE_MODE))
{ /* only accept when both MAIN_LCD and SUB_LCD in LCD_STANDBY_STATE for
LCD_HW_TRIGGER_MODE and LCD_DIRECT_COUPLE_MODE */
#ifndef DUAL_LCD
if (main_lcd_operation_state==LCD_SW_UPDATE_STATE)
{
do
{
kal_sleep_task(1);
} while (main_lcd_operation_state != LCD_STANDBY_STATE);
}
#else
if ((main_lcd_operation_state==LCD_SW_UPDATE_STATE)||
(sub_lcd_operation_state==LCD_SW_UPDATE_STATE))
{
do
{
kal_sleep_task(1);
} while ((main_lcd_operation_state != LCD_STANDBY_STATE)||
(sub_lcd_operation_state != LCD_STANDBY_STATE));
}
#endif
#if ((defined(MT6228)||defined(MT6229)||defined(MT6230))&&((!defined(__MAUI_BASIC__))&& (!defined(__L1_STANDALONE__))))
#ifndef DUAL_LCD
if ((main_lcd_operation_state!=LCD_STANDBY_STATE)&&
(main_lcd_operation_state!=LCD_SLEEP_STATE))
ASSERT(0);
#else
if (((main_lcd_operation_state!=LCD_STANDBY_STATE)&&
(main_lcd_operation_state!=LCD_SLEEP_STATE))||
((sub_lcd_operation_state!=LCD_STANDBY_STATE)&&
(sub_lcd_operation_state!=LCD_SLEEP_STATE)))
ASSERT(0);
#endif /* DUAL_LCD */
#else
#ifndef DUAL_LCD
if (main_lcd_operation_state!=LCD_STANDBY_STATE)
ASSERT(0);
#else
if ((main_lcd_operation_state!=LCD_STANDBY_STATE)||
(sub_lcd_operation_state!=LCD_STANDBY_STATE))
ASSERT(0);
#endif /* DUAL_LCD */
#endif
}
else if (lcd_para->fb_update_mode==LCD_SW_TRIGGER_MODE)
{
#ifndef DUAL_LCD
#if (defined(MT6219))
if (main_lcd_operation_state==LCD_SLEEP_STATE)
#else
if ((main_lcd_operation_state==LCD_SLEEP_STATE)&&(lcd_para->memory_output==KAL_FALSE))
#endif
{
lcd_power_down();
return;
}
if ((main_lcd_operation_state!=LCD_STANDBY_STATE)&&
(main_lcd_operation_state!=LCD_SLEEP_STATE)&&
(main_lcd_operation_state!=LCD_HW_UPDATE_STATE)&&
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
(main_lcd_operation_state!=LCD_HW_UPDATE_SLEEP_STATE)&&
(main_lcd_operation_state!=LCD_DC_UPDATE_SLEEP_STATE)&&
#endif
(main_lcd_operation_state!=LCD_DC_UPDATE_STATE))
ASSERT(0);
#else
if (lcd_para->lcd_id==MAIN_LCD)
{
#if (defined(MT6219))
if (main_lcd_operation_state==LCD_SLEEP_STATE)
#else
if ((main_lcd_operation_state==LCD_SLEEP_STATE)&&(lcd_para->memory_output==KAL_FALSE))
#endif
{
lcd_power_down();
return;
}
if ((sub_lcd_operation_state!=LCD_STANDBY_STATE) &&
(sub_lcd_operation_state!=LCD_SLEEP_STATE))
ASSERT(0);
if ((main_lcd_operation_state!=LCD_SLEEP_STATE)&&
(main_lcd_operation_state!=LCD_HW_UPDATE_STATE)&&
(main_lcd_operation_state!=LCD_DC_UPDATE_STATE)&&
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
(main_lcd_operation_state!=LCD_HW_UPDATE_SLEEP_STATE)&&
(main_lcd_operation_state!=LCD_DC_UPDATE_SLEEP_STATE)&&
#endif
(main_lcd_operation_state!=LCD_STANDBY_STATE))
ASSERT(0);
}
else if (lcd_para->lcd_id==SUB_LCD)
{
#if (defined(MT6219))
if (sub_lcd_operation_state==LCD_SLEEP_STATE)
#else
if ((sub_lcd_operation_state==LCD_SLEEP_STATE)&&(lcd_para->memory_output==KAL_FALSE))
#endif
{
lcd_power_down();
return;
}
if ((main_lcd_operation_state!=LCD_STANDBY_STATE)&&
(main_lcd_operation_state!=LCD_SLEEP_STATE))
ASSERT(0);
if ((sub_lcd_operation_state!=LCD_HW_UPDATE_STATE)&&
(sub_lcd_operation_state!=LCD_DC_UPDATE_STATE)&&
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
(sub_lcd_operation_state!=LCD_HW_UPDATE_SLEEP_STATE)&&
(sub_lcd_operation_state!=LCD_DC_UPDATE_SLEEP_STATE)&&
#endif
(sub_lcd_operation_state!=LCD_STANDBY_STATE))
ASSERT(0);
}
else
ASSERT(0);
#endif /* DUAL_LCD */
}
kal_set_eg_events(lcd_event_id,0,KAL_AND);
ENABLE_LCD_TRANSFER_COMPLETE_INT;
lcd_transfer_complete = KAL_FALSE;
/*Begin of check lcm start/end, roi offset*/
if (lcd_para->lcd_id==MAIN_LCD)
{
if ((main_lcd_operation_state==LCD_HW_UPDATE_STATE)||
(main_lcd_operation_state==LCD_DC_UPDATE_STATE))
{
if (main_lcd_fb_update_para.lcm_start_x<lcd_para->lcm_start_x)
lcd_para->lcm_start_x=main_lcd_fb_update_para.lcm_start_x;
if (main_lcd_fb_update_para.lcm_start_y<lcd_para->lcm_start_y)
lcd_para->lcm_start_y=main_lcd_fb_update_para.lcm_start_y;
if (main_lcd_fb_update_para.lcm_end_x>lcd_para->lcm_end_x)
lcd_para->lcm_end_x=main_lcd_fb_update_para.lcm_end_x;
if (main_lcd_fb_update_para.lcm_end_y>lcd_para->lcm_end_y)
lcd_para->lcm_end_y=main_lcd_fb_update_para.lcm_end_y;
if (main_lcd_fb_update_para.roi_offset_x<lcd_para->roi_offset_x)
lcd_para->roi_offset_x=main_lcd_fb_update_para.roi_offset_x;
if (main_lcd_fb_update_para.roi_offset_y<lcd_para->roi_offset_y)
lcd_para->roi_offset_y=main_lcd_fb_update_para.roi_offset_y;
}
}
#ifdef DUAL_LCD
else
{
if ((sub_lcd_operation_state==LCD_HW_UPDATE_STATE)||
(sub_lcd_operation_state==LCD_DC_UPDATE_STATE))
{
if (sub_lcd_fb_update_para.lcm_start_x<lcd_para->lcm_start_x)
lcd_para->lcm_start_x=sub_lcd_fb_update_para.lcm_start_x;
if (sub_lcd_fb_update_para.lcm_start_y<lcd_para->lcm_start_y)
lcd_para->lcm_start_y=sub_lcd_fb_update_para.lcm_start_y;
if (sub_lcd_fb_update_para.lcm_end_x>lcd_para->lcm_end_x)
lcd_para->lcm_end_x=sub_lcd_fb_update_para.lcm_end_x;
if (sub_lcd_fb_update_para.lcm_end_y>lcd_para->lcm_end_y)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -