diff --git a/api/basic_type.hpp b/api/basic_type.hpp index 5f3b6f6..9c281eb 100644 --- a/api/basic_type.hpp +++ b/api/basic_type.hpp @@ -40,6 +40,21 @@ typedef enum { #endif +#pragma pack(push, 1) +typedef struct { + u16 id; + uint32_t errorcode; +} zcan_cmder_error_ack_t; + +typedef struct { + u8 is_end; + u8 len; + u8 packet[255]; +} zcancmder_read_ram_ack_t; + + +#pragma pack(pop) + typedef std::function action_cb_status_t; } // namespace iflytop diff --git a/api/i_motor_laser_code_scanner.hpp b/api/i_motor_laser_code_scanner.hpp index 201367a..1162572 100644 --- a/api/i_motor_laser_code_scanner.hpp +++ b/api/i_motor_laser_code_scanner.hpp @@ -23,11 +23,11 @@ class I_MotorLaserCodeScanner { * @param transmitting_tube_amplification 发光管放大倍数 * @param receiving_tube_amplification 接收管放大倍数 */ - virtual int32_t start_scan(s32 moveby_distance, // - s32 scan_interval_distance, // - s32 each_sample_times, // - s32 transmitting_tube_amplification, // - s32 receiving_tube_amplification, // + virtual int32_t start_scan(s32 moveby_distance, // + s32 scan_interval_distance, // + s32 each_sample_times, // + s32 transmitting_tube_amplification, // + s32 receiving_tube_amplification, // action_cb_status_t cb) = 0; /** * @brief 停止扫码 @@ -41,7 +41,7 @@ class I_MotorLaserCodeScanner { * @param result * @return int32_t */ - virtual int32_t get_scan_result(scan_result_t** result) = 0; + virtual int32_t get_scan_result(u16 sector_index, u16 sector_size, zcancmder_read_ram_ack_t& ack) = 0; }; } // namespace iflytop \ No newline at end of file diff --git a/zcancmder_protocol.hpp b/zcancmder_protocol.hpp index 32b3c8a..d3adfdc 100644 --- a/zcancmder_protocol.hpp +++ b/zcancmder_protocol.hpp @@ -190,89 +190,89 @@ ZPACKET_CMD_ACK(kcmd_readadc_raw, // * |Module_1006:XYRobot机器人控制模组 * *******************************************************************************/ // ACTION -ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_enable, CMD(u8 id; u8 enable;), ACK(u8 id;)); -ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_stop, CMD(u8 id; u8 stop_type;), ACK(u8 id;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_xy_robot_ctrl_move_to_zero, CMD(u8 id;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_xy_robot_ctrl_move_to_zero_with_calibrate, CMD(u8 id; s32 nowx; s32 nowy;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_xy_robot_ctrl_move_to, CMD(u8 id; s32 x; s32 y; s32 speed;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_xy_robot_ctrl_move_by, CMD(u8 id; s32 dx; s32 dy; s32 speed;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); -ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_force_change_current_pos, CMD(u8 id; s32 x; s32 y;), ACK(u8 id;)); +ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_enable, CMD(u16 id; u8 enable;), ACK(u16 id;)); +ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_stop, CMD(u16 id; u8 stop_type;), ACK(u16 id;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_xy_robot_ctrl_move_to_zero, CMD(u16 id;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_xy_robot_ctrl_move_to_zero_with_calibrate, CMD(u16 id; s32 nowx; s32 nowy;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_xy_robot_ctrl_move_to, CMD(u16 id; s32 x; s32 y; s32 speed;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_xy_robot_ctrl_move_by, CMD(u16 id; s32 dx; s32 dy; s32 speed;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); +ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_force_change_current_pos, CMD(u16 id; s32 x; s32 y;), ACK(u16 id;)); // READ -ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_read_version, CMD(u8 id;), ACK(u8 id; I_XYRobotCtrlModule::version_t ack;)); -ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_read_status, CMD(u8 id;), ACK(u8 id; I_XYRobotCtrlModule::status_t ack;)); -ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_read_detailed_status, CMD(u8 id;), ACK(u8 id; I_XYRobotCtrlModule::detailed_status_t ack;)); +ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_read_version, CMD(u16 id;), ACK(u16 id; I_XYRobotCtrlModule::version_t ack;)); +ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_read_status, CMD(u16 id;), ACK(u16 id; I_XYRobotCtrlModule::status_t ack;)); +ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_read_detailed_status, CMD(u16 id;), ACK(u16 id; I_XYRobotCtrlModule::detailed_status_t ack;)); // SET -ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_set_base_param, CMD(u8 id; I_XYRobotCtrlModule::base_param_t param;), ACK(u8 id;)); -ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_get_base_param, CMD(u8 id;), ACK(u8 id; I_XYRobotCtrlModule::base_param_t ack;)); -// ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_set_warning_limit_param, CMD(u8 id; u8 opt_type; I_XYRobotCtrlModule::warning_limit_param_t param;), ACK(u8 id; I_XYRobotCtrlModule::warning_limit_param_t ack;)); -// ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_set_run_to_zero_param, CMD(u8 id; u8 opt_type; I_XYRobotCtrlModule::run_to_zero_param_t param;), ACK(u8 id; I_XYRobotCtrlModule::run_to_zero_param_t ack;)); +ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_set_base_param, CMD(u16 id; I_XYRobotCtrlModule::base_param_t param;), ACK(u16 id;)); +ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_get_base_param, CMD(u16 id;), ACK(u16 id; I_XYRobotCtrlModule::base_param_t ack;)); +// ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_set_warning_limit_param, CMD(u16 id; u8 opt_type; I_XYRobotCtrlModule::warning_limit_param_t param;), ACK(u16 id; I_XYRobotCtrlModule::warning_limit_param_t ack;)); +// ZPACKET_CMD_ACK(kcmd_xy_robot_ctrl_set_run_to_zero_param, CMD(u16 id; u8 opt_type; I_XYRobotCtrlModule::run_to_zero_param_t param;), ACK(u16 id; I_XYRobotCtrlModule::run_to_zero_param_t ack;)); /******************************************************************************* * |Module_1007:步进电机控制模组 * *******************************************************************************/ -ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_enable, CMD(u8 id; u8 enable;), ACK(u8 id;)); -ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_stop, CMD(u8 id; u8 stop_type;), ACK(u8 id;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_step_motor_ctrl_move_to_zero, CMD(u8 id;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_step_motor_ctrl_move_to_zero_with_calibrate, CMD(u8 id; s32 nowx; s32 nowy;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_step_motor_ctrl_move_to, CMD(u8 id; s32 x; s32 speed;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_step_motor_ctrl_move_by, CMD(u8 id; s32 dx; s32 speed;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); -ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_force_change_current_pos, CMD(u8 id; s32 x;), ACK(u8 id;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_step_motor_ctrl_rotate, CMD(u8 id; s32 speed; s32 run_time;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); +ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_enable, CMD(u16 id; u8 enable;), ACK(u16 id;)); +ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_stop, CMD(u16 id; u8 stop_type;), ACK(u16 id;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_step_motor_ctrl_move_to_zero, CMD(u16 id;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_step_motor_ctrl_move_to_zero_with_calibrate, CMD(u16 id; s32 nowx; s32 nowy;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_step_motor_ctrl_move_to, CMD(u16 id; s32 x; s32 speed;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_step_motor_ctrl_move_by, CMD(u16 id; s32 dx; s32 speed;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); +ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_force_change_current_pos, CMD(u16 id; s32 x;), ACK(u16 id;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_step_motor_ctrl_rotate, CMD(u16 id; s32 speed; s32 run_time;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); // READ -ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_read_version, CMD(u8 id;), ACK(u8 id; I_StepMotorCtrlModule::version_t ack;)); -ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_read_status, CMD(u8 id;), ACK(u8 id; I_StepMotorCtrlModule::status_t ack;)); -ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_read_detailed_status, CMD(u8 id;), ACK(u8 id; I_StepMotorCtrlModule::detailed_status_t ack;)); +ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_read_version, CMD(u16 id;), ACK(u16 id; I_StepMotorCtrlModule::version_t ack;)); +ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_read_status, CMD(u16 id;), ACK(u16 id; I_StepMotorCtrlModule::status_t ack;)); +ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_read_detailed_status, CMD(u16 id;), ACK(u16 id; I_StepMotorCtrlModule::detailed_status_t ack;)); // SET -ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_set_base_param, CMD(u8 id; u8 opt_type; I_StepMotorCtrlModule::base_param_t param;), ACK(u8 id;)); -ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_get_base_param, CMD(u8 id;), ACK(u8 id; I_StepMotorCtrlModule::base_param_t ack;)); +ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_set_base_param, CMD(u16 id; u8 opt_type; I_StepMotorCtrlModule::base_param_t param;), ACK(u16 id;)); +ZPACKET_CMD_ACK(kcmd_step_motor_ctrl_get_base_param, CMD(u16 id;), ACK(u16 id; I_StepMotorCtrlModule::base_param_t ack;)); /******************************************************************************* * |Module_1008:舵机 * *******************************************************************************/ -ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_enable, CMD(u8 id; u8 enable;), ACK(u8 id;)); -ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_stop, CMD(u8 id; u8 stop_type;), ACK(u8 id;)); -ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_position_calibrate, CMD(u8 id; s32 calibrate_pos;), ACK(u8 id;)); +ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_enable, CMD(u16 id; u8 enable;), ACK(u16 id;)); +ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_stop, CMD(u16 id; u8 stop_type;), ACK(u16 id;)); +ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_position_calibrate, CMD(u16 id; s32 calibrate_pos;), ACK(u16 id;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_rotate, CMD(u8 id; s32 speed; s32 torque; s32 run_time;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_move_to, CMD(u8 id; s32 pos; s32 speed; s32 torque;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_move_by, CMD(u8 id; s32 pos; s32 speed; s32 torque;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_run_with_torque, CMD(u8 id; s32 torque; s32 run_time;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_move_by_nolimit, CMD(u8 id; s32 pos; s32 speed; s32 torque;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_rotate, CMD(u16 id; s32 speed; s32 torque; s32 run_time;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_move_to, CMD(u16 id; s32 pos; s32 speed; s32 torque;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_move_by, CMD(u16 id; s32 pos; s32 speed; s32 torque;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_run_with_torque, CMD(u16 id; s32 torque; s32 run_time;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_mini_servo_ctrl_move_by_nolimit, CMD(u16 id; s32 pos; s32 speed; s32 torque;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); -ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_read_version, CMD(u8 id;), ACK(u8 id; I_MiniServoModule::version_t ack;)); -ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_read_status, CMD(u8 id;), ACK(u8 id; I_MiniServoModule::status_t ack;)); -ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_read_detailed_status, CMD(u8 id;), ACK(u8 id; I_MiniServoModule::detailed_status_t ack;)); +ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_read_version, CMD(u16 id;), ACK(u16 id; I_MiniServoModule::version_t ack;)); +ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_read_status, CMD(u16 id;), ACK(u16 id; I_MiniServoModule::status_t ack;)); +ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_read_detailed_status, CMD(u16 id;), ACK(u16 id; I_MiniServoModule::detailed_status_t ack;)); -ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_set_run_param, CMD(u8 id; u8 opt_type; I_MiniServoModule::run_param_t param;), ACK(u8 id; I_MiniServoModule::run_param_t ack;)); -ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_set_basic_param, CMD(u8 id; u8 opt_type; I_MiniServoModule::basic_param_t param;), ACK(u8 id; I_MiniServoModule::basic_param_t ack;)); -ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_set_warning_limit_param, CMD(u8 id; u8 opt_type; I_MiniServoModule::warning_limit_param_t param;), ACK(u8 id; I_MiniServoModule::warning_limit_param_t ack;)); +ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_set_run_param, CMD(u16 id; u8 opt_type; I_MiniServoModule::run_param_t param;), ACK(u16 id; I_MiniServoModule::run_param_t ack;)); +ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_set_basic_param, CMD(u16 id; u8 opt_type; I_MiniServoModule::basic_param_t param;), ACK(u16 id; I_MiniServoModule::basic_param_t ack;)); +ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_set_warning_limit_param, CMD(u16 id; u8 opt_type; I_MiniServoModule::warning_limit_param_t param;), ACK(u16 id; I_MiniServoModule::warning_limit_param_t ack;)); -ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_get_run_param, CMD(u8 id; u8 opt_type;), ACK(u8 id; I_MiniServoModule::run_param_t ack;)); -ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_get_basic_param, CMD(u8 id; u8 opt_type;), ACK(u8 id; I_MiniServoModule::basic_param_t ack;)); -ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_get_warning_limit_param, CMD(u8 id; u8 opt_type;), ACK(u8 id; I_MiniServoModule::warning_limit_param_t ack;)); +ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_get_run_param, CMD(u16 id; u8 opt_type;), ACK(u16 id; I_MiniServoModule::run_param_t ack;)); +ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_get_basic_param, CMD(u16 id; u8 opt_type;), ACK(u16 id; I_MiniServoModule::basic_param_t ack;)); +ZPACKET_CMD_ACK(kcmd_mini_servo_ctrl_get_warning_limit_param, CMD(u16 id; u8 opt_type;), ACK(u16 id; I_MiniServoModule::warning_limit_param_t ack;)); /******************************************************************************* * |Module_1009:EEPROM * *******************************************************************************/ ZPACKET_CMD_ACK(kcmd_eeprom_read_block, - CMD(u8 id; u16 addr; u16 len;), // - ACK(u8 id; u16 addr; u16 len; u8 data[0];)); + CMD(u16 id; u16 addr; u16 len;), // + ACK(u16 id; u16 addr; u16 len; u8 data[0];)); ZPACKET_CMD_ACK(kcmd_eeprom_write_block, - CMD(u8 id; u16 addr; u16 len; u8 data[0];), // - ACK(u8 id; u16 addr; u16 len;)); + CMD(u16 id; u16 addr; u16 len; u8 data[0];), // + ACK(u16 id; u16 addr; u16 len;)); /******************************************************************************* * |Module_1010:扫码器 * *******************************************************************************/ ZPACKET_CMD_ACK_AND_REPORT(kcmd_barcode_reader_start_scan, - CMD(u8 id;), // - ACK(u8 id;), // - REPORT(u8 id; u8 status; u16 barcodelen; u8 barcode[0];)); + CMD(u16 id;), // + ACK(u16 id;), // + REPORT(u16 id; u8 status; u16 barcodelen; u8 barcode[0];)); ZPACKET_CMD_ACK(kcmd_barcode_reader_stop_scan, - CMD(u8 id;), // - ACK(u8 id;)); + CMD(u16 id;), // + ACK(u16 id;)); /******************************************************************************* * |Module_1011:帕尔贴-水泵-风扇控温系统 * *******************************************************************************/ @@ -289,9 +289,9 @@ ZPACKET_CMD_ACK_AND_REPORT(kcmd_motor_laser_code_scanner_scan, s32 transmitting_tube_amplification; // 0.001 s32 receiving_tube_amplification; // 0.001 ), - ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); -ZPACKET_CMD_ACK(kcmd_motor_laser_code_scanner_stop_scan, CMD(u8 id;), ACK(u8 id;)); -ZPACKET_CMD_ACK(kcmd_motor_laser_code_scanner_get_scan_result, CMD(u8 id; u8 sector_index; u8 sector_size;), ACK(u8 id; u8 packet[];)); + ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); +ZPACKET_CMD_ACK(kcmd_motor_laser_code_scanner_stop_scan, CMD(u16 id;), ACK(u16 id;)); +ZPACKET_CMD_ACK(kcmd_motor_laser_code_scanner_get_scan_result, CMD(u16 id; u16 sector_index; u16 sector_size;), ACK(u16 id; zcancmder_read_ram_ack_t ack;)); /******************************************************************************* * Module_1013:板夹仓 * @@ -304,26 +304,26 @@ ZPACKET_CMD_ACK(kcmd_motor_laser_code_scanner_get_scan_result, CMD(u8 id; u8 sec * |Module_1016:移液枪控制 * *******************************************************************************/ -ZPACKET_CMD_ACK(kcmd_pipette_module_enable, CMD(u8 id; u8 enable;), ACK(u8 id;)); -ZPACKET_CMD_ACK(kcmd_pipette_module_stop, CMD(u8 id; u8 stop_type;), ACK(u8 id;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_pipette_module_zero_pos_calibrate, CMD(u8 id;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_pipeete_module_zmotor_reset, CMD(u8 id;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_pipeete_module_pipette_reset, CMD(u8 id;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); +ZPACKET_CMD_ACK(kcmd_pipette_module_enable, CMD(u16 id; u8 enable;), ACK(u16 id;)); +ZPACKET_CMD_ACK(kcmd_pipette_module_stop, CMD(u16 id; u8 stop_type;), ACK(u16 id;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_pipette_module_zero_pos_calibrate, CMD(u16 id;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_pipeete_module_zmotor_reset, CMD(u16 id;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_pipeete_module_pipette_reset, CMD(u16 id;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_pipette_module_take_tip, CMD(u8 id; s16 vel; s16 height_mm; s16 tip_hight_mm;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_pipette_module_remove_tip, CMD(u8 id; s16 vel; s16 height_mm;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_pipette_module_take_tip, CMD(u16 id; s16 vel; s16 height_mm; s16 tip_hight_mm;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_pipette_module_remove_tip, CMD(u16 id; s16 vel; s16 height_mm;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_pipette_module_move_to, CMD(u8 id; s16 vel; s16 height_mm;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_pipette_module_move_to_with_lld, CMD(u8 id; s16 vel; s16 lld_cap_thr; s16 lld_max_hight_mm; s16 lld_rela_hight_mm;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_pipette_module_shake, CMD(u8 id; s16 shake_times; s16 shake_volume;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); -ZPACKET_CMD_ACK_AND_REPORT(kcmd_pipette_module_pipette_move_to_ul, CMD(u8 id; s16 take_volume_mm;), ACK(u8 id;), REPORT(u8 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_pipette_module_move_to, CMD(u16 id; s16 vel; s16 height_mm;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_pipette_module_move_to_with_lld, CMD(u16 id; s16 vel; s16 lld_cap_thr; s16 lld_max_hight_mm; s16 lld_rela_hight_mm;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_pipette_module_shake, CMD(u16 id; s16 shake_times; s16 shake_volume;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); +ZPACKET_CMD_ACK_AND_REPORT(kcmd_pipette_module_pipette_move_to_ul, CMD(u16 id; s16 take_volume_mm;), ACK(u16 id;), REPORT(u16 id; int32_t exec_status;)); -ZPACKET_CMD_ACK(kcmd_pipette_module_get_status, CMD(u8 id;), ACK(u8 id; I_PipetteModule::status_t ack;)); +ZPACKET_CMD_ACK(kcmd_pipette_module_get_status, CMD(u16 id;), ACK(u16 id; I_PipetteModule::status_t ack;)); -ZPACKET_CMD_ACK(kcmd_pipette_module_set_z_motor_para, CMD(u8 id; I_StepMotorCtrlModule::base_param_t param;), ACK(u8 id;)); -ZPACKET_CMD_ACK(kcmd_pipette_module_get_z_motor_para, CMD(u8 id;), ACK(u8 id; I_StepMotorCtrlModule::base_param_t ack;)); -ZPACKET_CMD_ACK(kcmd_pipette_module_set_base_param, CMD(u8 id; I_PipetteModule::base_param_t param;), ACK(u8 id;)); -ZPACKET_CMD_ACK(kcmd_pipette_module_get_base_param, CMD(u8 id;), ACK(u8 id; I_PipetteModule::base_param_t ack;)); +ZPACKET_CMD_ACK(kcmd_pipette_module_set_z_motor_para, CMD(u16 id; I_StepMotorCtrlModule::base_param_t param;), ACK(u16 id;)); +ZPACKET_CMD_ACK(kcmd_pipette_module_get_z_motor_para, CMD(u16 id;), ACK(u16 id; I_StepMotorCtrlModule::base_param_t ack;)); +ZPACKET_CMD_ACK(kcmd_pipette_module_set_base_param, CMD(u16 id; I_PipetteModule::base_param_t param;), ACK(u16 id;)); +ZPACKET_CMD_ACK(kcmd_pipette_module_get_base_param, CMD(u16 id;), ACK(u16 id; I_PipetteModule::base_param_t ack;)); #pragma pack(pop) diff --git a/zcancmder_protocol_basic.hpp b/zcancmder_protocol_basic.hpp index 660ed50..ceb2b1a 100644 --- a/zcancmder_protocol_basic.hpp +++ b/zcancmder_protocol_basic.hpp @@ -25,28 +25,30 @@ reportpara \ } ordername##_##report##_t -#define PROCESS_PACKET(ordername, varid) \ - if (rxcmd->iscmd(ordername)) { \ - auto* cmd = rxcmd->get_data_as(); \ - auto* ack = (ordername##_##ack##_t*)m_txbuf; \ - auto cmdheader = rxcmd->get_cmdheader(); \ - uint32_t errorcode = 0; \ - if (cmd->id == varid) { \ +#define PROCESS_PACKET(ordername, varid) \ + if (rxcmd->iscmd(ordername)) { \ + auto* cmd = rxcmd->get_data_as(); \ + auto* ack = (ordername##_##ack##_t*)m_txbuf; \ + static_assert(sizeof(*ack) < sizeof(m_txbuf), "ack size too large"); \ + auto cmdheader = rxcmd->get_cmdheader(); \ + uint32_t errorcode = 0; \ + if (cmd->id == varid) { \ ack->id = cmd->id; -#define PROCESS_REPORT(type) \ - osDelay(5); \ - type##_report_t report = {0}; \ - ZLOGI(TAG, #type " exec_status:%d", status); \ - report.id = m_id; \ - report.exec_status = status; \ - m_cancmder->sendExecStatusReport(cmdheader, (uint8_t*)&report, sizeof(report)); +#define PROCESS_REPORT(type) \ + zlock_guard l(m_lock); \ + auto* report = (type##_report_t*)m_txbuf; \ + static_assert(sizeof(*report) < sizeof(m_txbuf), "report size too large"); \ + ZLOGI(TAG, #type " exec_status:%d", status); \ + report->id = m_id; \ + report->exec_status = status; \ + m_cancmder->sendExecStatusReport(cmdheader, (uint8_t*)report, sizeof(*report)); #define END_PROCESS_PACKET() \ if (errorcode == 0) { \ m_cancmder->sendAck(rxcmd->get_cmdheader(), m_txbuf, sizeof(*ack)); \ } else { \ - m_cancmder->sendErrorAck(rxcmd->get_cmdheader(), errorcode); \ + m_cancmder->sendErrorAck(rxcmd->get_cmdheader(), m_id, errorcode); \ } \ } \ return; \