Browse Source

v1015| 光学模组支持barcode扫描

master
zhaohe 4 months ago
parent
commit
23ed139b2f
  1. 2
      a8000_protocol
  2. 10
      sdk/components/zcancmder/zcan_protocol_parser.cpp
  3. 1
      sdk/components/zcancmder/zcan_protocol_parser.hpp
  4. 85
      usrc/subboards/subboard90_optical_module/optical_module_v2.cpp
  5. 30
      usrc/subboards/subboard90_optical_module/optical_module_v2.hpp
  6. 2
      usrc/version.h

2
a8000_protocol

@ -1 +1 @@
Subproject commit ad9e845df37276be1f32322dace4c35790bed570
Subproject commit 8f879b4d76b81dc8bb3c7179a9aa3b126d70164b

10
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

1
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

85
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);

30
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);

2
usrc/version.h

@ -1,2 +1,2 @@
#pragma once
#define PC_VERSION 1014
#define PC_VERSION 1015
Loading…
Cancel
Save