Example #1
0
cmr_int cmr_sensor_open(cmr_handle sensor_handle, cmr_u32 sensor_id_bits)
{
	CMR_MSG_INIT(message);
	cmr_int                   ret = CMR_CAMERA_SUCCESS;
	struct cmr_sensor_handle  *handle = (struct cmr_sensor_handle *)sensor_handle;
	cmr_u32                   cameraId = 0;
	CMR_LOGI("E");

	CHECK_HANDLE_VALID(handle);

	/*the open&close function should be sync*/
	message.msg_type     = CMR_SENSOR_EVT_OPEN;
	message.sync_flag    = CMR_MSG_SYNC_PROCESSED;
	message.data         = (void*)((unsigned long)sensor_id_bits);
	ret = cmr_thread_msg_send(handle->thread_cxt.thread_handle, &message);
	if (ret) {
		CMR_LOGE("X send msg failed!");
		return CMR_CAMERA_FAIL;
	} else {
		for (cameraId = 0; cameraId < CAMERA_ID_MAX; cameraId++) {
			if (sensor_id_bits & (1 << cameraId)) {
				break;
			}
		}
		if (handle->sensor_cxt[cameraId].fd_sensor == CMR_CAMERA_FD_INIT) {
			CMR_LOGE("camera %d open fail!", cameraId);
			ret = CMR_CAMERA_FAIL;
		}
	}
	CMR_LOGI("X ret %ld", ret);
	return ret;
}
Example #2
0
LOCAL uint32_t _BF3905_PowerOn(uint32_t power_on)
{
	SENSOR_AVDD_VAL_E dvdd_val=g_BF3905_mipi_yuv_info.dvdd_val;
	SENSOR_AVDD_VAL_E avdd_val=g_BF3905_mipi_yuv_info.avdd_val;
	SENSOR_AVDD_VAL_E iovdd_val=g_BF3905_mipi_yuv_info.iovdd_val;  
	BOOLEAN power_down=g_BF3905_mipi_yuv_info.power_down_level;        
	BOOLEAN reset_level=g_BF3905_mipi_yuv_info.reset_pulse_level;
	//uint32_t reset_width=g_BF3905_mipi_yuv_info.reset_pulse_width;        

	if(SENSOR_TRUE==power_on)
	{
		Sensor_PowerDown(power_down);	
		// Open power
		Sensor_SetVoltage(dvdd_val, avdd_val, iovdd_val);    
		SENSOR_Sleep(20);
		Sensor_SetMCLK(SENSOR_DEFALUT_MCLK); 
		SENSOR_Sleep(10);
		Sensor_PowerDown(!power_down);
		// Reset sensor		
		Sensor_Reset(reset_level);	
		CMR_LOGE("qzhu BF3905 power_on is true\n");	
	}
	else
	{
		Sensor_PowerDown(power_down);
 SENSOR_Sleep(10);
		Sensor_SetMCLK(SENSOR_DISABLE_MCLK);         
		Sensor_SetVoltage(SENSOR_AVDD_CLOSED, SENSOR_AVDD_CLOSED, SENSOR_AVDD_CLOSED);   
		CMR_LOGE("qzhu BF3905 power_on is false\n");	     
	}    

	return SENSOR_SUCCESS;
}
Example #3
0
cmr_int cmr_sensor_deinit(cmr_handle sensor_handle)
{
	CMR_LOGI("E");
	cmr_int             ret = CMR_CAMERA_SUCCESS;
	struct cmr_sensor_handle  *handle = (struct cmr_sensor_handle *)sensor_handle;

	if (!sensor_handle) {
		CMR_LOGE("X Invalid param!");
		return CMR_CAMERA_INVALID_PARAM;
	}

	/*destory thread*/
	ret = cmr_sns_destroy_thread(handle);
	if (ret) {
		CMR_LOGE("destory thread failed!");
		ret = CMR_CAMERA_FAIL;
		goto deinit_end;
	}

	/*release handle*/
	if (handle) {
		free(handle);
		handle = NULL;
	}

deinit_end:
	CMR_LOGI("X ret %ld", ret);
	return ret;
}
int camera_get_trim_rect(struct img_rect *src_trim_rect, uint32_t zoom_level, struct img_size *dst_size)
{
	uint32_t                 trim_width;
	uint32_t                 trim_height;
	uint32_t                 zoom_step_w = 0, zoom_step_h = 0;

	if (NULL == src_trim_rect || NULL == dst_size) {
		CMR_LOGE("0x%x, 0x%x", (uint32_t)src_trim_rect, (uint32_t)dst_size);
		return -CAMERA_INVALID_PARM;
	}

	trim_width = src_trim_rect->width;
	trim_height = src_trim_rect->height;

	if (0 == dst_size->width || 0 == dst_size->height) {
		CMR_LOGE("0x%x, 0x%x", dst_size->width, dst_size->height);
		return -CAMERA_INVALID_PARM;
	}

	if (dst_size->width * src_trim_rect->height < dst_size->height * src_trim_rect->width) {
		trim_width = dst_size->width * src_trim_rect->height / dst_size->height;
	} else {
		trim_height = dst_size->height * src_trim_rect->width / dst_size->width;
	}

	zoom_step_w = ZOOM_STEP(trim_width);
	zoom_step_w &= ~1;
	zoom_step_w *= zoom_level;

 	zoom_step_h = ZOOM_STEP(trim_height);
	zoom_step_h &= ~1;
	zoom_step_h *= zoom_level;
	trim_width = trim_width - zoom_step_w;
	trim_height = trim_height - zoom_step_h;

	src_trim_rect->start_x += (src_trim_rect->width - trim_width) >> 1;
	src_trim_rect->start_y += (src_trim_rect->height - trim_height) >> 1;
	src_trim_rect->start_x = CAMERA_WIDTH(src_trim_rect->start_x);
	src_trim_rect->start_y = CAMERA_HEIGHT(src_trim_rect->start_y);
	src_trim_rect->width = CAMERA_WIDTH(trim_width);
	src_trim_rect->height = CAMERA_HEIGHT(trim_height);
	CMR_LOGI("zoom_level %d, trim rect, %d %d %d %d",
		zoom_level,
		src_trim_rect->start_x,
		src_trim_rect->start_y,
		src_trim_rect->width,
		src_trim_rect->height);

	return CAMERA_SUCCESS;
}
Example #5
0
/**---------------------------------------------------------------------------*
 **                         External Functions                                *
 **---------------------------------------------------------------------------*/
 cmr_int cmr_sensor_init(struct sensor_init_param *init_param_ptr, cmr_handle *sensor_handle)
{
	cmr_int             ret = CMR_CAMERA_SUCCESS;
	struct cmr_sensor_handle  *handle = NULL;
	CMR_LOGI("E");

	if (!init_param_ptr) {
		CMR_LOGE("Invalid param!");
		return CMR_CAMERA_INVALID_PARAM;
	}

	handle = (struct cmr_sensor_handle *)malloc(sizeof(struct cmr_sensor_handle));
	if (!handle) {
		CMR_LOGE("No mem!");
		return CMR_CAMERA_NO_MEM;
	}
	cmr_bzero(handle, sizeof(struct cmr_sensor_handle));

	/*save init param*/
	handle->oem_handle   = init_param_ptr->oem_handle;
	handle->sensor_bits  = init_param_ptr->sensor_bits;
	handle->private_data = init_param_ptr->private_data;
	handle->is_autotest  = init_param_ptr->is_autotest;
	CMR_LOGD("oem_handle: 0x%lx, sensor_bits: %ld, private_data: 0x%lx autotest %ld",
		(cmr_uint)handle->oem_handle, handle->sensor_bits, (cmr_uint)handle->private_data, handle->is_autotest);

	/*create thread*/
	ret = cmr_sns_create_thread(handle);
	if (ret) {
		CMR_LOGE("create thread failed!");
		ret = CMR_CAMERA_FAIL;
		goto init_end;
	}

	/*return handle*/
	*sensor_handle = (cmr_handle)handle;
	CMR_LOGI("handle 0x%lx created!", (cmr_uint)handle);

init_end:
	if (ret) {
		if (handle) {
			free(handle);
			handle = NULL;
		}
	}

	CMR_LOGV("X ret %ld", ret);
	return ret;
}
int camera_set_sensormark(void)
{
	FILE                     *fp;
	uint32_t                 i = 0;
	uint32_t                 len = 0;
	uint8_t                  sensor_param[SENSOR_PARAM_NUM];
	int                      ret = CAMERA_SUCCESS;

	bzero(&sensor_param[0], sizeof(sensor_param));
	fp = fopen(SENSOR_PARA, "rb+");
	if (NULL == fp) {
		fp = fopen(SENSOR_PARA,"wb+");
		if (NULL == fp) {
			CMR_LOGE("open file error: %s",SENSOR_PARA);
		}
		memset(&sensor_param[0], 0xFF, SENSOR_PARAM_NUM);
	}

	if (NULL != fp) {
		len = fread(sensor_param, 1, SENSOR_PARAM_NUM, fp);
		CMR_LOGI(":param len %d", len);
		CMR_LOGI("sensor param: %d, %d, %d, %d, %d, %d, %d, %d",
			sensor_param[0], sensor_param[1], sensor_param[2], sensor_param[3],
			sensor_param[4], sensor_param[5], sensor_param[6], sensor_param[7]);
		fclose(fp);
	}

	Sensor_SetMark(sensor_param);

	return CAMERA_SUCCESS;
}
/******************************************************************************
Function   :    ov5648_sunny_p5v18g_select_bank
Description:    Select the specific bankNum. OTP will be read into IC's internel men.
******************************************************************************/
static int ov5648_sunny_p5v18g_select_bank(struct msm_sensor_ctrl_t *s_ctrl, int bankNum)
{
	CMR_LOGD("%s, select bank num :%d\n",__func__, bankNum);

	if (OV5648_SUNNY_P5V18G_OTP_BANK0 == bankNum)
	{
		ov5648_sunny_p5v18g_cci_i2c_write(s_ctrl, 0x3d84, 0xc0);
		ov5648_sunny_p5v18g_cci_i2c_write(s_ctrl, 0x3d85, 0x00);//bank0
		ov5648_sunny_p5v18g_cci_i2c_write(s_ctrl, 0x3d86, 0x0f);
		ov5648_sunny_p5v18g_cci_i2c_write(s_ctrl, 0x3d81, 0x01);//start read

		mdelay(3);//must delay 3ms
		return 0;
	}
	else if (OV5648_SUNNY_P5V18G_OTP_BANK1 == bankNum)
	{
		ov5648_sunny_p5v18g_cci_i2c_write(s_ctrl, 0x3d84, 0xc0);
		ov5648_sunny_p5v18g_cci_i2c_write(s_ctrl, 0x3d85, 0x10);//bank1
		ov5648_sunny_p5v18g_cci_i2c_write(s_ctrl, 0x3d86, 0x1f);
		ov5648_sunny_p5v18g_cci_i2c_write(s_ctrl, 0x3d81, 0x01);//start read

		mdelay(3);//must delay 3ms
		return 0;
	}
	else
	{
		CMR_LOGE("%s, Error bank number!\n",__func__);
		return -1;
	}
	return 0;
}
Example #8
0
static cmr_int cmr_sns_monitor_proc(void *p_data)
{
	cmr_u32                 ret = CMR_CAMERA_SUCCESS;
	cmr_u32                 i = 0, cnt = 0;
	struct cmr_sensor_handle  *sensor_handle = (struct cmr_sensor_handle *)p_data;

	while (1) {
		if (!sensor_handle) {
			CMR_LOGE("sensor_handle is NULL");
			return CMR_CAMERA_INVALID_PARAM;
		}
		usleep(10000);

		if (sensor_handle->monitor_thread_cxt.is_exit) {
			sensor_handle->monitor_thread_cxt.is_exit = 0;
			CMR_LOGI("EXIT!");
			break;
		}

		cnt ++;
		if (cnt >= SENSOR_CHECK_STATUS_INTERVAL) {
			cnt = 0;
			for (i = 0; i < CAMERA_ID_MAX; i++) {
				if (0 != ((1 << i) & sensor_handle->sensor_bits)) {
					cmr_sns_check_err(sensor_handle, i);
				}
			}
		}
	}

	return ret;
}
Example #9
0
cmr_int cmr_sns_close(struct cmr_sensor_handle *handle, cmr_u32 sensor_id_bits)
{
	cmr_int       ret = CMR_CAMERA_SUCCESS;
	cmr_u32       cameraId = 0;
	cmr_u32       cameraCnt = 0;

	CHECK_HANDLE_VALID(handle);

	/*close all signed camera sensor*/
	for (cameraId = 0; cameraId < CAMERA_ID_MAX; cameraId++) {
		if (0 != (sensor_id_bits & (1 << cameraId))) {
			ret = sensor_close_common(&handle->sensor_cxt[cameraId], cameraId);
			if (ret) {
				CMR_LOGE("camera %u open failed!", cameraId);
			} else {
				handle->sensor_bits &= ~(1 << cameraId);
				CMR_LOGI("close sensor ok");
				/*cmr_sns_af_init(&handle->sensor_cxt[cameraId]);*/
			}
		}
	}

	if (!handle->sensor_bits) {
		/*when all sensors are closed, the monitor and focus move thread should be returned off*/
		cmr_sns_kill_fmove_thread(handle);
		cmr_sns_kill_monitor_thread(handle);
	}
	/*todo, if close not success, how to handle the issue*/

	return ret;
}
Example #10
0
cmr_int cmr_sensor_update_isparm_from_file(cmr_handle sensor_handle, cmr_uint sensor_id)
{
	CMR_MSG_INIT(message);
	cmr_int                  ret = CMR_CAMERA_SUCCESS;
	struct cmr_sensor_handle *handle = (struct cmr_sensor_handle *)sensor_handle;
	CMR_LOGI("E");

	CHECK_HANDLE_VALID(handle);

	ret = sensor_update_isparm_from_file(&handle->sensor_cxt[sensor_id], sensor_id);

#if 0
	message.msg_type     = CMR_SENSOR_EVT_ISPARAM_FROM_FILE;
	message.sub_msg_type = sensor_id;
	message.sync_flag    = CMR_MSG_SYNC_PROCESSED;
	ret = cmr_thread_msg_send(handle->thread_cxt.thread_handle, &message);
	if (ret) {
		CMR_LOGE("X send msg failed!");
		return CMR_CAMERA_FAIL;
	}
#endif
	CMR_LOGI("X ret %ld", ret);

	return ret;
}
Example #11
0
cmr_int camera_get_trim_rect(struct img_rect *src_trim_rect, cmr_uint zoom_level, struct img_size *dst_size)
{
	cmr_int                  ret = CMR_CAMERA_SUCCESS;
	cmr_uint                 trim_width = 0, trim_height = 0;
	cmr_uint                 zoom_step_w = 0, zoom_step_h = 0;

	if (!src_trim_rect || !dst_size) {
		CMR_LOGE("0x%lx 0x%lx", (cmr_uint)src_trim_rect, (cmr_uint)dst_size);
		ret = -CMR_CAMERA_INVALID_PARAM;
		goto exit;
	}

	trim_width = src_trim_rect->width;
	trim_height = src_trim_rect->height;

	if (0 == dst_size->width || 0 == dst_size->height) {
		CMR_LOGE("0x%x 0x%x", dst_size->width, dst_size->height);
		ret = -CMR_CAMERA_INVALID_PARAM;
		goto exit;
	}

	if (dst_size->width * src_trim_rect->height < dst_size->height * src_trim_rect->width) {
		trim_width = dst_size->width * src_trim_rect->height / dst_size->height;
	} else {
		trim_height = dst_size->height * src_trim_rect->width / dst_size->width;
	}

	zoom_step_w = ZOOM_STEP(trim_width);
	zoom_step_w &= ~1;
	zoom_step_w *= zoom_level;
	zoom_step_h = ZOOM_STEP(trim_height);
	zoom_step_h &= ~1;
	zoom_step_h *= zoom_level;
	trim_width = trim_width - zoom_step_w;
	trim_height = trim_height - zoom_step_h;

	src_trim_rect->start_x += (src_trim_rect->width - trim_width) >> 1;
	src_trim_rect->start_y += (src_trim_rect->height - trim_height) >> 1;
	src_trim_rect->start_x = CAMERA_WIDTH(src_trim_rect->start_x);
	src_trim_rect->start_y = CAMERA_HEIGHT(src_trim_rect->start_y);
	src_trim_rect->width = CAMERA_WIDTH(trim_width);
	src_trim_rect->height = CAMERA_HEIGHT(trim_height);
	CMR_LOGI("zoom_level %ld trim rect %d %d %d %d", zoom_level, src_trim_rect->start_x,
		      src_trim_rect->start_y, src_trim_rect->width, src_trim_rect->height);
exit:
	return ret;
}
Example #12
0
cmr_int camera_get_trim_rect2(struct img_rect *src_trim_rect, float zoom_ratio, float dst_ratio,
											cmr_u32 sensor_w, cmr_u32 sensor_h, cmr_u8 rot)//for hal2.0 calculate crop again
{
	cmr_u32                  trim_width;
	cmr_u32                  trim_height;
	float                    minOutputRatio;
	float                    zoom_width, zoom_height, sensor_ratio;

	if (NULL == src_trim_rect) {
		CMR_LOGE("param error");
		return -CMR_CAMERA_INVALID_PARAM;
	} else if (src_trim_rect->width == 0 || src_trim_rect->height == 0) {
		CMR_LOGE("0x%lx w %d h %d", (cmr_uint)src_trim_rect, src_trim_rect->width, src_trim_rect->height);
		return -CMR_CAMERA_INVALID_PARAM;
	}
	minOutputRatio = dst_ratio;
	sensor_ratio = (float)sensor_w / (float)sensor_h;
	if (rot != IMG_ANGLE_0 && rot != IMG_ANGLE_180) {
		minOutputRatio = 1 / minOutputRatio;
	}
	if (minOutputRatio > sensor_ratio) {
		zoom_width = (float)sensor_w / zoom_ratio;
		zoom_height = zoom_width / minOutputRatio;
	} else {
		zoom_height = (float)sensor_h / zoom_ratio;
		zoom_width = zoom_height * minOutputRatio;
	}
	trim_width = (cmr_u32)zoom_width;
	trim_height = (cmr_u32)zoom_height;
	CMR_LOGI("sensor_ratio %f, minOutputRatio %f, zoom_ratio %f", sensor_ratio, minOutputRatio, zoom_ratio);
	CMR_LOGI("trim_width %d, trim_height %d", trim_width, trim_height);

	src_trim_rect->start_x += (src_trim_rect->width - trim_width) >> 1;
	src_trim_rect->start_y += (src_trim_rect->height - trim_height) >> 1;
	src_trim_rect->start_x = CAMERA_WIDTH(src_trim_rect->start_x);
	src_trim_rect->start_y = CAMERA_HEIGHT(src_trim_rect->start_y);
	src_trim_rect->width = CAMERA_WIDTH(trim_width);
	src_trim_rect->height = CAMERA_HEIGHT(trim_height);
	CMR_LOGI("zoom_level %f trim rect %d %d %d %d",
			zoom_ratio,
			src_trim_rect->start_x,
			src_trim_rect->start_y,
			src_trim_rect->width,
			src_trim_rect->height);

	return CMR_CAMERA_SUCCESS;
}
/******************************************************************************
Function   :    ov5648_sunny_p5v18g_otp_read_module_info
Description:    read module info OTP.
******************************************************************************/
static int ov5648_sunny_p5v18g_otp_read_module_info(struct msm_sensor_ctrl_t *s_ctrl,
																struct ov5648_sunny_p5v18g_otp_struct * otp_ptr)
{
	//module info from group2,bank1 first
	if (-1 == ov5648_sunny_p5v18g_select_bank(s_ctrl, OV5648_SUNNY_P5V18G_OTP_BANK1))
	{
		return -1;
	}
	//Module info:  Bank 1:0x3d02~0x3d06
	ov5648_sunny_p5v18g_cci_i2c_read(s_ctrl, 0x3d02, &(otp_ptr->product_year));
	ov5648_sunny_p5v18g_cci_i2c_read(s_ctrl, 0x3d03, &(otp_ptr->product_month));
	ov5648_sunny_p5v18g_cci_i2c_read(s_ctrl, 0x3d04, &(otp_ptr->product_date));
	ov5648_sunny_p5v18g_cci_i2c_read(s_ctrl, 0x3d05, &(otp_ptr->camera_id));
	ov5648_sunny_p5v18g_cci_i2c_read(s_ctrl, 0x3d06, &(otp_ptr->supplier_version_id));
	CMR_LOGD("%s,group 2 otp_ptr.product_year:%d\n",__func__,otp_ptr->product_year);
	CMR_LOGD("%s,group 2 otp_ptr.product_month:%d\n",__func__,otp_ptr->product_month);
	CMR_LOGD("%s,group 2 otp_ptr.product_date:%d\n",__func__,otp_ptr->product_date);
	CMR_LOGD("%s,group 2 otp_ptr.camera_id:%d\n",__func__,otp_ptr->camera_id);
	CMR_LOGD("%s,group 2 otp_ptr.supplier_version_id:%d\n",__func__,otp_ptr->supplier_version_id);

