From 23ed139b2f3f8cf2c094a4432fb0d613979d1556 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Thu, 10 Apr 2025 21:00:07 +0800 Subject: [PATCH] =?UTF-8?q?v1015|=20=E5=85=89=E5=AD=A6=E6=A8=A1=E7=BB=84?= =?UTF-8?q?=E6=94=AF=E6=8C=81barcode=E6=89=AB=E6=8F=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- a8000_protocol | 2 +- sdk/components/zcancmder/zcan_protocol_parser.cpp | 10 ++- sdk/components/zcancmder/zcan_protocol_parser.hpp | 1 + .../optical_module_v2.cpp | 85 ++++++++++++++++++++++ .../optical_module_v2.hpp | 30 +++++--- usrc/version.h | 2 +- 6 files changed, 115 insertions(+), 15 deletions(-) diff --git a/a8000_protocol b/a8000_protocol index ad9e845..8f879b4 160000 --- a/a8000_protocol +++ b/a8000_protocol @@ -1 +1 @@ -Subproject commit ad9e845df37276be1f32322dace4c35790bed570 +Subproject commit 8f879b4d76b81dc8bb3c7179a9aa3b126d70164b diff --git a/sdk/components/zcancmder/zcan_protocol_parser.cpp b/sdk/components/zcancmder/zcan_protocol_parser.cpp index cbd230c..b29abb5 100644 --- a/sdk/components/zcancmder/zcan_protocol_parser.cpp +++ b/sdk/components/zcancmder/zcan_protocol_parser.cpp @@ -124,7 +124,8 @@ void ZCanProtocolParser::initialize(ZCanReceiver* cancmder) { REGFN(a8k_opt_v2_f_open_laster); REGFN(a8k_opt_v2_f_close_laster); REGFN(a8k_opt_v2_f_readVal); - + REGFN(a8k_opt_v2_barcode_start_scan); + #endif REGFN(a8000_idcard_reader_read_raw); @@ -698,6 +699,11 @@ int32_t ZCanProtocolParser::a8k_opt_v2_f_start_scan(cmdcontxt_t* cxt) { CHECK_AND_GET_MODULE(3); return module->a8k_opt_v2_f_start_scan(cxt->params[0], cxt->params[1], cxt->params[2]); } +int32_t ZCanProtocolParser::a8k_opt_v2_barcode_start_scan(cmdcontxt_t* cxt) { + CHECK_AND_GET_MODULE(5); + return module->a8k_opt_v2_barcode_start_scan(cxt->params[0], cxt->params[1], cxt->params[2], cxt->params[3], cxt->params[4]); +} + int32_t ZCanProtocolParser::a8k_opt_v2_t_open_laster(cmdcontxt_t* cxt) { CHECK_AND_GET_MODULE(2); return module->a8k_opt_v2_t_open_laster(cxt->params[0], cxt->params[1]); @@ -727,6 +733,8 @@ int32_t ZCanProtocolParser::a8k_opt_v2_f_readVal(cmdcontxt_t* cxt) { return module->a8k_opt_v2_f_readVal(&ack[0], &ack[1]); } + + #undef MODULE_CLASS #define MODULE_CLASS EEPROMService diff --git a/sdk/components/zcancmder/zcan_protocol_parser.hpp b/sdk/components/zcancmder/zcan_protocol_parser.hpp index 8369767..0fe81fc 100644 --- a/sdk/components/zcancmder/zcan_protocol_parser.hpp +++ b/sdk/components/zcancmder/zcan_protocol_parser.hpp @@ -144,6 +144,7 @@ class ZCanProtocolParser : public IZCanReceiverListener { CMDFN(a8k_opt_v2_f_open_laster); CMDFN(a8k_opt_v2_f_close_laster); CMDFN(a8k_opt_v2_f_readVal); + CMDFN(a8k_opt_v2_barcode_start_scan); #endif diff --git a/usrc/subboards/subboard90_optical_module/optical_module_v2.cpp b/usrc/subboards/subboard90_optical_module/optical_module_v2.cpp index 3f73f60..4a49583 100644 --- a/usrc/subboards/subboard90_optical_module/optical_module_v2.cpp +++ b/usrc/subboards/subboard90_optical_module/optical_module_v2.cpp @@ -77,6 +77,20 @@ void OpticalModuleV2::initialize(int32_t moduleid, hardware_config_t* hardwarecf ZLOGI(TAG, "t_detector max gain : %f", t_detector_raw_gain_to_gain(255)); ZLOGI(TAG, "t_detector min gain : %f", t_detector_raw_gain_to_gain(1)); + // // 选通ADC反馈通道 + // select_f_channel(0); + // _close_t_amp_n5v(); + // a8000_optical_open_laser(kf_optical); + + // while (true) + // { + + // int32_t adcval = 0; + // f_read_one_point(0, 0, adcval); + // ZLOGI(TAG, "f_read_one_point %d", adcval); + // osDelay(100); + // } + m_thread.init("optical_module", 1024); } @@ -292,6 +306,75 @@ int32_t OpticalModuleV2::start_f_optical_scan(int32_t scanDirection, int32_t las return 0; } +int32_t OpticalModuleV2::start_barcode_scan(int32_t lasterGain, int32_t scanGain, int32_t startpos, int32_t intervalstep, int32_t scanNum) { + if (scanNum >= OPTICAL_MODULE_MAX_SCAN_POINT_NUM) { + ZLOGE(TAG, "scanNum %d is too big", scanNum); + return err::kparam_out_of_range; + } + + m_thread.stop(); + m_thread.start([this, lasterGain, scanGain, startpos, intervalstep, scanNum]() { + ZLOGI(TAG, "--------------start_barcode_scan-----------"); + ZLOGI(TAG, "lasterGain : %d", lasterGain); + ZLOGI(TAG, "scanGain : %d", scanGain); + ZLOGI(TAG, "startpos : %d", startpos); + ZLOGI(TAG, "intervalstep : %d", intervalstep); + ZLOGI(TAG, "scanNum : %d", scanNum); + + osDelay(50); + + move_to_block(startpos); + + // 设置激光亮度增益 + a8000_optical_set_laster_gain(kf_optical, lasterGain); + // 设置接收器增益 + a8000_optical_set_scan_amp_gain(kf_optical, scanGain); + // 选通ADC反馈通道 + select_f_channel(3); + // 打开负5v电源 + _close_t_amp_n5v(); + // 打开激光器 + a8000_optical_open_laser(kf_optical); + + osDelay(10); + + int step = 0; + int pointnum = 0; + int32_t adcval = 0; + adc_capture_point_num = 0; + int32_t scanDirection = intervalstep < 0 ? 1 : 0; // 与电机运行相反的方向为正 + + motor_prepare(); + while (true) { + // 移动到第一个点 + move_to_block(startpos + step); + f_read_one_point(lasterGain, scanGain, adcval); + + step += intervalstep; + pointnum++; + adc_capture_point_num++; + adc_capture_buf[adc_capture_point_num] = adcval; + + if (pointnum >= scanNum) { + break; + } + + if (m_thread.getExitFlag()) { + break; + } + osDelay(1); + } + motor_release(); + a8000_optical_close_laser(kf_optical); + if (scanDirection < 0) { + reverse_capture_data(); + } + }); + + // adc_capture_buf[0] + return 0; +} + int32_t OpticalModuleV2::dumpresult() { for (int32_t i = 0; i < adc_capture_point_num; i++) { printf("%d,%d", i, adc_capture_buf[i]); @@ -528,6 +611,8 @@ int32_t OpticalModuleV2::move_to_block(int32_t pos) { int32_t OpticalModuleV2::a8k_opt_v2_t_start_scan(int32_t scanDirection, int32_t lasterGain, int32_t scanGain) { return start_t_optical_scan(scanDirection, lasterGain, scanGain); } int32_t OpticalModuleV2::a8k_opt_v2_f_start_scan(int32_t scanDirection, int32_t lasterGain, int32_t scanGain) { return start_f_optical_scan(scanDirection, lasterGain, scanGain); } +int32_t OpticalModuleV2::a8k_opt_v2_barcode_start_scan(int32_t lasterGain, int32_t scanGain, int32_t startpos, int32_t intervalstep, int32_t scanNum) { return start_barcode_scan(lasterGain, scanGain, startpos, intervalstep, scanNum); } + int32_t OpticalModuleV2::a8k_opt_v2_t_open_laster(int32_t lasterGain, int32_t scanGain) { a8000_optical_open_laser(kt_optical); a8000_optical_set_laster_gain(kt_optical, lasterGain); diff --git a/usrc/subboards/subboard90_optical_module/optical_module_v2.hpp b/usrc/subboards/subboard90_optical_module/optical_module_v2.hpp index 7a38290..9b7cb40 100644 --- a/usrc/subboards/subboard90_optical_module/optical_module_v2.hpp +++ b/usrc/subboards/subboard90_optical_module/optical_module_v2.hpp @@ -4,13 +4,15 @@ // #include "a8000_protocol\protocol.hpp" #include "sdk\chip\api\zi_adc.hpp" +#include "sdk\components\api\zi_module.hpp" #include "sdk\components\hardware\adc\z_simple_adc.hpp" #include "sdk\components\step_motor_ctrl_module\step_motor_ctrl_module.hpp" -#include "sdk\components\api\zi_module.hpp" namespace iflytop { using namespace std; +#define OPTICAL_MODULE_MAX_SCAN_POINT_NUM 2000 + class OpticalModuleV2 : public ZIModule { ENABLE_MODULE(OpticalModuleV2, ka8000_optical_module, PC_VERSION); typedef enum { @@ -57,7 +59,7 @@ class OpticalModuleV2 : public ZIModule { private: int32_t m_id = 0; hardware_config_t m_hardwarecfg; - reg_table_t m_reg = {0}; + reg_table_t m_reg = {0}; reg_table_t m_default_reg = {0}; MCP41XXX m_t_optical_amp_mcp41_ohm; @@ -100,7 +102,7 @@ class OpticalModuleV2 : public ZIModule { int32_t module_action_ack2; public: - virtual ~OpticalModuleV2(){}; + virtual ~OpticalModuleV2() {}; void initialize(int32_t moduleid, hardware_config_t* hardwarecfg); @@ -121,21 +123,25 @@ class OpticalModuleV2 : public ZIModule { * opt * ***********************************************************************************************************************/ - virtual int32_t a8k_opt_v2_t_start_scan(int32_t scanDirection, int32_t lasterGain, int32_t scanGain) ; - virtual int32_t a8k_opt_v2_f_start_scan(int32_t scanDirection, int32_t lasterGain, int32_t scanGain) ; - virtual int32_t a8000_optical_read_raw(int32_t index, uint8_t* data, int32_t* len) ; + virtual int32_t a8k_opt_v2_t_start_scan(int32_t scanDirection, int32_t lasterGain, int32_t scanGain); + virtual int32_t a8k_opt_v2_f_start_scan(int32_t scanDirection, int32_t lasterGain, int32_t scanGain); + virtual int32_t a8k_opt_v2_barcode_start_scan(int32_t lasterGain, int32_t scanGain, int32_t startpos, int32_t intervalstep, int32_t scanNum); + + + virtual int32_t a8000_optical_read_raw(int32_t index, uint8_t* data, int32_t* len); - virtual int32_t a8k_opt_v2_t_open_laster(int32_t lasterGain, int32_t scanGain) ; - virtual int32_t a8k_opt_v2_t_close_laster() ; - virtual int32_t a8k_opt_v2_t_readVal(int32_t* lasteradc, int32_t* scanadc) ; + virtual int32_t a8k_opt_v2_t_open_laster(int32_t lasterGain, int32_t scanGain); + virtual int32_t a8k_opt_v2_t_close_laster(); + virtual int32_t a8k_opt_v2_t_readVal(int32_t* lasteradc, int32_t* scanadc); - virtual int32_t a8k_opt_v2_f_open_laster(int32_t lasterGain, int32_t scanGain) ; - virtual int32_t a8k_opt_v2_f_close_laster() ; - virtual int32_t a8k_opt_v2_f_readVal(int32_t* lasteradc, int32_t* scanadc) ; + virtual int32_t a8k_opt_v2_f_open_laster(int32_t lasterGain, int32_t scanGain); + virtual int32_t a8k_opt_v2_f_close_laster(); + virtual int32_t a8k_opt_v2_f_readVal(int32_t* lasteradc, int32_t* scanadc); private: int32_t start_t_optical_scan(int32_t scanDirection, int32_t lasterGain, int32_t scanGain); int32_t start_f_optical_scan(int32_t scanDirection, int32_t lasterGain, int32_t scanGain); + int32_t start_barcode_scan(int32_t lasterGain, int32_t scanGain, int32_t startpos, int32_t intervalstep, int32_t scanNum); int32_t f_read_one_point(int32_t lastergain, int32_t ampgain, int32_t& adcval); int32_t t_read_one_point(int32_t& adcval); diff --git a/usrc/version.h b/usrc/version.h index 54bb83d..8276cdc 100644 --- a/usrc/version.h +++ b/usrc/version.h @@ -1,2 +1,2 @@ #pragma once -#define PC_VERSION 1014 +#define PC_VERSION 1015