Browse Source

update

master
zhaohe 2 years ago
parent
commit
20e1197365
  1. 15
      api/basic_type.hpp
  2. 2
      api/i_motor_laser_code_scanner.hpp
  3. 144
      zcancmder_protocol.hpp
  4. 14
      zcancmder_protocol_basic.hpp

15
api/basic_type.hpp

@ -40,6 +40,21 @@ typedef enum {
#endif #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<void(int32_t status)> action_cb_status_t; typedef std::function<void(int32_t status)> action_cb_status_t;
} // namespace iflytop } // namespace iflytop

2
api/i_motor_laser_code_scanner.hpp

@ -41,7 +41,7 @@ class I_MotorLaserCodeScanner {
* @param result * @param result
* @return int32_t * @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 } // namespace iflytop

144
zcancmder_protocol.hpp

@ -190,89 +190,89 @@ ZPACKET_CMD_ACK(kcmd_readadc_raw, //
* |Module_1006:XYRobot机器人控制模组 * * |Module_1006:XYRobot机器人控制模组 *
*******************************************************************************/ *******************************************************************************/
// ACTION // 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 // 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 // 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: * * |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 // 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 // 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: * * |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 * * |Module_1009:EEPROM *
*******************************************************************************/ *******************************************************************************/
ZPACKET_CMD_ACK(kcmd_eeprom_read_block, 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, 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: * * |Module_1010: *
*******************************************************************************/ *******************************************************************************/
ZPACKET_CMD_ACK_AND_REPORT(kcmd_barcode_reader_start_scan, 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, ZPACKET_CMD_ACK(kcmd_barcode_reader_stop_scan,
CMD(u8 id;), //
ACK(u8 id;));
CMD(u16 id;), //
ACK(u16 id;));
/******************************************************************************* /*******************************************************************************
* |Module_1011:-- * * |Module_1011:-- *
*******************************************************************************/ *******************************************************************************/
@ -289,9 +289,9 @@ ZPACKET_CMD_ACK_AND_REPORT(kcmd_motor_laser_code_scanner_scan,
s32 transmitting_tube_amplification; // 0.001 s32 transmitting_tube_amplification; // 0.001
s32 receiving_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: * * Module_1013: *
@ -304,26 +304,26 @@ ZPACKET_CMD_ACK(kcmd_motor_laser_code_scanner_get_scan_result, CMD(u8 id; u8 sec
* |Module_1016: * * |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) #pragma pack(pop)

14
zcancmder_protocol_basic.hpp

@ -29,24 +29,26 @@
if (rxcmd->iscmd(ordername)) { \ if (rxcmd->iscmd(ordername)) { \
auto* cmd = rxcmd->get_data_as<ordername##_##cmd##_t>(); \ auto* cmd = rxcmd->get_data_as<ordername##_##cmd##_t>(); \
auto* ack = (ordername##_##ack##_t*)m_txbuf; \ auto* ack = (ordername##_##ack##_t*)m_txbuf; \
static_assert(sizeof(*ack) < sizeof(m_txbuf), "ack size too large"); \
auto cmdheader = rxcmd->get_cmdheader(); \ auto cmdheader = rxcmd->get_cmdheader(); \
uint32_t errorcode = 0; \ uint32_t errorcode = 0; \
if (cmd->id == varid) { \ if (cmd->id == varid) { \
ack->id = cmd->id; ack->id = cmd->id;
#define PROCESS_REPORT(type) \ #define PROCESS_REPORT(type) \
osDelay(5); \
type##_report_t report = {0}; \
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); \ ZLOGI(TAG, #type " exec_status:%d", status); \
report.id = m_id; \
report.exec_status = status; \
m_cancmder->sendExecStatusReport(cmdheader, (uint8_t*)&report, sizeof(report));
report->id = m_id; \
report->exec_status = status; \
m_cancmder->sendExecStatusReport(cmdheader, (uint8_t*)report, sizeof(*report));
#define END_PROCESS_PACKET() \ #define END_PROCESS_PACKET() \
if (errorcode == 0) { \ if (errorcode == 0) { \
m_cancmder->sendAck(rxcmd->get_cmdheader(), m_txbuf, sizeof(*ack)); \ m_cancmder->sendAck(rxcmd->get_cmdheader(), m_txbuf, sizeof(*ack)); \
} else { \ } else { \
m_cancmder->sendErrorAck(rxcmd->get_cmdheader(), errorcode); \
m_cancmder->sendErrorAck(rxcmd->get_cmdheader(), m_id, errorcode); \
} \ } \
} \ } \
return; \ return; \

Loading…
Cancel
Save