	ov5648_sunny_p5v18g_otp_clear(s_ctrl);

	if (0 != otp_ptr->product_year)// year is not zero, we assume module info is correct
	{
		CMR_LOGW("%s, Module info lays in group 2\n",__func__);
		return 0;
	}
	//group2 fail, check group1, bank0
	if (-1 == ov5648_sunny_p5v18g_select_bank(s_ctrl, OV5648_SUNNY_P5V18G_OTP_BANK0))
	{
		return -1;
	}
	//Module info: Bank 0:0x3d05~0x3d09
	ov5648_sunny_p5v18g_cci_i2c_read(s_ctrl, 0x3d05, &(otp_ptr->product_year));
	ov5648_sunny_p5v18g_cci_i2c_read(s_ctrl, 0x3d06, &(otp_ptr->product_month));
	ov5648_sunny_p5v18g_cci_i2c_read(s_ctrl, 0x3d07, &(otp_ptr->product_date));
	ov5648_sunny_p5v18g_cci_i2c_read(s_ctrl, 0x3d08, &(otp_ptr->camera_id));
	ov5648_sunny_p5v18g_cci_i2c_read(s_ctrl, 0x3d09, &(otp_ptr->supplier_version_id));

	CMR_LOGD("%s,group 2 otp_ptr.product_year:%d\n",__func__,otp_ptr->product_year);
	CMR_LOGD("%s,group 2 otp_ptr.product_month:%d\n",__func__,otp_ptr->product_month);
	CMR_LOGD("%s,group 2 otp_ptr.product_date:%d\n",__func__,otp_ptr->product_date);
	CMR_LOGD("%s,group 2 otp_ptr.camera_id:%d\n",__func__,otp_ptr->camera_id);
	CMR_LOGD("%s,group 2 otp_ptr.supplier_version_id:%d\n",__func__,otp_ptr->supplier_version_id);

