From 4c95d7f5b4835466fc86bb33f799ddb4009fda1f Mon Sep 17 00:00:00 2001 From: zhaohe Date: Thu, 25 Apr 2024 19:53:25 +0800 Subject: [PATCH] v11 --- .../clst_controler.cpp | 24 ++++++---- src/camera_light_src_timing_controller/reginfo.cpp | 52 +++++++++++----------- src/camera_light_src_timing_controller/reginfo.hpp | 7 +-- src/version.h | 2 +- 4 files changed, 48 insertions(+), 37 deletions(-) diff --git a/src/camera_light_src_timing_controller/clst_controler.cpp b/src/camera_light_src_timing_controller/clst_controler.cpp index 29501d7..655fd7d 100644 --- a/src/camera_light_src_timing_controller/clst_controler.cpp +++ b/src/camera_light_src_timing_controller/clst_controler.cpp @@ -187,12 +187,18 @@ zaf_error_code_t CLSTControler::reg_write(uint32_t regadd, uint32_t regvalue, ui return kaf_ec_param_error; } - if (!reg->dirty && reg->regshadow == regvalue) { - return kaf_ec_success; + if (!(reg->flag & kreg_flag_force_write)) { + if (!reg->dirty && reg->regshadow == regvalue) { + return kaf_ec_success; + } } - reg->dirty = true; - return _reg_write(regadd, regvalue, regbackvalue, overtime_ms); + zaf_error_code_t ecode = _reg_write(regadd, regvalue, regbackvalue, overtime_ms); + if (ecode == kaf_ec_success) { + reg->dirty = false; + reg->regshadow = regvalue; + } + return ecode; } zaf_error_code_t CLSTControler::reg_read(uint32_t regadd, uint32_t ®value, int32_t overtime_ms) { Reginfo *reg = GetRegInfo(regadd); @@ -200,9 +206,11 @@ zaf_error_code_t CLSTControler::reg_read(uint32_t regadd, uint32_t ®value, in return kaf_ec_param_error; } - if (!reg->dirty && !(reg->flag & kreg_flag_volatile)) { - regvalue = reg->regshadow; - return kaf_ec_success; + if (!(reg->flag & kreg_flag_force_read)) { + if (!reg->dirty) { + regvalue = reg->regshadow; + return kaf_ec_success; + } } uint32_t regbackvalue = 0; @@ -630,7 +638,7 @@ zaf_error_code_t CLSTControler::LightSrcX_getLightIntensityDuty(int32_t index, f DO_CMD(reg_read(kreg_light_ctrol_module1_light_intensity_cnt + (index - 1) * 32, cnt)); duty = (cnt * 100.0 / freqcnt); - + return kaf_ec_success; } zaf_error_code_t CLSTControler::LightSrcX_getLightDriverFreq(int32_t index, float &freq) { // diff --git a/src/camera_light_src_timing_controller/reginfo.cpp b/src/camera_light_src_timing_controller/reginfo.cpp index 8d0cae3..043d420 100644 --- a/src/camera_light_src_timing_controller/reginfo.cpp +++ b/src/camera_light_src_timing_controller/reginfo.cpp @@ -378,31 +378,33 @@ static map reginfo_map = { static bool reginfo_initialized = false; void RegInfoInitialize() { - reginfo_map[kreg_light_ctrol_module1_light_src_error_state].flag |= kreg_flag_volatile; - reginfo_map[kreg_light_ctrol_module2_light_src_error_state].flag |= kreg_flag_volatile; - reginfo_map[kreg_light_ctrol_module3_light_src_error_state].flag |= kreg_flag_volatile; - reginfo_map[kreg_light_ctrol_module4_light_src_error_state].flag |= kreg_flag_volatile; - - reginfo_map[kreg_internal_clk_tri_out_signal_freq].flag |= kreg_flag_volatile; - reginfo_map[kreg_trigger_in1_in_signal_freq].flag |= kreg_flag_volatile; - reginfo_map[kreg_trigger_in2_in_signal_freq].flag |= kreg_flag_volatile; - reginfo_map[kreg_trigger_in3_in_signal_freq].flag |= kreg_flag_volatile; - reginfo_map[kreg_trigger_in4_in_signal_freq].flag |= kreg_flag_volatile; - - reginfo_map[kreg_trigger_in1_out_signal_freq].flag |= kreg_flag_volatile; - reginfo_map[kreg_trigger_in2_out_signal_freq].flag |= kreg_flag_volatile; - reginfo_map[kreg_trigger_in3_out_signal_freq].flag |= kreg_flag_volatile; - reginfo_map[kreg_trigger_in4_out_signal_freq].flag |= kreg_flag_volatile; - - reginfo_map[kreg_light_ctrol_module1_in_sig_freq_detect].flag |= kreg_flag_volatile; - reginfo_map[kreg_light_ctrol_module2_in_sig_freq_detect].flag |= kreg_flag_volatile; - reginfo_map[kreg_light_ctrol_module3_in_sig_freq_detect].flag |= kreg_flag_volatile; - reginfo_map[kreg_light_ctrol_module4_in_sig_freq_detect].flag |= kreg_flag_volatile; - - reginfo_map[kreg_light_ctrol_module1_out_sig_freq_detect].flag |= kreg_flag_volatile; - reginfo_map[kreg_light_ctrol_module2_out_sig_freq_detect].flag |= kreg_flag_volatile; - reginfo_map[kreg_light_ctrol_module3_out_sig_freq_detect].flag |= kreg_flag_volatile; - reginfo_map[kreg_light_ctrol_module4_out_sig_freq_detect].flag |= kreg_flag_volatile; + reginfo_map[kreg_light_ctrol_module1_light_src_error_state].flag |= kreg_flag_force_read; + reginfo_map[kreg_light_ctrol_module2_light_src_error_state].flag |= kreg_flag_force_read; + reginfo_map[kreg_light_ctrol_module3_light_src_error_state].flag |= kreg_flag_force_read; + reginfo_map[kreg_light_ctrol_module4_light_src_error_state].flag |= kreg_flag_force_read; + + reginfo_map[kreg_internal_clk_tri_out_signal_freq].flag |= kreg_flag_force_read; + reginfo_map[kreg_trigger_in1_in_signal_freq].flag |= kreg_flag_force_read; + reginfo_map[kreg_trigger_in2_in_signal_freq].flag |= kreg_flag_force_read; + reginfo_map[kreg_trigger_in3_in_signal_freq].flag |= kreg_flag_force_read; + reginfo_map[kreg_trigger_in4_in_signal_freq].flag |= kreg_flag_force_read; + + reginfo_map[kreg_trigger_in1_out_signal_freq].flag |= kreg_flag_force_read; + reginfo_map[kreg_trigger_in2_out_signal_freq].flag |= kreg_flag_force_read; + reginfo_map[kreg_trigger_in3_out_signal_freq].flag |= kreg_flag_force_read; + reginfo_map[kreg_trigger_in4_out_signal_freq].flag |= kreg_flag_force_read; + + reginfo_map[kreg_light_ctrol_module1_in_sig_freq_detect].flag |= kreg_flag_force_read; + reginfo_map[kreg_light_ctrol_module2_in_sig_freq_detect].flag |= kreg_flag_force_read; + reginfo_map[kreg_light_ctrol_module3_in_sig_freq_detect].flag |= kreg_flag_force_read; + reginfo_map[kreg_light_ctrol_module4_in_sig_freq_detect].flag |= kreg_flag_force_read; + + reginfo_map[kreg_light_ctrol_module1_out_sig_freq_detect].flag |= kreg_flag_force_read; + reginfo_map[kreg_light_ctrol_module2_out_sig_freq_detect].flag |= kreg_flag_force_read; + reginfo_map[kreg_light_ctrol_module3_out_sig_freq_detect].flag |= kreg_flag_force_read; + reginfo_map[kreg_light_ctrol_module4_out_sig_freq_detect].flag |= kreg_flag_force_read; + + reginfo_map[kreg_internal_clk_ctrl].flag |= kreg_flag_force_write; } Reginfo* GetRegInfo(uint32_t add) { if (!reginfo_initialized) { diff --git a/src/camera_light_src_timing_controller/reginfo.hpp b/src/camera_light_src_timing_controller/reginfo.hpp index 3d95885..8da3305 100644 --- a/src/camera_light_src_timing_controller/reginfo.hpp +++ b/src/camera_light_src_timing_controller/reginfo.hpp @@ -15,9 +15,10 @@ using namespace std; typedef enum { - kreg_flag_r = 0x01, // 可读 - kreg_flag_w = 0x01 << 1, // 可写 - kreg_flag_volatile = 0x01 << 2, // 易变寄存器 + kreg_flag_r = 0x01, // 可读 + kreg_flag_w = 0x01 << 1, // 可写 + kreg_flag_force_read = 0x01 << 2, // 易变寄存器 + kreg_flag_force_write = 0x01 << 3, // 易变寄存器 kreg_flag_rw = kreg_flag_r | kreg_flag_w, } reg_flag_t; diff --git a/src/version.h b/src/version.h index 2c84ae8..15811ea 100644 --- a/src/version.h +++ b/src/version.h @@ -1,4 +1,4 @@ #pragma once -#define VERSION 10 +#define VERSION 11 #define MAUFACTURER "iflytop" \ No newline at end of file