📄 ext_camera.c
字号:
{
kal_uint16 i;
ext_camera_state=EXT_CAMERA_POWER_OFF_STATE;
if (camera_sleep_mode_handler==0xFF)
camera_sleep_mode_handler = L1SM_GetHandle();
cam_module_func_config();
if(kal_query_systemInit()==KAL_FALSE)
{
get_NFI_bus();
ext_cam_func->cam_module_cmd_mapping();
free_NFI_bus();
}
else // System in initialization stage
ext_cam_func->cam_module_cmd_mapping();
video_clip_mode=KAL_FALSE;
for (i=0;i<0x100;i++)
ext_cam_reg_setting[i]=0;
} /* ext_camera_init() */
/*************************************************************************
* FUNCTION
* ext_camera_power_on
*
* DESCRIPTION
* This function turn the power of external camera module on.
*
* PARAMETERS
* None
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void ext_camera_power_on(void)
{
if (ext_camera_state==EXT_CAMERA_POWER_OFF_STATE)
{
lcd_power_up();
#if (defined(CAMERA_MODULE_WITH_LCD))
#ifdef DUAL_LCD
if ((main_lcd_operation_state!=LCD_STANDBY_STATE)||
(sub_lcd_operation_state!=LCD_STANDBY_STATE))
ASSERT(0);
main_lcd_operation_state=LCD_CAMERA_ACTIVE_STATE;
sub_lcd_operation_state=LCD_CAMERA_ACTIVE_STATE;
#else
if (main_lcd_operation_state!=LCD_STANDBY_STATE)
ASSERT(0);
main_lcd_operation_state=LCD_CAMERA_ACTIVE_STATE;
#endif
#endif
get_NFI_bus();
ext_cam_func->cam_module_power_on();
free_NFI_bus();
ext_camera_state=EXT_CAMERA_INITIAL_STATE;
lcd_power_down();
}
else if (ext_camera_state!=EXT_CAMERA_INITIAL_STATE)
ASSERT(0);
} /* ext_camera_power_on() */
/*************************************************************************
* FUNCTION
* ext_camera_reset_status
*
* DESCRIPTION
* This function check if the external camera module power on procedure is
* complete or not.
*
* PARAMETERS
* None
* RETURNS
* 1 : external camera mdoule power is on
* 0 : external camera module is initializing.
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint8 ext_camera_reset_status(void)
{
kal_uint16 i;
kal_uint16 data;
lcd_power_up();
get_NFI_bus();
if (ext_cam_func->cam_module_reset_status())
{
ext_camera_state=EXT_CAMERA_STANDBY_STATE;
if (engineering_mode_setting==KAL_TRUE)
{
for (i=0;i<0x100;i++)
{
if (ext_cam_reg_setting[((kal_uint8)i)]==1)
{
do
{
ext_cam_func->cam_module_write_para(i,ext_cam_reg_value[((kal_uint8) i)]);
data=ext_cam_func->cam_module_read_para(i);
} while (data!=ext_cam_reg_value[((kal_uint8)i)]);
}
}
}
free_NFI_bus();
lcd_power_down();
return KAL_TRUE;
}
free_NFI_bus();
lcd_power_down();
return KAL_FALSE;
} /* ext_camera_reset_status() */
#if (defined(CAMERA_MODULE_WITH_LCD))
void wait_lcd_update(void)
{
#ifdef DUAL_LCD
while ((main_lcd_operation_state==LCD_CAMERA_ACTIVE_UPDATE_STATE)||
(sub_lcd_operation_state==LCD_CAMERA_ACTIVE_UPDATE_STATE))
#else
while (main_lcd_operation_state==LCD_CAMERA_ACTIVE_UPDATE_STATE)
#endif
{
kal_sleep_task(1);
}
}
#endif
/*************************************************************************
* FUNCTION
* ext_camera_ready_check
*
* DESCRIPTION
* This function check if the external camera module power on procedure is
* complete or not.
*
* PARAMETERS
* None
* RETURNS
* 1 : external camera mdoule power is on
* 0 : external camera module is initializing.
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 ext_camera_ready_check(void)
{
kal_uint32 jpeg_file_size;
get_NFI_bus();
#ifndef CAMERA_MODULE_WITH_LCD
if (ext_camera_state==EXT_CAMERA_PREVIEW_STATE)
{
if (ext_cam_func->cam_module_preview_ready_check())
{
#ifndef DUAL_LCD
if (main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
#else
if ((main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)||
(sub_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE))
#endif /* DUAL_LCD */
{
if (ext_camera_lcd==MAIN_LCD)
{
main_lcd_fb_update_para.module_id=LCD_UPDATE_MODULE_EXT_CAMERA;
lcd_fb_update((lcd_frame_update_struct *) &main_lcd_fb_update_para);
kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
}
#ifdef DUAL_LCD
else if (ext_camera_lcd==SUB_LCD)
{
sub_lcd_fb_update_para.module_id=LCD_UPDATE_MODULE_EXT_CAMERA;
lcd_fb_update((lcd_frame_update_struct *) &sub_lcd_fb_update_para);
kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
}
#endif
}
#ifndef DUAL_LCD
else if (main_lcd_operation_state==LCD_CAMERA_UPDATE_STATE)
#else
else if ((main_lcd_operation_state==LCD_CAMERA_UPDATE_STATE)||
(sub_lcd_operation_state==LCD_CAMERA_UPDATE_STATE))
#endif /* DUAL_LCD */
{
lcd_fb_update((lcd_frame_update_struct *) &ext_camera_preview_lcd_data);
}
else
ASSERT(0);
free_NFI_bus();
return (0);
}
else
{
#ifndef DUAL_LCD
if (main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
#else
if ((main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)||
(sub_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE))
#endif /* DUAL_LCD */
{
if (ext_camera_lcd==MAIN_LCD)
{
main_lcd_fb_update_para.module_id=LCD_UPDATE_MODULE_EXT_CAMERA;
lcd_fb_update((lcd_frame_update_struct *) &main_lcd_fb_update_para);
kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
}
#ifdef DUAL_LCD
else if (ext_camera_lcd==SUB_LCD)
{
sub_lcd_fb_update_para.module_id=LCD_UPDATE_MODULE_EXT_CAMERA;
lcd_fb_update((lcd_frame_update_struct *) &sub_lcd_fb_update_para);
kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
}
#endif
}
}
free_NFI_bus();
return (0xFFFFFFFF);
}
else if (ext_camera_state==EXT_CAMERA_CAPTURE_STATE)
{
jpeg_file_size=ext_cam_func->cam_module_capture_ready_check();
if (jpeg_file_size!=NULL_JPEG_FILE)
{
if ((ext_camera_config_data.snapshot_number!=1)&&
(ext_camera_config_data.captured_picture!=burst_snapshot_number))
{
ext_camera_config_data.snapshot_number=burst_snapshot_number-ext_camera_config_data.captured_picture;
ext_camera_config_data.jpeg_buffer_ptr=(kal_uint8 *) (((kal_uint32)ext_camera_config_data.jpeg_buffer_ptr)+jpeg_file_size);
ext_camera_config_data.image_buffer_size=ext_camera_config_data.image_buffer_size-jpeg_file_size;
ext_camera_config_data.total_file_size+=jpeg_file_size;
ext_cam_func->cam_module_capture(&ext_camera_config_data);
free_NFI_bus();
return (NULL_JPEG_FILE);
}
else
{
L1SM_SleepEnable(camera_sleep_mode_handler);
ext_camera_state=EXT_CAMERA_STANDBY_STATE;
ext_camera_config_data.total_file_size+=jpeg_file_size;
if (ext_camera_lcd==MAIN_LCD)
main_lcd_operation_state=LCD_STANDBY_STATE;
#ifdef DUAL_LCD
else if (ext_camera_lcd==SUB_LCD)
sub_lcd_operation_state=LCD_STANDBY_STATE;
#endif
free_NFI_bus();
return (ext_camera_config_data.total_file_size);
}
}
else
{
free_NFI_bus();
return (NULL_JPEG_FILE);
}
}
else
ASSERT(0);
#else
if ((ext_camera_state==EXT_CAMERA_PREVIEW_STATE) || (ext_camera_state==EXT_CAMERA_VIDEO_RECORD_STATE))
{
if (ext_cam_func->cam_module_preview_ready_check())
{
#ifndef DUAL_LCD
if (main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
#else
if ((main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)||
(sub_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE))
#endif /* DUAL_LCD */
{
wait_lcd_update();
if (ext_camera_state==EXT_CAMERA_PREVIEW_STATE)
{
ext_camera_osd_buffer_data.lcd_id=ext_camera_preview_lcd_data.lcd_id;
ext_camera_osd_buffer_data.lcm_start_x=ext_camera_preview_lcd_data.lcm_start_x;
ext_camera_osd_buffer_data.lcm_start_y=ext_camera_preview_lcd_data.lcm_start_y;
ext_camera_osd_buffer_data.lcm_end_x=ext_camera_preview_lcd_data.lcm_end_x;
ext_camera_osd_buffer_data.lcm_end_y=ext_camera_preview_lcd_data.lcm_end_y;
ext_camera_osd_buffer_data.dest_buffer_address=(kal_uint32)ext_camera_config_data.image_buffer_ptr;
ext_camera_osd_buffer_data.dest_buffer_size=ext_camera_config_data.image_buffer_size;
ext_camera_osd_buffer_data.force_update=0;
if (main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
{
lcd_fb_update_to_memory(&ext_camera_lcd_menu_data);
ext_cam_func->cam_module_write_lcdfb(&ext_camera_osd_buffer_data);
kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
}
#ifdef DUAL_LCD
else if (sub_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
{
lcd_fb_update_to_memory(&ext_camera_lcd_menu_data);
ext_cam_func->cam_module_write_lcdfb(&ext_camera_osd_buffer_data);
kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
}
#endif
}
else if (ext_camera_state==EXT_CAMERA_VIDEO_RECORD_STATE)
{
ext_camera_osd_buffer_data.lcm_start_x=main_lcd_fb_update_para.lcm_start_x;
ext_camera_osd_buffer_data.lcm_start_y=main_lcd_fb_update_para.lcm_start_y;
ext_camera_osd_buffer_data.lcm_end_x=main_lcd_fb_update_para.lcm_end_x;
ext_camera_osd_buffer_data.lcm_end_y=main_lcd_fb_update_para.lcm_end_y;
ext_camera_osd_buffer_data.dest_buffer_address=(kal_uint32)ext_camera_config_data.image_buffer_ptr;
ext_camera_osd_buffer_data.dest_buffer_size=ext_camera_config_data.image_buffer_size;
ext_camera_osd_buffer_data.force_update=1;
ext_camera_lcd_menu_data.roi_width=main_lcd_fb_update_para.lcm_end_x-main_lcd_fb_update_para.lcm_start_x+1;
ext_camera_lcd_menu_data.roi_height=main_lcd_fb_update_para.lcm_end_y-main_lcd_fb_update_para.lcm_start_y+1;
ext_camera_lcd_menu_data.roi_offset_x=main_lcd_fb_update_para.roi_offset_x;
ext_camera_lcd_menu_data.roi_offset_y=main_lcd_fb_update_para.roi_offset_y;
if (main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
{
lcd_fb_update_to_memory(&ext_camera_lcd_menu_data);
ext_cam_func->cam_module_write_lcdfb(&ext_camera_osd_buffer_data);
kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
ext_camera_osd_buffer_data.lcd_id=ext_camera_preview_lcd_data.lcd_id;
ext_camera_osd_buffer_data.lcm_start_x=ext_camera_preview_lcd_data.lcm_start_x;
ext_camera_osd_buffer_data.lcm_start_y=ext_camera_preview_lcd_data.lcm_start_y;
ext_camera_osd_buffer_data.lcm_end_x=ext_camera_preview_lcd_data.lcm_end_x;
ext_camera_osd_buffer_data.lcm_end_y=ext_camera_preview_lcd_data.lcm_end_y;
ext_camera_osd_buffer_data.dest_buffer_address=(kal_uint32)ext_camera_config_data.image_buffer_ptr;
ext_camera_osd_buffer_data.dest_buffer_size=ext_camera_config_data.image_buffer_size;
ext_camera_osd_buffer_data.force_update=0;
ext_camera_lcd_menu_data.roi_width=ext_camera_preview_lcd_data.lcm_end_x-ext_camera_preview_lcd_data.lcm_start_x+1;
ext_camera_lcd_menu_data.roi_height=ext_camera_preview_lcd_data.lcm_end_y-ext_camera_preview_lcd_data.lcm_start_y+1;
ext_camera_lcd_menu_data.roi_offset_x=ext_camera_preview_lcd_data.roi_offset_x;
ext_camera_lcd_menu_data.roi_offset_y=ext_camera_preview_lcd_data.roi_offset_y;
lcd_fb_update_to_memory(&ext_camera_lcd_menu_data);
ext_cam_func->cam_module_write_lcdfb(&ext_camera_osd_buffer_data);
}
}
}
free_NFI_bus();
return (0);
}
free_NFI_bus();
return (0xFFFFFFFF);
}
else if (ext_camera_state==EXT_CAMERA_CAPTURE_STATE)
{
jpeg_file_size=ext_cam_func->cam_module_capture_ready_check();
if (jpeg_file_size!=NULL_JPEG_FILE)
{
L1SM_SleepEnable(camera_sleep_mode_handler);
ext_camera_state=EXT_CAMERA_STANDBY_STATE;
ext_camera_config_data.total_file_size+=jpeg_file_size;
main_lcd_operation_state=LCD_CAMERA_ACTIVE_STATE;
#ifdef DUAL_LCD
sub_lcd_operation_state=LCD_CAMERA_ACTIVE_STATE;
#endif
free_NFI_bus();
return (ext_camera_config_data.total_file_size);
}
else
{
free_NFI_bus();
return (NULL_JPEG_FILE);
}
}
else
ASSERT(0);
#endif /* CAMERA_MODULE_WITH_LCD */
free_NFI_bus();
} /* ext_camera_ready_check() */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -