From 82a79795b848356d14419469aaa924a800057f7e Mon Sep 17 00:00:00 2001 From: zhaohe Date: Thu, 2 Nov 2023 19:43:57 +0800 Subject: [PATCH] update --- api/api.hpp | 4 +++- api/errorcode.hpp | 1 + api/reg_index.hpp | 19 ++++++++++++++++++ api/zi_a8000_optical_module.hpp | 44 +++++++++++++++++++++++++++++++++++++++++ cmdid.hpp | 17 ++++++++++++++-- protocol_parser.cpp | 18 ++++++++++++++++- 6 files changed, 99 insertions(+), 4 deletions(-) create mode 100644 api/zi_a8000_optical_module.hpp diff --git a/api/api.hpp b/api/api.hpp index f81a369..c9e517f 100644 --- a/api/api.hpp +++ b/api/api.hpp @@ -27,4 +27,6 @@ // #include "zi_pipette_ctrl_module.hpp" // -#include "zi_event_bus.hpp" \ No newline at end of file +#include "zi_event_bus.hpp" +// +#include "zi_a8000_optical_module.hpp" \ No newline at end of file diff --git a/api/errorcode.hpp b/api/errorcode.hpp index 5e804c1..a2b2d3f 100644 --- a/api/errorcode.hpp +++ b/api/errorcode.hpp @@ -98,6 +98,7 @@ typedef enum { kmicro_noErr = ERROR_CODE(500, 0), // kmicro_uartSendFail = ERROR_CODE(500, 1), // kmicro_uartRecvFail = ERROR_CODE(500, 2), // + kmicro_adcRecvFail = ERROR_CODE(500, 3), // } error_t; diff --git a/api/reg_index.hpp b/api/reg_index.hpp index f7cd455..1d1e3af 100644 --- a/api/reg_index.hpp +++ b/api/reg_index.hpp @@ -267,6 +267,25 @@ typedef enum { kreg_self_reflecting_laser_sensor_sample_interval_ms = REG_INDEX(41, 0, 2), // 采样率 kreg_self_reflecting_laser_sensor_num_samples = REG_INDEX(41, 0, 3), // 采样点数 + /******************************************************************************* + * smartADC * + *******************************************************************************/ + // scan action + kreg_boditech_optical_scan_type = REG_INDEX(42, 0, 0), // 0 t光学,1 f光学 + kreg_boditech_optical_scan_start_pos = REG_INDEX(42, 0, 1), + kreg_boditech_optical_scan_direction = REG_INDEX(42, 0, 2), + kreg_boditech_optical_scan_step_interval = REG_INDEX(42, 0, 3), + kreg_boditech_optical_scan_pointnum = REG_INDEX(42, 0, 4), + // main(f光学) + kreg_boditech_optical_main_amp_gain = REG_INDEX(42, 20, 0), + kreg_boditech_optical_main_laser_gain = REG_INDEX(42, 20, 1), + // trf(t光学) + kreg_boditech_optical_trf_amp_gain = REG_INDEX(42, 40, 0), + kreg_boditech_optical_trf_uvled_gain = REG_INDEX(42, 40, 1), + kreg_boditech_optical_trf_uvled_on_duration_us = REG_INDEX(42, 40, 2), + kreg_boditech_optical_trf_uvled_off_duration_us = REG_INDEX(42, 40, 3), + kreg_boditech_optical_trf_scan_delay_us = REG_INDEX(42, 40, 4), + kreg_boditech_optical_trf_scan_duration_us = REG_INDEX(42, 40, 5), } reg_index_t; } // namespace iflytop diff --git a/api/zi_a8000_optical_module.hpp b/api/zi_a8000_optical_module.hpp new file mode 100644 index 0000000..2ed84ae --- /dev/null +++ b/api/zi_a8000_optical_module.hpp @@ -0,0 +1,44 @@ +#pragma once +#include + +#include + +#include "errorcode.hpp" + +namespace iflytop { +using namespace std; +class ZIA8000OpticalModule { + public: + typedef enum { + kf_optical = 0, + kt_optical = 1, + } optical_type_t; + + public: + virtual ~ZIA8000OpticalModule() = 0; + + /******************************************************************************* + * TEST * + *******************************************************************************/ + /** + * @概述: + * 1. 下面方法属于单步测试采样的方法,用于调试。一般手动移动光学模组,然后利用下面方法进行测试 + * 2. 正式逻辑不使用下面逻辑 + */ + + virtual int32_t a8000_optical_open_laser(int32_t type) = 0; + virtual int32_t a8000_optical_close_laser(int32_t type) = 0; + virtual int32_t a8000_optical_set_laster_gain(int32_t type, int32_t gain) = 0; + virtual int32_t a8000_optical_set_scan_amp_gain(int32_t type, int32_t gain) = 0; + virtual int32_t a8000_optical_read_scanner_adc_val(int32_t type, int32_t* adcval) = 0; + virtual int32_t a8000_optical_read_laster_adc_val(int32_t type, int32_t* adcval) = 0; + /** + * @brief 打开闪光灯读取当前这一点的采样信息 + * + * @param type + * @param adcval + * @return int32_t + */ + virtual int32_t a8000_optical_scan_current_point_amp_adc_val(int32_t type, int32_t lastergain, int32_t ampgain, int32_t* laster_fb_val, int32_t* adcval) = 0; +}; +} // namespace iflytop \ No newline at end of file diff --git a/cmdid.hpp b/cmdid.hpp index 95c5114..8cd0370 100644 --- a/cmdid.hpp +++ b/cmdid.hpp @@ -112,11 +112,24 @@ typedef enum { kpipette_ctrl_put_tip = CMDID(5, 2), // para:{}, ack:{} kpipette_ctrl_move_to_ul = CMDID(5, 3), // para:{4}, ack:{} - #if 0 - + virtual int32_t a8000_optical_open_laser(int32_t type) = 0; + virtual int32_t a8000_optical_close_laser(int32_t type) = 0; + virtual int32_t a8000_optical_set_laster_gain(int32_t type, int32_t gain) = 0; + virtual int32_t a8000_optical_set_scan_amp_gain(int32_t type, int32_t gain) = 0; + virtual int32_t a8000_optical_read_scanner_adc_val(int32_t type, int32_t* adcval) = 0; + virtual int32_t a8000_optical_read_laster_adc_val(int32_t type, int32_t* adcval) = 0; + virtual int32_t a8000_optical_scan_current_point_amp_adc_val(int32_t type, int32_t lastergain, int32_t ampgain, int32_t* laster_fb_val, int32_t* adcval) = 0; #endif + ka8000_optical_open_laser = CMDID(6, 1), // para:{4}, ack:{} + ka8000_optical_close_laser = CMDID(6, 2), // para:{4}, ack:{} + ka8000_optical_set_laster_gain = CMDID(6, 3), // para:{4,4}, ack:{} + ka8000_optical_set_scan_amp_gain = CMDID(6, 4), // para:{4,4}, ack:{} + ka8000_optical_read_scanner_adc_val = CMDID(6, 5), // para:{4}, ack:{4} + ka8000_optical_read_laster_adc_val = CMDID(6, 6), // para:{4}, ack:{4} + ka8000_optical_scan_current_point_amp_adc_val = CMDID(6, 7), // para:{4,4,4,4}, ack:{4,4} + } cmdid_t; } // namespace zcr diff --git a/protocol_parser.cpp b/protocol_parser.cpp index 8ce3080..2226a5e 100644 --- a/protocol_parser.cpp +++ b/protocol_parser.cpp @@ -260,5 +260,21 @@ void ZIProtocolParser::onRceivePacket(zcr_cmd_header_t* rxcmd, uint8_t* data, in PROCESS_PACKET_00(kpipette_ctrl_init_device, ZIPipetteCtrlModule, pipette_ctrl_init_device); PROCESS_PACKET_00(kpipette_ctrl_put_tip, ZIPipetteCtrlModule, pipette_ctrl_put_tip); PROCESS_PACKET_10(kpipette_ctrl_move_to_ul, ZIPipetteCtrlModule, pipette_ctrl_move_to_ul); - + +#if 0 + virtual int32_t a8000_optical_open_laser(int32_t type) = 0; + virtual int32_t a8000_optical_close_laser(int32_t type) = 0; + virtual int32_t a8000_optical_set_laster_gain(int32_t type, int32_t gain) = 0; + virtual int32_t a8000_optical_set_scan_amp_gain(int32_t type, int32_t gain) = 0; + virtual int32_t a8000_optical_read_scanner_adc_val(int32_t type, int32_t* adcval) = 0; + virtual int32_t a8000_optical_read_laster_adc_val(int32_t type, int32_t* adcval) = 0; + virtual int32_t a8000_optical_scan_current_point_amp_adc_val(int32_t type, int32_t lastergain, int32_t ampgain, int32_t* laster_fb_val, int32_t* adcval) = 0; +#endif + PROCESS_PACKET_10(ka8000_optical_open_laser, ZIA8000OpticalModule, a8000_optical_open_laser); + PROCESS_PACKET_10(ka8000_optical_close_laser, ZIA8000OpticalModule, a8000_optical_close_laser); + PROCESS_PACKET_20(ka8000_optical_set_laster_gain, ZIA8000OpticalModule, a8000_optical_set_laster_gain); + PROCESS_PACKET_20(ka8000_optical_set_scan_amp_gain, ZIA8000OpticalModule, a8000_optical_set_scan_amp_gain); + PROCESS_PACKET_11(ka8000_optical_read_scanner_adc_val, ZIA8000OpticalModule, a8000_optical_read_scanner_adc_val); + PROCESS_PACKET_11(ka8000_optical_read_laster_adc_val, ZIA8000OpticalModule, a8000_optical_read_laster_adc_val); + PROCESS_PACKET_32(ka8000_optical_scan_current_point_amp_adc_val, ZIA8000OpticalModule, a8000_optical_scan_current_point_amp_adc_val); } \ No newline at end of file