	ov5648_sunny_p5v18g_otp_clear(s_ctrl);

	if (0 != otp_ptr->product_year) // year is not zero, we assume module info is correct
	{
		CMR_LOGW("%s, Module info lays in group 1\n",__func__);
		return 0;//otp read sucess
	}
	else
	{
		CMR_LOGE("%s,  Error !No Module inf found in OTP\n",__func__);
		return -1;//otp read fail
	}
	return 0;
}
Example #14
0
void camera_take_snapshot_step(enum CAMERA_TAKEPIC_STEP step)
{
	if (step > CMR_STEP_CALL_BACK) {
		CMR_LOGE("error %d", step);
		return;
	}
	cap_stp[step].timestamp = systemTime(CLOCK_MONOTONIC);
	cap_stp[step].valid = 1;
}
int camera_get_trim_rect2(struct img_rect *src_trim_rect, float zoomRatio, float dstRatio,uint32_t SensorW, uint32_t SensorH, uint8_t Rot)//for hal2.0 calculate crop again
{
	uint32_t                 trim_width;
	uint32_t                 trim_height;
	float    minOutputRatio;
	float    zoomWidth,zoomHeight,SensorRatio;

	if (NULL == src_trim_rect) {
		CMR_LOGE("NULL");
		return -CAMERA_INVALID_PARM;
	} else if (src_trim_rect->width == 0 || src_trim_rect->height == 0) {
		CMR_LOGE("0x%x w=%d h=%d", (uint32_t)src_trim_rect,src_trim_rect->width,src_trim_rect->height);
		return -CAMERA_INVALID_PARM;
	}
	minOutputRatio = dstRatio;
	SensorRatio = (float)SensorW /SensorH;
	if (Rot != IMG_ROT_0) {
		minOutputRatio = 1 / minOutputRatio;
	}
	if (minOutputRatio > SensorRatio) {
		zoomWidth = SensorW / zoomRatio;
		zoomHeight = zoomWidth / minOutputRatio;
	} else {
		zoomHeight = SensorH / zoomRatio;
		zoomWidth = zoomHeight * minOutputRatio;
	}
	trim_width = zoomWidth;
	trim_height = zoomHeight;
	src_trim_rect->start_x += (src_trim_rect->width - trim_width) >> 1;
	src_trim_rect->start_y += (src_trim_rect->height - trim_height) >> 1;
	src_trim_rect->start_x = CAMERA_WIDTH(src_trim_rect->start_x);
	src_trim_rect->start_y = CAMERA_HEIGHT(src_trim_rect->start_y);
	src_trim_rect->width = CAMERA_WIDTH(trim_width);
	src_trim_rect->height = CAMERA_HEIGHT(trim_height);
	CMR_LOGI("zoom_level %f, trim rect, %d %d %d %d",
		zoomRatio,
		src_trim_rect->start_x,
		src_trim_rect->start_y,
		src_trim_rect->width,
		src_trim_rect->height);

	return CAMERA_SUCCESS;
}
/******************************************************************************
Function   :    ov5648_sunny_p5v18g_otp_read_vcm
Description:   read vcm  info OTP.
******************************************************************************/
static int ov5648_sunny_p5v18g_otp_read_vcm(struct msm_sensor_ctrl_t *s_ctrl,
														struct ov5648_sunny_p5v18g_otp_struct * otp_ptr)
{
	uint16_t vcm_start_value = 0;
	uint16_t vcm_end_value = 0;

