zcancmder_v2
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

254 lines
17 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. #include "zmodule_device_script_cmder_paser.hpp"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. using namespace iflytop;
  6. using namespace std;
  7. #define PROCESS_PACKET_XX(var_funcname, cmdhelp, XP, XACK, ...) \
  8. m_cmdParser->regCMD(#var_funcname, cmdhelp, XP, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) { \
  9. ack->ecode = m_deviceManager->var_funcname(__VA_ARGS__); \
  10. ack->acktype = ICmdParserACK::kAckType_int32; \
  11. ack->rawlen = XACK * 4; \
  12. });
  13. #define PROCESS_PACKET_00(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 0, 0)
  14. #define PROCESS_PACKET_01(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 0, 1, ack->getAck(0))
  15. #define PROCESS_PACKET_02(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 0, 2, ack->getAck(0), ack->getAck(1))
  16. #define PROCESS_PACKET_03(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 0, 3, ack->getAck(0), ack->getAck(1), ack->getAck(2))
  17. #define PROCESS_PACKET_10(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 1, 0, atoi(paraV[0]))
  18. #define PROCESS_PACKET_11(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 1, 1, atoi(paraV[0]), ack->getAck(0))
  19. #define PROCESS_PACKET_12(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 1, 2, atoi(paraV[0]), ack->getAck(0), ack->getAck(1))
  20. #define PROCESS_PACKET_13(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 1, 3, atoi(paraV[0]), ack->getAck(0), ack->getAck(1), ack->getAck(2))
  21. #define PROCESS_PACKET_20(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 2, 0, atoi(paraV[0]), atoi(paraV[1]))
  22. #define PROCESS_PACKET_21(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 2, 1, atoi(paraV[0]), atoi(paraV[1]), ack->getAck(0))
  23. #define PROCESS_PACKET_22(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 2, 2, atoi(paraV[0]), atoi(paraV[1]), ack->getAck(0), ack->getAck(1))
  24. #define PROCESS_PACKET_23(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 2, 3, atoi(paraV[0]), atoi(paraV[1]), ack->getAck(0), ack->getAck(1), ack->getAck(2))
  25. #define PROCESS_PACKET_30(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 3, 0, atoi(paraV[0]), atoi(paraV[1]), atoi(paraV[2]))
  26. #define PROCESS_PACKET_31(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 3, 1, atoi(paraV[0]), atoi(paraV[1]), atoi(paraV[2]), ack->getAck(0))
  27. #define PROCESS_PACKET_32(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 3, 2, atoi(paraV[0]), atoi(paraV[1]), atoi(paraV[2]), ack->getAck(0), ack->getAck(1))
  28. #define PROCESS_PACKET_33(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 3, 3, atoi(paraV[0]), atoi(paraV[1]), atoi(paraV[2]), ack->getAck(0), ack->getAck(1), ack->getAck(2))
  29. #define PROCESS_PACKET_40(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 4, 0, atoi(paraV[0]), atoi(paraV[1]), atoi(paraV[2]), atoi(paraV[3]))
  30. #define PROCESS_PACKET_41(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 4, 1, atoi(paraV[0]), atoi(paraV[1]), atoi(paraV[2]), atoi(paraV[3]), ack->getAck(0))
  31. #define PROCESS_PACKET_42(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 4, 2, atoi(paraV[0]), atoi(paraV[1]), atoi(paraV[2]), atoi(paraV[3]), ack->getAck(0), ack->getAck(1))
  32. #define PROCESS_PACKET_43(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 4, 3, atoi(paraV[0]), atoi(paraV[1]), atoi(paraV[2]), atoi(paraV[3]), ack->getAck(0), ack->getAck(1), ack->getAck(2))
  33. #define PROCESS_PACKET_50(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 5, 0, atoi(paraV[0]), atoi(paraV[1]), atoi(paraV[2]), atoi(paraV[3]), atoi(paraV[4]))
  34. #define PROCESS_PACKET_51(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 5, 1, atoi(paraV[0]), atoi(paraV[1]), atoi(paraV[2]), atoi(paraV[3]), atoi(paraV[4]), ack->getAck(0))
  35. #define PROCESS_PACKET_52(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 5, 2, atoi(paraV[0]), atoi(paraV[1]), atoi(paraV[2]), atoi(paraV[3]), atoi(paraV[4]), ack->getAck(0), ack->getAck(1))
  36. #define PROCESS_PACKET_53(var_funcname, cmdhelp) PROCESS_PACKET_XX(var_funcname, cmdhelp, 5, 3, atoi(paraV[0]), atoi(paraV[1]), atoi(paraV[2]), atoi(paraV[3]), atoi(paraV[4]), ack->getAck(0), ack->getAck(1), ack->getAck(2))
  37. void ZModuleDeviceScriptCmderPaser::initialize(ICmdParser* cancmder, ZModuleDeviceManager* deviceManager) {
  38. m_cmdParser = cancmder;
  39. m_deviceManager = deviceManager;
  40. regfn();
  41. }
  42. void ZModuleDeviceScriptCmderPaser::regfn() {
  43. #if 0
  44. /*******************************************************************************
  45. * ZIModule *
  46. *******************************************************************************/
  47. int32_t module_stop(uint16_t id);
  48. int32_t module_break(uint16_t id);
  49. int32_t module_get_last_exec_status(uint16_t id, int32_t *status);
  50. int32_t module_get_status(uint16_t id, int32_t *status);
  51. int32_t module_set_reg(uint16_t id, int32_t param_id, int32_t param_value);
  52. int32_t module_get_reg(uint16_t id, int32_t param_id, int32_t *param_value);
  53. int32_t module_readio(uint16_t id, int32_t *io);
  54. int32_t module_writeio(uint16_t id, int32_t io);
  55. int32_t module_read_adc(uint16_t id, int32_t adcindex, int32_t *adc);
  56. int32_t module_get_error(uint16_t id, int32_t *iserror);
  57. int32_t module_clear_error(uint16_t id);
  58. int32_t module_set_inited_flag(uint16_t id, int32_t flag);
  59. int32_t module_get_inited_flag(uint16_t id, int32_t *flag);
  60. int32_t module_factory_reset(uint16_t id);
  61. int32_t module_flush_cfg(uint16_t id);
  62. int32_t module_active_cfg(uint16_t id);
  63. virtual int32_t module_read_raw(uint16_t id, int32_t startadd, int32_t readlen, uint8_t *data, int32_t *len);
  64. /*******************************************************************************
  65. * ZIMotor *
  66. *******************************************************************************/
  67. int32_t motor_enable(uint16_t id, int32_t enable);
  68. int32_t motor_rotate(uint16_t id, int32_t direction, int32_t motor_velocity, int32_t acc);
  69. int32_t motor_move_by(uint16_t id, int32_t distance, int32_t motor_velocity, int32_t acc);
  70. int32_t motor_move_to(uint16_t id, int32_t position, int32_t motor_velocity, int32_t acc);
  71. int32_t motor_rotate_acctime(uint16_t id, int32_t direction, int32_t motor_velocity, int32_t acctime);
  72. int32_t motor_move_by_acctime(uint16_t id, int32_t distance, int32_t motor_velocity, int32_t acctime);
  73. int32_t motor_move_to_acctime(uint16_t id, int32_t position, int32_t motor_velocity, int32_t acctime);
  74. int32_t motor_move_to_zero_forward(uint16_t id, int32_t findzerospeed, int32_t findzeroedge_speed, int32_t acc, int32_t overtime);
  75. int32_t motor_move_to_zero_backward(uint16_t id, int32_t findzerospeed, int32_t findzeroedge_speed, int32_t acc, int32_t overtime);
  76. int32_t motor_rotate_with_torque(uint16_t id, int32_t pos, int32_t torque);
  77. int32_t motor_read_pos(uint16_t id, int32_t *pos);
  78. int32_t motor_set_current_pos_by_change_shift(uint16_t id, int32_t pos);
  79. virtual int32_t motor_move_to_zero_forward_and_calculated_shift(int32_t findzerospeed, int32_t findzeroedge_speed, int32_t acc, int32_t overtime) override;
  80. virtual int32_t motor_move_to_zero_backward_and_calculated_shift(int32_t findzerospeed, int32_t findzeroedge_speed, int32_t acc, int32_t overtime) override;
  81. virtual int32_t module_enable(uint16_t id, int32_t enable);
  82. #endif
  83. PROCESS_PACKET_10(module_ping, "(mid)");
  84. PROCESS_PACKET_10(module_stop, "(mid)");
  85. PROCESS_PACKET_10(module_start, "(mid)");
  86. PROCESS_PACKET_10(module_break, "(mid)");
  87. PROCESS_PACKET_11(module_get_last_exec_status, "(mid)");
  88. PROCESS_PACKET_11(module_get_status, "(mid)");
  89. PROCESS_PACKET_30(module_set_reg, "(mid, param_id, param_value)");
  90. PROCESS_PACKET_21(module_get_reg, "(mid, param_id)");
  91. PROCESS_PACKET_11(module_readio, "(mid)");
  92. PROCESS_PACKET_30(module_writeio, "(mid,ioindex,io)");
  93. PROCESS_PACKET_21(module_read_adc, "(mid,adc_id, adcindex)");
  94. PROCESS_PACKET_11(module_get_error, "(mid)");
  95. PROCESS_PACKET_10(module_clear_error, "(mid)");
  96. PROCESS_PACKET_20(module_set_inited_flag, "(mid, flag)");
  97. PROCESS_PACKET_11(module_get_inited_flag, "(mid)");
  98. PROCESS_PACKET_10(module_factory_reset, "(mid)");
  99. PROCESS_PACKET_10(module_flush_cfg, "(mid)");
  100. PROCESS_PACKET_10(module_active_cfg, "(mid)");
  101. m_cmdParser->regCMD("module_read_raw", "(mid, startindex)", 2, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) {
  102. if (atoi(paraV[2]) > (int32_t)sizeof(ack->rawdata)) {
  103. ack->ecode = err::kbuffer_not_enough;
  104. return;
  105. }
  106. ack->rawlen = sizeof(ack->rawdata);
  107. ack->ecode = m_deviceManager->module_read_raw(atoi(paraV[0]), atoi(paraV[1]), ack->rawdata, &ack->rawlen);
  108. ack->acktype = ICmdParserACK::kAckType_buf;
  109. });
  110. PROCESS_PACKET_20(module_enable, "(mid, enable)");
  111. #if 0
  112. virtual int32_t motor_enable(int32_t enable) { return err::koperation_not_support; }
  113. virtual int32_t motor_rotate(int32_t direction, int32_t motor_velocity, int32_t acc) { return err::koperation_not_support; }
  114. virtual int32_t motor_move_by(int32_t distance, int32_t motor_velocity, int32_t acc) { return err::koperation_not_support; }
  115. virtual int32_t motor_move_to(int32_t position, int32_t motor_velocity, int32_t acc) { return err::koperation_not_support; }
  116. virtual int32_t motor_rotate_acctime(int32_t direction, int32_t motor_velocity, int32_t acctime) { return err::koperation_not_support; }
  117. virtual int32_t motor_move_by_acctime(int32_t distance, int32_t motor_velocity, int32_t acctime) { return err::koperation_not_support; }
  118. virtual int32_t motor_move_to_acctime(int32_t position, int32_t motor_velocity, int32_t acctime) { return err::koperation_not_support; }
  119. virtual int32_t motor_rotate_with_torque(int32_t direction, int32_t torque) { return err::koperation_not_support; }
  120. virtual int32_t motor_move_to_torque(int32_t pos, int32_t torque, int32_t overtime) { return err::koperation_not_support; }
  121. virtual int32_t motor_move_to_zero_forward(int32_t findzerospeed, int32_t findzeroedge_speed, int32_t acc, int32_t overtime) { return err::koperation_not_support; }
  122. virtual int32_t motor_move_to_zero_backward(int32_t findzerospeed, int32_t findzeroedge_speed, int32_t acc, int32_t overtime) { return err::koperation_not_support; }
  123. virtual int32_t motor_move_to_zero_forward_and_calculated_shift(int32_t findzerospeed, int32_t findzeroedge_speed, int32_t acc, int32_t overtime) { return err::koperation_not_support; }
  124. virtual int32_t motor_move_to_zero_backward_and_calculated_shift(int32_t findzerospeed, int32_t findzeroedge_speed, int32_t acc, int32_t overtime) { return err::koperation_not_support; }
  125. virtual int32_t motor_read_pos(int32_t* pos) { return err::koperation_not_support; }
  126. virtual int32_t motor_set_current_pos_by_change_shift(int32_t pos) { return err::koperation_not_support; } // һ�����ڶ���
  127. virtual int32_t motor_calculated_pos_by_move_to_zero() { return err::koperation_not_support; }
  128. virtual int32_t motor_easy_rotate(uint16_t id, int32_t direction);
  129. virtual int32_t motor_easy_move_by(uint16_t id, int32_t distance);
  130. virtual int32_t motor_easy_move_to(uint16_t id, int32_t position);
  131. virtual int32_t motor_easy_move_to_zero(int32_t direction) { return err::koperation_not_support; };
  132. virtual int32_t motor_easy_set_current_pos(int32_t pos) { return err::koperation_not_support; };
  133. #endif
  134. PROCESS_PACKET_20(motor_enable, "(mid, enable)");
  135. PROCESS_PACKET_40(motor_rotate, "(mid, direction, motor_velocity, acc)");
  136. PROCESS_PACKET_40(motor_move_by, "(mid, distance, motor_velocity, acc)");
  137. PROCESS_PACKET_40(motor_move_to, "(mid, position, motor_velocity, acc)");
  138. PROCESS_PACKET_40(motor_rotate_acctime, "(mid, direction, motor_velocity, acctime)");
  139. PROCESS_PACKET_40(motor_move_by_acctime, "(mid, distance, motor_velocity, acctime)");
  140. PROCESS_PACKET_40(motor_move_to_acctime, "(mid, position, motor_velocity, acctime)");
  141. PROCESS_PACKET_30(motor_rotate_with_torque, "(mid, pos, torque)");
  142. PROCESS_PACKET_40(motor_move_to_torque, "(mid, pos, torque, overtime)");
  143. PROCESS_PACKET_50(motor_move_to_zero_forward, "(mid, findzerospeed, findzeroedge_speed, acc, overtime)");
  144. PROCESS_PACKET_50(motor_move_to_zero_backward, "(mid, findzerospeed, findzeroedge_speed, acc, overtime)");
  145. PROCESS_PACKET_11(motor_read_pos, "(mid)");
  146. PROCESS_PACKET_20(motor_set_current_pos_by_change_shift, "(mid, pos)");
  147. PROCESS_PACKET_50(motor_move_to_zero_forward_and_calculated_shift, "(mid, findzerospeed, findzeroedge_speed, acc, overtime)");
  148. PROCESS_PACKET_50(motor_move_to_zero_backward_and_calculated_shift, "(mid, findzerospeed, findzeroedge_speed, acc, overtime)");
  149. PROCESS_PACKET_10(motor_calculated_pos_by_move_to_zero, "(mid)");
  150. PROCESS_PACKET_20(motor_easy_rotate, "(mid, direction)");
  151. PROCESS_PACKET_20(motor_easy_move_by, "(mid, distance)");
  152. PROCESS_PACKET_20(motor_easy_move_to, "(mid, position)");
  153. PROCESS_PACKET_20(motor_easy_move_to_zero, "(mid, direction)");
  154. PROCESS_PACKET_20(motor_easy_set_current_pos, "(mid, pos)");
  155. #if 0
  156. virtual ~ZIXYMotor() {}
  157. virtual int32_t xymotor_enable(int32_t enable) { return err::koperation_not_support; }
  158. virtual int32_t xymotor_move_by(int32_t dx, int32_t dy, int32_t motor_velocity) { return err::koperation_not_support; }
  159. virtual int32_t xymotor_move_to(int32_t x, int32_t y, int32_t motor_velocity) { return err::koperation_not_support; }
  160. virtual int32_t xymotor_move_to_zero() { return err::koperation_not_support; }
  161. virtual int32_t xymotor_move_to_zero_and_calculated_shift() { return err::koperation_not_support; }
  162. virtual int32_t xymotor_read_pos(int32_t *x, int32_t *y) { return err::koperation_not_support; }
  163. virtual int32_t xymotor_calculated_pos_by_move_to_zero() { return err::koperation_not_support; }
  164. #endif
  165. PROCESS_PACKET_20(xymotor_enable, "(mid, enable)");
  166. PROCESS_PACKET_40(xymotor_move_by, "(mid, dx, dy, motor_velocity)");
  167. PROCESS_PACKET_40(xymotor_move_to, "(mid, x, y, motor_velocity)");
  168. PROCESS_PACKET_10(xymotor_move_to_zero, "(mid)");
  169. PROCESS_PACKET_10(xymotor_move_to_zero_and_calculated_shift, "(mid)");
  170. PROCESS_PACKET_12(xymotor_read_pos, "(mid)");
  171. PROCESS_PACKET_10(xymotor_calculated_pos_by_move_to_zero, "(mid)");
  172. #if 0
  173. virtual int32_t code_scaner_start_scan() { return err::koperation_not_support; }
  174. virtual int32_t code_scaner_stop_scan() { return err::koperation_not_support; }
  175. virtual int32_t code_scaner_read_scaner_result(int32_t startadd, uint8_t *data, int32_t *len) { return err::koperation_not_support; }
  176. PROCESS_PACKET_10(code_scaner_start_scan, "(mid)");
  177. PROCESS_PACKET_10(code_scaner_stop_scan, "(mid)");
  178. m_cmdParser->regCMD("code_scaner_read_scaner_result", "(mid, pad0)", 2, [this](int32_t paramN, const char* paraV[], ICmdParserACK* ack) {
  179. if (atoi(paraV[2]) > (int32_t)sizeof(ack->rawdata)) {
  180. ack->ecode = err::kbuffer_not_enough;
  181. return;
  182. }
  183. ack->rawlen = sizeof(ack->rawdata);
  184. ack->ecode = m_deviceManager->module_read_raw(atoi(paraV[0]), atoi(paraV[1]), ack->rawdata, &ack->rawlen);
  185. ack->acktype = ICmdParserACK::kAckType_buf;
  186. });
  187. #endif
  188. #if 0
  189. virtual int32_t pipette_ctrl_init_device() { return err::koperation_not_support; };
  190. virtual int32_t pipette_ctrl_put_tip() { return err::koperation_not_support; };
  191. virtual int32_t pipette_ctrl_move_to_ul(int32_t ul) { return err::koperation_not_support; };
  192. #endif
  193. PROCESS_PACKET_10(pipette_ctrl_init_device, "(mid)");
  194. PROCESS_PACKET_10(pipette_ctrl_put_tip, "(mid)");
  195. PROCESS_PACKET_20(pipette_ctrl_move_to_ul, "(mid, ul)");
  196. #if 0
  197. virtual int32_t a8000_optical_module_power_ctrl(int32_t state) = 0;
  198. virtual int32_t a8000_optical_open_laser(int32_t type) = 0;
  199. virtual int32_t a8000_optical_close_laser(int32_t type) = 0;
  200. virtual int32_t a8000_optical_set_laster_gain(int32_t type, int32_t gain) = 0;
  201. virtual int32_t a8000_optical_set_scan_amp_gain(int32_t type, int32_t gain) = 0;
  202. virtual int32_t a8000_optical_read_scanner_adc_val(int32_t type, int32_t* adcval) = 0;
  203. virtual int32_t a8000_optical_read_laster_adc_val(int32_t type, int32_t* adcval) = 0;
  204. virtual int32_t a8000_optical_scan_current_point_amp_adc_val(int32_t type, int32_t lastergain, int32_t ampgain, int32_t* laster_fb_val, int32_t* adcval) = 0;
  205. #endif
  206. PROCESS_PACKET_20(a8000_optical_module_power_ctrl, "(mid,state)");
  207. PROCESS_PACKET_20(a8000_optical_open_laser, "(mid,type)");
  208. PROCESS_PACKET_20(a8000_optical_close_laser, "(mid,type)");
  209. PROCESS_PACKET_30(a8000_optical_set_laster_gain, "(type,mid,gain)");
  210. PROCESS_PACKET_30(a8000_optical_set_scan_amp_gain, "(type,mid,gain)");
  211. PROCESS_PACKET_21(a8000_optical_read_scanner_adc_val, "(type,mid)");
  212. PROCESS_PACKET_21(a8000_optical_read_laster_adc_val, "(type,mid)");
  213. PROCESS_PACKET_42(a8000_optical_scan_current_point_amp_adc_val, "(type,mid,lastergain,ampgain)");
  214. }