af_alg_1.c

来自「dm270 source code」· C语言 代码 · 共 87 行

C
87
字号
/* Hardware auto-focus control algorithm 1 - global search */

#include <system/uart270.h>

#include <user/af_ctrl.h>

#include <h3a/af_alg_externs.h>

STATUS AFAlg1_FocusCtrlReset();
STATUS AFAlg1_FocusCtrl(int focus_value, int *motor_value);

extern AF_CTRL af_ctrl_2;

AF_CTRL af_ctrl_1;
AF_ALG af_alg_1;

STATUS AFAlg1Init() {

	AFAlg2Init();

	memcpy(&af_ctrl_1, &af_ctrl_2, sizeof(af_ctrl_1));
					
	af_ctrl_1.af_alg			= &af_alg_1;				

	af_alg_1.sharp_calc.reset	= AFAlgSharpCalcReset;
	af_alg_1.sharp_calc.execute = AFAlgSharpCalc;

	af_alg_1.focus_ctrl.reset	= AFAlg1_FocusCtrlReset;
	af_alg_1.focus_ctrl.execute = AFAlg1_FocusCtrl;

	af_alg_1.motor_ctrl.reset	= CCDM_MotorCtrlReset;
	af_alg_1.motor_ctrl.execute = CCDM_MotorCtrl;

	return E_PASS;
}

extern int fmax, count, motor_value_max;

STATUS AFAlg1_FocusCtrlReset() {
	fmax=0;
	count=0;
	motor_value_max=0;
	return E_PASS;
}

STATUS AFAlg1_FocusCtrl(int focus_value, int *motor_value) {
	if(count==0) {
		fmax=focus_value;
		motor_value_max=cur_motor_value;
	}

	count++;
	if(focus_value>fmax) {
		fmax=focus_value;
		motor_value_max=cur_motor_value;
	}

	if(cur_motor_value<MIN_MOTOR_VALUE) {
		*motor_value=0;
		if( (motor_value_max-cur_motor_value) > 0) {
			CCDM_MotorCtrl((motor_value_max-cur_motor_value+16));
			CCDM_MotorCtrl(-16);
			cur_motor_value=motor_value_max;
		}
		#if AF_DEBUG
		sprintf( out_buff, "\r\n Max FV Motor Value = %ld, (FV calc = %ld)\r\n", motor_value_max, fmax);
		UART_sendString( UART0, out_buff);
		#endif
		#if AF_OUT_DATA
		if(dump_data)
			DumpDataToFile();
		#endif
		return E_PASS;
	} else {
		cur_motor_value-=fine_step_size;
		*motor_value=-fine_step_size;
		return E_DEVICE;
	}
}







⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?