From 86281b73f485c01783197227b58d0a19699c7198 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sat, 22 Mar 2025 11:08:55 +0800 Subject: [PATCH] update --- api/api.hpp | 7 -- api/apibasic/basic.hpp | 12 -- api/apibasic/cmdid.cpp | 156 -------------------------- api/apibasic/cmdid.hpp | 158 -------------------------- api/apibasic/errorcode.cpp | 108 ------------------ api/apibasic/errorcode.hpp | 112 ------------------- api/apibasic/module_type_index.hpp | 18 --- api/apibasic/packet_interface.hpp | 49 -------- api/apibasic/reg_index.cpp | 203 --------------------------------- api/apibasic/reg_index.hpp | 224 ------------------------------------- api/zi_module.cpp | 96 ---------------- api/zi_module.hpp | 88 --------------- api/zi_motor.hpp | 123 -------------------- protocol.hpp | 7 +- protocol/cmdid.cpp | 156 ++++++++++++++++++++++++++ protocol/cmdid.hpp | 158 ++++++++++++++++++++++++++ protocol/errorcode.cpp | 108 ++++++++++++++++++ protocol/errorcode.hpp | 112 +++++++++++++++++++ protocol/packet.hpp | 53 +++++++++ protocol/reg_index.cpp | 203 +++++++++++++++++++++++++++++++++ protocol/reg_index.hpp | 224 +++++++++++++++++++++++++++++++++++++ protocol/zmotor_struct.hpp | 121 ++++++++++++++++++++ 22 files changed, 1141 insertions(+), 1355 deletions(-) delete mode 100644 api/api.hpp delete mode 100644 api/apibasic/basic.hpp delete mode 100644 api/apibasic/cmdid.cpp delete mode 100644 api/apibasic/cmdid.hpp delete mode 100644 api/apibasic/errorcode.cpp delete mode 100644 api/apibasic/errorcode.hpp delete mode 100644 api/apibasic/module_type_index.hpp delete mode 100644 api/apibasic/packet_interface.hpp delete mode 100644 api/apibasic/reg_index.cpp delete mode 100644 api/apibasic/reg_index.hpp delete mode 100644 api/zi_module.cpp delete mode 100644 api/zi_module.hpp delete mode 100644 api/zi_motor.hpp create mode 100644 protocol/cmdid.cpp create mode 100644 protocol/cmdid.hpp create mode 100644 protocol/errorcode.cpp create mode 100644 protocol/errorcode.hpp create mode 100644 protocol/packet.hpp create mode 100644 protocol/reg_index.cpp create mode 100644 protocol/reg_index.hpp create mode 100644 protocol/zmotor_struct.hpp diff --git a/api/api.hpp b/api/api.hpp deleted file mode 100644 index 80ea86e..0000000 --- a/api/api.hpp +++ /dev/null @@ -1,7 +0,0 @@ -#pragma once -#include "apibasic/basic.hpp" -// -#include "zi_module.hpp" -// -#include "zi_motor.hpp" -// \ No newline at end of file diff --git a/api/apibasic/basic.hpp b/api/apibasic/basic.hpp deleted file mode 100644 index ad23287..0000000 --- a/api/apibasic/basic.hpp +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once - -#include "cmdid.hpp" -// -#include "errorcode.hpp" -// -#include "packet_interface.hpp" -// -#include "module_type_index.hpp" -// -#include "reg_index.hpp" -// diff --git a/api/apibasic/cmdid.cpp b/api/apibasic/cmdid.cpp deleted file mode 100644 index 05f32ce..0000000 --- a/api/apibasic/cmdid.cpp +++ /dev/null @@ -1,156 +0,0 @@ -#include "cmdid.hpp" - -#include -namespace iflytop { -namespace zcr { - -#define CMD_ITERM(enum) {enum, #enum} - -static cmdinfo_t table[] = { - CMD_ITERM(kboard_reset), - - CMD_ITERM(kevent_bus_reg_change_report), - - CMD_ITERM(kmodule_ping), - CMD_ITERM(kmodule_get_status), - CMD_ITERM(kmodule_stop), - CMD_ITERM(kmodule_set_reg), - CMD_ITERM(kmodule_get_reg), - CMD_ITERM(kmodule_get_error), - CMD_ITERM(kmodule_clear_error), - CMD_ITERM(kmodule_active_cfg), - - CMD_ITERM(kxymotor_enable), - CMD_ITERM(kxymotor_move_by), - CMD_ITERM(kxymotor_move_to), - CMD_ITERM(kxymotor_move_to_zero), - CMD_ITERM(kxymotor_read_pos), - CMD_ITERM(kxymotor_read_inio_index_in_stm32), - CMD_ITERM(kxymotor_read_inio), - CMD_ITERM(kxymotor_set_pos), - CMD_ITERM(kxymotor_motor_move_by_direct), - CMD_ITERM(kxymotor_read_enc_direct), - - - - CMD_ITERM(ka8k_opt_v2_t_start_scan), - CMD_ITERM(ka8k_opt_v2_f_start_scan), - CMD_ITERM(ka8k_opt_v2_t_open_laster), - CMD_ITERM(ka8k_opt_v2_t_close_laster), - CMD_ITERM(ka8k_opt_v2_t_readVal), - CMD_ITERM(ka8k_opt_v2_f_open_laster), - CMD_ITERM(ka8k_opt_v2_f_close_laster), - CMD_ITERM(ka8k_opt_v2_f_readVal), - - CMD_ITERM(kstep_motor_enable), - CMD_ITERM(kstep_motor_read_pos), - CMD_ITERM(kstep_motor_easy_rotate), - CMD_ITERM(kstep_motor_easy_move_by), - CMD_ITERM(kstep_motor_easy_move_to), - CMD_ITERM(kstep_motor_easy_move_to_zero), - CMD_ITERM(kstep_motor_easy_set_current_pos), - CMD_ITERM(kstep_motor_easy_move_to_io), - CMD_ITERM(kstep_motor_stop), - CMD_ITERM(kstep_motor_active_cfg), - CMD_ITERM(kstep_motor_read_io_state), - CMD_ITERM(kstep_motor_easy_move_to_end_point), - CMD_ITERM(kstep_motor_read_tmc5130_status), - CMD_ITERM(kstep_motor_read_tmc5130_state), - CMD_ITERM(kstep_motor_read_io_index_in_stm32), - CMD_ITERM(kstep_motor_set_subdevice_reg), - CMD_ITERM(kstep_motor_get_subdevice_reg), - CMD_ITERM(kstep_motor_easy_reciprocating_motion), - CMD_ITERM(kstep_motor_easy_move_to_zero_point_quick), - - CMD_ITERM(kmini_servo_enable), - CMD_ITERM(kmini_servo_read_pos), - CMD_ITERM(kmini_servo_active_cfg), - CMD_ITERM(kmini_servo_stop), - CMD_ITERM(kmini_servo_set_mid_point), - CMD_ITERM(kmini_servo_read_io_state), - - CMD_ITERM(kmini_servo_move_to), - CMD_ITERM(kmini_servo_rotate), - CMD_ITERM(kmini_servo_rotate_with_torque), - CMD_ITERM(kmini_servo_set_cur_pos), - - CMD_ITERM(kextboard_read_inio), - CMD_ITERM(kextboard_write_outio), - CMD_ITERM(kextboard_read_muti_inio), - CMD_ITERM(kextboard_read_inio_index_in_stm32), - CMD_ITERM(kextboard_read_outio_index_in_stm32), - CMD_ITERM(kextboard_read_outio), - - CMD_ITERM(kcode_scaner_start_scan), - CMD_ITERM(kcode_scaner_stop_scan), - CMD_ITERM(kcode_scaner_result_is_ready), - CMD_ITERM(kcode_scaner_read_scaner_result), - CMD_ITERM(kcode_scaner_get_result_length), - - CMD_ITERM(kfan_controler_set_speed), - - CMD_ITERM(ktemp_controler_start_hearting), - CMD_ITERM(ktemp_controler_stop_hearting), - CMD_ITERM(ktemp_controler_set_peltier_power_level), - CMD_ITERM(ktemp_controler_set_pump_level), - CMD_ITERM(ktemp_controler_set_fan_level), - CMD_ITERM(ktemp_controler_enable_log), - - CMD_ITERM(ka8000_idcard_reader_read_raw), - CMD_ITERM(ka8000_idcard_write_raw), - CMD_ITERM(ka8000_idcard_erase), - CMD_ITERM(ka8000_idcard_earse_unlock), - CMD_ITERM(kevent_a8000_idcard_online), - CMD_ITERM(kevent_a8000_idcard_offline), - - CMD_ITERM(kplate_code_scaner_push_card_and_scan), - CMD_ITERM(kplate_code_scaner_stop_scan), - CMD_ITERM(kplate_code_scaner_read_result), - CMD_ITERM(kplate_code_scaner_read_result_point_num), - CMD_ITERM(kplate_code_scaner_read_code), - CMD_ITERM(kplate_code_scaner_adc_readraw), - CMD_ITERM(kplate_code_scaner_open_laser), - CMD_ITERM(kplate_code_scaner_close_laser), - - CMD_ITERM(kpipette_zmotor_enable), - CMD_ITERM(kpipette_zmotor_move_zero), - CMD_ITERM(kpipette_zmotor_move_to_zero_point_quick), - CMD_ITERM(kpipette_zmotor_measure_distance), - CMD_ITERM(kpipette_zmotor_read_measure_distance_result), - CMD_ITERM(kpipette_zmotor_move_by), - CMD_ITERM(kpipette_zmotor_move_to), - - CMD_ITERM(kliquid_operation_clear_params), // - CMD_ITERM(kliquid_operation_set_gun_runparams), // - CMD_ITERM(kliquid_operation_set_zmotor_runparams), // - CMD_ITERM(kliquid_operation_enable_lld_record), // - CMD_ITERM(kliquid_operation_fresh_params), // - - CMD_ITERM(kpipette_init_device), // - CMD_ITERM(kpipette_put_tip), // - CMD_ITERM(kpipette_pump_move_to), // - CMD_ITERM(kpipette_lld), // - CMD_ITERM(kpipette_aspirate), // - CMD_ITERM(kpipette_distribu), // - CMD_ITERM(kpipette_shake_up), // - CMD_ITERM(kpipette_clear_hanging_liquid), // - CMD_ITERM(kpipette_lld_is_detect_liquid), // - CMD_ITERM(kpipette_get_sensor_sample_data), // - CMD_ITERM(kpipette_get_sensor_sample_data_num), // - CMD_ITERM(kpipette_zmotor_read_zero_point_state), // - CMD_ITERM(kpipette_zmotor_read_dev_status_cache) // -}; - -const char* cmdid2str(int32_t code) { - for (int i = 0; i < sizeof(table) / sizeof(table[0]); i++) { - if (table[i].index == code) { - return table[i].fnname; - } - } - return "unknown_cmd"; -} -cmdinfo_t* cmdid_get_table() { return table; } -int cmdid_get_table_size() { return sizeof(table) / sizeof(table[0]); } - -} // namespace zcr -} // namespace iflytop \ No newline at end of file diff --git a/api/apibasic/cmdid.hpp b/api/apibasic/cmdid.hpp deleted file mode 100644 index ff4a932..0000000 --- a/api/apibasic/cmdid.hpp +++ /dev/null @@ -1,158 +0,0 @@ -#pragma once -#include - -namespace iflytop { -namespace zcr { -typedef enum { -#if 0 - - virtual int32_t board_reset() = 0; -#endif - - kboard_reset = 0x0000, //{} {} - - kevent_bus_reg_change_report = 0x0064, //{regindex,oldval,toval} - - kmodule_ping = 0x0100, //{}{} - kmodule_get_status = 0x0104, //{}{int32_t} - kmodule_stop = 0x0101, //{}{} - kmodule_set_reg = 0x0105, //(int32_t index,int32_t val)->() - kmodule_get_reg = 0x0106, //(int32_t index)->(int32_t val) - kmodule_get_error = 0x010a, // - kmodule_clear_error = 0x010b, // - kmodule_active_cfg = 0x0110, // - kxymotor_enable = 0x0301, // - kxymotor_move_by = 0x0302, // - kxymotor_move_to = 0x0303, // - kxymotor_move_to_zero = 0x0304, // - kxymotor_read_pos = 0x0306, // - kxymotor_read_inio_index_in_stm32 = 0x0307, // - kxymotor_read_inio = 0x0308, // - kxymotor_set_pos = 0x0309, // - kxymotor_motor_move_by_direct = 0x030a, // - kxymotor_read_enc_direct = 0x030b, // - - - ka8000_optical_read_raw = 0x0609, // - - ka8k_opt_v2_t_start_scan = 0x0700, //(int32_t scanDirection, int32_t lasterGain,int32_t scanGain) - ka8k_opt_v2_f_start_scan = 0x0701, //(int32_t scanDirection, int32_t lasterGain,int32_t scanGain) - ka8k_opt_v2_t_open_laster = 0x070a, //(int32_t lasterGain,int32_t scanGain) for_debug - ka8k_opt_v2_t_close_laster = 0x070b, //() for_debug - ka8k_opt_v2_t_readVal = 0x070c, //(int32_t *val0,int32_t *val1) for_debug - ka8k_opt_v2_f_open_laster = 0x070d, //(int32_t lasterGain,int32_t scanGain) for_debug - ka8k_opt_v2_f_close_laster = 0x070e, //() for_debug - ka8k_opt_v2_f_readVal = 0x070f, //(int32_t *val0,int32_t *val1) for_debug - - kstep_motor_enable = 0x0201, // - kstep_motor_read_pos = 0x020b, // - kstep_motor_easy_rotate = 0x0211, // - kstep_motor_easy_move_by = 0x0212, // - kstep_motor_easy_move_to = 0x0213, // - kstep_motor_easy_move_to_zero = 0x0214, // - kstep_motor_easy_set_current_pos = 0x0215, // - kstep_motor_easy_move_to_io = 0x0216, // - kstep_motor_stop = 0x0228, // - kstep_motor_active_cfg = 0x0229, // - kstep_motor_read_io_state = 0x022a, // - kstep_motor_easy_move_to_end_point = 0x022c, // - kstep_motor_read_tmc5130_status = 0x0232, // - kstep_motor_read_tmc5130_state = 0x0233, // - kstep_motor_read_io_index_in_stm32 = 0x0238, // - kstep_motor_set_subdevice_reg = 0x0239, // - kstep_motor_get_subdevice_reg = 0x023a, // - kstep_motor_easy_reciprocating_motion = 0x022d, // - kstep_motor_easy_move_to_zero_point_quick = 0x022e, // - kmini_servo_enable = 0x6601, // - kmini_servo_read_pos = 0x6602, // - kmini_servo_active_cfg = 0x6603, // - kmini_servo_stop = 0x6604, // - kmini_servo_set_mid_point = 0x6607, // - kmini_servo_read_io_state = 0x6608, // - kmini_servo_move_to = 0x6609, // - kmini_servo_rotate = 0x660a, // - kmini_servo_rotate_with_torque = 0x660b, // - kmini_servo_set_cur_pos = 0x660c, // - - kextboard_read_inio = 0x6701, // para:{index}, ack:{state} - kextboard_write_outio = 0x6702, // para:{index,state}, ack:{} - kextboard_read_muti_inio = 0x6703, // para:{}, ack:{states} - kextboard_read_inio_index_in_stm32 = 0x6704, // para:{index}, ack:{index_in_stm32} - kextboard_read_outio_index_in_stm32 = 0x6705, // para:{index}, ack:{index_in_stm32} - kextboard_read_outio = 0x6706, // para:{index}, ack:{state} - - kcode_scaner_start_scan = 0x6801, // para:{}, ack:{} - kcode_scaner_stop_scan = 0x6802, // para:{}, ack:{} - kcode_scaner_result_is_ready = 0x6803, // para:{}, ack:{} - kcode_scaner_read_scaner_result = 0x6804, // para:{}, ack:{X} - kcode_scaner_get_result_length = 0x6805, // para:{}, ack:{X} - - kfan_controler_set_speed = 0x6900, // - - ktemp_controler_start_hearting = 0x7000, // - ktemp_controler_stop_hearting = 0x7001, // - ktemp_controler_set_peltier_power_level = 0x7002, // - ktemp_controler_set_pump_level = 0x7003, // - ktemp_controler_set_fan_level = 0x7004, // - ktemp_controler_enable_log = 0x7005, // - - ka8000_idcard_reader_read_raw = 0x7100, // - ka8000_idcard_write_raw = 0x7101, // - ka8000_idcard_erase = 0x7102, // - ka8000_idcard_earse_unlock = 0x7103, // - kevent_a8000_idcard_online = 0x71c8, // - kevent_a8000_idcard_offline = 0x71c9, // - kplate_code_scaner_push_card_and_scan = 0x7301, // - kplate_code_scaner_stop_scan = 0x7302, // - kplate_code_scaner_read_result = 0x7303, // - kplate_code_scaner_read_result_point_num = 0x7304, // - kplate_code_scaner_read_code = 0x7305, // - kplate_code_scaner_adc_readraw = 0x7306, // - kplate_code_scaner_open_laser = 0x7307, // - kplate_code_scaner_close_laser = 0x7308, // - - /*********************************************************************************************************************** - * 移液枪 * - ***********************************************************************************************************************/ - kpipette_zmotor_enable = 0x7400, - kpipette_zmotor_move_zero = 0x7401, - kpipette_zmotor_move_to_zero_point_quick = 0x7402, - kpipette_zmotor_measure_distance = 0x7403, - kpipette_zmotor_read_measure_distance_result = 0x7404, - kpipette_zmotor_move_by = 0x7405, - kpipette_zmotor_move_to = 0x7406, - - kliquid_operation_clear_params = 0x7450, - kliquid_operation_set_gun_runparams = 0x7451, - kliquid_operation_set_zmotor_runparams = 0x7452, - kliquid_operation_enable_lld_record = 0x7453, - kliquid_operation_fresh_params = 0x7454, - - kpipette_init_device = 0x7501, - kpipette_put_tip = 0x7502, - kpipette_pump_move_to = 0x7503, - kpipette_lld = 0x7504, - kpipette_aspirate = 0x7505, - kpipette_distribu = 0x7506, - kpipette_shake_up = 0x7507, - kpipette_clear_hanging_liquid = 0x7508, - kpipette_lld_is_detect_liquid = 0x7509, - - kpipette_get_sensor_sample_data = 0x7510, - kpipette_get_sensor_sample_data_num = 0x7511, - kpipette_zmotor_read_zero_point_state = 0x7512, - kpipette_zmotor_read_dev_status_cache = 0x7513, - -} cmdid_t; - -typedef struct { - int index; - const char* fnname; -} cmdinfo_t; - -const char* cmdid2str(int32_t code); -cmdinfo_t* cmdid_get_table(); -int cmdid_get_table_size(); - -} // namespace zcr -} // namespace iflytop \ No newline at end of file diff --git a/api/apibasic/errorcode.cpp b/api/apibasic/errorcode.cpp deleted file mode 100644 index abe2293..0000000 --- a/api/apibasic/errorcode.cpp +++ /dev/null @@ -1,108 +0,0 @@ -#include "errorcode.hpp" - -#define ERR2STR(code) \ - case code: \ - return #code; - -namespace iflytop { -namespace err { - -#define ERR_ITERM(enum) \ - { enum, #enum } - -static ecode_table_item_t table[] = { - - ERR_ITERM(ksucc), - ERR_ITERM(kfail), - ERR_ITERM(kparam_out_of_range), - ERR_ITERM(kcmd_not_support), - ERR_ITERM(kdevice_is_busy), - ERR_ITERM(kdevice_is_offline), - ERR_ITERM(kovertime), - ERR_ITERM(knoack), - ERR_ITERM(kerrorack), - ERR_ITERM(kdevice_offline), - ERR_ITERM(kcheck_sum_error), - ERR_ITERM(ksubdevice_overtime), - ERR_ITERM(kbuffer_not_enough), - ERR_ITERM(kcmd_param_num_error), - ERR_ITERM(kcheckcode_is_error), - ERR_ITERM(killegal_operation), - ERR_ITERM(kaction_overtime), - ERR_ITERM(kmodule_opeation_break_by_user), - ERR_ITERM(kmodule_not_find_reg), - ERR_ITERM(kxymotor_x_find_zero_edge_fail), - ERR_ITERM(kxymotor_y_find_zero_edge_fail), - ERR_ITERM(kxymotor_not_enable), - ERR_ITERM(kxymotor_target_pos_outof_range), - ERR_ITERM(kxymotor_not_move_to_zero), - ERR_ITERM(kpipette_error_NoError), - ERR_ITERM(kpipette_error_InitFail), - ERR_ITERM(kpipette_error_InvalidCmd), - ERR_ITERM(kpipette_error_InvalidArg), - ERR_ITERM(kpipette_error_PressureSensorError), - ERR_ITERM(kpipette_error_OverPressure), - ERR_ITERM(kpipette_error_LLDError), - ERR_ITERM(kpipette_error_DeviceNotInit), - ERR_ITERM(kpipette_error_TipPopError), - ERR_ITERM(kpipette_error_PumpOverload), - ERR_ITERM(kpipette_error_TipDrop), - ERR_ITERM(kpipette_error_CanBusError), - ERR_ITERM(kpipette_error_InvalidChecksum), - ERR_ITERM(kpipette_error_EEPROMError), - ERR_ITERM(kpipette_error_CmdBufferEmpty), - ERR_ITERM(kpipette_error_CmdBufferOverflow), - ERR_ITERM(kpipette_error_TipBlock), - ERR_ITERM(kpipette_error_AirSuction), - ERR_ITERM(kpipette_error_Bubble), - ERR_ITERM(kpipette_error_VolumeError), - ERR_ITERM(kpipette_error_TipAlreadyLoad), - ERR_ITERM(kpipette_error_TipLoadFail), - ERR_ITERM(kpipette_error_no_tip_when_lld), - ERR_ITERM(kpipette_error_uninited), - ERR_ITERM(kpipette_error_not_lld_prepare), - ERR_ITERM(kpipette_error_tipisload_when_lld_prepare), - ERR_ITERM(kpipette_error_pump_load_val_is_not_empty), - ERR_ITERM(kstep_motor_not_found_zero_point), - ERR_ITERM(kstep_motor_not_go_zero), - ERR_ITERM(kstep_motor_over_temperature), - ERR_ITERM(kstep_motor_over_voltage), - ERR_ITERM(kstep_motor_run_overtime), - ERR_ITERM(kstep_motor_not_enable), - ERR_ITERM(kstep_motor_ioindex_out_of_range), - ERR_ITERM(kstep_motor_subic_reset), - ERR_ITERM(kstep_motor_drv_err), - ERR_ITERM(kstep_motor_uv_cp), - ERR_ITERM(kstep_motor_not_found_point_edge), - ERR_ITERM(kstep_motor_lost_step), - ERR_ITERM(kstep_motor_not_move_to_zero), - ERR_ITERM(kstep_motor_ot), - ERR_ITERM(kstep_motor_otpw), - ERR_ITERM(kstep_motor_s2ga), - ERR_ITERM(kstep_motor_s2gb), - ERR_ITERM(kstep_motor_ola), - ERR_ITERM(kstep_motor_olb), - ERR_ITERM(kmini_servo_not_enable), - ERR_ITERM(kmini_servo_mode_not_support), - ERR_ITERM(kfan_hardware_fault), - ERR_ITERM(kwater_cooling_fan_error), - ERR_ITERM(kwater_cooling_temperature_sensor_error), - ERR_ITERM(kwater_cooling_pump_is_error), - ERR_ITERM(kwater_cooling_pelter_is_error), - -}; - -const char* error2str(int32_t code) { - for (int i = 0; i < sizeof(table) / sizeof(table[0]); i++) { - if (table[i].index == code) { - return table[i].info; - } - } - return "unknown error"; -} - -ecode_table_item_t* error_get_table() { return table; } -int error_get_table_size() { return sizeof(table) / sizeof(table[0]); } - -} // namespace err -} // namespace iflytop diff --git a/api/apibasic/errorcode.hpp b/api/apibasic/errorcode.hpp deleted file mode 100644 index f26dbae..0000000 --- a/api/apibasic/errorcode.hpp +++ /dev/null @@ -1,112 +0,0 @@ -#pragma once -#include - -namespace iflytop { -namespace err { -using namespace std; - -#define ERROR_CODE(errortype, suberrorcode) (errortype + suberrorcode) - -typedef enum { - - ksucc = 0, - kfail = 1001, - - kparam_out_of_range = 1102, - kcmd_not_support = 1103, - kdevice_is_busy = 1104, - kdevice_is_offline = 1105, - kovertime = 1106, - knoack = 1107, - kerrorack = 1108, - kdevice_offline = 1109, - kcheck_sum_error = 1110, - - ksubdevice_overtime = 1111, - kbuffer_not_enough = 1112, - kcmd_param_num_error = 1114, - kcheckcode_is_error = 1115, - killegal_operation = 1116, - kaction_overtime = 1117, - - kmodule_opeation_break_by_user = 1202, - kmodule_not_find_reg = 1207, - - kxymotor_x_find_zero_edge_fail = 1306, - kxymotor_y_find_zero_edge_fail = 1307, - kxymotor_not_enable = 1308, - kxymotor_target_pos_outof_range = 1309, - kxymotor_not_move_to_zero = 1310, - - kpipette_error_NoError = 1400, - kpipette_error_InitFail = 1401, - kpipette_error_InvalidCmd = 1402, - kpipette_error_InvalidArg = 1403, - kpipette_error_PressureSensorError = 1404, - kpipette_error_OverPressure = 1405, - kpipette_error_LLDError = 1406, - kpipette_error_DeviceNotInit = 1407, - kpipette_error_TipPopError = 1408, - kpipette_error_PumpOverload = 1409, - kpipette_error_TipDrop = 1410, - kpipette_error_CanBusError = 1411, - kpipette_error_InvalidChecksum = 1412, - kpipette_error_EEPROMError = 1413, - kpipette_error_CmdBufferEmpty = 1414, - kpipette_error_CmdBufferOverflow = 1415, - kpipette_error_TipBlock = 1416, - kpipette_error_AirSuction = 1417, - kpipette_error_Bubble = 1418, - kpipette_error_VolumeError = 1419, - kpipette_error_TipAlreadyLoad = 1420, - kpipette_error_TipLoadFail = 1421, - kpipette_error_no_tip_when_lld = 1422, - - kpipette_error_uninited = 1501, - kpipette_error_not_lld_prepare = 1502, - kpipette_error_tipisload_when_lld_prepare = 1500, - kpipette_error_pump_load_val_is_not_empty = 1503, - - kstep_motor_not_found_zero_point = 1600, - kstep_motor_not_go_zero = 1601, - kstep_motor_over_temperature = 1602, - kstep_motor_over_voltage = 1603, - kstep_motor_run_overtime = 1604, - kstep_motor_not_enable = 1605, - kstep_motor_ioindex_out_of_range = 1606, - kstep_motor_subic_reset = 1607, - kstep_motor_drv_err = 1608, - kstep_motor_uv_cp = 1609, - kstep_motor_not_found_point_edge = 1610, - kstep_motor_lost_step = 1611, - kstep_motor_not_move_to_zero = 1612, - kstep_motor_ot = 1613, - kstep_motor_otpw = 1614, - kstep_motor_s2ga = 1615, - kstep_motor_s2gb = 1616, - kstep_motor_ola = 1617, - kstep_motor_olb = 1618, - - kmini_servo_not_enable = 1700, - kmini_servo_mode_not_support = 1701, - - kfan_hardware_fault = 1800, - - kwater_cooling_fan_error = 1900, - kwater_cooling_temperature_sensor_error = 1902, - kwater_cooling_pump_is_error = 1903, - kwater_cooling_pelter_is_error = 1904, -} error_t; - -typedef struct { - int index; - const char* info; -} ecode_table_item_t; - -const char* error2str(int32_t code); - -ecode_table_item_t* error_get_table(); -int error_get_table_size(); - -} // namespace err -} // namespace iflytop \ No newline at end of file diff --git a/api/apibasic/module_type_index.hpp b/api/apibasic/module_type_index.hpp deleted file mode 100644 index f75beb8..0000000 --- a/api/apibasic/module_type_index.hpp +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once -#include - -namespace iflytop { -typedef enum { - khbot_module = 1, // hbot模块 - ktemperature_ctrl_module = 3, // 温度控制 - kfan_ctrl_module = 5, // 风扇控制 - kcode_scaner = 6, // 扫码器 - kpipette_ctrl_module = 7, // 移液体枪控制 - ka8000_optical_module = 8, // a8000光学模组 - ktmc_step_motor = 10, // 步进电机 - kmini_servo_motor_module = 11, // 舵机 - kboard = 12, // 板子 - ka8000_idcard_reader = 13, // id卡读卡器 - ka8000_plate_code_scaner = 14, // 反应板条扫码器 -} module_type_t; -} \ No newline at end of file diff --git a/api/apibasic/packet_interface.hpp b/api/apibasic/packet_interface.hpp deleted file mode 100644 index 71d5353..0000000 --- a/api/apibasic/packet_interface.hpp +++ /dev/null @@ -1,49 +0,0 @@ -#pragma once -#include -#define ZCANCMD_PACKET_MAX_LEN 64 - -namespace iflytop { -namespace zcr { -#pragma pack(push, 1) -typedef struct { - uint8_t packetType; - uint16_t cmdid; - uint8_t moduleId; - uint8_t index; - uint8_t datalen; - uint8_t data[]; - /* int8_t checksum;*/ -} zcr_cmd_header_t; - -#pragma pack(pop) - -typedef enum { - kptv2_cmd = 0xA0, - kptv2_ack = 0xA1, - kptv2_error_ack = 0xA2, - kptv2_event = 0xA3, -} zcan_cmd_packet_type_t; - -static inline bool zcr_cmd_checkpacket(const zcr_cmd_header_t* header, int len) { - if (len < sizeof(zcr_cmd_header_t)) { - return false; - } - if ((header->datalen + sizeof(zcr_cmd_header_t) + 1) != len) { - return false; - } - - uint8_t* rawpacket = (uint8_t*)header; - uint8_t checksum = 0; - for (int i = 0; i < len - 1; i++) { - checksum += rawpacket[i]; - } - - if (checksum != rawpacket[len - 1]) { - return false; - } - - return true; -} - -} // namespace zcr -} // namespace iflytop diff --git a/api/apibasic/reg_index.cpp b/api/apibasic/reg_index.cpp deleted file mode 100644 index 7a2dab9..0000000 --- a/api/apibasic/reg_index.cpp +++ /dev/null @@ -1,203 +0,0 @@ - -#include "reg_index.hpp" - -#include - -namespace iflytop { - -#define REG_ITERM(enum) {enum, #enum} - -static reginfo_t table[] = { - REG_ITERM(kreg_module_version), - REG_ITERM(kreg_module_type), - REG_ITERM(kreg_module_status), - REG_ITERM(kreg_module_errorcode), - - REG_ITERM(kreg_extboard_resetflag), - - REG_ITERM(kreg_water_cooling_tmp_controler_pid_target), - REG_ITERM(kreg_water_cooling_tmp_controler_pid_nowoutput), - REG_ITERM(kreg_water_cooling_tmp_controler_pid_feedbackval), - REG_ITERM(kreg_water_cooling_tmp_controler_temp0), - REG_ITERM(kreg_water_cooling_tmp_controler_temp1), - REG_ITERM(kreg_water_cooling_tmp_controler_temp2), - REG_ITERM(kreg_water_cooling_tmp_controler_temp3), - - REG_ITERM(kreg_water_cooling_tmp_controler_pid_kp), - REG_ITERM(kreg_water_cooling_tmp_controler_pid_ki), - REG_ITERM(kreg_water_cooling_tmp_controler_pid_kd), - REG_ITERM(kreg_water_cooling_tmp_controler_pid_max_output), - REG_ITERM(kreg_water_cooling_tmp_controler_pid_min_output), - REG_ITERM(kreg_water_cooling_tmp_controler_pid_max_integral), - REG_ITERM(kreg_water_cooling_tmp_controler_pid_min_integral), - REG_ITERM(kreg_water_cooling_tmp_controler_pid_error_limit), - REG_ITERM(kreg_water_cooling_tmp_controler_pid_compute_interval), - - REG_ITERM(kreg_pipette_pos_nl), - REG_ITERM(kreg_pipette_capactitance_val), - REG_ITERM(kreg_pipette_tip_state), - - // REG_ITERM(kreg_pipette_limit_ul), - // REG_ITERM(kreg_pipette_pump_acc), - // REG_ITERM(kreg_pipette_pump_dec), - // REG_ITERM(kreg_pipette_pump_vstart), - // REG_ITERM(kreg_pipette_pump_vstop), - // REG_ITERM(kreg_pipette_pump_vmax), - // REG_ITERM(kreg_pipette_aspirate_pump_vel), - // REG_ITERM(kreg_pipette_lld_pump_vel), - // REG_ITERM(kreg_pipette_lld_motor_vel_rpm), - // REG_ITERM(kreg_pipette_lld_detect_period_ms), - // REG_ITERM(kreg_pipette_lld_prepare_pos), - // REG_ITERM(kreg_pipette_lld_prepare_pre_distribut_ul), - // REG_ITERM(kreg_pipette_lld_enable_record_data), - // REG_ITERM(kreg_pipette_distribu_pump_vel), - - REG_ITERM(kreg_pipette_zm_pos), - REG_ITERM(kreg_pipette_zm_is_enable), - REG_ITERM(kreg_pipette_zm_dpos), - REG_ITERM(kreg_pipette_zm_shift), - REG_ITERM(kreg_pipette_zm_shaft), - REG_ITERM(kreg_pipette_zm_one_circle_pulse), - REG_ITERM(kreg_pipette_zm_one_circle_pulse_denominator), - REG_ITERM(kreg_pipette_zm_default_velocity), - REG_ITERM(kreg_pipette_zm_ihold), - REG_ITERM(kreg_pipette_zm_irun), - REG_ITERM(kreg_pipette_zm_iholddelay), - REG_ITERM(kreg_pipette_zm_iglobalscaler), - REG_ITERM(kreg_pipette_zm_run_to_zero_speed), - REG_ITERM(kreg_pipette_zm_look_zero_edge_speed), - REG_ITERM(kreg_pipette_zm_max_d), - REG_ITERM(kreg_pipette_zm_min_d), - REG_ITERM(kreg_pipette_zm_in_debug_mode), - REG_ITERM(kreg_pipette_zm_vstart), - REG_ITERM(kreg_pipette_zm_a1), - REG_ITERM(kreg_pipette_zm_amax), - REG_ITERM(kreg_pipette_zm_v1), - REG_ITERM(kreg_pipette_zm_dmax), - REG_ITERM(kreg_pipette_zm_d1), - REG_ITERM(kreg_pipette_zm_vstop), - REG_ITERM(kreg_pipette_zm_tzerowait), - REG_ITERM(kreg_pipette_zm_enc_resolution), - REG_ITERM(kreg_pipette_zm_enable_enc), - REG_ITERM(kreg_pipette_zm_dzero), - REG_ITERM(kreg_pipette_zm_pos_devi_tolerance), - REG_ITERM(kreg_pipette_zm_io_trigger_append_distance), - - REG_ITERM(kreg_a8k_opt_t_pos_offset), - REG_ITERM(kreg_a8k_opt_f_pos_offset), - REG_ITERM(kreg_a8k_opt_t_reverse_scan_pos_offset), - REG_ITERM(kreg_a8k_opt_f_reverse_scan_pos_offset), - REG_ITERM(kreg_a8k_opt_scan_step_interval), - REG_ITERM(kreg_a8k_opt_scan_pointnum), - - REG_ITERM(kreg_xyrobot_io_state), - REG_ITERM(kreg_xyrobot_is_enable), - REG_ITERM(kreg_xyrobot_has_move_to_zero), - REG_ITERM(kreg_xyrobot_robot_type), - REG_ITERM(kreg_xyrobot_one_circle_pulse), - REG_ITERM(kreg_xyrobot_one_circle_pulse_denominator), - REG_ITERM(kreg_xyrobot_ihold), - REG_ITERM(kreg_xyrobot_irun), - REG_ITERM(kreg_xyrobot_iholddelay), - REG_ITERM(kreg_xyrobot_iglobalscaler), - REG_ITERM(kreg_xyrobot_vstart), - REG_ITERM(kreg_xyrobot_a1), - REG_ITERM(kreg_xyrobot_amax), - REG_ITERM(kreg_xyrobot_v1), - REG_ITERM(kreg_xyrobot_dmax), - REG_ITERM(kreg_xyrobot_d1), - REG_ITERM(kreg_xyrobot_vstop), - REG_ITERM(kreg_xyrobot_tzerowait), - REG_ITERM(kreg_xyrobot_enc_resolution), - REG_ITERM(kreg_xyrobot_enable_enc), - REG_ITERM(kreg_xyrobot_x_shaft), - REG_ITERM(kreg_xyrobot_y_shaft), - REG_ITERM(kreg_xyrobot_min_x), - REG_ITERM(kreg_xyrobot_min_y), - REG_ITERM(kreg_xyrobot_max_x), - REG_ITERM(kreg_xyrobot_max_y), - REG_ITERM(kreg_xyrobot_run_to_zero_speed), - REG_ITERM(kreg_xyrobot_look_zero_edge_speed), - REG_ITERM(kreg_xyrobot_shift_x), - REG_ITERM(kreg_xyrobot_shift_y), - REG_ITERM(kreg_xyrobot_default_velocity), - REG_ITERM(kreg_xyrobot_pos_devi_tolerance), - REG_ITERM(kreg_xyrobot_io_trigger_append_distance), - - REG_ITERM(kreg_step_motor_pos), - REG_ITERM(kreg_step_motor_is_enable), - REG_ITERM(kreg_step_motor_dpos), - REG_ITERM(kreg_step_motor_has_move_zero), - REG_ITERM(kreg_step_motor_shift), - REG_ITERM(kreg_step_motor_shaft), - REG_ITERM(kreg_step_motor_one_circle_pulse), - REG_ITERM(kreg_step_motor_one_circle_pulse_denominator), - REG_ITERM(kreg_step_motor_default_velocity), - REG_ITERM(kreg_step_motor_ihold), - REG_ITERM(kreg_step_motor_irun), - REG_ITERM(kreg_step_motor_iholddelay), - REG_ITERM(kreg_step_motor_iglobalscaler), - REG_ITERM(kreg_step_motor_run_to_zero_speed), - REG_ITERM(kreg_step_motor_look_zero_edge_speed), - REG_ITERM(kreg_step_motor_max_d), - REG_ITERM(kreg_step_motor_min_d), - REG_ITERM(kreg_step_motor_in_debug_mode), - REG_ITERM(kreg_step_motor_vstart), - REG_ITERM(kreg_step_motor_a1), - REG_ITERM(kreg_step_motor_amax), - REG_ITERM(kreg_step_motor_v1), - REG_ITERM(kreg_step_motor_dmax), - REG_ITERM(kreg_step_motor_d1), - REG_ITERM(kreg_step_motor_vstop), - REG_ITERM(kreg_step_motor_tzerowait), - REG_ITERM(kreg_step_motor_enc_resolution), - REG_ITERM(kreg_step_motor_enable_enc), - REG_ITERM(kreg_step_motor_dzero_pos), - REG_ITERM(kreg_step_motor_pos_devi_tolerance), - REG_ITERM(kreg_step_motor_io_trigger_append_distance), - - REG_ITERM(kreg_mini_servo_pos), - REG_ITERM(kreg_mini_servo_is_enable), - REG_ITERM(kreg_mini_servo_limit_velocity), - REG_ITERM(kreg_mini_servo_limit_torque), - REG_ITERM(kreg_mini_servo_protective_torque), - REG_ITERM(kreg_mini_servo_is_move), - REG_ITERM(kreg_id_card_reader_raw_sector_size), - REG_ITERM(kreg_id_card_reader_raw_sector_num), - REG_ITERM(kreg_id_card_reader_is_online), - - REG_ITERM(kreg_plate_code_scaner_laster_intensity), - REG_ITERM(kreg_plate_code_scaner_scan_gain), - REG_ITERM(kreg_plate_code_scaner_scan_velocity), - REG_ITERM(kreg_plate_code_scaner_scan_start_pos), - REG_ITERM(kreg_plate_code_scaner_final_stop_pos), - REG_ITERM(kreg_plate_code_scaner_code_judgment_threshold), - REG_ITERM(kreg_plate_code_scaner_item), - REG_ITERM(kreg_plate_code_scaner_lot), - REG_ITERM(kreg_plate_code_scaner_rawcode), - REG_ITERM(kreg_plate_code_scaner_code_legal), - -}; - -reginfo_t *get_reginfo_by_index(int32_t index) { - for (int i = 0; i < sizeof(table) / sizeof(table[0]); i++) { - if (table[i].index == index) { - return &table[i]; - } - } - return nullptr; -} - -const char *regindex2str(int32_t index) { - for (int i = 0; i < sizeof(table) / sizeof(table[0]); i++) { - if (table[i].index == index) { - return table[i].regname; - } - } - return "unknown reg"; -} - -reginfo_t *reg_get_table() { return table; } -int reg_get_table_size() { return sizeof(table) / sizeof(table[0]); } - -} // namespace iflytop diff --git a/api/apibasic/reg_index.hpp b/api/apibasic/reg_index.hpp deleted file mode 100644 index 8c562a2..0000000 --- a/api/apibasic/reg_index.hpp +++ /dev/null @@ -1,224 +0,0 @@ -#pragma once -#include - -namespace iflytop { -using namespace std; - -typedef enum { - /******************************************************************************* - * 模块通用配置和状态 * - *******************************************************************************/ - kreg_module_version = 0, // 模块版本 - kreg_module_type = 1, // 模块类型 - kreg_module_status = 2, // 0idle,1busy,2error - kreg_module_errorcode = 3, // inited_flag - - /******************************************************************************* - * 板子模块 * - *******************************************************************************/ - kreg_extboard_resetflag = 100, // 板子复位标识 - - /*********************************************************************************************************************** - * 水冷温度控制器 * - ***********************************************************************************************************************/ - kreg_water_cooling_tmp_controler_pid_target = 3000, // 目标数值 - kreg_water_cooling_tmp_controler_pid_nowoutput = 3001, // 当前输出 - kreg_water_cooling_tmp_controler_pid_feedbackval = 3002, // 当前输出 - kreg_water_cooling_tmp_controler_temp0 = 3003, // 温度1 - kreg_water_cooling_tmp_controler_temp1 = 3004, // 温度2 - kreg_water_cooling_tmp_controler_temp2 = 3005, // 温度3 - kreg_water_cooling_tmp_controler_temp3 = 3006, // 温度4 - - kreg_water_cooling_tmp_controler_pid_kp = 3050, // kp - kreg_water_cooling_tmp_controler_pid_ki = 3051, // ki - kreg_water_cooling_tmp_controler_pid_kd = 3052, // kd - kreg_water_cooling_tmp_controler_pid_max_output = 3053, // 最大输出 - kreg_water_cooling_tmp_controler_pid_min_output = 3054, // 最小输出 - kreg_water_cooling_tmp_controler_pid_max_integral = 3055, // 最大积分 - kreg_water_cooling_tmp_controler_pid_min_integral = 3056, // 最小积分 - kreg_water_cooling_tmp_controler_pid_error_limit = 3057, // 误差限制 - kreg_water_cooling_tmp_controler_pid_compute_interval = 3058, // 计算间隔 - - /******************************************************************************* - * 移液枪状态 * - *******************************************************************************/ - kreg_pipette_pos_nl = 4000, // 移液枪位置 - kreg_pipette_capactitance_val = 4001, // 移液枪电容值 - kreg_pipette_tip_state = 4002, // 移动液枪tip状态 - - - kreg_pipette_zm_pos = 4101, - kreg_pipette_zm_is_enable = 4102, - kreg_pipette_zm_dpos = 4103, - kreg_pipette_zm_shift = 4105, - kreg_pipette_zm_shaft = 4106, - kreg_pipette_zm_one_circle_pulse = 4107, - kreg_pipette_zm_one_circle_pulse_denominator = 4108, - kreg_pipette_zm_default_velocity = 4109, - kreg_pipette_zm_ihold = 4110, - kreg_pipette_zm_irun = 4111, - kreg_pipette_zm_iholddelay = 4112, - kreg_pipette_zm_iglobalscaler = 4113, - kreg_pipette_zm_run_to_zero_speed = 4114, - kreg_pipette_zm_look_zero_edge_speed = 4115, - kreg_pipette_zm_max_d = 4116, - kreg_pipette_zm_min_d = 4117, - kreg_pipette_zm_in_debug_mode = 4118, - kreg_pipette_zm_vstart = 4119, - kreg_pipette_zm_a1 = 4120, - kreg_pipette_zm_amax = 4121, - kreg_pipette_zm_v1 = 4122, - kreg_pipette_zm_dmax = 4123, - kreg_pipette_zm_d1 = 4124, - kreg_pipette_zm_vstop = 4125, - kreg_pipette_zm_tzerowait = 4126, - kreg_pipette_zm_enc_resolution = 4127, - kreg_pipette_zm_enable_enc = 4128, - kreg_pipette_zm_dzero = 4129, - kreg_pipette_zm_pos_devi_tolerance = 4130, - kreg_pipette_zm_io_trigger_append_distance = 4131, - - /** - * @brief - * - * ------------------------------------------------------ - * - * - * 扫描零点偏移:(F光学向左扫描的起始位置) - * 扫描方向:1:板卡箭头方向,-1板卡箭头反方向 - * 扫描点数:固定为1200 - * 扫描步距:固定为1 - * - * 返回点数:(1200) - * - * - */ - // 坐标参数 - - kreg_a8k_opt_t_pos_offset = 4501, // T光学正向扫描,扫描起始位距离零点的偏移 - kreg_a8k_opt_f_pos_offset = 4502, // F光学正向扫描,扫描起始位距离零点的偏移 - kreg_a8k_opt_t_reverse_scan_pos_offset = 4503, // T光学逆向扫描,扫描起始位距离零点的偏移 - kreg_a8k_opt_f_reverse_scan_pos_offset = 4504, // F光学逆向扫描,扫描起始位距离零点的偏移 - kreg_a8k_opt_scan_step_interval = 4505, // 参数固定:为1 - kreg_a8k_opt_scan_pointnum = 4506, // 参数固定:为1200个点 - - /*********************************************************************************************************************** - * XYROBOT * - ***********************************************************************************************************************/ - - kreg_xyrobot_io_state = 9900, // - kreg_xyrobot_is_enable = 9901, // - kreg_xyrobot_has_move_to_zero = 9902, // - kreg_xyrobot_robot_type = 9950, // - kreg_xyrobot_one_circle_pulse = 9951, // - kreg_xyrobot_one_circle_pulse_denominator = 9952, // - kreg_xyrobot_ihold = 9954, // - kreg_xyrobot_irun = 9955, // - kreg_xyrobot_iholddelay = 9956, // - kreg_xyrobot_iglobalscaler = 9957, // - kreg_xyrobot_vstart = 9958, // - kreg_xyrobot_a1 = 9959, // - kreg_xyrobot_amax = 9960, // - kreg_xyrobot_v1 = 9961, // - kreg_xyrobot_dmax = 9962, // - kreg_xyrobot_d1 = 9963, // - kreg_xyrobot_vstop = 9964, // - kreg_xyrobot_tzerowait = 9965, // - kreg_xyrobot_enc_resolution = 9966, // - kreg_xyrobot_enable_enc = 9967, // - kreg_xyrobot_x_shaft = 9968, // - kreg_xyrobot_y_shaft = 9969, // - kreg_xyrobot_min_x = 9972, // - kreg_xyrobot_min_y = 9973, // - kreg_xyrobot_max_x = 9974, // - kreg_xyrobot_max_y = 9975, // - kreg_xyrobot_run_to_zero_speed = 9976, // - kreg_xyrobot_look_zero_edge_speed = 9977, // - kreg_xyrobot_shift_x = 9978, // - kreg_xyrobot_shift_y = 9979, // - kreg_xyrobot_pos_devi_tolerance = 9980, // - kreg_xyrobot_io_trigger_append_distance = 9981, // - kreg_xyrobot_default_velocity = 10000, // - - /*********************************************************************************************************************** - * step_motor * - ***********************************************************************************************************************/ - - kreg_step_motor_pos = 10101, // 机器人x坐标 - kreg_step_motor_is_enable = 10102, // 步进电机是否使能 - kreg_step_motor_dpos = 10103, // 执行完上一条指令后的相对位移 - kreg_step_motor_has_move_zero = 10104, // 是否回零 - kreg_step_motor_shift = 10150, // x偏移 - kreg_step_motor_shaft = 10151, // x轴是否反转 - kreg_step_motor_one_circle_pulse = 10152, // x轴一圈脉冲数 - kreg_step_motor_one_circle_pulse_denominator = 10153, // 设置一圈脉冲数的分母 - kreg_step_motor_default_velocity = 10154, // 默认速度 - kreg_step_motor_ihold = 10158, // 步进电机电流配置 - kreg_step_motor_irun = 10159, // 步进电机电流配置 - kreg_step_motor_iholddelay = 10160, // 步进电机电流配置 - kreg_step_motor_iglobalscaler = 10161, // 步进电机电流配置 - kreg_step_motor_run_to_zero_speed = 10173, // 回零速度 - kreg_step_motor_look_zero_edge_speed = 10175, // 找零边缘速度 - kreg_step_motor_max_d = 10178, // 最大限制距离 - kreg_step_motor_min_d = 10179, // 最小限制距离 - kreg_step_motor_in_debug_mode = 10180, // 驱动器处于调试模式 - kreg_step_motor_vstart = 10181, // a1起作用的速度 - kreg_step_motor_a1 = 10182, // - kreg_step_motor_amax = 10183, // - kreg_step_motor_v1 = 10184, // - kreg_step_motor_dmax = 10185, // - kreg_step_motor_d1 = 10186, // - kreg_step_motor_vstop = 10187, // - kreg_step_motor_tzerowait = 10188, // - kreg_step_motor_enc_resolution = 10189, // 编码器分辨率 1000,1024,4000,4096,16384 - kreg_step_motor_enable_enc = 10190, // - kreg_step_motor_dzero_pos = 10191, // 驱动器处于调试模式 - kreg_step_motor_pos_devi_tolerance = 10192, // 位置偏差容忍度 - kreg_step_motor_io_trigger_append_distance = 10193, // 移动到IO时,会在原点触发的边沿,稍稍里面移动一点,用来保证IO稳定触发 - - /*********************************************************************************************************************** - * step_motor * - ***********************************************************************************************************************/ - - kreg_mini_servo_pos = 10201, // 位置 - kreg_mini_servo_is_enable = 10202, - kreg_mini_servo_limit_velocity = 10251, // 限制速度 - kreg_mini_servo_limit_torque = 10252, // 限制扭矩 - kreg_mini_servo_protective_torque = 10253, // 保护扭矩 - kreg_mini_servo_is_move = 10254, // isMove - - /*********************************************************************************************************************** - * ID_CARD_READER * - ***********************************************************************************************************************/ - - kreg_id_card_reader_raw_sector_size = 10301, // - kreg_id_card_reader_raw_sector_num = 10302, // - kreg_id_card_reader_is_online = 10303, // - - /*********************************************************************************************************************** - * 板夹仓扫码 * - ***********************************************************************************************************************/ - - kreg_plate_code_scaner_laster_intensity = 10401, // - kreg_plate_code_scaner_scan_gain = 10402, // - kreg_plate_code_scaner_scan_velocity = 10403, // - kreg_plate_code_scaner_scan_start_pos = 10404, // - kreg_plate_code_scaner_final_stop_pos = 10405, // - kreg_plate_code_scaner_code_judgment_threshold = 10406, // - kreg_plate_code_scaner_item = 10407, // - kreg_plate_code_scaner_lot = 10408, // - kreg_plate_code_scaner_rawcode = 10409, // - kreg_plate_code_scaner_code_legal = 10410, // - -} reg_index_t; - -typedef struct { - int index; - const char* regname; -} reginfo_t; - -const char* regindex2str(int32_t code); -reginfo_t* reg_get_table(); -int reg_get_table_size(); - -} // namespace iflytop diff --git a/api/zi_module.cpp b/api/zi_module.cpp deleted file mode 100644 index 01844fe..0000000 --- a/api/zi_module.cpp +++ /dev/null @@ -1,96 +0,0 @@ - -#include "zi_module.hpp" - -#include - -#include - -using namespace iflytop; - -int32_t ZIModule::getid() { - int32_t id = 0; - getid(&id); - return id; -}; - -int32_t ZIModule::module_ping() { return 0; }; -int32_t ZIModule::module_set_reg(int32_t param_id, int32_t param_value) { return _module_xxx_reg(param_id, false, param_value); } -int32_t ZIModule::module_get_reg(int32_t param_id, int32_t *param_value) { return _module_xxx_reg(param_id, true, *param_value); } - -int32_t ZIModule::_module_xxx_reg(int32_t param_id, bool read, int32_t &val) { - if (param_id == kreg_module_version) { - if (read) { - module_get_version(&val); - return 0; - } else { - return 0; - } - } - - else if (param_id == kreg_module_type) { - if (read) { - module_get_type(&val); - return 0; - } else { - return 0; - } - } - - else if (param_id == kreg_module_status) { - if (read) { - module_get_status(&val); - return 0; - } else { - return 0; - } - } - - else if (param_id == kreg_module_errorcode) { - if (read) { - val = creg.module_errorcode; - return 0; - } else { - return 0; - } - } - - return module_xxx_reg(param_id, read, val); -} - -int32_t ZIModule::_module_set_reg(int32_t regoff, int32_t *regval, int32_t val, int32_t min, int32_t max) { - if (val < min || val > max) { - return err::kparam_out_of_range; - } - *regval = val; - return 0; -} -int32_t ZIModule::_module_get_reg(int32_t regoff, int32_t regval, int32_t &val) { - val = regval; - return 0; -} -int32_t ZIModule::_module_set_reg_float(int32_t regoff, float *regval, int32_t val, float precision, int32_t min, int32_t max) { - if (val < min || val > max) { - return err::kparam_out_of_range; - } - *regval = val * precision; - return 0; -} -int32_t ZIModule::_module_get_reg_float(int32_t regoff, float regval, int32_t &val, float precision) { - val = regval / precision; - return 0; -} - -int32_t ZIModule::module_get_error(int32_t *iserror) { - *iserror = creg.module_errorcode; - return 0; -} -int32_t ZIModule::module_clear_error() { - creg.module_errorcode = 0; - creg.module_status = 0; - return 0; -} - -int32_t ZIModule::module_get_status(int32_t *status) { - *status = creg.module_status; - return 0; -} diff --git a/api/zi_module.hpp b/api/zi_module.hpp deleted file mode 100644 index 8569f6a..0000000 --- a/api/zi_module.hpp +++ /dev/null @@ -1,88 +0,0 @@ -#pragma once -#include - -#include - -#include "apibasic/basic.hpp" - -namespace iflytop { -using namespace std; - -#define REG_SET(reg, ...) _module_set_reg(param_id, ®, val, ##__VA_ARGS__) -#define REG_GET(reg) _module_get_reg(param_id, reg, val) - -#define REG_SET_FLOAT(reg, precision, ...) _module_set_reg_float(param_id, ®, val, precision, ##__VA_ARGS__) -#define REG_GET_FLOAT(reg, precision) _module_get_reg_float(param_id, reg, val, precision) - -#define ACTION_NONE 0 -#define PROCESS_REG(param_id, readaction, writeacton) \ - case param_id: { \ - if (read) { \ - return readaction; \ - } else { \ - return writeacton; \ - } \ - } break; - -#define ENABLE_MODULE(name, type, version) \ - public: \ - virtual int32_t module_get_version(int32_t *val) { \ - *val = version; \ - return 0; \ - } \ - virtual int32_t module_get_type(int32_t *val) { \ - *val = type; \ - return 0; \ - } - -#define MODULE_COMMON_PROCESS_REG_CB() - -typedef struct { - int32_t module_errorcode; - int32_t module_status; -} module_common_reg_t; - -class ZIModule { - int32_t m_inited_flag = 0; - - protected: - module_common_reg_t creg; - - public: - virtual ~ZIModule() {} - - public: - virtual int32_t getid(); - virtual int32_t module_ping(); - virtual int32_t module_get_error(int32_t *iserror); - virtual int32_t module_clear_error(); - virtual int32_t module_set_reg(int32_t param_id, int32_t param_value); - virtual int32_t module_get_reg(int32_t param_id, int32_t *param_value); - virtual int32_t module_get_status(int32_t *status); - virtual int32_t module_get_version(int32_t *val) = 0; - virtual int32_t module_get_type(int32_t *val) = 0; - virtual int32_t module_stop() { return 0; } - virtual int32_t module_active_cfg() { return 0; } - - /*********************************************************************************************************************** - * 用户实现 * - ***********************************************************************************************************************/ - virtual int32_t getid(int32_t *id) = 0; - virtual int32_t module_xxx_reg(int32_t param_id, bool read, int32_t &val) = 0; - - public: - // slice - virtual int32_t bfcall(int32_t cmdid, uint8_t *param, int32_t len) { return 0; }; - virtual void aftercall(int32_t cmdid, uint8_t *param, int32_t len, uint8_t *ack, int32_t acklen, int32_t ret) {}; - - protected: - virtual int32_t _module_set_reg(int32_t regoff, int32_t *regval, int32_t val, int32_t min = INT32_MIN, int32_t max = INT32_MAX); - virtual int32_t _module_get_reg(int32_t regoff, int32_t regval, int32_t &val); - virtual int32_t _module_set_reg_float(int32_t regoff, float *regval, int32_t val, float precision, int32_t min = INT32_MIN, int32_t max = INT32_MAX); - virtual int32_t _module_get_reg_float(int32_t regoff, float regval, int32_t &val, float precision); - virtual int32_t _module_xxx_reg(int32_t param_id, bool read, int32_t &val); - - public: - public: -}; -} // namespace iflytop diff --git a/api/zi_motor.hpp b/api/zi_motor.hpp deleted file mode 100644 index 63dbd9b..0000000 --- a/api/zi_motor.hpp +++ /dev/null @@ -1,123 +0,0 @@ -#pragma once -#include - -#include - -#include "apibasic/basic.hpp" - -typedef struct { - uint32_t sg_result : 10; - uint32_t reserved0 : 5; - uint32_t fsactive : 1; - uint32_t cs_actual : 5; - uint32_t reserved1 : 3; - uint32_t stallguard : 1; - uint32_t ot : 1; - uint32_t otpw : 1; - uint32_t s2ga : 1; - uint32_t s2gb : 1; - uint32_t ola : 1; - uint32_t olb : 1; - uint32_t stst : 1; -} TMC5130MotorStatus_t; - -typedef struct { - uint32_t reset : 1; // fatal error - uint32_t drv_err : 1; // fatal error - uint32_t uv_cp : 1; // fatal error -} TMC5130MotorState_t; // R+C - -typedef struct { - uint32_t sg_result : 10; - uint32_t reserved0 : 1; - uint32_t reserved1 : 1; - uint32_t s2vsa : 1; - uint32_t s2vsb : 1; - uint32_t stealth : 1; - uint32_t fsactive : 1; - uint32_t cs_actual : 5; - uint32_t reserved2 : 3; - uint32_t stallguard : 1; - uint32_t ot : 1; - uint32_t otpw : 1; - uint32_t s2ga : 1; - uint32_t s2gb : 1; - uint32_t ola : 1; - uint32_t olb : 1; - uint32_t stst : 1; -} TMC2160MotorDriverStatus_t; - -typedef struct { - uint32_t TARGET_REACHED_F : 1; // XACTUAL = XTARGET - uint32_t POS_COMP_REACHED_F : 1; // XACTUAL = POS_COMP - uint32_t VEL_REACHED_F : 1; // VACTUAL = |VMAX| - uint32_t VEL_STATE_F : 2; // 0:VACTUAL = 0; 1:VACTUAL > 0; 2:VACTUAL < 0 - uint32_t RAMP_STATE_F : 2; // 0:AACTUAL = 0; 1:AACTUAL 增加(加速); 2:AACTUAL 减小(减速) - uint32_t STOPL_ACTIVE_F : 1; // 左停止开关有效。 - - uint32_t STOPR_ACTIVE_F : 1; // 右停止开关有效。 - uint32_t VSTOPL_ACTIVE_F : 1; // 左虚拟停止开关有效。 - uint32_t VSTOPR_ACTIVE_F : 1; // 右虚拟停止开关有效。 - uint32_t ACTIVE_STALL_F : 1; // 电机堵转检测且 VACTUAL > VSTALL_LIMIT。 - uint32_t HOME_ERROR_F : 1; // 输入信号电平不等于预期的回零电平。 - uint32_t FS_ACTIVE_F : 1; // 全步有效。 - uint32_t ENC_FAIL_F : 1; // XACTUAL 和 ENC_POS 中间的差值超出容差。 - uint32_t N_ACTIVE_F : 1; // 事件有效 - - uint32_t ENC_LATCH_F : 1; // ENC_LATCH 被重置。 - uint32_t MULTI_CYCLE_FAIL_F : 1; // 仅适用于绝对编码器 MULTI_CYCLE_FAIL_F 表示上一个多圈数据出现故障。 - uint32_t ___ : 1; // - uint32_t CL_FIT_F : 1; // 如果 ENC_POS_DEV < CL_COMPLATION,则有效。XACTUAL 和 ENC_POS 之间的差值在容许范围内 - uint32_t SERIAL_ENC_FLAGS : 4; // 仅适用于绝对编码器:从编码器接收的 SERIAL_ENC_FLAGS。新的编码器传输请求是会重置这些标志 - - uint32_t SG : 1; // 仅 TMC26x / TMC21x0 StallGuard2 状态。 - uint32_t OT : 1; // 过温关断。 - uint32_t OTPW : 1; // 过温预警。 - uint32_t S2GA : 1; // 线圈 A 高端 MOSFET 管对地短路检测位。 - uint32_t S2GB : 1; // 线圈 B 高端 MOSFET 管对地短路检测位。 - uint32_t OLA : 1; // 线圈 A 开路。 - uint32_t OLB : 1; // 线圈 B 开路。 - uint32_t STST : 1; // 仅 TMC26x / TMC21x0 静止状态。 -} TMC4361AMotorStatus_t; // R+CW 事件标志位 - -typedef struct { - uint32_t reset : 1; // fatal error - uint32_t drv_err : 1; // fatal error - uint32_t uv_cp : 1; // fatal error -} TMC2160MotorGstate_t; // R+C - -typedef struct { - uint32_t TARGET_REACHED : 1; // - uint32_t POS_COMP_REACHED : 1; // - uint32_t VEL_REACHED : 1; // - uint32_t VEL_STATE_EQ_0 : 1; // - uint32_t VEL_STATE_EQ_1 : 1; // - uint32_t VEL_STATE_EQ_2 : 1; // - uint32_t RAMP_STATE_EQ_0 : 1; // - uint32_t RAMP_STATE_EQ_1 : 1; // - uint32_t RAMP_STATE_EQ_2 : 1; // - uint32_t MAX_PHASE_TRAP : 1; // 梯形斜坡已经达到其极限速度 - uint32_t FROZEN : 1; // 重置 TMC4361A,以便进一步运动。 fatal error - uint32_t STOPL : 1; // - uint32_t STOPR : 1; // - uint32_t VSTOPL_ACTIVE : 1; // - uint32_t VSTOPR_ACTIVE : 1; // - uint32_t HOME_ERROR : 1; // - uint32_t XLATCH_DONE : 1; // - uint32_t FS_ACTIVE : 1; // - uint32_t ENC_FAIL : 1; // - uint32_t N_ACTIVE : 1; // - uint32_t ENC_DONE : 1; // - uint32_t SER_ENC_DATA_FAIL : 1; // - uint32_t ___ : 1; // - uint32_t SER_DATA_DONE : 1; // - uint32_t SERIAL_ENC_Flags : 1; // - uint32_t COVER_DONE : 1; // - uint32_t ENC_VEL0 : 1; // 编码器速度到 0。 - uint32_t CL_MAX : 1; // - uint32_t CL_FIT : 1; // - uint32_t STOP_ON_STALL : 1; // 检测到电机堵转。电机斜坡已经停止。 fatal error - uint32_t MOTOR_EV : 1; // 选定的 TMC 电机驱动器标志之一被触发。 - uint32_t RST_EV : 1; // 复位被触发。 fatal error -} TMC4361AMotorEventState_t; - diff --git a/protocol.hpp b/protocol.hpp index 7de24a0..3ebe7cf 100644 --- a/protocol.hpp +++ b/protocol.hpp @@ -1,2 +1,7 @@ #pragma once -#include "api/api.hpp" +#include "protocol\cmdid.hpp" +#include "protocol\errorcode.hpp" +#include "protocol\packet.hpp" +#include "protocol\reg_index.hpp" +// +#include "protocol\zmotor_struct.hpp" diff --git a/protocol/cmdid.cpp b/protocol/cmdid.cpp new file mode 100644 index 0000000..05f32ce --- /dev/null +++ b/protocol/cmdid.cpp @@ -0,0 +1,156 @@ +#include "cmdid.hpp" + +#include +namespace iflytop { +namespace zcr { + +#define CMD_ITERM(enum) {enum, #enum} + +static cmdinfo_t table[] = { + CMD_ITERM(kboard_reset), + + CMD_ITERM(kevent_bus_reg_change_report), + + CMD_ITERM(kmodule_ping), + CMD_ITERM(kmodule_get_status), + CMD_ITERM(kmodule_stop), + CMD_ITERM(kmodule_set_reg), + CMD_ITERM(kmodule_get_reg), + CMD_ITERM(kmodule_get_error), + CMD_ITERM(kmodule_clear_error), + CMD_ITERM(kmodule_active_cfg), + + CMD_ITERM(kxymotor_enable), + CMD_ITERM(kxymotor_move_by), + CMD_ITERM(kxymotor_move_to), + CMD_ITERM(kxymotor_move_to_zero), + CMD_ITERM(kxymotor_read_pos), + CMD_ITERM(kxymotor_read_inio_index_in_stm32), + CMD_ITERM(kxymotor_read_inio), + CMD_ITERM(kxymotor_set_pos), + CMD_ITERM(kxymotor_motor_move_by_direct), + CMD_ITERM(kxymotor_read_enc_direct), + + + + CMD_ITERM(ka8k_opt_v2_t_start_scan), + CMD_ITERM(ka8k_opt_v2_f_start_scan), + CMD_ITERM(ka8k_opt_v2_t_open_laster), + CMD_ITERM(ka8k_opt_v2_t_close_laster), + CMD_ITERM(ka8k_opt_v2_t_readVal), + CMD_ITERM(ka8k_opt_v2_f_open_laster), + CMD_ITERM(ka8k_opt_v2_f_close_laster), + CMD_ITERM(ka8k_opt_v2_f_readVal), + + CMD_ITERM(kstep_motor_enable), + CMD_ITERM(kstep_motor_read_pos), + CMD_ITERM(kstep_motor_easy_rotate), + CMD_ITERM(kstep_motor_easy_move_by), + CMD_ITERM(kstep_motor_easy_move_to), + CMD_ITERM(kstep_motor_easy_move_to_zero), + CMD_ITERM(kstep_motor_easy_set_current_pos), + CMD_ITERM(kstep_motor_easy_move_to_io), + CMD_ITERM(kstep_motor_stop), + CMD_ITERM(kstep_motor_active_cfg), + CMD_ITERM(kstep_motor_read_io_state), + CMD_ITERM(kstep_motor_easy_move_to_end_point), + CMD_ITERM(kstep_motor_read_tmc5130_status), + CMD_ITERM(kstep_motor_read_tmc5130_state), + CMD_ITERM(kstep_motor_read_io_index_in_stm32), + CMD_ITERM(kstep_motor_set_subdevice_reg), + CMD_ITERM(kstep_motor_get_subdevice_reg), + CMD_ITERM(kstep_motor_easy_reciprocating_motion), + CMD_ITERM(kstep_motor_easy_move_to_zero_point_quick), + + CMD_ITERM(kmini_servo_enable), + CMD_ITERM(kmini_servo_read_pos), + CMD_ITERM(kmini_servo_active_cfg), + CMD_ITERM(kmini_servo_stop), + CMD_ITERM(kmini_servo_set_mid_point), + CMD_ITERM(kmini_servo_read_io_state), + + CMD_ITERM(kmini_servo_move_to), + CMD_ITERM(kmini_servo_rotate), + CMD_ITERM(kmini_servo_rotate_with_torque), + CMD_ITERM(kmini_servo_set_cur_pos), + + CMD_ITERM(kextboard_read_inio), + CMD_ITERM(kextboard_write_outio), + CMD_ITERM(kextboard_read_muti_inio), + CMD_ITERM(kextboard_read_inio_index_in_stm32), + CMD_ITERM(kextboard_read_outio_index_in_stm32), + CMD_ITERM(kextboard_read_outio), + + CMD_ITERM(kcode_scaner_start_scan), + CMD_ITERM(kcode_scaner_stop_scan), + CMD_ITERM(kcode_scaner_result_is_ready), + CMD_ITERM(kcode_scaner_read_scaner_result), + CMD_ITERM(kcode_scaner_get_result_length), + + CMD_ITERM(kfan_controler_set_speed), + + CMD_ITERM(ktemp_controler_start_hearting), + CMD_ITERM(ktemp_controler_stop_hearting), + CMD_ITERM(ktemp_controler_set_peltier_power_level), + CMD_ITERM(ktemp_controler_set_pump_level), + CMD_ITERM(ktemp_controler_set_fan_level), + CMD_ITERM(ktemp_controler_enable_log), + + CMD_ITERM(ka8000_idcard_reader_read_raw), + CMD_ITERM(ka8000_idcard_write_raw), + CMD_ITERM(ka8000_idcard_erase), + CMD_ITERM(ka8000_idcard_earse_unlock), + CMD_ITERM(kevent_a8000_idcard_online), + CMD_ITERM(kevent_a8000_idcard_offline), + + CMD_ITERM(kplate_code_scaner_push_card_and_scan), + CMD_ITERM(kplate_code_scaner_stop_scan), + CMD_ITERM(kplate_code_scaner_read_result), + CMD_ITERM(kplate_code_scaner_read_result_point_num), + CMD_ITERM(kplate_code_scaner_read_code), + CMD_ITERM(kplate_code_scaner_adc_readraw), + CMD_ITERM(kplate_code_scaner_open_laser), + CMD_ITERM(kplate_code_scaner_close_laser), + + CMD_ITERM(kpipette_zmotor_enable), + CMD_ITERM(kpipette_zmotor_move_zero), + CMD_ITERM(kpipette_zmotor_move_to_zero_point_quick), + CMD_ITERM(kpipette_zmotor_measure_distance), + CMD_ITERM(kpipette_zmotor_read_measure_distance_result), + CMD_ITERM(kpipette_zmotor_move_by), + CMD_ITERM(kpipette_zmotor_move_to), + + CMD_ITERM(kliquid_operation_clear_params), // + CMD_ITERM(kliquid_operation_set_gun_runparams), // + CMD_ITERM(kliquid_operation_set_zmotor_runparams), // + CMD_ITERM(kliquid_operation_enable_lld_record), // + CMD_ITERM(kliquid_operation_fresh_params), // + + CMD_ITERM(kpipette_init_device), // + CMD_ITERM(kpipette_put_tip), // + CMD_ITERM(kpipette_pump_move_to), // + CMD_ITERM(kpipette_lld), // + CMD_ITERM(kpipette_aspirate), // + CMD_ITERM(kpipette_distribu), // + CMD_ITERM(kpipette_shake_up), // + CMD_ITERM(kpipette_clear_hanging_liquid), // + CMD_ITERM(kpipette_lld_is_detect_liquid), // + CMD_ITERM(kpipette_get_sensor_sample_data), // + CMD_ITERM(kpipette_get_sensor_sample_data_num), // + CMD_ITERM(kpipette_zmotor_read_zero_point_state), // + CMD_ITERM(kpipette_zmotor_read_dev_status_cache) // +}; + +const char* cmdid2str(int32_t code) { + for (int i = 0; i < sizeof(table) / sizeof(table[0]); i++) { + if (table[i].index == code) { + return table[i].fnname; + } + } + return "unknown_cmd"; +} +cmdinfo_t* cmdid_get_table() { return table; } +int cmdid_get_table_size() { return sizeof(table) / sizeof(table[0]); } + +} // namespace zcr +} // namespace iflytop \ No newline at end of file diff --git a/protocol/cmdid.hpp b/protocol/cmdid.hpp new file mode 100644 index 0000000..ff4a932 --- /dev/null +++ b/protocol/cmdid.hpp @@ -0,0 +1,158 @@ +#pragma once +#include + +namespace iflytop { +namespace zcr { +typedef enum { +#if 0 + + virtual int32_t board_reset() = 0; +#endif + + kboard_reset = 0x0000, //{} {} + + kevent_bus_reg_change_report = 0x0064, //{regindex,oldval,toval} + + kmodule_ping = 0x0100, //{}{} + kmodule_get_status = 0x0104, //{}{int32_t} + kmodule_stop = 0x0101, //{}{} + kmodule_set_reg = 0x0105, //(int32_t index,int32_t val)->() + kmodule_get_reg = 0x0106, //(int32_t index)->(int32_t val) + kmodule_get_error = 0x010a, // + kmodule_clear_error = 0x010b, // + kmodule_active_cfg = 0x0110, // + kxymotor_enable = 0x0301, // + kxymotor_move_by = 0x0302, // + kxymotor_move_to = 0x0303, // + kxymotor_move_to_zero = 0x0304, // + kxymotor_read_pos = 0x0306, // + kxymotor_read_inio_index_in_stm32 = 0x0307, // + kxymotor_read_inio = 0x0308, // + kxymotor_set_pos = 0x0309, // + kxymotor_motor_move_by_direct = 0x030a, // + kxymotor_read_enc_direct = 0x030b, // + + + ka8000_optical_read_raw = 0x0609, // + + ka8k_opt_v2_t_start_scan = 0x0700, //(int32_t scanDirection, int32_t lasterGain,int32_t scanGain) + ka8k_opt_v2_f_start_scan = 0x0701, //(int32_t scanDirection, int32_t lasterGain,int32_t scanGain) + ka8k_opt_v2_t_open_laster = 0x070a, //(int32_t lasterGain,int32_t scanGain) for_debug + ka8k_opt_v2_t_close_laster = 0x070b, //() for_debug + ka8k_opt_v2_t_readVal = 0x070c, //(int32_t *val0,int32_t *val1) for_debug + ka8k_opt_v2_f_open_laster = 0x070d, //(int32_t lasterGain,int32_t scanGain) for_debug + ka8k_opt_v2_f_close_laster = 0x070e, //() for_debug + ka8k_opt_v2_f_readVal = 0x070f, //(int32_t *val0,int32_t *val1) for_debug + + kstep_motor_enable = 0x0201, // + kstep_motor_read_pos = 0x020b, // + kstep_motor_easy_rotate = 0x0211, // + kstep_motor_easy_move_by = 0x0212, // + kstep_motor_easy_move_to = 0x0213, // + kstep_motor_easy_move_to_zero = 0x0214, // + kstep_motor_easy_set_current_pos = 0x0215, // + kstep_motor_easy_move_to_io = 0x0216, // + kstep_motor_stop = 0x0228, // + kstep_motor_active_cfg = 0x0229, // + kstep_motor_read_io_state = 0x022a, // + kstep_motor_easy_move_to_end_point = 0x022c, // + kstep_motor_read_tmc5130_status = 0x0232, // + kstep_motor_read_tmc5130_state = 0x0233, // + kstep_motor_read_io_index_in_stm32 = 0x0238, // + kstep_motor_set_subdevice_reg = 0x0239, // + kstep_motor_get_subdevice_reg = 0x023a, // + kstep_motor_easy_reciprocating_motion = 0x022d, // + kstep_motor_easy_move_to_zero_point_quick = 0x022e, // + kmini_servo_enable = 0x6601, // + kmini_servo_read_pos = 0x6602, // + kmini_servo_active_cfg = 0x6603, // + kmini_servo_stop = 0x6604, // + kmini_servo_set_mid_point = 0x6607, // + kmini_servo_read_io_state = 0x6608, // + kmini_servo_move_to = 0x6609, // + kmini_servo_rotate = 0x660a, // + kmini_servo_rotate_with_torque = 0x660b, // + kmini_servo_set_cur_pos = 0x660c, // + + kextboard_read_inio = 0x6701, // para:{index}, ack:{state} + kextboard_write_outio = 0x6702, // para:{index,state}, ack:{} + kextboard_read_muti_inio = 0x6703, // para:{}, ack:{states} + kextboard_read_inio_index_in_stm32 = 0x6704, // para:{index}, ack:{index_in_stm32} + kextboard_read_outio_index_in_stm32 = 0x6705, // para:{index}, ack:{index_in_stm32} + kextboard_read_outio = 0x6706, // para:{index}, ack:{state} + + kcode_scaner_start_scan = 0x6801, // para:{}, ack:{} + kcode_scaner_stop_scan = 0x6802, // para:{}, ack:{} + kcode_scaner_result_is_ready = 0x6803, // para:{}, ack:{} + kcode_scaner_read_scaner_result = 0x6804, // para:{}, ack:{X} + kcode_scaner_get_result_length = 0x6805, // para:{}, ack:{X} + + kfan_controler_set_speed = 0x6900, // + + ktemp_controler_start_hearting = 0x7000, // + ktemp_controler_stop_hearting = 0x7001, // + ktemp_controler_set_peltier_power_level = 0x7002, // + ktemp_controler_set_pump_level = 0x7003, // + ktemp_controler_set_fan_level = 0x7004, // + ktemp_controler_enable_log = 0x7005, // + + ka8000_idcard_reader_read_raw = 0x7100, // + ka8000_idcard_write_raw = 0x7101, // + ka8000_idcard_erase = 0x7102, // + ka8000_idcard_earse_unlock = 0x7103, // + kevent_a8000_idcard_online = 0x71c8, // + kevent_a8000_idcard_offline = 0x71c9, // + kplate_code_scaner_push_card_and_scan = 0x7301, // + kplate_code_scaner_stop_scan = 0x7302, // + kplate_code_scaner_read_result = 0x7303, // + kplate_code_scaner_read_result_point_num = 0x7304, // + kplate_code_scaner_read_code = 0x7305, // + kplate_code_scaner_adc_readraw = 0x7306, // + kplate_code_scaner_open_laser = 0x7307, // + kplate_code_scaner_close_laser = 0x7308, // + + /*********************************************************************************************************************** + * 移液枪 * + ***********************************************************************************************************************/ + kpipette_zmotor_enable = 0x7400, + kpipette_zmotor_move_zero = 0x7401, + kpipette_zmotor_move_to_zero_point_quick = 0x7402, + kpipette_zmotor_measure_distance = 0x7403, + kpipette_zmotor_read_measure_distance_result = 0x7404, + kpipette_zmotor_move_by = 0x7405, + kpipette_zmotor_move_to = 0x7406, + + kliquid_operation_clear_params = 0x7450, + kliquid_operation_set_gun_runparams = 0x7451, + kliquid_operation_set_zmotor_runparams = 0x7452, + kliquid_operation_enable_lld_record = 0x7453, + kliquid_operation_fresh_params = 0x7454, + + kpipette_init_device = 0x7501, + kpipette_put_tip = 0x7502, + kpipette_pump_move_to = 0x7503, + kpipette_lld = 0x7504, + kpipette_aspirate = 0x7505, + kpipette_distribu = 0x7506, + kpipette_shake_up = 0x7507, + kpipette_clear_hanging_liquid = 0x7508, + kpipette_lld_is_detect_liquid = 0x7509, + + kpipette_get_sensor_sample_data = 0x7510, + kpipette_get_sensor_sample_data_num = 0x7511, + kpipette_zmotor_read_zero_point_state = 0x7512, + kpipette_zmotor_read_dev_status_cache = 0x7513, + +} cmdid_t; + +typedef struct { + int index; + const char* fnname; +} cmdinfo_t; + +const char* cmdid2str(int32_t code); +cmdinfo_t* cmdid_get_table(); +int cmdid_get_table_size(); + +} // namespace zcr +} // namespace iflytop \ No newline at end of file diff --git a/protocol/errorcode.cpp b/protocol/errorcode.cpp new file mode 100644 index 0000000..abe2293 --- /dev/null +++ b/protocol/errorcode.cpp @@ -0,0 +1,108 @@ +#include "errorcode.hpp" + +#define ERR2STR(code) \ + case code: \ + return #code; + +namespace iflytop { +namespace err { + +#define ERR_ITERM(enum) \ + { enum, #enum } + +static ecode_table_item_t table[] = { + + ERR_ITERM(ksucc), + ERR_ITERM(kfail), + ERR_ITERM(kparam_out_of_range), + ERR_ITERM(kcmd_not_support), + ERR_ITERM(kdevice_is_busy), + ERR_ITERM(kdevice_is_offline), + ERR_ITERM(kovertime), + ERR_ITERM(knoack), + ERR_ITERM(kerrorack), + ERR_ITERM(kdevice_offline), + ERR_ITERM(kcheck_sum_error), + ERR_ITERM(ksubdevice_overtime), + ERR_ITERM(kbuffer_not_enough), + ERR_ITERM(kcmd_param_num_error), + ERR_ITERM(kcheckcode_is_error), + ERR_ITERM(killegal_operation), + ERR_ITERM(kaction_overtime), + ERR_ITERM(kmodule_opeation_break_by_user), + ERR_ITERM(kmodule_not_find_reg), + ERR_ITERM(kxymotor_x_find_zero_edge_fail), + ERR_ITERM(kxymotor_y_find_zero_edge_fail), + ERR_ITERM(kxymotor_not_enable), + ERR_ITERM(kxymotor_target_pos_outof_range), + ERR_ITERM(kxymotor_not_move_to_zero), + ERR_ITERM(kpipette_error_NoError), + ERR_ITERM(kpipette_error_InitFail), + ERR_ITERM(kpipette_error_InvalidCmd), + ERR_ITERM(kpipette_error_InvalidArg), + ERR_ITERM(kpipette_error_PressureSensorError), + ERR_ITERM(kpipette_error_OverPressure), + ERR_ITERM(kpipette_error_LLDError), + ERR_ITERM(kpipette_error_DeviceNotInit), + ERR_ITERM(kpipette_error_TipPopError), + ERR_ITERM(kpipette_error_PumpOverload), + ERR_ITERM(kpipette_error_TipDrop), + ERR_ITERM(kpipette_error_CanBusError), + ERR_ITERM(kpipette_error_InvalidChecksum), + ERR_ITERM(kpipette_error_EEPROMError), + ERR_ITERM(kpipette_error_CmdBufferEmpty), + ERR_ITERM(kpipette_error_CmdBufferOverflow), + ERR_ITERM(kpipette_error_TipBlock), + ERR_ITERM(kpipette_error_AirSuction), + ERR_ITERM(kpipette_error_Bubble), + ERR_ITERM(kpipette_error_VolumeError), + ERR_ITERM(kpipette_error_TipAlreadyLoad), + ERR_ITERM(kpipette_error_TipLoadFail), + ERR_ITERM(kpipette_error_no_tip_when_lld), + ERR_ITERM(kpipette_error_uninited), + ERR_ITERM(kpipette_error_not_lld_prepare), + ERR_ITERM(kpipette_error_tipisload_when_lld_prepare), + ERR_ITERM(kpipette_error_pump_load_val_is_not_empty), + ERR_ITERM(kstep_motor_not_found_zero_point), + ERR_ITERM(kstep_motor_not_go_zero), + ERR_ITERM(kstep_motor_over_temperature), + ERR_ITERM(kstep_motor_over_voltage), + ERR_ITERM(kstep_motor_run_overtime), + ERR_ITERM(kstep_motor_not_enable), + ERR_ITERM(kstep_motor_ioindex_out_of_range), + ERR_ITERM(kstep_motor_subic_reset), + ERR_ITERM(kstep_motor_drv_err), + ERR_ITERM(kstep_motor_uv_cp), + ERR_ITERM(kstep_motor_not_found_point_edge), + ERR_ITERM(kstep_motor_lost_step), + ERR_ITERM(kstep_motor_not_move_to_zero), + ERR_ITERM(kstep_motor_ot), + ERR_ITERM(kstep_motor_otpw), + ERR_ITERM(kstep_motor_s2ga), + ERR_ITERM(kstep_motor_s2gb), + ERR_ITERM(kstep_motor_ola), + ERR_ITERM(kstep_motor_olb), + ERR_ITERM(kmini_servo_not_enable), + ERR_ITERM(kmini_servo_mode_not_support), + ERR_ITERM(kfan_hardware_fault), + ERR_ITERM(kwater_cooling_fan_error), + ERR_ITERM(kwater_cooling_temperature_sensor_error), + ERR_ITERM(kwater_cooling_pump_is_error), + ERR_ITERM(kwater_cooling_pelter_is_error), + +}; + +const char* error2str(int32_t code) { + for (int i = 0; i < sizeof(table) / sizeof(table[0]); i++) { + if (table[i].index == code) { + return table[i].info; + } + } + return "unknown error"; +} + +ecode_table_item_t* error_get_table() { return table; } +int error_get_table_size() { return sizeof(table) / sizeof(table[0]); } + +} // namespace err +} // namespace iflytop diff --git a/protocol/errorcode.hpp b/protocol/errorcode.hpp new file mode 100644 index 0000000..f26dbae --- /dev/null +++ b/protocol/errorcode.hpp @@ -0,0 +1,112 @@ +#pragma once +#include + +namespace iflytop { +namespace err { +using namespace std; + +#define ERROR_CODE(errortype, suberrorcode) (errortype + suberrorcode) + +typedef enum { + + ksucc = 0, + kfail = 1001, + + kparam_out_of_range = 1102, + kcmd_not_support = 1103, + kdevice_is_busy = 1104, + kdevice_is_offline = 1105, + kovertime = 1106, + knoack = 1107, + kerrorack = 1108, + kdevice_offline = 1109, + kcheck_sum_error = 1110, + + ksubdevice_overtime = 1111, + kbuffer_not_enough = 1112, + kcmd_param_num_error = 1114, + kcheckcode_is_error = 1115, + killegal_operation = 1116, + kaction_overtime = 1117, + + kmodule_opeation_break_by_user = 1202, + kmodule_not_find_reg = 1207, + + kxymotor_x_find_zero_edge_fail = 1306, + kxymotor_y_find_zero_edge_fail = 1307, + kxymotor_not_enable = 1308, + kxymotor_target_pos_outof_range = 1309, + kxymotor_not_move_to_zero = 1310, + + kpipette_error_NoError = 1400, + kpipette_error_InitFail = 1401, + kpipette_error_InvalidCmd = 1402, + kpipette_error_InvalidArg = 1403, + kpipette_error_PressureSensorError = 1404, + kpipette_error_OverPressure = 1405, + kpipette_error_LLDError = 1406, + kpipette_error_DeviceNotInit = 1407, + kpipette_error_TipPopError = 1408, + kpipette_error_PumpOverload = 1409, + kpipette_error_TipDrop = 1410, + kpipette_error_CanBusError = 1411, + kpipette_error_InvalidChecksum = 1412, + kpipette_error_EEPROMError = 1413, + kpipette_error_CmdBufferEmpty = 1414, + kpipette_error_CmdBufferOverflow = 1415, + kpipette_error_TipBlock = 1416, + kpipette_error_AirSuction = 1417, + kpipette_error_Bubble = 1418, + kpipette_error_VolumeError = 1419, + kpipette_error_TipAlreadyLoad = 1420, + kpipette_error_TipLoadFail = 1421, + kpipette_error_no_tip_when_lld = 1422, + + kpipette_error_uninited = 1501, + kpipette_error_not_lld_prepare = 1502, + kpipette_error_tipisload_when_lld_prepare = 1500, + kpipette_error_pump_load_val_is_not_empty = 1503, + + kstep_motor_not_found_zero_point = 1600, + kstep_motor_not_go_zero = 1601, + kstep_motor_over_temperature = 1602, + kstep_motor_over_voltage = 1603, + kstep_motor_run_overtime = 1604, + kstep_motor_not_enable = 1605, + kstep_motor_ioindex_out_of_range = 1606, + kstep_motor_subic_reset = 1607, + kstep_motor_drv_err = 1608, + kstep_motor_uv_cp = 1609, + kstep_motor_not_found_point_edge = 1610, + kstep_motor_lost_step = 1611, + kstep_motor_not_move_to_zero = 1612, + kstep_motor_ot = 1613, + kstep_motor_otpw = 1614, + kstep_motor_s2ga = 1615, + kstep_motor_s2gb = 1616, + kstep_motor_ola = 1617, + kstep_motor_olb = 1618, + + kmini_servo_not_enable = 1700, + kmini_servo_mode_not_support = 1701, + + kfan_hardware_fault = 1800, + + kwater_cooling_fan_error = 1900, + kwater_cooling_temperature_sensor_error = 1902, + kwater_cooling_pump_is_error = 1903, + kwater_cooling_pelter_is_error = 1904, +} error_t; + +typedef struct { + int index; + const char* info; +} ecode_table_item_t; + +const char* error2str(int32_t code); + +ecode_table_item_t* error_get_table(); +int error_get_table_size(); + +} // namespace err +} // namespace iflytop \ No newline at end of file diff --git a/protocol/packet.hpp b/protocol/packet.hpp new file mode 100644 index 0000000..481ba23 --- /dev/null +++ b/protocol/packet.hpp @@ -0,0 +1,53 @@ +#pragma once +#include +#define ZCANCMD_PACKET_MAX_LEN 64 + +namespace iflytop { + +typedef enum { + khbot_module = 1, // hbot模块 + ktemperature_ctrl_module = 3, // 温度控制 + kfan_ctrl_module = 5, // 风扇控制 + kcode_scaner = 6, // 扫码器 + kpipette_ctrl_module = 7, // 移液体枪控制 + ka8000_optical_module = 8, // a8000光学模组 + ktmc_step_motor = 10, // 步进电机 + kmini_servo_motor_module = 11, // 舵机 + kboard = 12, // 板子 + ka8000_idcard_reader = 13, // id卡读卡器 + ka8000_plate_code_scaner = 14, // 反应板条扫码器 +} module_type_t; + +namespace zcr { +#pragma pack(push, 1) +typedef struct { + uint8_t packetType; + uint16_t cmdid; + uint8_t moduleId; + uint8_t index; + uint8_t datalen; + uint8_t data[]; + /* int8_t checksum;*/ +} zcr_cmd_header_t; + +#pragma pack(pop) + +typedef enum { + kptv2_cmd = 0xA0, + kptv2_ack = 0xA1, + kptv2_error_ack = 0xA2, + kptv2_event = 0xA3, +} zcan_cmd_packet_type_t; + +static inline bool zcr_cmd_checkpacket(const zcr_cmd_header_t* header, int len) { + if (len < sizeof(zcr_cmd_header_t)) return false; + if ((header->datalen + sizeof(zcr_cmd_header_t) + 1) != len) return false; + + uint8_t checksum = 0; + for (int i = 0; i < len - 1; i++) checksum += ((uint8_t*)header)[i]; + + return checksum == ((uint8_t*)header)[len - 1]; +} + +} // namespace zcr +} // namespace iflytop diff --git a/protocol/reg_index.cpp b/protocol/reg_index.cpp new file mode 100644 index 0000000..7a2dab9 --- /dev/null +++ b/protocol/reg_index.cpp @@ -0,0 +1,203 @@ + +#include "reg_index.hpp" + +#include + +namespace iflytop { + +#define REG_ITERM(enum) {enum, #enum} + +static reginfo_t table[] = { + REG_ITERM(kreg_module_version), + REG_ITERM(kreg_module_type), + REG_ITERM(kreg_module_status), + REG_ITERM(kreg_module_errorcode), + + REG_ITERM(kreg_extboard_resetflag), + + REG_ITERM(kreg_water_cooling_tmp_controler_pid_target), + REG_ITERM(kreg_water_cooling_tmp_controler_pid_nowoutput), + REG_ITERM(kreg_water_cooling_tmp_controler_pid_feedbackval), + REG_ITERM(kreg_water_cooling_tmp_controler_temp0), + REG_ITERM(kreg_water_cooling_tmp_controler_temp1), + REG_ITERM(kreg_water_cooling_tmp_controler_temp2), + REG_ITERM(kreg_water_cooling_tmp_controler_temp3), + + REG_ITERM(kreg_water_cooling_tmp_controler_pid_kp), + REG_ITERM(kreg_water_cooling_tmp_controler_pid_ki), + REG_ITERM(kreg_water_cooling_tmp_controler_pid_kd), + REG_ITERM(kreg_water_cooling_tmp_controler_pid_max_output), + REG_ITERM(kreg_water_cooling_tmp_controler_pid_min_output), + REG_ITERM(kreg_water_cooling_tmp_controler_pid_max_integral), + REG_ITERM(kreg_water_cooling_tmp_controler_pid_min_integral), + REG_ITERM(kreg_water_cooling_tmp_controler_pid_error_limit), + REG_ITERM(kreg_water_cooling_tmp_controler_pid_compute_interval), + + REG_ITERM(kreg_pipette_pos_nl), + REG_ITERM(kreg_pipette_capactitance_val), + REG_ITERM(kreg_pipette_tip_state), + + // REG_ITERM(kreg_pipette_limit_ul), + // REG_ITERM(kreg_pipette_pump_acc), + // REG_ITERM(kreg_pipette_pump_dec), + // REG_ITERM(kreg_pipette_pump_vstart), + // REG_ITERM(kreg_pipette_pump_vstop), + // REG_ITERM(kreg_pipette_pump_vmax), + // REG_ITERM(kreg_pipette_aspirate_pump_vel), + // REG_ITERM(kreg_pipette_lld_pump_vel), + // REG_ITERM(kreg_pipette_lld_motor_vel_rpm), + // REG_ITERM(kreg_pipette_lld_detect_period_ms), + // REG_ITERM(kreg_pipette_lld_prepare_pos), + // REG_ITERM(kreg_pipette_lld_prepare_pre_distribut_ul), + // REG_ITERM(kreg_pipette_lld_enable_record_data), + // REG_ITERM(kreg_pipette_distribu_pump_vel), + + REG_ITERM(kreg_pipette_zm_pos), + REG_ITERM(kreg_pipette_zm_is_enable), + REG_ITERM(kreg_pipette_zm_dpos), + REG_ITERM(kreg_pipette_zm_shift), + REG_ITERM(kreg_pipette_zm_shaft), + REG_ITERM(kreg_pipette_zm_one_circle_pulse), + REG_ITERM(kreg_pipette_zm_one_circle_pulse_denominator), + REG_ITERM(kreg_pipette_zm_default_velocity), + REG_ITERM(kreg_pipette_zm_ihold), + REG_ITERM(kreg_pipette_zm_irun), + REG_ITERM(kreg_pipette_zm_iholddelay), + REG_ITERM(kreg_pipette_zm_iglobalscaler), + REG_ITERM(kreg_pipette_zm_run_to_zero_speed), + REG_ITERM(kreg_pipette_zm_look_zero_edge_speed), + REG_ITERM(kreg_pipette_zm_max_d), + REG_ITERM(kreg_pipette_zm_min_d), + REG_ITERM(kreg_pipette_zm_in_debug_mode), + REG_ITERM(kreg_pipette_zm_vstart), + REG_ITERM(kreg_pipette_zm_a1), + REG_ITERM(kreg_pipette_zm_amax), + REG_ITERM(kreg_pipette_zm_v1), + REG_ITERM(kreg_pipette_zm_dmax), + REG_ITERM(kreg_pipette_zm_d1), + REG_ITERM(kreg_pipette_zm_vstop), + REG_ITERM(kreg_pipette_zm_tzerowait), + REG_ITERM(kreg_pipette_zm_enc_resolution), + REG_ITERM(kreg_pipette_zm_enable_enc), + REG_ITERM(kreg_pipette_zm_dzero), + REG_ITERM(kreg_pipette_zm_pos_devi_tolerance), + REG_ITERM(kreg_pipette_zm_io_trigger_append_distance), + + REG_ITERM(kreg_a8k_opt_t_pos_offset), + REG_ITERM(kreg_a8k_opt_f_pos_offset), + REG_ITERM(kreg_a8k_opt_t_reverse_scan_pos_offset), + REG_ITERM(kreg_a8k_opt_f_reverse_scan_pos_offset), + REG_ITERM(kreg_a8k_opt_scan_step_interval), + REG_ITERM(kreg_a8k_opt_scan_pointnum), + + REG_ITERM(kreg_xyrobot_io_state), + REG_ITERM(kreg_xyrobot_is_enable), + REG_ITERM(kreg_xyrobot_has_move_to_zero), + REG_ITERM(kreg_xyrobot_robot_type), + REG_ITERM(kreg_xyrobot_one_circle_pulse), + REG_ITERM(kreg_xyrobot_one_circle_pulse_denominator), + REG_ITERM(kreg_xyrobot_ihold), + REG_ITERM(kreg_xyrobot_irun), + REG_ITERM(kreg_xyrobot_iholddelay), + REG_ITERM(kreg_xyrobot_iglobalscaler), + REG_ITERM(kreg_xyrobot_vstart), + REG_ITERM(kreg_xyrobot_a1), + REG_ITERM(kreg_xyrobot_amax), + REG_ITERM(kreg_xyrobot_v1), + REG_ITERM(kreg_xyrobot_dmax), + REG_ITERM(kreg_xyrobot_d1), + REG_ITERM(kreg_xyrobot_vstop), + REG_ITERM(kreg_xyrobot_tzerowait), + REG_ITERM(kreg_xyrobot_enc_resolution), + REG_ITERM(kreg_xyrobot_enable_enc), + REG_ITERM(kreg_xyrobot_x_shaft), + REG_ITERM(kreg_xyrobot_y_shaft), + REG_ITERM(kreg_xyrobot_min_x), + REG_ITERM(kreg_xyrobot_min_y), + REG_ITERM(kreg_xyrobot_max_x), + REG_ITERM(kreg_xyrobot_max_y), + REG_ITERM(kreg_xyrobot_run_to_zero_speed), + REG_ITERM(kreg_xyrobot_look_zero_edge_speed), + REG_ITERM(kreg_xyrobot_shift_x), + REG_ITERM(kreg_xyrobot_shift_y), + REG_ITERM(kreg_xyrobot_default_velocity), + REG_ITERM(kreg_xyrobot_pos_devi_tolerance), + REG_ITERM(kreg_xyrobot_io_trigger_append_distance), + + REG_ITERM(kreg_step_motor_pos), + REG_ITERM(kreg_step_motor_is_enable), + REG_ITERM(kreg_step_motor_dpos), + REG_ITERM(kreg_step_motor_has_move_zero), + REG_ITERM(kreg_step_motor_shift), + REG_ITERM(kreg_step_motor_shaft), + REG_ITERM(kreg_step_motor_one_circle_pulse), + REG_ITERM(kreg_step_motor_one_circle_pulse_denominator), + REG_ITERM(kreg_step_motor_default_velocity), + REG_ITERM(kreg_step_motor_ihold), + REG_ITERM(kreg_step_motor_irun), + REG_ITERM(kreg_step_motor_iholddelay), + REG_ITERM(kreg_step_motor_iglobalscaler), + REG_ITERM(kreg_step_motor_run_to_zero_speed), + REG_ITERM(kreg_step_motor_look_zero_edge_speed), + REG_ITERM(kreg_step_motor_max_d), + REG_ITERM(kreg_step_motor_min_d), + REG_ITERM(kreg_step_motor_in_debug_mode), + REG_ITERM(kreg_step_motor_vstart), + REG_ITERM(kreg_step_motor_a1), + REG_ITERM(kreg_step_motor_amax), + REG_ITERM(kreg_step_motor_v1), + REG_ITERM(kreg_step_motor_dmax), + REG_ITERM(kreg_step_motor_d1), + REG_ITERM(kreg_step_motor_vstop), + REG_ITERM(kreg_step_motor_tzerowait), + REG_ITERM(kreg_step_motor_enc_resolution), + REG_ITERM(kreg_step_motor_enable_enc), + REG_ITERM(kreg_step_motor_dzero_pos), + REG_ITERM(kreg_step_motor_pos_devi_tolerance), + REG_ITERM(kreg_step_motor_io_trigger_append_distance), + + REG_ITERM(kreg_mini_servo_pos), + REG_ITERM(kreg_mini_servo_is_enable), + REG_ITERM(kreg_mini_servo_limit_velocity), + REG_ITERM(kreg_mini_servo_limit_torque), + REG_ITERM(kreg_mini_servo_protective_torque), + REG_ITERM(kreg_mini_servo_is_move), + REG_ITERM(kreg_id_card_reader_raw_sector_size), + REG_ITERM(kreg_id_card_reader_raw_sector_num), + REG_ITERM(kreg_id_card_reader_is_online), + + REG_ITERM(kreg_plate_code_scaner_laster_intensity), + REG_ITERM(kreg_plate_code_scaner_scan_gain), + REG_ITERM(kreg_plate_code_scaner_scan_velocity), + REG_ITERM(kreg_plate_code_scaner_scan_start_pos), + REG_ITERM(kreg_plate_code_scaner_final_stop_pos), + REG_ITERM(kreg_plate_code_scaner_code_judgment_threshold), + REG_ITERM(kreg_plate_code_scaner_item), + REG_ITERM(kreg_plate_code_scaner_lot), + REG_ITERM(kreg_plate_code_scaner_rawcode), + REG_ITERM(kreg_plate_code_scaner_code_legal), + +}; + +reginfo_t *get_reginfo_by_index(int32_t index) { + for (int i = 0; i < sizeof(table) / sizeof(table[0]); i++) { + if (table[i].index == index) { + return &table[i]; + } + } + return nullptr; +} + +const char *regindex2str(int32_t index) { + for (int i = 0; i < sizeof(table) / sizeof(table[0]); i++) { + if (table[i].index == index) { + return table[i].regname; + } + } + return "unknown reg"; +} + +reginfo_t *reg_get_table() { return table; } +int reg_get_table_size() { return sizeof(table) / sizeof(table[0]); } + +} // namespace iflytop diff --git a/protocol/reg_index.hpp b/protocol/reg_index.hpp new file mode 100644 index 0000000..8c562a2 --- /dev/null +++ b/protocol/reg_index.hpp @@ -0,0 +1,224 @@ +#pragma once +#include + +namespace iflytop { +using namespace std; + +typedef enum { + /******************************************************************************* + * 模块通用配置和状态 * + *******************************************************************************/ + kreg_module_version = 0, // 模块版本 + kreg_module_type = 1, // 模块类型 + kreg_module_status = 2, // 0idle,1busy,2error + kreg_module_errorcode = 3, // inited_flag + + /******************************************************************************* + * 板子模块 * + *******************************************************************************/ + kreg_extboard_resetflag = 100, // 板子复位标识 + + /*********************************************************************************************************************** + * 水冷温度控制器 * + ***********************************************************************************************************************/ + kreg_water_cooling_tmp_controler_pid_target = 3000, // 目标数值 + kreg_water_cooling_tmp_controler_pid_nowoutput = 3001, // 当前输出 + kreg_water_cooling_tmp_controler_pid_feedbackval = 3002, // 当前输出 + kreg_water_cooling_tmp_controler_temp0 = 3003, // 温度1 + kreg_water_cooling_tmp_controler_temp1 = 3004, // 温度2 + kreg_water_cooling_tmp_controler_temp2 = 3005, // 温度3 + kreg_water_cooling_tmp_controler_temp3 = 3006, // 温度4 + + kreg_water_cooling_tmp_controler_pid_kp = 3050, // kp + kreg_water_cooling_tmp_controler_pid_ki = 3051, // ki + kreg_water_cooling_tmp_controler_pid_kd = 3052, // kd + kreg_water_cooling_tmp_controler_pid_max_output = 3053, // 最大输出 + kreg_water_cooling_tmp_controler_pid_min_output = 3054, // 最小输出 + kreg_water_cooling_tmp_controler_pid_max_integral = 3055, // 最大积分 + kreg_water_cooling_tmp_controler_pid_min_integral = 3056, // 最小积分 + kreg_water_cooling_tmp_controler_pid_error_limit = 3057, // 误差限制 + kreg_water_cooling_tmp_controler_pid_compute_interval = 3058, // 计算间隔 + + /******************************************************************************* + * 移液枪状态 * + *******************************************************************************/ + kreg_pipette_pos_nl = 4000, // 移液枪位置 + kreg_pipette_capactitance_val = 4001, // 移液枪电容值 + kreg_pipette_tip_state = 4002, // 移动液枪tip状态 + + + kreg_pipette_zm_pos = 4101, + kreg_pipette_zm_is_enable = 4102, + kreg_pipette_zm_dpos = 4103, + kreg_pipette_zm_shift = 4105, + kreg_pipette_zm_shaft = 4106, + kreg_pipette_zm_one_circle_pulse = 4107, + kreg_pipette_zm_one_circle_pulse_denominator = 4108, + kreg_pipette_zm_default_velocity = 4109, + kreg_pipette_zm_ihold = 4110, + kreg_pipette_zm_irun = 4111, + kreg_pipette_zm_iholddelay = 4112, + kreg_pipette_zm_iglobalscaler = 4113, + kreg_pipette_zm_run_to_zero_speed = 4114, + kreg_pipette_zm_look_zero_edge_speed = 4115, + kreg_pipette_zm_max_d = 4116, + kreg_pipette_zm_min_d = 4117, + kreg_pipette_zm_in_debug_mode = 4118, + kreg_pipette_zm_vstart = 4119, + kreg_pipette_zm_a1 = 4120, + kreg_pipette_zm_amax = 4121, + kreg_pipette_zm_v1 = 4122, + kreg_pipette_zm_dmax = 4123, + kreg_pipette_zm_d1 = 4124, + kreg_pipette_zm_vstop = 4125, + kreg_pipette_zm_tzerowait = 4126, + kreg_pipette_zm_enc_resolution = 4127, + kreg_pipette_zm_enable_enc = 4128, + kreg_pipette_zm_dzero = 4129, + kreg_pipette_zm_pos_devi_tolerance = 4130, + kreg_pipette_zm_io_trigger_append_distance = 4131, + + /** + * @brief + * + * ------------------------------------------------------ + * + * + * 扫描零点偏移:(F光学向左扫描的起始位置) + * 扫描方向:1:板卡箭头方向,-1板卡箭头反方向 + * 扫描点数:固定为1200 + * 扫描步距:固定为1 + * + * 返回点数:(1200) + * + * + */ + // 坐标参数 + + kreg_a8k_opt_t_pos_offset = 4501, // T光学正向扫描,扫描起始位距离零点的偏移 + kreg_a8k_opt_f_pos_offset = 4502, // F光学正向扫描,扫描起始位距离零点的偏移 + kreg_a8k_opt_t_reverse_scan_pos_offset = 4503, // T光学逆向扫描,扫描起始位距离零点的偏移 + kreg_a8k_opt_f_reverse_scan_pos_offset = 4504, // F光学逆向扫描,扫描起始位距离零点的偏移 + kreg_a8k_opt_scan_step_interval = 4505, // 参数固定:为1 + kreg_a8k_opt_scan_pointnum = 4506, // 参数固定:为1200个点 + + /*********************************************************************************************************************** + * XYROBOT * + ***********************************************************************************************************************/ + + kreg_xyrobot_io_state = 9900, // + kreg_xyrobot_is_enable = 9901, // + kreg_xyrobot_has_move_to_zero = 9902, // + kreg_xyrobot_robot_type = 9950, // + kreg_xyrobot_one_circle_pulse = 9951, // + kreg_xyrobot_one_circle_pulse_denominator = 9952, // + kreg_xyrobot_ihold = 9954, // + kreg_xyrobot_irun = 9955, // + kreg_xyrobot_iholddelay = 9956, // + kreg_xyrobot_iglobalscaler = 9957, // + kreg_xyrobot_vstart = 9958, // + kreg_xyrobot_a1 = 9959, // + kreg_xyrobot_amax = 9960, // + kreg_xyrobot_v1 = 9961, // + kreg_xyrobot_dmax = 9962, // + kreg_xyrobot_d1 = 9963, // + kreg_xyrobot_vstop = 9964, // + kreg_xyrobot_tzerowait = 9965, // + kreg_xyrobot_enc_resolution = 9966, // + kreg_xyrobot_enable_enc = 9967, // + kreg_xyrobot_x_shaft = 9968, // + kreg_xyrobot_y_shaft = 9969, // + kreg_xyrobot_min_x = 9972, // + kreg_xyrobot_min_y = 9973, // + kreg_xyrobot_max_x = 9974, // + kreg_xyrobot_max_y = 9975, // + kreg_xyrobot_run_to_zero_speed = 9976, // + kreg_xyrobot_look_zero_edge_speed = 9977, // + kreg_xyrobot_shift_x = 9978, // + kreg_xyrobot_shift_y = 9979, // + kreg_xyrobot_pos_devi_tolerance = 9980, // + kreg_xyrobot_io_trigger_append_distance = 9981, // + kreg_xyrobot_default_velocity = 10000, // + + /*********************************************************************************************************************** + * step_motor * + ***********************************************************************************************************************/ + + kreg_step_motor_pos = 10101, // 机器人x坐标 + kreg_step_motor_is_enable = 10102, // 步进电机是否使能 + kreg_step_motor_dpos = 10103, // 执行完上一条指令后的相对位移 + kreg_step_motor_has_move_zero = 10104, // 是否回零 + kreg_step_motor_shift = 10150, // x偏移 + kreg_step_motor_shaft = 10151, // x轴是否反转 + kreg_step_motor_one_circle_pulse = 10152, // x轴一圈脉冲数 + kreg_step_motor_one_circle_pulse_denominator = 10153, // 设置一圈脉冲数的分母 + kreg_step_motor_default_velocity = 10154, // 默认速度 + kreg_step_motor_ihold = 10158, // 步进电机电流配置 + kreg_step_motor_irun = 10159, // 步进电机电流配置 + kreg_step_motor_iholddelay = 10160, // 步进电机电流配置 + kreg_step_motor_iglobalscaler = 10161, // 步进电机电流配置 + kreg_step_motor_run_to_zero_speed = 10173, // 回零速度 + kreg_step_motor_look_zero_edge_speed = 10175, // 找零边缘速度 + kreg_step_motor_max_d = 10178, // 最大限制距离 + kreg_step_motor_min_d = 10179, // 最小限制距离 + kreg_step_motor_in_debug_mode = 10180, // 驱动器处于调试模式 + kreg_step_motor_vstart = 10181, // a1起作用的速度 + kreg_step_motor_a1 = 10182, // + kreg_step_motor_amax = 10183, // + kreg_step_motor_v1 = 10184, // + kreg_step_motor_dmax = 10185, // + kreg_step_motor_d1 = 10186, // + kreg_step_motor_vstop = 10187, // + kreg_step_motor_tzerowait = 10188, // + kreg_step_motor_enc_resolution = 10189, // 编码器分辨率 1000,1024,4000,4096,16384 + kreg_step_motor_enable_enc = 10190, // + kreg_step_motor_dzero_pos = 10191, // 驱动器处于调试模式 + kreg_step_motor_pos_devi_tolerance = 10192, // 位置偏差容忍度 + kreg_step_motor_io_trigger_append_distance = 10193, // 移动到IO时,会在原点触发的边沿,稍稍里面移动一点,用来保证IO稳定触发 + + /*********************************************************************************************************************** + * step_motor * + ***********************************************************************************************************************/ + + kreg_mini_servo_pos = 10201, // 位置 + kreg_mini_servo_is_enable = 10202, + kreg_mini_servo_limit_velocity = 10251, // 限制速度 + kreg_mini_servo_limit_torque = 10252, // 限制扭矩 + kreg_mini_servo_protective_torque = 10253, // 保护扭矩 + kreg_mini_servo_is_move = 10254, // isMove + + /*********************************************************************************************************************** + * ID_CARD_READER * + ***********************************************************************************************************************/ + + kreg_id_card_reader_raw_sector_size = 10301, // + kreg_id_card_reader_raw_sector_num = 10302, // + kreg_id_card_reader_is_online = 10303, // + + /*********************************************************************************************************************** + * 板夹仓扫码 * + ***********************************************************************************************************************/ + + kreg_plate_code_scaner_laster_intensity = 10401, // + kreg_plate_code_scaner_scan_gain = 10402, // + kreg_plate_code_scaner_scan_velocity = 10403, // + kreg_plate_code_scaner_scan_start_pos = 10404, // + kreg_plate_code_scaner_final_stop_pos = 10405, // + kreg_plate_code_scaner_code_judgment_threshold = 10406, // + kreg_plate_code_scaner_item = 10407, // + kreg_plate_code_scaner_lot = 10408, // + kreg_plate_code_scaner_rawcode = 10409, // + kreg_plate_code_scaner_code_legal = 10410, // + +} reg_index_t; + +typedef struct { + int index; + const char* regname; +} reginfo_t; + +const char* regindex2str(int32_t code); +reginfo_t* reg_get_table(); +int reg_get_table_size(); + +} // namespace iflytop diff --git a/protocol/zmotor_struct.hpp b/protocol/zmotor_struct.hpp new file mode 100644 index 0000000..40e88f8 --- /dev/null +++ b/protocol/zmotor_struct.hpp @@ -0,0 +1,121 @@ +#pragma once +#include + +#include + +typedef struct { + uint32_t sg_result : 10; + uint32_t reserved0 : 5; + uint32_t fsactive : 1; + uint32_t cs_actual : 5; + uint32_t reserved1 : 3; + uint32_t stallguard : 1; + uint32_t ot : 1; + uint32_t otpw : 1; + uint32_t s2ga : 1; + uint32_t s2gb : 1; + uint32_t ola : 1; + uint32_t olb : 1; + uint32_t stst : 1; +} TMC5130MotorStatus_t; + +typedef struct { + uint32_t reset : 1; // fatal error + uint32_t drv_err : 1; // fatal error + uint32_t uv_cp : 1; // fatal error +} TMC5130MotorState_t; // R+C + +typedef struct { + uint32_t sg_result : 10; + uint32_t reserved0 : 1; + uint32_t reserved1 : 1; + uint32_t s2vsa : 1; + uint32_t s2vsb : 1; + uint32_t stealth : 1; + uint32_t fsactive : 1; + uint32_t cs_actual : 5; + uint32_t reserved2 : 3; + uint32_t stallguard : 1; + uint32_t ot : 1; + uint32_t otpw : 1; + uint32_t s2ga : 1; + uint32_t s2gb : 1; + uint32_t ola : 1; + uint32_t olb : 1; + uint32_t stst : 1; +} TMC2160MotorDriverStatus_t; + +typedef struct { + uint32_t TARGET_REACHED_F : 1; // XACTUAL = XTARGET + uint32_t POS_COMP_REACHED_F : 1; // XACTUAL = POS_COMP + uint32_t VEL_REACHED_F : 1; // VACTUAL = |VMAX| + uint32_t VEL_STATE_F : 2; // 0:VACTUAL = 0; 1:VACTUAL > 0; 2:VACTUAL < 0 + uint32_t RAMP_STATE_F : 2; // 0:AACTUAL = 0; 1:AACTUAL 增加(加速); 2:AACTUAL 减小(减速) + uint32_t STOPL_ACTIVE_F : 1; // 左停止开关有效。 + + uint32_t STOPR_ACTIVE_F : 1; // 右停止开关有效。 + uint32_t VSTOPL_ACTIVE_F : 1; // 左虚拟停止开关有效。 + uint32_t VSTOPR_ACTIVE_F : 1; // 右虚拟停止开关有效。 + uint32_t ACTIVE_STALL_F : 1; // 电机堵转检测且 VACTUAL > VSTALL_LIMIT。 + uint32_t HOME_ERROR_F : 1; // 输入信号电平不等于预期的回零电平。 + uint32_t FS_ACTIVE_F : 1; // 全步有效。 + uint32_t ENC_FAIL_F : 1; // XACTUAL 和 ENC_POS 中间的差值超出容差。 + uint32_t N_ACTIVE_F : 1; // 事件有效 + + uint32_t ENC_LATCH_F : 1; // ENC_LATCH 被重置。 + uint32_t MULTI_CYCLE_FAIL_F : 1; // 仅适用于绝对编码器 MULTI_CYCLE_FAIL_F 表示上一个多圈数据出现故障。 + uint32_t ___ : 1; // + uint32_t CL_FIT_F : 1; // 如果 ENC_POS_DEV < CL_COMPLATION,则有效。XACTUAL 和 ENC_POS 之间的差值在容许范围内 + uint32_t SERIAL_ENC_FLAGS : 4; // 仅适用于绝对编码器:从编码器接收的 SERIAL_ENC_FLAGS。新的编码器传输请求是会重置这些标志 + + uint32_t SG : 1; // 仅 TMC26x / TMC21x0 StallGuard2 状态。 + uint32_t OT : 1; // 过温关断。 + uint32_t OTPW : 1; // 过温预警。 + uint32_t S2GA : 1; // 线圈 A 高端 MOSFET 管对地短路检测位。 + uint32_t S2GB : 1; // 线圈 B 高端 MOSFET 管对地短路检测位。 + uint32_t OLA : 1; // 线圈 A 开路。 + uint32_t OLB : 1; // 线圈 B 开路。 + uint32_t STST : 1; // 仅 TMC26x / TMC21x0 静止状态。 +} TMC4361AMotorStatus_t; // R+CW 事件标志位 + +typedef struct { + uint32_t reset : 1; // fatal error + uint32_t drv_err : 1; // fatal error + uint32_t uv_cp : 1; // fatal error +} TMC2160MotorGstate_t; // R+C + +typedef struct { + uint32_t TARGET_REACHED : 1; // + uint32_t POS_COMP_REACHED : 1; // + uint32_t VEL_REACHED : 1; // + uint32_t VEL_STATE_EQ_0 : 1; // + uint32_t VEL_STATE_EQ_1 : 1; // + uint32_t VEL_STATE_EQ_2 : 1; // + uint32_t RAMP_STATE_EQ_0 : 1; // + uint32_t RAMP_STATE_EQ_1 : 1; // + uint32_t RAMP_STATE_EQ_2 : 1; // + uint32_t MAX_PHASE_TRAP : 1; // 梯形斜坡已经达到其极限速度 + uint32_t FROZEN : 1; // 重置 TMC4361A,以便进一步运动。 fatal error + uint32_t STOPL : 1; // + uint32_t STOPR : 1; // + uint32_t VSTOPL_ACTIVE : 1; // + uint32_t VSTOPR_ACTIVE : 1; // + uint32_t HOME_ERROR : 1; // + uint32_t XLATCH_DONE : 1; // + uint32_t FS_ACTIVE : 1; // + uint32_t ENC_FAIL : 1; // + uint32_t N_ACTIVE : 1; // + uint32_t ENC_DONE : 1; // + uint32_t SER_ENC_DATA_FAIL : 1; // + uint32_t ___ : 1; // + uint32_t SER_DATA_DONE : 1; // + uint32_t SERIAL_ENC_Flags : 1; // + uint32_t COVER_DONE : 1; // + uint32_t ENC_VEL0 : 1; // 编码器速度到 0。 + uint32_t CL_MAX : 1; // + uint32_t CL_FIT : 1; // + uint32_t STOP_ON_STALL : 1; // 检测到电机堵转。电机斜坡已经停止。 fatal error + uint32_t MOTOR_EV : 1; // 选定的 TMC 电机驱动器标志之一被触发。 + uint32_t RST_EV : 1; // 复位被触发。 fatal error +} TMC4361AMotorEventState_t; +