		//vcm otp lays in bank1
		if (0 != ov5648_sunny_p5v18g_select_bank(s_ctrl, OV5648_SUNNY_P5V18G_OTP_BANK1))
		{
			return -1;
		}
	//VCM Start: Bank 1, 0x3d0d, 0x3d00
	//group 2
	ov5648_sunny_p5v18g_cci_i2c_read(s_ctrl, 0x3d0d, &vcm_start_value);
	CMR_LOGD("%s, VCM start group2 value:0x%x\n",__func__ , vcm_start_value);

	if (0 == vcm_start_value)
	{
		//group1
		ov5648_sunny_p5v18g_cci_i2c_read( s_ctrl, 0x3d00, &vcm_start_value);
		CMR_LOGD("%s, VCM start group1 value:0x%x\n",__func__ , vcm_start_value);
	}

	//VCM:End, Bank 1,0x3d0e, 0x3d01
	//group 2
	ov5648_sunny_p5v18g_cci_i2c_read(s_ctrl, 0x3d0e, &vcm_end_value );
	CMR_LOGD("%s, VCM end group2 value:0x%x\n",__func__ , vcm_end_value );

	if (0 == vcm_end_value )
	{
		//group 1
		ov5648_sunny_p5v18g_cci_i2c_read(s_ctrl, 0x3d01, &vcm_end_value );
		CMR_LOGD("%s, VCM end group1 value:0x%x\n",__func__ , vcm_end_value );
	}

