Browse Source

update

tags/v0
zhaohe 1 year ago
parent
commit
328bc102df
  1. BIN
      Obsidian.jar
  2. BIN
      Sublime Text3 Monokai.jar
  3. 329
      src/main/java/a8k/a8k_can_protocol/CmdId.java
  4. 18
      src/main/java/a8k/a8k_can_protocol/CmdIdInfo.java
  5. 235
      src/main/java/a8k/a8k_can_protocol/Errorcode.java
  6. 5
      src/main/java/a8k/a8k_can_protocol/ModuleId.java
  7. 116
      src/main/java/a8k/a8k_can_protocol/Packet.java
  8. 149
      src/main/java/a8k/base_hardware/A8kCanBusService.java
  9. 82
      src/main/java/a8k/base_hardware/ReconnectingWebSocketClient.java
  10. 16
      src/main/java/a8k/controler/ZhaoheTestControler.java
  11. 25
      src/main/java/a8k/service/ConsumableLoadingService.java
  12. 74
      src/main/java/a8k/utils/ByteArray.java
  13. 2
      src/main/java/com/iflytop/a800/BoditechA800Application.java
  14. 2
      src/main/resources/application-dev.yml
  15. 29
      vjtools-code-conventions-idea.xml

BIN
Obsidian.jar

BIN
Sublime Text3 Monokai.jar

329
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<CmdIdInfo> 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)//
));
}
}

18
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;
}
}

235
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 + ")";
}
}

5
src/main/java/a8k/a8k_can_protocol/ModuleId.java

@ -0,0 +1,5 @@
package a8k.a8k_can_protocol;
public class ModuleId {
}

116
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;
* <p>
* 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();
}
}

149
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());
}
}
}

82
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();
}
}

16
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!";
}
}

25
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................................................................................................");
}
}

74
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));
// }
}

2
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);

2
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:

29
vjtools-code-conventions-idea.xml

@ -0,0 +1,29 @@
<code_scheme name="vjtools">
<option name="AUTODETECT_INDENTS" value="false" />
<option name="LINE_SEPARATOR" value="&#xA;" />
<option name="ENABLE_JAVADOC_FORMATTING" value="false" />
<option name="FORMATTER_TAGS_ENABLED" value="true" />
<codeStyleSettings language="JAVA">
<option name="KEEP_LINE_BREAKS" value="false" />
<option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
<option name="ALIGN_MULTILINE_RESOURCES" value="false" />
<option name="CALL_PARAMETERS_WRAP" value="1" />
<option name="METHOD_PARAMETERS_WRAP" value="1" />
<option name="RESOURCE_LIST_WRAP" value="5" />
<option name="EXTENDS_LIST_WRAP" value="1" />
<option name="THROWS_LIST_WRAP" value="1" />
<option name="EXTENDS_KEYWORD_WRAP" value="1" />
<option name="THROWS_KEYWORD_WRAP" value="1" />
<option name="METHOD_CALL_CHAIN_WRAP" value="1" />
<option name="BINARY_OPERATION_WRAP" value="1" />
<option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="true" />
<option name="TERNARY_OPERATION_WRAP" value="5" />
<option name="KEEP_SIMPLE_BLOCKS_IN_ONE_LINE" value="true" />
<option name="ARRAY_INITIALIZER_WRAP" value="1" />
<indentOptions>
<option name="USE_TAB_CHARACTER" value="true" />
</indentOptions>
</codeStyleSettings>
</code_scheme>
Loading…
Cancel
Save