diff --git a/Obsidian.jar b/Obsidian.jar new file mode 100644 index 0000000..90022f7 Binary files /dev/null and b/Obsidian.jar differ diff --git a/Sublime Text3 Monokai.jar b/Sublime Text3 Monokai.jar new file mode 100644 index 0000000..8b58b76 Binary files /dev/null and b/Sublime Text3 Monokai.jar differ 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