From 328bc102df060ee781b6988aae3654324ba76910 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Fri, 12 Jul 2024 15:52:46 +0800 Subject: [PATCH] update --- Obsidian.jar | Bin 0 -> 2498 bytes Sublime Text3 Monokai.jar | Bin 0 -> 3879 bytes src/main/java/a8k/a8k_can_protocol/CmdId.java | 329 +++++++++++++++++++++ src/main/java/a8k/a8k_can_protocol/CmdIdInfo.java | 18 ++ src/main/java/a8k/a8k_can_protocol/Errorcode.java | 235 +++++++++++++++ src/main/java/a8k/a8k_can_protocol/ModuleId.java | 5 + src/main/java/a8k/a8k_can_protocol/Packet.java | 116 ++++++++ .../java/a8k/base_hardware/A8kCanBusService.java | 149 ++++++++++ .../base_hardware/ReconnectingWebSocketClient.java | 82 +++++ .../java/a8k/controler/ZhaoheTestControler.java | 16 + .../java/a8k/service/ConsumableLoadingService.java | 25 ++ src/main/java/a8k/utils/ByteArray.java | 74 +++++ .../com/iflytop/a800/BoditechA800Application.java | 2 +- src/main/resources/application-dev.yml | 2 +- vjtools-code-conventions-idea.xml | 29 ++ 15 files changed, 1080 insertions(+), 2 deletions(-) create mode 100644 Obsidian.jar create mode 100644 Sublime Text3 Monokai.jar create mode 100644 src/main/java/a8k/a8k_can_protocol/CmdId.java create mode 100644 src/main/java/a8k/a8k_can_protocol/CmdIdInfo.java create mode 100644 src/main/java/a8k/a8k_can_protocol/Errorcode.java create mode 100644 src/main/java/a8k/a8k_can_protocol/ModuleId.java create mode 100644 src/main/java/a8k/a8k_can_protocol/Packet.java create mode 100644 src/main/java/a8k/base_hardware/A8kCanBusService.java create mode 100644 src/main/java/a8k/base_hardware/ReconnectingWebSocketClient.java create mode 100644 src/main/java/a8k/controler/ZhaoheTestControler.java create mode 100644 src/main/java/a8k/service/ConsumableLoadingService.java create mode 100644 src/main/java/a8k/utils/ByteArray.java create mode 100644 vjtools-code-conventions-idea.xml diff --git a/Obsidian.jar b/Obsidian.jar new file mode 100644 index 0000000000000000000000000000000000000000..90022f781d1cd30e69c6d737d70e2dcc0d14708f GIT binary patch literal 2498 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 literal 0 HcmV?d00001 diff --git a/src/main/java/a8k/a8k_can_protocol/CmdId.java b/src/main/java/a8k/a8k_can_protocol/CmdId.java new file mode 100644 index 0000000..2c89754 --- /dev/null +++ b/src/main/java/a8k/a8k_can_protocol/CmdId.java @@ -0,0 +1,329 @@ +package a8k.a8k_can_protocol; + +import java.util.Collections; +import java.util.Set; + +public class CmdId { + + public static int CMDID(int mainid, int subid) { + return (mainid << 8) + subid; + } + + public static final int kboard_reset = CMDID(0, 0); // para:{}, ack:{} + + public static final int kevent_bus_reg_change_report = CMDID(0, 100); // val{regindex, oldval, toval} + + public static final int kmodule_ping = CMDID(1, 0); + public static final int kmodule_get_status = CMDID(1, 4); + public static final int kmodule_stop = CMDID(1, 1); + public static final int kmodule_set_reg = CMDID(1, 5); + public static final int kmodule_get_reg = CMDID(1, 6); + public static final int kmodule_get_error = CMDID(1, 10); + public static final int kmodule_clear_error = CMDID(1, 11); + public static final int kmodule_active_cfg = CMDID(1, 16); + + public static final int kxymotor_enable = CMDID(3, 1); + public static final int kxymotor_move_by = CMDID(3, 2); + public static final int kxymotor_move_to = CMDID(3, 3); + public static final int kxymotor_move_to_zero = CMDID(3, 4); + public static final int kxymotor_read_pos = CMDID(3, 6); + public static final int kxymotor_read_inio_index_in_stm32 = CMDID(3, 7); + public static final int kxymotor_read_inio = CMDID(3, 8); + public static final int kxymotor_set_pos = CMDID(3, 9); + public static final int kxymotor_motor_move_by_direct = CMDID(3, 10); // int32_t motor1_dpos, int32_t motor2_dpos + public static final int kxymotor_read_enc_direct = CMDID(3, 11); // int32_t *enc1, int32_t *enc2 + + /*********************************************************************************************************************** + * 光学模组 * + ***********************************************************************************************************************/ + public static final int ka8000_optical_module_power_ctrl = CMDID(6, 0); // para:{4}, ack:{} + public static final int ka8000_optical_open_laser = CMDID(6, 1); // para:{4}, ack:{} + public static final int ka8000_optical_close_laser = CMDID(6, 2); // para:{4}, ack:{} + public static final int ka8000_optical_set_laster_gain = CMDID(6, 3); // para:{4,4}, ack:{} + public static final int ka8000_optical_set_scan_amp_gain = CMDID(6, 4); // para:{4,4}, ack:{} + public static final int ka8000_optical_read_scanner_adc_val = CMDID(6, 5); // para:{4}, ack:{4} + public static final int ka8000_optical_read_laster_adc_val = CMDID(6, 6); // para:{4}, ack:{4} + public static final int ka8000_optical_scan_current_point_amp_adc_val = CMDID(6, 7); // para:{4,4,4,4}, ack:{4,4} + public static final int ka8000_optical_start_capture = CMDID(6, 8); // para:{n/a} + public static final int ka8000_optical_read_raw = CMDID(6, 9); // para:{index,size} + + public static final int ka8k_opt_v2_t_start_scan = CMDID(7, 0); // (int32_t scanDirection, int32_t lasterGain,int32_t scanGain) + public static final int ka8k_opt_v2_f_start_scan = CMDID(7, 1); // (int32_t scanDirection, int32_t lasterGain,int32_t scanGain) + public static final int ka8k_opt_v2_t_open_laster = CMDID(7, 10); // (int32_t lasterGain,int32_t scanGain) for_debug + public static final int ka8k_opt_v2_t_close_laster = CMDID(7, 11); // () for_debug + public static final int ka8k_opt_v2_t_readVal = CMDID(7, 12); // (int32_t *val0,int32_t *val1) for_debug + public static final int ka8k_opt_v2_f_open_laster = CMDID(7, 13); // (int32_t lasterGain,int32_t scanGain) for_debug + public static final int ka8k_opt_v2_f_close_laster = CMDID(7, 14); // () for_debug + public static final int ka8k_opt_v2_f_readVal = CMDID(7, 15); // (int32_t *val0,int32_t *val1) for_debug + + /*********************************************************************************************************************** + * STEP_MOTOR * + ***********************************************************************************************************************/ + + public static final int kstep_motor_enable = CMDID(2, 1); // para:{1}, ack:{} + public static final int kstep_motor_read_pos = CMDID(2, 11); // para:{}, ack:{4} + public static final int kstep_motor_easy_rotate = CMDID(2, 17); // para:{4}, ack:{} + public static final int kstep_motor_easy_move_by = CMDID(2, 18); // para:{4}, ack:{} + public static final int kstep_motor_easy_move_to = CMDID(2, 19); // para:{4}, ack:{} + public static final int kstep_motor_easy_move_to_zero = CMDID(2, 20); // para:{1}, ack:{} + public static final int kstep_motor_easy_set_current_pos = CMDID(2, 21); // para:{4}, ack:{} + public static final int kstep_motor_easy_move_to_io = CMDID(2, 22); // para:{4,4}, ack:{} + public static final int kstep_motor_stop = CMDID(2, 40); // para:{4}, ack:{} + public static final int kstep_motor_active_cfg = CMDID(2, 41); // para:{4}, ack:{} + public static final int kstep_motor_read_io_state = CMDID(2, 42); // para:{4}, ack:{} + public static final int kstep_motor_easy_move_to_end_point = CMDID(2, 44); // + public static final int kstep_motor_easy_reciprocating_motion = CMDID(2, 45); // (int32_t startpos, int32_t endpos, int32_t times) = 0; + + public static final int kstep_motor_read_tmc5130_status = CMDID(2, 50); // + public static final int kstep_motor_read_tmc5130_state = CMDID(2, 51); // 调试使用 + public static final int kstep_motor_read_io_index_in_stm32 = CMDID(2, 56); // 调试使用 + public static final int kstep_motor_set_subdevice_reg = CMDID(2, 57); // 调试使用 + public static final int kstep_motor_get_subdevice_reg = CMDID(2, 58); // 调试使用 + + /*********************************************************************************************************************** + * MINI_SERVO * + ***********************************************************************************************************************/ + public static final int kmini_servo_enable = CMDID(102, 1); + public static final int kmini_servo_read_pos = CMDID(102, 2); + public static final int kmini_servo_active_cfg = CMDID(102, 3); + public static final int kmini_servo_stop = CMDID(102, 4); + public static final int kmini_servo_set_mid_point = CMDID(102, 7); + public static final int kmini_servo_read_io_state = CMDID(102, 8); + + public static final int kmini_servo_move_to = CMDID(102, 9); + public static final int kmini_servo_rotate = CMDID(102, 10); + public static final int kmini_servo_rotate_with_torque = CMDID(102, 11); + + /*********************************************************************************************************************** + * BOARD * + ***********************************************************************************************************************/ + public static final int kextboard_read_inio = CMDID(103, 1); // para:{index}, ack:{state} + public static final int kextboard_write_outio = CMDID(103, 2); // para:{index,state}, ack:{} + public static final int kextboard_read_muti_inio = CMDID(103, 3); // para:{}, ack:{states} + public static final int kextboard_read_inio_index_in_stm32 = CMDID(103, 4); // para:{index}, ack:{index_in_stm32} + public static final int kextboard_read_outio_index_in_stm32 = CMDID(103, 5); // para:{index}, ack:{index_in_stm32} + public static final int kextboard_read_outio = CMDID(103, 6); // para:{index}, ack:{state} + + /*********************************************************************************************************************** + * CODE_SCANER * + ***********************************************************************************************************************/ + public static final int kcode_scaner_start_scan = CMDID(104, 1); // para:{}, ack:{} + public static final int kcode_scaner_stop_scan = CMDID(104, 2); // para:{}, ack:{} + public static final int kcode_scaner_result_is_ready = CMDID(104, 3); // para:{}, ack:{} + public static final int kcode_scaner_read_scaner_result = CMDID(104, 4); // para:{}, ack:{X} + public static final int kcode_scaner_get_result_length = CMDID(104, 5); // para:{}, ack:{X} + + /*********************************************************************************************************************** + * FAN_CTRL * + ***********************************************************************************************************************/ + public static final int kfan_controler_set_speed = CMDID(0x69, 0); + + /*********************************************************************************************************************** + * WATER_COOLING_TEMPERATURE * + ***********************************************************************************************************************/ + public static final int ktemp_controler_start_hearting = CMDID(0x70, 0); + public static final int ktemp_controler_stop_hearting = CMDID(0x70, 1); + public static final int ktemp_controler_set_peltier_power_level = CMDID(0x70, 2); // 测试使用 para:{+-level100} + public static final int ktemp_controler_set_pump_level = CMDID(0x70, 3); // 测试使用 para:{+ level100} + public static final int ktemp_controler_set_fan_level = CMDID(0x70, 4); // 测试使用 para:{+ level100} + public static final int ktemp_controler_enable_log = CMDID(0x70, 5); // 测试使用 para:{enable log} + + /*********************************************************************************************************************** + * IDCARD_READER * + ***********************************************************************************************************************/ + public static final int ka8000_idcard_reader_read_raw = CMDID(0x71, 0); // para:{index}, ack:{} + public static final int ka8000_idcard_write_raw = CMDID(0x71, 1); // (int32_t add, uint8_t* data, int32_t len) + public static final int ka8000_idcard_erase = CMDID(0x71, 2); // + public static final int ka8000_idcard_earse_unlock = CMDID(0x71, 3); // + public static final int kevent_a8000_idcard_online = CMDID(0x71, 200); // + public static final int kevent_a8000_idcard_offline = CMDID(0x71, 201); // + + /*********************************************************************************************************************** + * 移液枪 * + ***********************************************************************************************************************/ + + public static final int kpipette_ctrl_init_device = CMDID(0x72, 1); // param:(void) + public static final int kpipette_ctrl_put_tip = CMDID(0x72, 2); // param:(void) + public static final int kpipette_ctrl_move_to_ul = CMDID(0x72, 3); // param:(int32_t ul) + public static final int kpipette_lld_prepare = CMDID(0x72, 4); // param:(void) + public static final int kpipette_plld = CMDID(0x72, 5); // param:(int32_t zdpos, int32_t p_threshold) + public static final int kpipette_clld = CMDID(0x72, 6); // param:(int32_t zdpos, int32_t c_threshold) + public static final int kpipette_mlld = CMDID(0x72, 7); // param:(int32_t zdpos, int32_t c_threshold, int32_t + // p_threshold) + public static final int kpipette_lld_is_detect_liquid = CMDID(0x72, 8); // param:(void) ack(int32_t isdetect) + public static final int kpipette_aspirate = CMDID(0x72, 9); // param:(int32_t ul) + public static final int kpipette_distribut = CMDID(0x72, 10); // param:(int32_t ul) + public static final int kpipette_shake_up = CMDID(0x72, 11); // param:(int32_t ul, int32_t times) + public static final int kpipette_aspirate_llf = CMDID(0x72, 12); // param:(int32_t ul, int32_t zmotor_v) + public static final int kpipette_distribut_llf = CMDID(0x72, 13); // param:(int32_t ul, int32_t zmotor_v) + public static final int kpipette_shake_up_llf = CMDID(0x72, 14); // param:(int32_t ul, int32_t zmotor_v, int32_t + // times) + + public static final int kpipette_enable_zmotor = CMDID(0x72, 20); // para:{enable}, ack:{} + public static final int kpipette_write_cmd_direct = CMDID(0x72, 21); // para:{strbuf}, ack:{strbuf} + public static final int kpipette_get_sensor_sample_data = CMDID(0x72, 22); // para:{index} , + // ack:{motor_pos,cval,pval} + public static final int kpipette_get_sensor_sample_data_num = CMDID(0x72, 23); // para:{} , ack:{num} + public static final int kpipette_sensor_sample_data_report = CMDID(0x72, 50); // val{regindex, oldval, toval} + + /*********************************************************************************************************************** + * 板夹仓板夹扫码 * + ***********************************************************************************************************************/ + + public static final int kplate_code_scaner_push_card_and_scan = CMDID(0x73, 1); // int32_t startpos + public static final int kplate_code_scaner_stop_scan = CMDID(0x73, 2); // + public static final int kplate_code_scaner_read_result = CMDID(0x73, 3); // int32_t packetIndex, uint8_t* data, + // int32_t* len + public static final int kplate_code_scaner_read_result_point_num = CMDID(0x73, 4); // int32_t* pointNum + public static final int kplate_code_scaner_read_code = CMDID(0x73, 5); // int32_t* rawcode, int32_t* legal, int32_t* + // item, int32_t* lot + + public static final int kplate_code_scaner_adc_readraw = CMDID(0x73, 6); // 硬件测试使用 int32_t* val + public static final int kplate_code_scaner_open_laser = CMDID(0x73, 7); // 硬件测试使用 + public static final int kplate_code_scaner_close_laser = CMDID(0x73, 8); // 硬件测试使用 + + public static final Set cmdInfoMap; + + static public String idtoString(Integer cmdid){ + for(CmdIdInfo ci : cmdInfoMap){ + if(ci.id == cmdid){ + return ci.name; + } + } + return String.format("unknown(%d)", cmdid); + } + static public CmdIdInfo getCmdIdInfo(Integer cmdid){ + for(CmdIdInfo ci : cmdInfoMap){ + if(ci.id == cmdid){ + return ci; + } + } + + return new CmdIdInfo(cmdid,"unkown",CmdIdInfo.ATTACH_IS_BYTES,CmdIdInfo.ATTACH_IS_BYTES); + } + + + static { + cmdInfoMap = Collections.unmodifiableSet(Set.of(// + new CmdIdInfo(kboard_reset, "kboard_reset",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32), // + new CmdIdInfo(kevent_bus_reg_change_report, "kevent_bus_reg_change_report",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kmodule_ping, "kmodule_ping",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kmodule_get_status, "kmodule_get_status",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32), // + new CmdIdInfo(kmodule_stop, "kmodule_stop",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kmodule_set_reg, "kmodule_set_reg",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kmodule_get_reg, "kmodule_get_reg",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kmodule_get_error, "kmodule_get_error",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kmodule_clear_error, "kmodule_clear_error",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kmodule_active_cfg, "kmodule_active_cfg",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kxymotor_enable, "kxymotor_enable",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kxymotor_move_by, "kxymotor_move_by",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kxymotor_move_to, "kxymotor_move_to",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kxymotor_move_to_zero, "kxymotor_move_to_zero",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kxymotor_read_pos, "kxymotor_read_pos",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kxymotor_read_inio_index_in_stm32, "kxymotor_read_inio_index_in_stm32",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kxymotor_read_inio, "kxymotor_read_inio",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kxymotor_set_pos, "kxymotor_set_pos",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kxymotor_motor_move_by_direct, "kxymotor_motor_move_by_direct",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kxymotor_read_enc_direct, "kxymotor_read_enc_direct",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ka8000_optical_module_power_ctrl, "ka8000_optical_module_power_ctrl",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ka8000_optical_open_laser, "ka8000_optical_open_laser",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ka8000_optical_close_laser, "ka8000_optical_close_laser",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ka8000_optical_set_laster_gain, "ka8000_optical_set_laster_gain",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32), // + new CmdIdInfo(ka8000_optical_set_scan_amp_gain, "ka8000_optical_set_scan_amp_gain",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ka8000_optical_read_scanner_adc_val, "ka8000_optical_read_scanner_adc_val",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ka8000_optical_read_laster_adc_val, "ka8000_optical_read_laster_adc_val",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ka8000_optical_scan_current_point_amp_adc_val, "ka8000_optical_scan_current_point_amp_adc_val",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ka8000_optical_start_capture, "ka8000_optical_start_capture",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ka8000_optical_read_raw, "ka8000_optical_read_raw",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_BYTES),// + new CmdIdInfo(ka8k_opt_v2_t_start_scan, "ka8k_opt_v2_t_start_scan",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ka8k_opt_v2_f_start_scan, "ka8k_opt_v2_f_start_scan",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ka8k_opt_v2_t_open_laster, "ka8k_opt_v2_t_open_laster",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ka8k_opt_v2_t_close_laster, "ka8k_opt_v2_t_close_laster",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ka8k_opt_v2_t_readVal, "ka8k_opt_v2_t_readVal",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ka8k_opt_v2_f_open_laster, "ka8k_opt_v2_f_open_laster",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ka8k_opt_v2_f_close_laster, "ka8k_opt_v2_f_close_laster",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ka8k_opt_v2_f_readVal, "ka8k_opt_v2_f_readVal",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kstep_motor_enable, "kstep_motor_enable",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kstep_motor_read_pos, "kstep_motor_read_pos",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kstep_motor_easy_rotate, "kstep_motor_easy_rotate",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kstep_motor_easy_move_by, "kstep_motor_easy_move_by",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kstep_motor_easy_move_to, "kstep_motor_easy_move_to",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kstep_motor_easy_move_to_zero, "kstep_motor_easy_move_to_zero",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kstep_motor_easy_set_current_pos, "kstep_motor_easy_set_current_pos",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kstep_motor_easy_move_to_io, "kstep_motor_easy_move_to_io",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kstep_motor_stop, "kstep_motor_stop",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kstep_motor_active_cfg, "kstep_motor_active_cfg",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kstep_motor_read_io_state, "kstep_motor_read_io_state",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kstep_motor_easy_move_to_end_point, "kstep_motor_easy_move_to_end_point",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kstep_motor_easy_reciprocating_motion, "kstep_motor_easy_reciprocating_motion",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kstep_motor_read_tmc5130_status, "kstep_motor_read_tmc5130_status",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kstep_motor_read_tmc5130_state, "kstep_motor_read_tmc5130_state",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kstep_motor_read_io_index_in_stm32, "kstep_motor_read_io_index_in_//stm32",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kstep_motor_set_subdevice_reg, "kstep_motor_set_subdevice_reg",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kstep_motor_get_subdevice_reg, "kstep_motor_//get_subdevice_reg",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kmini_servo_enable, "kmini_servo_enable",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kmini_servo_read_pos, "kmini_servo_read_pos",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kmini_servo_active_cfg, "kmini_servo_active_cfg",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kmini_servo_stop, "kmini_servo_stop",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kmini_servo_set_mid_point, "kmini_servo_set_mid_point",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kmini_servo_read_io_state, "kmini_servo_read_i//o_state",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kmini_servo_move_to, "kmini_servo_move_to",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kmini_servo_rotate, "kmini_servo_rotate",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kmini_servo_rotate_with_torque, "kmini_servo_rotate_with_torque",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kextboard_read_inio, "kextboard_read_inio",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kextboard_write_outio, "kextboard_write_outio",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kextboard_read_muti_inio, "kextboard_read_muti_inio",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kextboard_read_inio_index_in_stm32, "kextboard_read_inio_index_in_stm32",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kextboard_read_outio_index_in_stm32, "kextboard_//read_outio_index_in_stm32",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kextboard_read_outio, "kextboard_read_outio",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kcode_scaner_start_scan, "kcode_scaner_start_scan",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kcode_scaner_stop_scan, "kcode_scaner_stop_scan",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kcode_scaner_result_is_ready, "kcode_scaner_result_is_ready",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kcode_scaner_read_scaner_result, "kcode_scaner_read_scaner_result",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kcode_scaner_get_result_length, "kcode_scaner_get_result//_length",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32), // + new CmdIdInfo(kfan_controler_set_speed, "kfan_controler_set_speed",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ktemp_controler_start_hearting, "ktemp_controler_start_hearting",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ktemp_controler_stop_hearting, "ktemp_controler_stop_hearting",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ktemp_controler_set_peltier_power_level, "ktemp_controler_set_peltier_power_level",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ktemp_controler_set_pump_level, "ktemp_controler_set_pump_level",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ktemp_controler_set_fan_level, "ktemp_controler_set_fan_level",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ktemp_controler_enable_log, "ktemp_controler_enable_log",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ka8000_idcard_reader_read_raw, "ka8000_idcard_reader_read_raw",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_BYTES),// + new CmdIdInfo(ka8000_idcard_write_raw, "ka8000_idcard_write_//raw",CmdIdInfo.ATTACH_IS_BYTES,CmdIdInfo.ATTACH_IS_BYTES),// + new CmdIdInfo(ka8000_idcard_erase, "ka8000_idcard_erase",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(ka8000_idcard_earse_unlock, "ka8000_idcard_earse_unlock",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kevent_a8000_idcard_online, "kevent_a8000_idcard_online",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kevent_a8000_idcard_offline, "kevent_a8000_idcard_offline",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kpipette_ctrl_init_device, "kpipette_ctrl_init_device",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kpipette_ctrl_put_tip, "kpipette_ctrl_put_tip",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kpipette_ctrl_move_to_ul, "kpipette_ctrl_move_to_ul",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kpipette_lld_prepare, "kpipette_lld_prepare",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kpipette_plld, "kpipette_plld",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kpipette_clld, "kpipette_clld",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kpipette_mlld, "kpipette_mlld",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kpipette_lld_is_detect_liquid, "kpipette_lld_is_detect_liquid",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kpipette_aspirate, "kpipette_aspirate",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kpipette_distribut, "kpipette_distribut",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kpipette_shake_up, "kpipette_shake_up",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kpipette_aspirate_llf, "kpipette_aspirate_llf",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kpipette_distribut_llf, "kpipette_distribut_llf",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kpipette_shake_up_llf, "kpipette_shake_up_llf",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kpipette_enable_zmotor, "kpipette_enable_zmotor",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kpipette_write_cmd_direct, "kpipette_write_cmd_direct",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kpipette_get_sensor_sample_data, "kpipette_get_sensor_sample_data",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kpipette_get_sensor_sample_data_num, "kpipette_get_sensor_sample_data_num",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kpipette_sensor_sample_data_report, "kpipette_sensor_sample_data_report",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32), + new CmdIdInfo(kplate_code_scaner_push_card_and_scan, "kplate_code_scaner_push_//card_and_scan",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kplate_code_scaner_stop_scan, "kplate_code_scaner_stop_scan",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kplate_code_scaner_read_result, "kplate_code_scaner_read_result",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kplate_code_scaner_read_result_point_num, "kplate_code_scaner_read_result_point_num",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kplate_code_scaner_read_code, "kplate_code_scaner_read_code",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kplate_code_scaner_adc_readraw, "kplate_code_scaner_adc_readraw",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kplate_code_scaner_open_laser, "kplate_code_scaner_open_laser",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32),// + new CmdIdInfo(kplate_code_scaner_close_laser, "kplate_code_scaner_close_laser",CmdIdInfo.ATTACH_IS_INT32,CmdIdInfo.ATTACH_IS_INT32)// + )); + } + + + +} diff --git a/src/main/java/a8k/a8k_can_protocol/CmdIdInfo.java b/src/main/java/a8k/a8k_can_protocol/CmdIdInfo.java new file mode 100644 index 0000000..e792e1b --- /dev/null +++ b/src/main/java/a8k/a8k_can_protocol/CmdIdInfo.java @@ -0,0 +1,18 @@ +package a8k.a8k_can_protocol; + +public class CmdIdInfo { + public String name; + public int id; + public int cmdAttachType = ATTACH_IS_INT32; + public int receiptAttachType = ATTACH_IS_BYTES; + + public final static int ATTACH_IS_BYTES = 1; + public final static int ATTACH_IS_INT32 = 2; + + public CmdIdInfo(Integer id, String name, int cmdAttachType, int receiptAttachType) { + this.id = id; + this.name = name; + this.cmdAttachType = cmdAttachType; + this.receiptAttachType = receiptAttachType; + } +} diff --git a/src/main/java/a8k/a8k_can_protocol/Errorcode.java b/src/main/java/a8k/a8k_can_protocol/Errorcode.java new file mode 100644 index 0000000..7a648e6 --- /dev/null +++ b/src/main/java/a8k/a8k_can_protocol/Errorcode.java @@ -0,0 +1,235 @@ +package a8k.a8k_can_protocol; + +public class Errorcode { + + public static final int ksucc = (0 + 0); + public static final int kfail = (0 + 1); + /*********************************************************************************************************************** + * 协议错误码 * + ***********************************************************************************************************************/ + public static final int kparam_out_of_range = (100 + 2); // 参数超出范围 + public static final int kcmd_not_support = (100 + 3); // 操作不支持 + public static final int kdevice_is_busy = (100 + 4); // 设备忙 + public static final int kdevice_is_offline = (100 + 5); // 设备离线 + public static final int kovertime = (100 + 6); + public static final int knoack = (100 + 7); + public static final int kerrorack = (100 + 8); + public static final int kdevice_offline = (100 + 9); + public static final int ksubdevice_overtime = (100 + 11); + public static final int kbuffer_not_enough = (100 + 12); + public static final int kcmd_param_num_error = (100 + 14); + public static final int kcheckcode_is_error = (100 + 15); + public static final int killegal_operation = (100 + 16); + + /*********************************************************************************************************************** + * 模块错误码 * + ***********************************************************************************************************************/ + public static final int kmodule_opeation_break_by_user = (200 + 2); // 用户中断 + public static final int kmodule_not_find_reg = (200 + 7); // et 未找到配置索引 + + /*********************************************************************************************************************** + * XY电机驱动错误码 * + ***********************************************************************************************************************/ + public static final int kxymotor_x_find_zero_edge_fail = (300 + 6); // 离开零点失败 + public static final int kxymotor_y_find_zero_edge_fail = (300 + 7); // 离开零点失败 + public static final int kxymotor_not_enable = (300 + 8); + public static final int kxymotor_target_pos_outof_range = (300 + 9); + /*********************************************************************************************************************** + * 移液枪错误码 * + ***********************************************************************************************************************/ + public static final int kpipette_error_NoError = (400 + 0); // 无错误 + public static final int kpipette_error_InitFail = (400 + 1); // 初始化失败 + public static final int kpipette_error_InvalidCmd = (400 + 2); // 无效命令 + public static final int kpipette_error_InvalidArg = (400 + 3); // 无效参数 + public static final int kpipette_error_PressureSensorError = (400 + 4); // 压力传感器故障 + public static final int kpipette_error_OverPressure = (400 + 5); // 超过压力 + public static final int kpipette_error_LLDError = (400 + 6); // LLD 错误 + public static final int kpipette_error_DeviceNotInit = (400 + 7); // 设备未初始化 + public static final int kpipette_error_TipPopError = (400 + 8); // Tip 弹出错误 + public static final int kpipette_error_PumpOverload = (400 + 9); // 泵过载 + public static final int kpipette_error_TipDrop = (400 + 10); // Tip 脱落 + public static final int kpipette_error_CanBusError = (400 + 11); // CAN 总线故障 + public static final int kpipette_error_InvalidChecksum = (400 + 12); // 无效校验和 + public static final int kpipette_error_EEPROMError = (400 + 13); // EEPROM 故障 + public static final int kpipette_error_CmdBufferEmpty = (400 + 14); // 命令缓冲区为空 + public static final int kpipette_error_CmdBufferOverflow = (400 + 15); // 命令溢出 + public static final int kpipette_error_TipBlock = (400 + 16); // Tip 堵塞 + public static final int kpipette_error_AirSuction = (400 + 17); // 吸入空气 + public static final int kpipette_error_Bubble = (400 + 18); // 液体中有气泡/泡沫 + public static final int kpipette_error_VolumeError = (400 + 19); // 吸取/分配量不准确 + public static final int kpipette_error_TipAlreadyLoad = (400 + 20); // Tip已经装载 + public static final int kpipette_error_TipLoadFail = (400 + 21); + public static final int kpipette_error_tipisload_when_lld_prepare = (500 + 0); // 未卸载Tip就进行LLD准备 + public static final int kpipette_error_uninited = (500 + 1); // 泵机未初始化 + public static final int kpipette_error_not_lld_prepare = (500 + 2); // 为执行lld_prepare + public static final int kpipette_error_pump_load_val_is_not_empty = (500 + 3); // 为执行lld_prepare + + /*********************************************************************************************************************** + * 步进电机错误码 * + ***********************************************************************************************************************/ + public static final int kstep_motor_not_found_zero_point = (600 + 0); // 未找到零点 + public static final int kstep_motor_not_go_zero = (600 + 1); // 设备未归零 + public static final int kstep_motor_over_temperature = (600 + 2); // 过温 + public static final int kstep_motor_over_voltage = (600 + 3); // 过压 + public static final int kstep_motor_run_overtime = (600 + 4); // 运行超时 + public static final int kstep_motor_not_enable = (600 + 5); // 电机未使能 + public static final int kstep_motor_ioindex_out_of_range = (600 + 6); // IO超出范围 + public static final int kstep_motor_subic_reset = (600 + 7); // 子IC复位 + public static final int kstep_motor_drv_err = (600 + 8); // 驱动器异常 + public static final int kstep_motor_uv_cp = (600 + 9); // 驱动器异常 + public static final int kstep_motor_not_found_point_edge = (600 + 10); // 未找到零点 + + /*********************************************************************************************************************** + * 舵机错误码 * + ***********************************************************************************************************************/ + public static final int kmini_servo_not_enable = (700 + 0); // + public static final int kmini_servo_mode_not_support = (700 + 1); // + /*********************************************************************************************************************** + * 风扇错误码 * + ***********************************************************************************************************************/ + public static final int kfan_hardware_fault = (800 + 0); // + + /*********************************************************************************************************************** + * 水冷错误码 * + ***********************************************************************************************************************/ + public static final int kwater_cooling_fan_error = (900 + 0); // + public static final int kwater_cooling_temperature_sensor_error = (900 + 2); // + public static final int kwater_cooling_pump_is_error = (900 + 3); // + public static final int kwater_cooling_pelter_is_error = (900 + 4); // + + static public String toString(Integer ecode) { + switch (ecode) { + case ksucc: + return "ksucc"; + case kfail: + return "kfail"; + case kparam_out_of_range: + return "kparam_out_of_range"; + case kcmd_not_support: + return "kcmd_not_support"; + case kdevice_is_busy: + return "kdevice_is_busy"; + case kdevice_is_offline: + return "kdevice_is_offline"; + case kovertime: + return "kovertime"; + case knoack: + return "knoack"; + case kerrorack: + return "kerrorack"; + case kdevice_offline: + return "kdevice_offline"; + case ksubdevice_overtime: + return "ksubdevice_overtime"; + case kbuffer_not_enough: + return "kbuffer_not_enough"; + case kcmd_param_num_error: + return "kcmd_param_num_error"; + case kcheckcode_is_error: + return "kcheckcode_is_error"; + case killegal_operation: + return "killegal_operation"; + case kmodule_opeation_break_by_user: + return "kmodule_opeation_break_by_user"; + case kmodule_not_find_reg: + return "kmodule_not_find_reg"; + case kxymotor_x_find_zero_edge_fail: + return "kxymotor_x_find_zero_edge_fail"; + case kxymotor_y_find_zero_edge_fail: + return "kxymotor_y_find_zero_edge_fail"; + case kxymotor_not_enable: + return "kxymotor_not_enable"; + case kxymotor_target_pos_outof_range: + return "kxymotor_target_pos_outof_range"; + case kpipette_error_NoError: + return "kpipette_error_NoError"; + case kpipette_error_InitFail: + return "kpipette_error_InitFail"; + case kpipette_error_InvalidCmd: + return "kpipette_error_InvalidCmd"; + case kpipette_error_InvalidArg: + return "kpipette_error_InvalidArg"; + case kpipette_error_PressureSensorError: + return "kpipette_error_PressureSensorError"; + case kpipette_error_OverPressure: + return "kpipette_error_OverPressure"; + case kpipette_error_LLDError: + return "kpipette_error_LLDError"; + case kpipette_error_DeviceNotInit: + return "kpipette_error_DeviceNotInit"; + case kpipette_error_TipPopError: + return "kpipette_error_TipPopError"; + case kpipette_error_PumpOverload: + return "kpipette_error_PumpOverload"; + case kpipette_error_TipDrop: + return "kpipette_error_TipDrop"; + case kpipette_error_CanBusError: + return "kpipette_error_CanBusError"; + case kpipette_error_InvalidChecksum: + return "kpipette_error_InvalidChecksum"; + case kpipette_error_EEPROMError: + return "kpipette_error_EEPROMError"; + case kpipette_error_CmdBufferEmpty: + return "kpipette_error_CmdBufferEmpty"; + case kpipette_error_CmdBufferOverflow: + return "kpipette_error_CmdBufferOverflow"; + case kpipette_error_TipBlock: + return "kpipette_error_TipBlock"; + case kpipette_error_AirSuction: + return "kpipette_error_AirSuction"; + case kpipette_error_Bubble: + return "kpipette_error_Bubble"; + case kpipette_error_VolumeError: + return "kpipette_error_VolumeError"; + case kpipette_error_TipAlreadyLoad: + return "kpipette_error_TipAlreadyLoad"; + case kpipette_error_TipLoadFail: + return "kpipette_error_TipLoadFail"; + case kpipette_error_tipisload_when_lld_prepare: + return "kpipette_error_tipisload_when_lld_prepare"; + case kpipette_error_uninited: + return "kpipette_error_uninited"; + case kpipette_error_not_lld_prepare: + return "kpipette_error_not_lld_prepare"; + case kpipette_error_pump_load_val_is_not_empty: + return "kpipette_error_pump_load_val_is_not_empty"; + case kstep_motor_not_found_zero_point: + return "kstep_motor_not_found_zero_point"; + case kstep_motor_not_go_zero: + return "kstep_motor_not_go_zero"; + case kstep_motor_over_temperature: + return "kstep_motor_over_temperature"; + case kstep_motor_over_voltage: + return "kstep_motor_over_voltage"; + case kstep_motor_run_overtime: + return "kstep_motor_run_overtime"; + case kstep_motor_not_enable: + return "kstep_motor_not_enable"; + case kstep_motor_ioindex_out_of_range: + return "kstep_motor_ioindex_out_of_range"; + case kstep_motor_subic_reset: + return "kstep_motor_subic_reset"; + case kstep_motor_drv_err: + return "kstep_motor_drv_err"; + case kstep_motor_uv_cp: + return "kstep_motor_uv_cp"; + case kstep_motor_not_found_point_edge: + return "kstep_motor_not_found_point_edge"; + case kmini_servo_not_enable: + return "kmini_servo_not_enable"; + case kmini_servo_mode_not_support: + return "kmini_servo_mode_not_support"; + case kfan_hardware_fault: + return "kfan_hardware_fault"; + case kwater_cooling_fan_error: + return "kwater_cooling_fan_error"; + case kwater_cooling_temperature_sensor_error: + return "kwater_cooling_temperature_sensor_error"; + case kwater_cooling_pump_is_error: + return "kwater_cooling_pump_is_error"; + case kwater_cooling_pelter_is_error: + return "kwater_cooling_pelter_is_error"; + } + return "unkown" + "(" + ecode + ")"; + } +} diff --git a/src/main/java/a8k/a8k_can_protocol/ModuleId.java b/src/main/java/a8k/a8k_can_protocol/ModuleId.java new file mode 100644 index 0000000..2cab19e --- /dev/null +++ b/src/main/java/a8k/a8k_can_protocol/ModuleId.java @@ -0,0 +1,5 @@ +package a8k.a8k_can_protocol; + +public class ModuleId { + +} diff --git a/src/main/java/a8k/a8k_can_protocol/Packet.java b/src/main/java/a8k/a8k_can_protocol/Packet.java new file mode 100644 index 0000000..f71443e --- /dev/null +++ b/src/main/java/a8k/a8k_can_protocol/Packet.java @@ -0,0 +1,116 @@ +package a8k.a8k_can_protocol; + +import a8k.utils.ByteArray; + +public class Packet { + /** + * typedef struct { + * uint16_t packetindex; // 0: + * uint16_t cmdMainId; // 2: + * uint8_t cmdSubId; // 4: + * uint8_t packetType; // 5: + * uint16_t moduleid; // 6: + * uint8_t data[]; // 8: + * } zcr_cmd_header_t; + *

+ * kptv2_cmd = 0, + * kptv2_ack = 1, + * kptv2_error_ack = 2, + * kptv2_event = 3, + */ + + byte[] raw; + + public static final int PACKET_MIN_LEN = 8; + + public static final int PACKET_INDEX_OFF = 0; + public static final int CMD_ID_OFF = 2; + public static final int PACKET_TYPE_OFF = 5; + public static final int MODULE_ID_OFF = 6; + public static final int DATA_BEGIN_OFF = 8; + + + public static final int PACKET_TYPE_CMD = 0; + public static final int PACKET_TYPE_ACK = 1; + public static final int PACKET_TYPE_ERROR_ACK = 2; + public static final int PACKET_TYPE_EVENT = 3; + + public Packet(byte[] cmd) { + raw = new byte[cmd.length]; + System.arraycopy(cmd, 0, raw, 0, cmd.length); + } + + public Integer getPacketIndex() { + return ByteArray.readU16bit(raw, 0); + } + + public Integer getCmdId() { + return ByteArray.readU16bit((raw), 2) * 256 + ByteArray.readU8bit(raw, 4); + } + + public Integer getPacketType() { + return ByteArray.readU8bit(raw, 5); + } + + public Integer getModuleId() { + return ByteArray.readU16bit(raw, 6); + } + + public byte[] getCmdContent() { + byte[] cmdcontent = new byte[raw.length - 8]; + System.arraycopy(raw, 8, cmdcontent, 0, raw.length - 8); + return cmdcontent; + } + + public Integer getContentI32(int index) { + return ByteArray.readU16bit(raw, 8 + index * 4); + } + + public String toByteString() { + return ByteArray.toByteString(raw); + } + + + public String toString() { + int packetType = getPacketType(); + String ret = ""; + + CmdIdInfo cmdIdInfo = CmdId.getCmdIdInfo(getCmdId()); + + if (packetType == PACKET_TYPE_CMD) { + if (cmdIdInfo.cmdAttachType == CmdIdInfo.ATTACH_IS_INT32) { + ret = String.format("[CMD ] [%x] (%s %d :[%s])", getPacketIndex(), cmdIdInfo.name, getModuleId(), formatInt32ATTACH(getCmdContent())); + } else { + ret = String.format("[CMD ] [%x] (%s %d :[%s])", getPacketIndex(), cmdIdInfo.name, getModuleId(), ByteArray.toByteString(getCmdContent())); + } + } else if (packetType == PACKET_TYPE_ACK) { + if (cmdIdInfo.receiptAttachType == CmdIdInfo.ATTACH_IS_INT32) { + ret = String.format("[ACK ] [%x] (%s %d :[%s])", getPacketIndex(), cmdIdInfo.name, getModuleId(), formatInt32ATTACH(getCmdContent())); + } else { + ret = String.format("[ACK ] [%x] (%s %d :[%s])", getPacketIndex(), cmdIdInfo.name, getModuleId(), ByteArray.toByteString(getCmdContent())); + } + } else if (packetType == PACKET_TYPE_ERROR_ACK) { + ret = String.format("[EACK ] [%x] (%s %d :[%s])", getPacketIndex(), cmdIdInfo.name, getModuleId(), Errorcode.toString(getContentI32(0))); + } else if (packetType == PACKET_TYPE_EVENT) { + if (cmdIdInfo.cmdAttachType == CmdIdInfo.ATTACH_IS_INT32) { + ret = String.format("[EVENT] [%x] (%s %d :[%s])", getPacketIndex(), cmdIdInfo.name, getModuleId(), formatInt32ATTACH(getCmdContent())); + } else { + ret = String.format("[EVENT] [%x] (%s %d :[%s])", getPacketIndex(), cmdIdInfo.name, getModuleId(), ByteArray.toByteString(getCmdContent())); + } + } else { + ret = String.format("Unknown packet type: %d", packetType); + } + return ret; + } + + private String formatInt32ATTACH(byte[] attach) { + StringBuilder ret = new StringBuilder(); + for (int i = 0; i < attach.length; i += 4) { + if (i + 4 >= attach.length) + break; + ret.append(String.format("%d ", ByteArray.read32bit(attach, i))); + } + return ret.toString(); + } + +} diff --git a/src/main/java/a8k/base_hardware/A8kCanBusService.java b/src/main/java/a8k/base_hardware/A8kCanBusService.java new file mode 100644 index 0000000..c722461 --- /dev/null +++ b/src/main/java/a8k/base_hardware/A8kCanBusService.java @@ -0,0 +1,149 @@ +package a8k.base_hardware; + +import a8k.a8k_can_protocol.Packet; +import a8k.utils.ByteArray; +import jakarta.annotation.PostConstruct; +import org.java_websocket.client.WebSocketClient; +import org.java_websocket.enums.ReadyState; +import org.java_websocket.handshake.ServerHandshake; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Timer; +import java.util.TimerTask; + +@Component +public class A8kCanBusService { + public static final Logger logger = LoggerFactory.getLogger(A8kCanBusService.class); + + /** + * receiptQueue + * waittingReceiptIndex + * + * onPacket + * if(receipt) + * send_receipt_queue + * + * + * sendcmd + * send cmd + * waiting for receipt + * for(){ + * if(receipt.packetIndex == receiptIndex){ + * return; + * } + * wait + * } + * + */ + public String uri; //assign by application.yml + private WebSocketClient client; + Timer timer = new Timer(); + boolean need_reconnect = false; + + + @PostConstruct + public void init() throws URISyntaxException { + logger.info("BaseHardwareService initilized"); + if (this.uri == null) { + //this.uri = "ws://127.0.0.1:19005"; + this.uri = "ws://192.168.8.10:19005"; + } + + + URI uri = new URI(this.uri); + client = new WebSocketClient(uri) { + @Override + public void onOpen(ServerHandshake serverHandshake) { + logger.info("onOpen"); + } + + @Override + public void onMessage(String s) { + processMessage(s); + } + + @Override + public void onClose(int i, String s, boolean b) { + logger.info("onClose"); + } + + @Override + public void onError(Exception e) { + logger.info("onError"); + } + }; + client.connect(); + + + timer.schedule(new TimerTask() { + @Override + public void run() { + if (!client.isOpen()) { + if (client.getReadyState().equals(ReadyState.NOT_YET_CONNECTED)) { + try { + client.connect(); + } catch (IllegalStateException e) { + } + } else if (client.getReadyState().equals(ReadyState.CLOSING) || client.getReadyState().equals(ReadyState.CLOSED)) { + client.reconnect(); + } + } + } + }, 0, 1000); + } + + + + + // cmdId, + public void callcmd(Integer moduleId, Integer cmdId, Integer param0) { + + } + + public void callcmd(Integer moduleId, Integer cmdId, Integer param0, Integer param1) { + + } + + public void callcmd(Integer moduleId, Integer cmdId, Integer param0, Integer param1, Integer param2) { + + } + + public void callcmd(Integer moduleId, Integer cmdId, Integer param0, Integer param1, Integer param2, Integer param3) { + + } + + /** + * + */ + private void processMessage(String s) { + byte[] rx = ByteArray.hexStringToBytes(s); + if (rx == null || rx.length == 0) { + logger.warn("rx is empty"); + return; + } + + if (rx.length < Packet.PACKET_MIN_LEN) { + logger.warn("rx is too short"); + return; + } + + Packet packet = new Packet(rx); + logger.info("RX {}", packet); + + + } + + public static void main(String[] args) { + A8kCanBusService service = new A8kCanBusService(); + try { + service.init(); + } catch (URISyntaxException e) { + logger.error(e.getMessage()); + } + } + +} diff --git a/src/main/java/a8k/base_hardware/ReconnectingWebSocketClient.java b/src/main/java/a8k/base_hardware/ReconnectingWebSocketClient.java new file mode 100644 index 0000000..6f5543f --- /dev/null +++ b/src/main/java/a8k/base_hardware/ReconnectingWebSocketClient.java @@ -0,0 +1,82 @@ +package a8k.base_hardware; + +import org.java_websocket.client.WebSocketClient; +import org.java_websocket.handshake.ServerHandshake; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Timer; +import java.util.TimerTask; + + +public class ReconnectingWebSocketClient extends WebSocketClient { + public static final Logger logger = LoggerFactory.getLogger(A8kCanBusService.class); + + private URI serverUri; + private Timer reconnectTimer; + private boolean reconnecting; + + public ReconnectingWebSocketClient(URI serverUri) { + super(serverUri); + this.serverUri = serverUri; + this.reconnectTimer = new Timer("ReconnectTimer"); + this.reconnecting = false; + } + + @Override + public void onOpen(ServerHandshake handshakedata) { + System.out.println("WebSocket opened to: " + serverUri); + cancelReconnect(); + } + + @Override + public void onMessage(String message) { + System.out.println("Received message: " + message); + } + + @Override + public void onClose(int code, String reason, boolean remote) { + System.out.println("WebSocket closed. Code: " + code + ", Reason: " + reason); + scheduleReconnect(); + } + + @Override + public void onError(Exception ex) { + System.err.println("WebSocket error: " + ex.getMessage()); + scheduleReconnect(); + } + + private void scheduleReconnect() { + if (!reconnecting) { + reconnecting = true; + reconnectTimer.schedule(new TimerTask() { + @Override + public void run() { + if (!isOpen()) { + System.out.println("Attempting to reconnect to: " + serverUri); + reconnect(); + } + } + }, 5000); // 5 seconds delay before attempting to reconnect + } + } + + private void cancelReconnect() { + if (reconnecting) { + reconnecting = false; + reconnectTimer.cancel(); + reconnectTimer.purge(); + } + } + + + public static void main(String[] args) throws URISyntaxException, InterruptedException { + URI serverUri = new URI("ws://localhost:8080"); // Replace with your WebSocket server URI + ReconnectingWebSocketClient client = new ReconnectingWebSocketClient(serverUri); + client.connect(); + Thread.sleep(60000); // Example: Keep the program running for 1 minute + client.close(); + } +} diff --git a/src/main/java/a8k/controler/ZhaoheTestControler.java b/src/main/java/a8k/controler/ZhaoheTestControler.java new file mode 100644 index 0000000..fcc1693 --- /dev/null +++ b/src/main/java/a8k/controler/ZhaoheTestControler.java @@ -0,0 +1,16 @@ +package a8k.controler; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +@Controller +public class ZhaoheTestControler { + + @PostMapping("/test") + @ResponseBody + public String hello() { + return "Hello, welcome to the ultimate Spring Boot service!"; + } +} diff --git a/src/main/java/a8k/service/ConsumableLoadingService.java b/src/main/java/a8k/service/ConsumableLoadingService.java new file mode 100644 index 0000000..1d64092 --- /dev/null +++ b/src/main/java/a8k/service/ConsumableLoadingService.java @@ -0,0 +1,25 @@ +package a8k.service; + +import com.iflytop.a800.device.Pipette; +import jakarta.annotation.PostConstruct; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +@Component +public class ConsumableLoadingService implements Runnable { + public static final Logger LOG = LoggerFactory.getLogger(ConsumableLoadingService.class); + + @Override + public void run() { + + } + + + @PostConstruct + public void init(){ + //启动线程实例 + LOG.error("Hello................................................................................................"); + } + +} diff --git a/src/main/java/a8k/utils/ByteArray.java b/src/main/java/a8k/utils/ByteArray.java new file mode 100644 index 0000000..8500c5f --- /dev/null +++ b/src/main/java/a8k/utils/ByteArray.java @@ -0,0 +1,74 @@ +// Source code is decompiled from a .class file using FernFlower decompiler. +package a8k.utils; + +import org.springframework.lang.NonNull; + +public class ByteArray { + public ByteArray() { + } + + public static int readU8bit(byte[] code, int index) { + if (index >= code.length) + return 0; + return code[index] & 255; + } + + public static int readS8bit(byte[] code, int index) { + if (index >= code.length) + return 0; + + return code[index]; + } + + public static int readU16bit(byte[] code, int index) { + if (index + 2 >= code.length) + return 0; + return (code[index + 1] & 255) << 8 | code[index] & 255; + } + + public static int readS16bit(byte[] code, int index) { + if (index + 2 >= code.length) + return 0; + + return code[index + 1] << 8 | code[index] & 255; + } + + public static int read32bit(byte[] code, int index) { + if (index + 4 >= code.length) + return 0; + return code[index + 3] << 24 | (code[index + 2] & 255) << 16 | (code[index + 1] & 255) << 8 | code[index] & 255; + } + + + + + public static String toByteString(byte[] arrary) { + StringBuilder sb = new StringBuilder(); + for (byte b : arrary) { + sb.append(String.format("%02X", b)); + } + return sb.toString(); + } + + public static byte[] hexStringToBytes(@NonNull String str) { + if (str.isEmpty()) { + return new byte[0]; + } else { + byte[] byteArray = new byte[str.length() / 2]; + for (int i = 0; i < byteArray.length; i++) { + int high = Character.digit(str.charAt(i * 2), 16); + int low = Character.digit(str.charAt(i * 2 + 1), 16); + if (high == -1 || low == -1) { + return null; + } + byteArray[i] = (byte) (high * 16 + low); + } + return byteArray; + } + } + + // public static void main(String[] args) { + // byte[] bytes = new byte[]{0x01, 0x02, 0x03, 0x04}; + // System.out.println(toByteString(bytes)); + // } +} diff --git a/src/main/java/com/iflytop/a800/BoditechA800Application.java b/src/main/java/com/iflytop/a800/BoditechA800Application.java index 8bcd55d..59f0fe6 100644 --- a/src/main/java/com/iflytop/a800/BoditechA800Application.java +++ b/src/main/java/com/iflytop/a800/BoditechA800Application.java @@ -3,7 +3,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; @SpringBootApplication -@ComponentScan({"com.iflytop.uf", "com.iflytop.a800"}) +@ComponentScan({"com.iflytop.uf", "com.iflytop.a800","a8k"}) public class BoditechA800Application { public static void main(String[] args) { SpringApplication.run(BoditechA800Application.class, args); diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index d772ca4..9806d9e 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -3,7 +3,7 @@ server : spring: datasource: - url: jdbc:sqlite:D:/Sige5193/boditech-a800/app.db + url: jdbc:sqlite:D:/java_workspace/a8000/app.db driver-class-name: org.sqlite.JDBC device: diff --git a/vjtools-code-conventions-idea.xml b/vjtools-code-conventions-idea.xml new file mode 100644 index 0000000..acee356 --- /dev/null +++ b/vjtools-code-conventions-idea.xml @@ -0,0 +1,29 @@ + + \ No newline at end of file