📄 af_alg_1.c
字号:
/* 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -