📄 lcd_update_if.c
字号:
lcd_para->lcm_end_y=sub_lcd_fb_update_para.lcm_end_y;
if (sub_lcd_fb_update_para.roi_offset_x<lcd_para->roi_offset_x)
lcd_para->roi_offset_x=sub_lcd_fb_update_para.roi_offset_x;
if (sub_lcd_fb_update_para.roi_offset_y<lcd_para->roi_offset_y)
lcd_para->roi_offset_y=sub_lcd_fb_update_para.roi_offset_y;
}
}
#endif /* DUAL_LCD */
/*Begin of check lcm start/end, roi offset*/
roi_width=lcd_para->lcm_end_x-lcd_para->lcm_start_x+1;
roi_height=lcd_para->lcm_end_y-lcd_para->lcm_start_y+1;
lcd_roi_offset_shadow=(lcd_para->roi_offset_y<<16)|lcd_para->roi_offset_x;
if ((current_lcd_rotate_value==LCD_LAYER_ROTATE_90) ||
(current_lcd_rotate_value==LCD_LAYER_ROTATE_270) ||
(current_lcd_rotate_value==LCD_LAYER_MIRROR_ROTATE_90) ||
(current_lcd_rotate_value==LCD_LAYER_MIRROR_ROTATE_270))
{
lcd_roi_size_shadow= (roi_width<<16)|roi_height;
roi_mem_out_width=roi_height;
roi_mem_out_height=roi_width;
}
else
{
lcd_roi_size_shadow= (roi_height<<16)|roi_width;
roi_mem_out_width=roi_width;
roi_mem_out_height=roi_height;
}
lcd_roi_ctrl_shadow &= ~LCD_ROI_CTRL_LAYER_MASK;
lcd_roi_ctrl_shadow |= lcd_para->update_layer;
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227))
REG_LCD_ROI_BACKGROUND_COLOR=(kal_uint16) lcd_para->roi_background_color;
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
REG_LCD_ROI_BACKGROUND_COLOR=lcd_para->roi_background_color;
#endif
/*Beginning of memory out configuration*/
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
if ((lcd_para->module_id==LCD_UPDATE_MODULE_MMI)&&(lcd_para->memory_output==KAL_TRUE))
{
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
if (lcd_para->memory_data_format==LCD_WMEM_RGB565)
{
lcd_mem_out_ctrl_shadow &= ~LCD_ROI_WMEM_CTRL_FORMAT;
}
else if (lcd_para->memory_data_format==LCD_WMEM_RGB888)
{
lcd_mem_out_ctrl_shadow |= LCD_ROI_WMEM_CTRL_FORMAT;
}
#endif
if (lcd_para->block_mode==LCD_WM_BLOCK_MODE)
{
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
if (lcd_para->memory_data_format==LCD_WMEM_RGB565)
{
if ((lcd_para->memory_output_buffer_size)<((lcd_para->memory_block_width * roi_mem_out_height)<<1))
ASSERT(0);
}
else if (lcd_para->memory_data_format==LCD_WMEM_RGB888)
{
if ((lcd_para->memory_output_buffer_size)<((lcd_para->memory_block_width * roi_mem_out_height)*3))
ASSERT(0);
}
#else
if ((lcd_para->memory_output_buffer_size)<((lcd_para->memory_block_width * roi_mem_out_height)<<1))
ASSERT(0);
#endif
lcd_mem_out_ctrl_shadow |= LCD_ROI_WMEM_CONT_BIT;
SET_LCD_MAIN_WINDOW_SIZE(lcd_para->memory_block_width,roi_height+lcd_para->roi_offset_y);
}
else if (lcd_para->block_mode==LCD_WM_CONT_MODE)
{
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
if (lcd_para->memory_data_format==LCD_WMEM_RGB565)
{
if ((lcd_para->memory_output_buffer_size)<((roi_width * roi_height)<<1))
ASSERT(0);
}
else if (lcd_para->memory_data_format==LCD_WMEM_RGB888)
{
if ((lcd_para->memory_output_buffer_size)<((roi_width * roi_height)*3))
ASSERT(0);
}
#else
if ((lcd_para->memory_output_buffer_size)<((roi_width * roi_height)<<1))
ASSERT(0);
#endif
lcd_mem_out_ctrl_shadow &= ~LCD_ROI_WMEM_CONT_BIT;
}
lcd_mem_out_address_shadow = lcd_para->memory_output_buffer_address;
lcd_roi_ctrl_shadow |= LCD_ROI_CTRL_W2MEM_BIT;
if (lcd_para->lcd_id==MAIN_LCD)
{
if ((lcd_output_mode==KAL_TRUE) && (main_lcd_hw_trigger_output_mode==KAL_TRUE)&&
(main_lcd_operation_state!=LCD_SLEEP_STATE))
{
lcd_mem_out_ctrl_shadow |= LCD_ROI_WMEM_CTRL_TO_LCM;
}
else
{
lcd_mem_out_ctrl_shadow &= ~LCD_ROI_WMEM_CTRL_TO_LCM;
}
}
#ifdef DUAL_LCD
else if (lcd_para->lcd_id==SUB_LCD)
{
if ((lcd_output_mode==KAL_TRUE) && (sub_lcd_hw_trigger_output_mode==KAL_TRUE)&&
(sub_lcd_operation_state!=LCD_SLEEP_STATE))
{
lcd_mem_out_ctrl_shadow |= LCD_ROI_WMEM_CTRL_TO_LCM;
}
else
{
lcd_mem_out_ctrl_shadow &= ~LCD_ROI_WMEM_CTRL_TO_LCM;
}
}
#endif
}
#endif
/*End of memory out configuration*/
/*Beginning of TV out configuration*/
#if (defined(MT6228)||defined(MT6229))
if ((lcd_para->module_id!=LCD_UPDATE_MODULE_MMI)&&(lcd_para->tv_output==KAL_TRUE))
{
if ((lcd_para->tv_output_frame_buffer_size)<(roi_width*roi_height*2))
ASSERT(0);
#if ((!defined(__MAUI_BASIC__))&& (!defined(__L1_STANDALONE__)))
if ((lcd_para->tv_output==KAL_TRUE)&&(tv_output_config_data.tv_output_mode==TV_OUTPUT_MODE4))
{
current_g2d_tv_output_bitblt_buffer=0;
g2d_begin(G2D_OWNER_LCD,preview_tv_buffer_rotate_cb);
g2d_tv_output_dest_buff.base_address=camera_preview_config_data.tv_rotate_buffer1_address;
g2d_tv_output_dest_buff.x=0;
g2d_tv_output_dest_buff.y=0;
g2d_tv_output_dest_buff.pitch=lcd_para->tv_output_width;
g2d_tv_output_dest_buff.width=lcd_para->tv_output_width;
g2d_tv_output_dest_buff.height=lcd_para->tv_output_height;
g2d_tv_output_dest_buff.color_mode=FIRE_DEST_COLOR_16BPP_RGB565;
g2d_tv_output_dest_buff.clip_x1=0;
g2d_tv_output_dest_buff.clip_x2=lcd_para->tv_output_width-1;
g2d_tv_output_dest_buff.clip_y1=0;
g2d_tv_output_dest_buff.clip_y2=lcd_para->tv_output_height-1;
g2d_tv_output_src_buff.base_address=lcd_para->tv_output_frame_buffer1_address;
g2d_tv_output_src_buff.x=0;
g2d_tv_output_src_buff.y=0;
g2d_tv_output_src_buff.pitch=lcd_para->tv_output_height;
g2d_tv_output_src_buff.width=lcd_para->tv_output_height;
g2d_tv_output_src_buff.height=lcd_para->tv_output_width;
g2d_tv_output_src_buff.color_mode=FIRE_SRC_COLOR_16BPP_RGB565;
g2d_tv_output_src_buff.clip_x1=0;
g2d_tv_output_src_buff.clip_x2=lcd_para->tv_output_height-1;
g2d_tv_output_src_buff.clip_y1=0;
g2d_tv_output_src_buff.clip_y2=lcd_para->tv_output_width-1;
g2d_tv_output_bitblt.tilt_mode=KAL_FALSE;
g2d_tv_output_bitblt.src_key_mode = KAL_FALSE;
g2d_tv_output_bitblt.blt_direction = BITBLT_TRANSFORM_DIRECTION_LT_CORNER;
g2d_tv_output_bitblt.src_key_color= 0;
g2d_tv_output_bitblt.alpha_blending_mode=KAL_FALSE;
g2d_tv_output_bitblt.rop_mode=KAL_FALSE;
g2d_tv_output_bitblt.transform_value = BITBLT_TRANSFORM_ROTATE_270;
g2d_tv_output_bitblt.src_list=&g2d_tv_output_src_buff;
g2d_tv_output_bitblt.list_count=1;
g2d_set_dest_buffer(G2D_OWNER_LCD,&g2d_tv_output_dest_buff);
}
tv_output_buffer_base_address1=lcd_para->tv_output_frame_buffer1_address;
tv_output_buffer_base_address2=lcd_para->tv_output_frame_buffer2_address;
main_lcd_fb_update_para.tv_output_frame_buffer1_address=lcd_para->tv_output_frame_buffer1_address +
(lcd_para->tv_output_offset_y*lcd_para->tv_output_width+
lcd_para->tv_output_offset_x)*2;
main_lcd_fb_update_para.tv_output_frame_buffer2_address=lcd_para->tv_output_frame_buffer2_address+
(lcd_para->tv_output_offset_y*lcd_para->tv_output_width+
lcd_para->tv_output_offset_x)*2;
tv_output_owner = TV_OUT_OWNER_LCD;
tv_out_current_fb=0;
set_tv_src_size(TV_OUT_OWNER_LCD,lcd_para->tv_output_width,lcd_para->tv_output_height);
lcd_mem_out_ctrl_shadow &= ~LCD_ROI_WMEM_CTRL_FORMAT;
if (tv_output_config_data.tv_output_mode==TV_OUTPUT_MODE4)
{
if (roi_width==lcd_para->tv_output_height)
{
lcd_mem_out_ctrl_shadow &= ~LCD_ROI_WMEM_CONT_BIT;
}
else if (roi_width<lcd_para->tv_output_height)
{
lcd_mem_out_ctrl_shadow |= LCD_ROI_WMEM_CONT_BIT;
SET_LCD_MAIN_WINDOW_SIZE(lcd_para->tv_output_height,roi_height+lcd_para->roi_offset_y);
}
else
ASSERT(0);
}
else
{
if (roi_width==lcd_para->tv_output_width)
{
lcd_mem_out_ctrl_shadow &= ~LCD_ROI_WMEM_CONT_BIT;
}
else if (roi_width<lcd_para->tv_output_width)
{
lcd_mem_out_ctrl_shadow |= LCD_ROI_WMEM_CONT_BIT;
SET_LCD_MAIN_WINDOW_SIZE(lcd_para->tv_output_width,roi_height+lcd_para->roi_offset_y);
}
else
ASSERT(0);
}
#else
lcd_mem_out_ctrl_shadow &= ~LCD_ROI_WMEM_CTRL_FORMAT;
if (roi_width==lcd_para->tv_output_width)
{
lcd_mem_out_ctrl_shadow &= ~LCD_ROI_WMEM_CONT_BIT;
}
else if (roi_width<lcd_para->tv_output_width)
{
lcd_mem_out_ctrl_shadow |= LCD_ROI_WMEM_CONT_BIT;
SET_LCD_MAIN_WINDOW_SIZE(lcd_para->tv_output_width,roi_height+lcd_para->roi_offset_y);
}
else
ASSERT(0);
#endif
lcd_mem_out_address_shadow = main_lcd_fb_update_para.tv_output_frame_buffer1_address;
lcd_roi_ctrl_shadow |= LCD_ROI_CTRL_W2MEM_BIT;
if (lcd_para->lcd_id==MAIN_LCD)
{
if ((lcd_output_mode==KAL_TRUE) && (main_lcd_hw_trigger_output_mode==KAL_TRUE))
{
lcd_mem_out_ctrl_shadow |= LCD_ROI_WMEM_CTRL_TO_LCM;
}
else
{
lcd_mem_out_ctrl_shadow &= ~LCD_ROI_WMEM_CTRL_TO_LCM;
}
}
#ifdef DUAL_LCD
else if (lcd_para->lcd_id==SUB_LCD)
{
if ((lcd_output_mode==KAL_TRUE) && (sub_lcd_hw_trigger_output_mode==KAL_TRUE))
{
lcd_mem_out_ctrl_shadow |= LCD_ROI_WMEM_CTRL_TO_LCM;
}
else
{
lcd_mem_out_ctrl_shadow &= ~LCD_ROI_WMEM_CTRL_TO_LCM;
}
}
#endif
}
#endif
/*End of TV out configuration*/
switch (lcd_para->lcd_id)
{
case MAIN_LCD:
if ((main_lcd_operation_state==LCD_STANDBY_STATE)||
(main_lcd_operation_state==LCD_SLEEP_STATE))
{
lcd_roi_ctrl_shadow &= ~LCD_ROI_CTRL_DATA_FORMAT_MASK;
lcd_roi_ctrl_shadow |= 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);
switch (lcd_para->fb_update_mode)
{
case LCD_SW_TRIGGER_MODE:/*MMI*/
/*to prevent MED preempt*/
save_irq_mask=SaveAndSetIRQMask();
if (main_lcd_operation_state==LCD_STANDBY_STATE)
{
main_lcd_operation_state=LCD_SW_UPDATE_STATE;
DISABLE_LCD_HW_TRIGGER_UPDATE;
}
else
lcd_roi_ctrl_shadow &= ~LCD_ROI_CTRL_CMD_ENABLE_BIT;/*not output to LCD*/
RestoreIRQMask(save_irq_mask);
if (lcd_para->block_mode_flag==KAL_FALSE)
{
lcd_block_cb=lcd_para->lcd_block_mode_cb;
IRQMask(IRQ_LCD_CODE);
wait_lcd_update_flag=KAL_TRUE;
IRQUnmask(IRQ_LCD_CODE);
}
else
{
IRQMask(IRQ_LCD_CODE);
wait_lcd_update_flag=KAL_FALSE;
IRQUnmask(IRQ_LCD_CODE);
}
break;
case LCD_HW_TRIGGER_MODE:/*MED*/
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
if (lcd_para->hw_trigger_src==LCD_HW_TRIGGER_IBW2)
{
SET_LCD_IBW2_TRIGGER_LAYER(lcd_para->hw_update_layer);
}
else
{
SET_LCD_IBW1_TRIGGER_LAYER(lcd_para->hw_update_layer);
}
if (main_lcd_operation_state==LCD_SLEEP_STATE)
main_lcd_operation_state=LCD_HW_UPDATE_SLEEP_STATE;
else if (main_lcd_operation_state==LCD_STANDBY_STATE)
main_lcd_operation_state=LCD_HW_UPDATE_STATE;
#else
main_lcd_operation_state=LCD_HW_UPDATE_STATE;
#endif
SET_LCD_HW_TRIGGER_LAYER(lcd_para->hw_update_layer);
ENABLE_LCD_HW_TRIGGER_UPDATE;
lcd_para->update_layer|=lcd_para->hw_update_layer;
break;
case LCD_DIRECT_COUPLE_MODE:/*MED*/
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
if (lcd_para->hw_trigger_src==LCD_HW_TRIGGER_IBW2)
{
SET_LCD_IBW2_TRIGGER_LAYER(lcd_para->hw_update_layer);
}
else
{
SET_LCD_IBW1_TRIGGER_LAYER(lcd_para->hw_update_layer);
}
set_lcd_dc_layer_format(lcd_para->hw_update_layer,KAL_TRUE);
if (main_lcd_operation_state==LCD_SLEEP_STATE)
main_lcd_operation_state=LCD_DC_UPDATE_SLEEP_STATE;
else if (main_lcd_operation_state==LCD_STANDBY_STATE)
main_lcd_operation_state=LCD_DC_UPDATE_STATE;
#else
main_lcd_operation_state=LCD_DC_UPDATE_STATE;
#endif
SET_LCD_DIRECT_COUPLE_LAYER((lcd_para->hw_update_layer));
ENABLE_LCD_HW_TRIGGER_UPDATE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -