|
|
@ -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个数的中值
|
|
|
|