	//clear the buffer
	ov5648_sunny_p5v18g_otp_clear(s_ctrl);

	if ((0 != vcm_start_value) && (0 != vcm_end_value))
	{
		otp_ptr->vcm_start = vcm_start_value;
		otp_ptr->vcm_end = vcm_end_value;
		CMR_LOGD("%s, VCM info read sucess!\n\n",__func__);

		//otp read success
		return 0;
	}
	else
	{
		CMR_LOGE("%s,  Error VCM info is not correct!\n",__func__);

		//otp read fail
		return -1;
	}
}
Example #17
0
cmr_int cmr_sns_open(struct cmr_sensor_handle *handle, cmr_u32 sensor_id_bits)
{
	cmr_int       ret = CMR_CAMERA_SUCCESS;
	cmr_u32       cameraId = 0;
	cmr_u32       cameraCnt = 0;

	CHECK_HANDLE_VALID(handle);

	/*open all signed camera sensor*/
	for (cameraId = 0; cameraId < CAMERA_ID_MAX; cameraId++) {
		if (0 != (sensor_id_bits & (1 << cameraId))) {
			ret = sensor_open_common(&handle->sensor_cxt[cameraId], cameraId, handle->is_autotest);
			if (ret) {
				CMR_LOGE("camera %u open failed!", cameraId);
			} else {
				handle->sensor_bits |= (1 << cameraId);
			}
		}
	}

	if (!handle->sensor_bits) {
		ret = CMR_CAMERA_FAIL;
	} else {
		ret = cmr_sns_create_monitor_thread(handle);
		if (ret)
			CMR_LOGE("camera monitor thread create failed");

		for (cameraId = 0; cameraId < CAMERA_ID_MAX; cameraId++) {
			if (0 != (sensor_id_bits & (1 << cameraId))) {
				CMR_LOGE("sensor format =%d",handle->sensor_cxt[cameraId].sensor_info_ptr->image_format);
				if (SENSOR_IMAGE_FORMAT_RAW != handle->sensor_cxt[cameraId].sensor_info_ptr->image_format) {
				ret = cmr_sns_create_fmove_thread(handle);
				if (ret)
					CMR_LOGE("Failed to create focus move dummy thread");

				}
			}
		}
	}
	return ret;
}
Example #18
0
cmr_int cmr_sensor_focus_init(cmr_handle sensor_handle, cmr_u32 sensor_id)
{
	cmr_int                  ret = CMR_CAMERA_SUCCESS;

	CMR_MSG_INIT(message);
	struct cmr_sensor_handle *handle = (struct cmr_sensor_handle *)sensor_handle;
	CMR_LOGE("E");

	CHECK_HANDLE_VALID(handle);

	message.msg_type     = CMR_SENSOR_EVT_AFINIT;
	message.sub_msg_type = sensor_id;
	message.sync_flag    = CMR_MSG_SYNC_NONE;
	ret = cmr_thread_msg_send(handle->thread_cxt.thread_handle, &message);
	if (ret) {
		CMR_LOGE("send msg failed!");
		return CMR_CAMERA_FAIL;
	}
	CMR_LOGE("x ret= %ld",ret);
	return ret;
}
int32_t ispGetUpParamV0000(void*param_ptr, void* rtn_param_ptr)
{
	int32_t rtn=0x00;
	uint32_t* offset_ptr=(uint32_t*)param_ptr;
	struct isp_parser_buf_rtn* rtn_ptr=(struct isp_parser_buf_rtn*)rtn_param_ptr;
	uint32_t* data_addr=NULL;
	uint32_t data_len=0x00;
	SENSOR_EXP_INFO_T_PTR sensor_info_ptr=Sensor_GetInfo();
	struct sensor_raw_info* sensor_raw_info_ptr=(struct sensor_raw_info*)sensor_info_ptr->raw_info_ptr;
	struct sensor_version_info* raw_version_info_ptr=sensor_raw_info_ptr->version_info;
	struct sensor_raw_tune_info* raw_tune_ptr=sensor_raw_info_ptr->tune_ptr;

	CMR_LOGE("ISP_TOOL:sensor_raw_info_ptr:0x%x:0x%x:0x%x",(uint32_t)sensor_raw_info_ptr, (uint32_t)raw_version_info_ptr, (uint32_t)raw_tune_ptr);

	ispGetParamSizeV0000(&data_len);
	rtn_ptr->buf_len=data_len+0x10;
	data_addr=ispParserAlloc(rtn_ptr->buf_len);
	rtn_ptr->buf_addr=(uint32_t)data_addr;

	CMR_LOGE("ISP_TOOL:sensor_raw_info_ptr:0x%x:0x%x:0x%x:0x%x",(uint32_t)data_addr, (uint32_t)rtn_ptr->buf_addr, rtn_ptr->buf_len, data_len);

	if(NULL!=data_addr)
	{
		// packet cfg
		// version_id||module_id||packet_len||module_info||data
		data_addr[0]=raw_version_info_ptr->version_id;
		data_addr[1]=ISP_PACKET_ALL;
		data_addr[2]=data_len;
		data_addr[3]=0x00;
		// tab
		memcpy((void*)&data_addr[4], (void*)raw_tune_ptr, data_len);
	}
	else
	{
		rtn_ptr->buf_addr = (uint32_t)NULL;
		rtn_ptr->buf_len = 0x00;
	}
	return rtn;
}
Example #20
0
cmr_int cmr_sensor_get_flash_info (cmr_handle sensor_handle, cmr_u32 sensor_id, struct sensor_flash_level *level)
{
	cmr_int ret = CMR_CAMERA_SUCCESS;
	struct cmr_sensor_handle *handle = (struct cmr_sensor_handle *)sensor_handle;
	CHECK_HANDLE_VALID(handle);

	if (!handle || !level) {
		CMR_LOGE("param err 0x%lx", (cmr_uint)sensor_handle);
		ret = -CMR_CAMERA_INVALID_PARAM;
		goto exit;
	}

	ret = sns_dev_get_flash_level (&handle->sensor_cxt[sensor_id], level);
	if (ret) {
		CMR_LOGE("get falsh level failed!");
		ret = CMR_CAMERA_FAIL;
	}

exit:
	CMR_LOGI("ret= %ld", ret);
	return ret;
}
Example #21
0
LOCAL uint32_t _BF3905_Identify(uint32_t param)
{
#define BF3905_PID_VALUE    0x39    
#define BF3905_PID_ADDR     0xFC
#define BF3905_VER_VALUE    0x05    
#define BF3905_VER_ADDR     0xFD

	uint8_t pid_value=0x00;
	uint8_t ver_value=0x00;
	uint32_t ret_value=SENSOR_FAIL;


	CMR_LOGE("SENSOR:BF3905 identify  .\n");

	pid_value = Sensor_ReadReg(BF3905_PID_ADDR);

	if(BF3905_PID_VALUE==pid_value)
	{
		ver_value=Sensor_ReadReg(BF3905_VER_ADDR);

		CMR_LOGE("SENSOR: BF3905_Identify: PID = %x, VER = %x \n",pid_value, ver_value);

		if(BF3905_VER_VALUE==ver_value)
		{
			ret_value=SENSOR_SUCCESS;
			CMR_LOGE("SENSOR: this is BF3905 sensor ! \n");        
		}
		else
		{
			CMR_LOGE("SENSOR: BF3905_Identify this is TOSHIBA sensor ! \n");
		}
	}
	else
	{
		CMR_LOGE("SENSOR:BF3905 identify fail,pid_value=%d .\n",pid_value);
	}

	return ret_value;
}
/****************************************************************************
* FunctionName: ov5648_sunny_p5v18g_cci_i2c_write;
* Description : i2c write interface;
***************************************************************************/
static int32_t ov5648_sunny_p5v18g_cci_i2c_write(struct msm_sensor_ctrl_t *s_ctrl,uint32_t addr, uint16_t data)
{
	int32_t rc = -EFAULT;

	rc = s_ctrl->sensor_i2c_client->i2c_func_tbl->i2c_write(
		s_ctrl->sensor_i2c_client, addr, data, MSM_CAMERA_I2C_BYTE_DATA);

	if(rc < 0)
	{
		CMR_LOGE("%s fail, rc = %d! addr = 0x%x, data = 0x%x\n", __func__, rc, addr, data);
	}

	return rc;
}
Example #23
0
cmr_int cmr_sensor_ioctl(cmr_handle sensor_handle, cmr_u32 sensor_id, cmr_uint cmd, cmr_uint arg)
{
	CMR_MSG_INIT(message);
	cmr_int                  ret = CMR_CAMERA_SUCCESS;
	struct cmr_sns_ioctl_param      ioctl_param;
	struct cmr_sensor_handle *handle = (struct cmr_sensor_handle *)sensor_handle;
	CMR_LOGI("E");

	CHECK_HANDLE_VALID(handle);

	cmr_bzero(&ioctl_param, sizeof(ioctl_param));
	ioctl_param.cmd = cmd;
	ioctl_param.arg = arg;

	/*the set mode function can be async control*/
	message.msg_type     = CMR_SENSOR_EVT_IOCTL;
	message.sub_msg_type = sensor_id;
	message.sync_flag    = CMR_MSG_SYNC_PROCESSED;
	message.data         = (void *)malloc(sizeof(struct cmr_sns_ioctl_param));
	if (!message.data) {
		CMR_LOGE("No mem!");
		return CMR_CAMERA_NO_MEM;
	} else {
		message.alloc_flag = 1;
	}
	cmr_copy(message.data, &ioctl_param, sizeof(struct cmr_sns_ioctl_param));

	ret = cmr_thread_msg_send(handle->thread_cxt.thread_handle, &message);
	if (ret) {
		CMR_LOGE("send msg failed!");
		return CMR_CAMERA_FAIL;
	}

	CMR_LOGI("X ret %ld", ret);
	return ret;
}
/****************************************************************************
* FunctionName: ov5648_foxconn_132_cci_i2c_read;
* Description : i2c read interface;
***************************************************************************/
static int32_t ov5648_foxconn_132_cci_i2c_read(struct msm_sensor_ctrl_t *s_ctrl, uint32_t addr, uint16_t *data)
{
	int32_t rc = -EFAULT;
	uint16_t temp_data = 0;

	rc = s_ctrl->sensor_i2c_client->i2c_func_tbl->i2c_read(
			s_ctrl->sensor_i2c_client,
			addr,
			&temp_data, MSM_CAMERA_I2C_BYTE_DATA);
	if(rc < 0)
	{
		CMR_LOGE("%s fail, rc = %d! addr = 0x%x, data = 0x%x\n", __func__, rc, addr, temp_data);
	}
	*data = temp_data;
	return rc;
}
Example #25
0
cmr_int cmr_sensor_get_autotest_mode(cmr_handle sensor_handle, cmr_u32 sensor_id, cmr_uint *is_autotest)
{
	UNUSED(sensor_id);

	cmr_int                      ret = CMR_CAMERA_SUCCESS;
	struct cmr_sensor_handle *handle = (struct cmr_sensor_handle *)sensor_handle;

	if (!handle || !is_autotest) {
		CMR_LOGE("param err 0x%lx", (cmr_uint)sensor_handle);
		ret = -CMR_CAMERA_INVALID_PARAM;
		goto exit;
	}
	*is_autotest = handle->is_autotest;
	CMR_LOGI("auto test %d", (cmr_s32)*is_autotest);
exit:
	return ret;
}
Example #26
0
static cmr_int cmr_sns_af_init(struct sensor_drv_context *sensor_cxt)
{
	SENSOR_EXT_FUN_PARAM_T   af_param;
	cmr_int                  ret = CMR_CAMERA_SUCCESS;

	CMR_LOGI("Enter");

	SENSOR_DRV_CHECK_ZERO(sensor_cxt);

	af_param.cmd = SENSOR_EXT_FUNC_INIT;
	af_param.param = SENSOR_EXT_FOCUS_TRIG;
	ret = cmr_sns_ioctl(sensor_cxt, SENSOR_FOCUS, (cmr_uint)&af_param);
	if (ret) {
		CMR_LOGE("Failed to init AF");
	} else {
		CMR_LOGI("OK to init auto focus");
	}

	return ret;
}
Example #27
0
cmr_int cmr_sensor_get_raw_settings(cmr_handle sensor_handle, void *raw_setting, cmr_u32 camera_id)
{
	struct sensor_drv_context *sensor_cxt = NULL;
	CHECK_HANDLE_VALID(sensor_handle);
	sensor_cxt = &(((struct cmr_sensor_handle *)sensor_handle)->sensor_cxt[camera_id]);

	if (PNULL == sensor_cxt->sensor_info_ptr) {
		CMR_LOGE("No sensor info!");
		return -1;
	}

	/*the current function of raw setting refer is a dummy*/
	CHECK_HANDLE_VALID(raw_setting);

	if (raw_setting) {
		CMR_LOGI("get sensor_info_ptr addr %p", sensor_cxt->sensor_info_ptr);
		cmr_copy(raw_setting, sensor_cxt->sensor_info_ptr, sizeof(EXIF_SPEC_PIC_TAKING_COND_T));
	}
	return CMR_CAMERA_SUCCESS;
}
Example #28
0
/*because use copy methods, we should get info every time when use that*/
cmr_int cmr_sensor_get_info(cmr_handle sensor_handle, cmr_uint sensor_id, struct sensor_exp_info *sensor_info)
{
	cmr_int ret = CMR_CAMERA_SUCCESS;
	struct cmr_sensor_handle *handle = (struct cmr_sensor_handle *)sensor_handle;
	CHECK_HANDLE_VALID(handle);
	SENSOR_EXP_INFO_T *cur_sensor_info = NULL;
	CMR_LOGV("E");

	ret = sensor_get_info_common(&handle->sensor_cxt[sensor_id], &cur_sensor_info);
	if (ret) {
		CMR_LOGE("X fail, bypass this!");
		return ret;
	}

	CHECK_HANDLE_VALID(sensor_info);

	cmr_sns_copy_info(sensor_info, cur_sensor_info);
	CMR_LOGV("X");

	return ret;
}
Example #29
0
cmr_int cmr_sensor_set_mode_done(cmr_handle sensor_handle, cmr_uint sensor_id)
{
	cmr_int                  ret = CMR_CAMERA_SUCCESS;

	CMR_MSG_INIT(message);
	struct cmr_sensor_handle *handle = (struct cmr_sensor_handle*)sensor_handle;
	CMR_LOGI("E");

	CHECK_HANDLE_VALID(handle);

	message.msg_type     = CMR_SENSOR_EVT_SETMODONE;
	message.sub_msg_type = sensor_id;
	message.sync_flag    = CMR_MSG_SYNC_PROCESSED;
	ret = cmr_thread_msg_send(handle->thread_cxt.thread_handle, &message);
	if (ret) {
		CMR_LOGE("X send msg failed!");
		return CMR_CAMERA_FAIL;
	}
	CMR_LOGI("X ret %ld", ret);
	return ret;
}
Example #30
0
cmr_int cmr_sensor_get_gain_thrs(cmr_handle sensor_handle, cmr_uint sensor_id, cmr_u32 *gain_thrs)
{
	cmr_int ret = CMR_CAMERA_SUCCESS;
	struct sensor_gain_thrs_tag *gain_thrs_param = NULL;
	cmr_uint sensor_param = 0;

	gain_thrs_param = malloc(sizeof(struct sensor_gain_thrs_tag));
	if (!gain_thrs_param) {
		CMR_LOGE("fail to malloc");
		return CMR_CAMERA_NO_MEM;
	}
	gain_thrs_param->cmd = SENSOR_EXT_GAIN_OVER_THRS;
	//gain_thrs_param->param = param_ptr->cmd_value;
	sensor_param = (cmr_uint)gain_thrs_param;
	ret = cmr_sensor_ioctl(sensor_handle, sensor_id, SENSOR_GET_GAIN_THRS, sensor_param);
	*gain_thrs = gain_thrs_param->gain_thrs;
	free(gain_thrs_param);
	gain_thrs_param = NULL;

	return ret;
}