From b520bb23b95c32ad920a0e5619a7b704eb9ae58a Mon Sep 17 00:00:00 2001 From: zhaohe Date: Mon, 24 Jun 2024 20:48:05 +0800 Subject: [PATCH] update --- sdk | 2 +- .../plate_code_scaner_module.cpp | 54 ++++++++++++++-------- 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/sdk b/sdk index 453c09f..7ab0d4a 160000 --- a/sdk +++ b/sdk @@ -1 +1 @@ -Subproject commit 453c09f80bc5f51b5285d9f8b12df86c973a3515 +Subproject commit 7ab0d4ae00c6053d0a6aa35b1fa8fd26d027cfd1 diff --git a/usrc/subboards/subboard20_plate_clamp_case/plate_code_scaner_module.cpp b/usrc/subboards/subboard20_plate_clamp_case/plate_code_scaner_module.cpp index 75b1930..599809f 100644 --- a/usrc/subboards/subboard20_plate_clamp_case/plate_code_scaner_module.cpp +++ b/usrc/subboards/subboard20_plate_clamp_case/plate_code_scaner_module.cpp @@ -10,7 +10,7 @@ using namespace std; #define ONE_BIT_WIDTH 12 // 12*.0.1mm #define BIT_NUM 15 -#define MAX_POINT (12 * 15 + 2) // 最多12*15+2个点,多扫描的两个点用于对齐使用 +#define MAX_POINT (12 * 15 + 2 * 12 + 1) // 最多12*15+2个点,多扫描的两个点用于对齐使用 #define TAG "PlateCodeScaner" #define LOGI(fmt, ...) ZLOGI(TAG, fmt, ##__VA_ARGS__) @@ -94,16 +94,32 @@ void PlateCodeScanerModule::initialize(int32_t moduleid, hardware_config_t* hard adc_capture_buf = (int16_t*)calloc(2, MAX_POINT); ZASSERT(adc_capture_buf); - m_reg.laster_intensity = 1; - m_reg.scan_gain = 10; + m_reg.laster_intensity = 10; + m_reg.scan_gain = 1; + m_reg.scan_velocity = 500; + m_reg.scan_start_pos = 0; + m_reg.final_stop_pos = 0; + m_reg.code_judgment_threshold = 0; + m_reg.item = 0; + m_reg.lot = 0; + m_reg.rawcode = 0; + m_reg.code_legal = -1; m_thread.init("PlateCodeScanerModule", 1024, osPriorityNormal); } +#define PROCESS_REG_CFG(cfg) PROCESS_REG(kreg_plate_code_scaner_##cfg, /* */ REG_GET(m_reg.cfg), REG_SET(m_reg.cfg)) + int32_t PlateCodeScanerModule::module_xxx_reg(int32_t param_id, bool read, int32_t& val) { switch (param_id) { - PROCESS_REG(kreg_plate_code_scaner_laster_intensity, REG_GET(m_reg.laster_intensity), REG_SET(m_reg.laster_intensity)); - PROCESS_REG(kreg_plate_code_scaner_scan_gain, REG_GET(m_reg.scan_gain), REG_SET(m_reg.scan_gain)); - // PROCESS_REG(kreg_plate_code_scaner_scan_step_interval, REG_GET(m_reg.scan_step_interval), REG_SET(m_reg.scan_step_interval)); - // PROCESS_REG(kreg_plate_code_scaner_scan_point_num, REG_GET(m_reg.scan_point_num), REG_SET(m_reg.scan_point_num)); + PROCESS_REG_CFG(laster_intensity); + PROCESS_REG_CFG(scan_gain); + PROCESS_REG_CFG(scan_velocity); + PROCESS_REG_CFG(scan_start_pos); + PROCESS_REG_CFG(final_stop_pos); + PROCESS_REG_CFG(code_judgment_threshold); + PROCESS_REG_CFG(item); + PROCESS_REG_CFG(lot); + PROCESS_REG_CFG(rawcode); + PROCESS_REG_CFG(code_legal); default: return err::kmodule_not_find_reg; break; @@ -162,7 +178,7 @@ int32_t PlateCodeScanerModule::plate_code_scaner_push_card_and_scan(int32_t fina _motor->moveTo(targetpos, m_reg.scan_velocity); reset_capture_buf(); - chip_critical_enter(); + // chip_critical_enter(); while (true) { if (m_thread.getExitFlag()) break; if (_motor->isReachTarget()) break; @@ -172,8 +188,9 @@ int32_t PlateCodeScanerModule::plate_code_scaner_push_card_and_scan(int32_t fina int16_t adcv = read_adc_val(); int32_t dpos = abs(pos - m_reg.scan_start_pos); push_one_point(dpos, adcv); + // osDelay(1); } - chip_critical_exit(); + // chip_critical_exit(); /*********************************************************************************************************************** * 移动到扫码结束位置 * @@ -283,20 +300,19 @@ bool PlateCodeScanerModule::check_when_run() { return true; } int32_t PlateCodeScanerModule::plate_code_scaner_read_result(int32_t packetIndex, uint8_t* data, int32_t* len) { // 每次传10个点 - int32_t start = packetIndex * RAW_SECTION_SIZE; - int32_t end = start + RAW_SECTION_SIZE; - if (end > adc_capture_point_num) { - end = adc_capture_point_num; + int32_t start = packetIndex * RAW_SECTION_SIZE; + int32_t numpoint = RAW_SECTION_SIZE; + if (start + numpoint > adc_capture_point_num) { + numpoint = adc_capture_point_num - start; } - int32_t size = end - start; - if (size <= 0) { + if (numpoint <= 0) { *len = 0; return 0; } - memcpy(data, adc_capture_buf + start, size * 2); - *len = size * 2; + memcpy(data, adc_capture_buf + start, numpoint * 2); + *len = numpoint * 2; return 0; } @@ -338,6 +354,7 @@ void PlateCodeScanerModule::laser_set_intensity(float intensity) { int32_t potentiometer_val = 0; potentiometer_val = intensity / 100.0 * 255.0; ZLOGI(TAG, "laser_set_intensity: %.2f(potentiometer_val: %d)", intensity, potentiometer_val); + m_t_optical_amp_mcp41_ohm.setPotentiometerValue_0(potentiometer_val); } int32_t PlateCodeScanerModule::plate_code_scaner_close_laser() { @@ -348,12 +365,11 @@ int32_t PlateCodeScanerModule::plate_code_scaner_close_laser() { int32_t PlateCodeScanerModule::read_adc_val() { int32_t val = 0; - t_result_adc.get_adc_value(val); #define CAPTURE_NUM 3 int32_t cache[CAPTURE_NUM]; for (int i = 0; i < CAPTURE_NUM; i++) { - f_result_adc.get_adc_value(cache[i]); + t_result_adc.get_adc_value(cache[i]); } // 先排序,取中间10个数的中值