diff --git a/a8000_protocol b/a8000_protocol index 6d52b54..e2eaf4c 160000 --- a/a8000_protocol +++ b/a8000_protocol @@ -1 +1 @@ -Subproject commit 6d52b54e3c528a0be076d120d033ecfeb1051ee0 +Subproject commit e2eaf4ce208aaa149127d2bf8fe41434fd63fd08 diff --git a/usrc/subboards/subboard90_optical_module/optical_module_v2.cpp b/usrc/subboards/subboard90_optical_module/optical_module_v2.cpp index ea2605e..923eb35 100644 --- a/usrc/subboards/subboard90_optical_module/optical_module_v2.cpp +++ b/usrc/subboards/subboard90_optical_module/optical_module_v2.cpp @@ -62,8 +62,11 @@ void OpticalModuleV2::initialize(int32_t moduleid, hardware_config_t* hardwarecf m_t_amp_sw_io.setState(true); m_f_amp_sw_io.setState(true); - m_reg.t_pos_offset = (4005 - 331); - m_reg.f_pos_offset = (2860 - 331); + m_reg.t_pos_offset = (4005 - 331); + m_reg.f_pos_offset = (2860 - 331); + m_reg.t_reverse_scan_pos_offset = (2860 - 331) - 1200; + m_reg.f_reverse_scan_pos_offset = (2860 - 331) - 1200; + m_reg.scan_step_interval = 1; m_reg.scan_pointnum = 1200; @@ -127,6 +130,9 @@ int32_t OpticalModuleV2::module_xxx_reg(int32_t param_id, bool read, int32_t& va switch (param_id) { PROCESS_REG(kreg_a8k_opt_t_pos_offset, REG_GET(m_reg.t_pos_offset), REG_SET(m_reg.t_pos_offset)); PROCESS_REG(kreg_a8k_opt_f_pos_offset, REG_GET(m_reg.f_pos_offset), REG_SET(m_reg.f_pos_offset)); + PROCESS_REG(kreg_a8k_opt_t_reverse_scan_pos_offset, REG_GET(m_reg.t_reverse_scan_pos_offset), REG_SET(m_reg.t_reverse_scan_pos_offset)); + PROCESS_REG(kreg_a8k_opt_f_reverse_scan_pos_offset, REG_GET(m_reg.f_reverse_scan_pos_offset), REG_SET(m_reg.f_reverse_scan_pos_offset)); + PROCESS_REG(kreg_a8k_opt_scan_step_interval, REG_GET(m_reg.scan_step_interval), REG_SET(m_reg.scan_step_interval)); PROCESS_REG(kreg_a8k_opt_scan_pointnum, REG_GET(m_reg.scan_pointnum), REG_SET(m_reg.scan_pointnum)); default: @@ -169,7 +175,7 @@ int32_t OpticalModuleV2::start_t_optical_scan(int32_t scanDirection, int32_t las scanStartPos = m_reg.t_pos_offset; } else { intervalStep = m_reg.scan_step_interval; - scanStartPos = m_reg.t_pos_offset - MAX_SCAN_POINT_NUM; + scanStartPos = m_reg.t_reverse_scan_pos_offset; } move_to_block(scanStartPos); @@ -211,6 +217,10 @@ int32_t OpticalModuleV2::start_t_optical_scan(int32_t scanDirection, int32_t las m_t_laster_enable_io.setState(false); motor_release(); _close_t_amp_n5v(); + + if (scanDirection < 0) { + reverse_capture_data(); + } }); return 0; @@ -230,7 +240,7 @@ int32_t OpticalModuleV2::start_f_optical_scan(int32_t scanDirection, int32_t las scanStartPos = m_reg.f_pos_offset; } else { intervalStep = m_reg.scan_step_interval; - scanStartPos = m_reg.f_pos_offset - MAX_SCAN_POINT_NUM; + scanStartPos = m_reg.f_reverse_scan_pos_offset; } move_to_block(scanStartPos); @@ -275,6 +285,9 @@ int32_t OpticalModuleV2::start_f_optical_scan(int32_t scanDirection, int32_t las } motor_release(); a8000_optical_close_laser(kf_optical); + if (scanDirection < 0) { + reverse_capture_data(); + } }); // adc_capture_buf[0] @@ -563,4 +576,20 @@ int32_t OpticalModuleV2::a8k_opt_v2_f_readVal(int32_t* lasteradc, int32_t* scana *lasteradc = adcval; ZLOGI(TAG, "a8k_opt_v2_f_readVal %d %d", *lasteradc, *scanadc); return 0; -} \ No newline at end of file +} +int32_t OpticalModuleV2::reverse_capture_data() { + // adc_capture_buf + // adc_capture_point_num + // 反向adc_capture_buf中的数据 + + for (int32_t i = 0; i < adc_capture_point_num / 2; i++) { + int32_t temp = adc_capture_buf[i]; + adc_capture_buf[i] = adc_capture_buf[adc_capture_point_num - i]; + adc_capture_buf[adc_capture_point_num - i] = temp; + } + + // for (int32_t i = 0; i < adc_capture_point_num; i++) { + // adc_capture_buf_tmp_buf[i] = adc_capture_buf[adc_capture_point_num - i]; + // } + // memcpy(adc_capture_buf, adc_capture_buf_tmp_buf, adc_capture_point_num * sizeof(int16_t)); +} diff --git a/usrc/subboards/subboard90_optical_module/optical_module_v2.hpp b/usrc/subboards/subboard90_optical_module/optical_module_v2.hpp index 583542f..4a06d8b 100644 --- a/usrc/subboards/subboard90_optical_module/optical_module_v2.hpp +++ b/usrc/subboards/subboard90_optical_module/optical_module_v2.hpp @@ -42,6 +42,8 @@ class OpticalModuleV2 : public ZIModule, public ZIA8000OpticalModule { typedef struct { int32_t t_pos_offset; int32_t f_pos_offset; + int32_t t_reverse_scan_pos_offset; + int32_t f_reverse_scan_pos_offset; int32_t scan_step_interval; int32_t scan_pointnum; } reg_table_t; @@ -78,7 +80,7 @@ class OpticalModuleV2 : public ZIModule, public ZIA8000OpticalModule { ZThread m_thread; - int16_t adc_capture_buf[4096] = {0}; + int16_t adc_capture_buf[2000] = {0}; int32_t adc_capture_point_num = 0; int32_t f_adc_cache[20]; @@ -159,31 +161,33 @@ class OpticalModuleV2 : public ZIModule, public ZIA8000OpticalModule { int32_t a8000_optical_set_scan_amp_gain(int32_t type, int32_t gain); int32_t a8000_optical_read_laster_adc_val(int32_t type, int32_t* adcval); int32_t a8000_optical_read_scanner_adc_val(int32_t type, int32_t* adcval); + + int32_t reverse_capture_data(); }; } // namespace iflytop /** - * @brief - * - * - * - * + * @brief + * + * + * + * * F光学: * 发射管增益0最大,255最小,最大和最小大概2倍关系 * 接收管数值越大,放大倍数越大 - * + * * T光学: - * - * - * + * + * + * * 光学步长: * 0.0127mm * 总扫描区长度 * 15.24->1200步 (PS:板卡反应区长度15.90,但如果去掉底部纸板的黑色块,刚好15.24) - * - * + * + * * 1. 推杆电机将板夹推到49位置为板夹扫描位 * 此时T光学电机起始步:4005 - 331 * 此时F光学电机起始步:2860 - 331 - * + * */ \ No newline at end of file