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.

296 lines
20 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
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 "protocol_parser.hpp"
  2. #include <stdio.h>
  3. using namespace iflytop;
  4. using namespace std;
  5. #define TAG "ZIProtocolParser"
  6. #define PROCESS_PACKET_BEGIN(var_cmdid, var_moduleType) \
  7. int32_t* param __attribute__((__unused__)) = (int32_t*)data; \
  8. int paramNum __attribute__((__unused__)) = (len) / sizeof(int32_t); \
  9. if (cmdid == var_cmdid) { \
  10. auto* mod = dynamic_cast<var_moduleType*>(module); \
  11. if (mod == nullptr) { \
  12. m_cancmder->sendErrorAck(rxcmd, err::koperation_not_support); \
  13. return; \
  14. }
  15. #define CHECK_PARAM_NUM(num) \
  16. if (paramNum != num) { \
  17. m_cancmder->sendErrorAck(rxcmd, err::kcmd_param_num_error); \
  18. return; \
  19. }
  20. #define PROCESS_PACKET_XX_END(ackNum) \
  21. if (ecode == 0) { \
  22. m_cancmder->sendAck(rxcmd, ack, ackNum); \
  23. return; \
  24. } \
  25. m_cancmder->sendErrorAck(rxcmd, ecode); \
  26. return; \
  27. }
  28. #define PROCESS_PACKET_BUF_REQ_XX_END() \
  29. if (ecode == 0) { \
  30. m_cancmder->sendBufAck(rxcmd, ackbuf, readbufsize); \
  31. return; \
  32. } else { \
  33. m_cancmder->sendErrorAck(rxcmd, ecode); \
  34. } \
  35. return; \
  36. }
  37. #define PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, XP, XACK, ...) \
  38. { \
  39. PROCESS_PACKET_BEGIN(var_cmdid, var_moduleType) \
  40. CHECK_PARAM_NUM(XP) \
  41. int32_t* ack = (int32_t*)&ackbuf[0]; \
  42. static_assert(XACK * sizeof(int32_t) < sizeof(ackbuf)); \
  43. int32_t ecode = mod->var_funcname(__VA_ARGS__); \
  44. PROCESS_PACKET_XX_END(XACK) \
  45. }
  46. #define PROCESS_BUF_REQUEST_X(var_cmdid, var_moduleType, var_funcname, XP, ...) \
  47. { \
  48. PROCESS_PACKET_BEGIN(var_cmdid, var_moduleType) \
  49. CHECK_PARAM_NUM(XP) \
  50. int32_t readbufsize = ZCANCMD_READ_BUF_MAX_SIZE; \
  51. int32_t ecode = mod->var_funcname(__VA_ARGS__); \
  52. PROCESS_PACKET_BUF_REQ_XX_END() \
  53. }
  54. #define PROCESS_PACKET_00(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 0, 0)
  55. #define PROCESS_PACKET_01(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 0, 1, &ack[0])
  56. #define PROCESS_PACKET_02(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 0, 2, &ack[0], &ack[1])
  57. #define PROCESS_PACKET_03(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 0, 3, &ack[0], &ack[1], &ack[2])
  58. #define PROCESS_PACKET_10(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 1, 0, param[0])
  59. #define PROCESS_PACKET_11(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 1, 1, param[0], &ack[0])
  60. #define PROCESS_PACKET_12(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 1, 2, param[0], &ack[0], &ack[1])
  61. #define PROCESS_PACKET_13(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 1, 3, param[0], &ack[0], &ack[1], &ack[2])
  62. #define PROCESS_PACKET_20(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 2, 0, param[0], param[1])
  63. #define PROCESS_PACKET_21(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 2, 1, param[0], param[1], &ack[0])
  64. #define PROCESS_PACKET_22(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 2, 2, param[0], param[1], &ack[0], &ack[1])
  65. #define PROCESS_PACKET_23(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 2, 3, param[0], param[1], &ack[0], &ack[1], &ack[2])
  66. #define PROCESS_PACKET_30(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 3, 0, param[0], param[1], param[2])
  67. #define PROCESS_PACKET_31(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 3, 1, param[0], param[1], param[2], &ack[0])
  68. #define PROCESS_PACKET_32(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 3, 2, param[0], param[1], param[2], &ack[0], &ack[1])
  69. #define PROCESS_PACKET_33(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 3, 3, param[0], param[1], param[2], &ack[0], &ack[1], &ack[2])
  70. #define PROCESS_PACKET_40(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 4, 0, param[0], param[1], param[2], param[3])
  71. #define PROCESS_PACKET_41(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 4, 1, param[0], param[1], param[2], param[3], &ack[0])
  72. #define PROCESS_PACKET_42(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 4, 2, param[0], param[1], param[2], param[3], &ack[0], &ack[1])
  73. #define PROCESS_PACKET_43(var_cmdid, var_moduleType, var_funcname) PROCESS_PACKET_XX(var_cmdid, var_moduleType, var_funcname, 4, 3, param[0], param[1], param[2], param[3], &ack[0], &ack[1], &ack[2])
  74. #define PROCESS_BUF_REQUEST_1(var_cmdid, var_moduleType, var_funcname) PROCESS_BUF_REQUEST_X(var_cmdid, var_moduleType, var_funcname, 1, param[0], &ackbuf[0], &readbufsize)
  75. void ZIProtocolParser::initialize(IZCanCmder* cancmder) {
  76. m_cancmder = cancmder;
  77. m_cancmder->registerListener(this);
  78. }
  79. void ZIProtocolParser::_registerModule(uint16_t id, ZIModule* module) { m_modulers[id] = module; }
  80. void ZIProtocolParser::registerModule(ZIModule* module) {
  81. int32_t moduleid = 0;
  82. module->getid(&moduleid);
  83. uint16_t id = moduleid;
  84. _registerModule(id, module);
  85. }
  86. void ZIProtocolParser::onRceivePacket(zcr_cmd_header_t* rxcmd, uint8_t* data, int32_t len) {
  87. // printf("onRceivePacket cmdid:%d subModuleid:%d cmdSubId:%d\n", rxcmd->cmdMainId, rxcmd->subModuleid, rxcmd->cmdSubId);
  88. uint16_t subModuleid = rxcmd->subModuleid;
  89. auto it = m_modulers.find(subModuleid);
  90. if (it == m_modulers.end()) {
  91. return;
  92. }
  93. ZIModule* module = it->second;
  94. int32_t cmdid = CMDID(rxcmd->cmdMainId, rxcmd->cmdSubId);
  95. /*******************************************************************************
  96. * module *
  97. *******************************************************************************/
  98. #if 0
  99. virtual ~ZIModule() {}
  100. virtual int32_t getid(int32_t *id) = 0;
  101. virtual int32_t module_ping() = 0;
  102. virtual int32_t module_stop() = 0;
  103. virtual int32_t module_break() = 0;
  104. virtual int32_t module_start() { return err::koperation_not_support; }
  105. virtual int32_t module_get_last_exec_status(int32_t *status) = 0;
  106. virtual int32_t module_get_status(int32_t *status) = 0;
  107. virtual int32_t module_get_error(int32_t *iserror) = 0;
  108. virtual int32_t module_clear_error() = 0;
  109. virtual int32_t module_set_reg(int32_t param_id, int32_t param_value) { return err::koperation_not_support; }
  110. virtual int32_t module_get_reg(int32_t param_id, int32_t *param_value) { return err::koperation_not_support; }
  111. virtual int32_t module_readio(int32_t *io) { return err::koperation_not_support; }
  112. virtual int32_t module_writeio(int32_t io) { return err::koperation_not_support; }
  113. virtual int32_t module_read_adc(int32_t adcindex, int32_t *adc) { return err::koperation_not_support; }
  114. virtual int32_t module_set_inited_flag(int32_t flag) {
  115. m_inited_flag = flag;
  116. return 0;
  117. }
  118. virtual int32_t module_get_inited_flag(int32_t *flag) {
  119. *flag = m_inited_flag;
  120. return 0;
  121. }
  122. // kmodule_factory_reset = CMDID(1, 14), // para:{}, ack:{}
  123. // kmodule_flush_cfg = CMDID(1, 15), // para:{}, ack:{}
  124. // kmodule_active_cfg = CMDID(1, 16), // para:{}, ack:{}
  125. virtual int32_t module_factory_reset() { return err::koperation_not_support; }
  126. virtual int32_t module_flush_cfg() { return err::koperation_not_support; }
  127. virtual int32_t module_active_cfg() { return err::koperation_not_support; }
  128. virtual int32_t module_get_state(int32_t state_id, int32_t *state_value) { return err::koperation_not_support; }
  129. virtual int32_t module_read_raw(int32_t startadd, int32_t *data, int32_t *len) { return err::koperation_not_support; }
  130. virtual int32_t module_enable(int32_t enable) { return err::koperation_not_support; }
  131. #endif
  132. PROCESS_PACKET_00(kmodule_ping, ZIModule, module_ping);
  133. PROCESS_PACKET_00(kmodule_stop, ZIModule, module_stop);
  134. PROCESS_PACKET_00(kmodule_break, ZIModule, module_break);
  135. PROCESS_PACKET_01(kmodule_get_last_exec_status, ZIModule, module_get_last_exec_status);
  136. PROCESS_PACKET_01(kmodule_get_status, ZIModule, module_get_status);
  137. PROCESS_PACKET_20(kmodule_set_reg, ZIModule, module_set_reg);
  138. PROCESS_PACKET_11(kmodule_get_reg, ZIModule, module_get_reg);
  139. PROCESS_PACKET_01(kmodule_readio, ZIModule, module_readio);
  140. PROCESS_PACKET_20(kmodule_writeio, ZIModule, module_writeio);
  141. PROCESS_PACKET_11(kmodule_read_adc, ZIModule, module_read_adc);
  142. PROCESS_PACKET_01(kmodule_get_error, ZIModule, module_get_error);
  143. PROCESS_PACKET_00(kmodule_clear_error, ZIModule, module_clear_error);
  144. PROCESS_PACKET_10(kmodule_set_inited_flag, ZIModule, module_set_inited_flag);
  145. PROCESS_PACKET_01(kmodule_get_inited_flag, ZIModule, module_get_inited_flag);
  146. PROCESS_PACKET_00(kmodule_factory_reset, ZIModule, module_factory_reset);
  147. PROCESS_PACKET_00(kmodule_flush_cfg, ZIModule, module_flush_cfg);
  148. PROCESS_PACKET_00(kmodule_active_cfg, ZIModule, module_active_cfg);
  149. PROCESS_BUF_REQUEST_1(kmodule_read_raw, ZIModule, module_read_raw);
  150. PROCESS_PACKET_10(kmodule_enable, ZIModule, module_enable);
  151. PROCESS_PACKET_00(kmodule_start, ZIModule, module_start);
  152. /*******************************************************************************
  153. * motor *
  154. *******************************************************************************/
  155. #if 0
  156. virtual int32_t motor_enable(int32_t enable) { return err::koperation_not_support; }
  157. virtual int32_t motor_rotate(int32_t direction, int32_t motor_velocity, int32_t acc) { return err::koperation_not_support; }
  158. virtual int32_t motor_move_by(int32_t distance, int32_t motor_velocity, int32_t acc) { return err::koperation_not_support; }
  159. virtual int32_t motor_move_to(int32_t position, int32_t motor_velocity, int32_t acc) { return err::koperation_not_support; }
  160. virtual int32_t motor_rotate_acctime(int32_t direction, int32_t motor_velocity, int32_t acctime) { return err::koperation_not_support; }
  161. virtual int32_t motor_move_by_acctime(int32_t distance, int32_t motor_velocity, int32_t acctime) { return err::koperation_not_support; }
  162. virtual int32_t motor_move_to_acctime(int32_t position, int32_t motor_velocity, int32_t acctime) { return err::koperation_not_support; }
  163. virtual int32_t motor_rotate_with_torque(int32_t direction, int32_t torque) { return err::koperation_not_support; }
  164. virtual int32_t motor_move_to_torque(int32_t pos, int32_t torque, int32_t overtime) { return err::koperation_not_support; }
  165. 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; }
  166. 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; }
  167. 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; }
  168. 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; }
  169. virtual int32_t motor_read_pos(int32_t* pos) { return err::koperation_not_support; }
  170. virtual int32_t motor_set_current_pos_by_change_shift(int32_t pos) { return err::koperation_not_support; } // һ�����ڶ���
  171. virtual int32_t motor_calculated_pos_by_move_to_zero() { return err::koperation_not_support; }
  172. virtual int32_t motor_easy_rotate(int32_t direction) { return err::koperation_not_support; };
  173. virtual int32_t motor_easy_move_by(int32_t distance) { return err::koperation_not_support; };
  174. virtual int32_t motor_easy_move_to(int32_t position) { return err::koperation_not_support; };
  175. virtual int32_t motor_easy_move_to_zero(int32_t direction) { return err::koperation_not_support; };
  176. virtual int32_t motor_easy_set_current_pos(int32_t pos) { return err::koperation_not_support; };
  177. virtual int32_t motor_easy_move_to_io(int32_t ioindex, int32_t direction) { return err::koperation_not_support; };
  178. #endif
  179. PROCESS_PACKET_10(kmotor_enable, ZIMotor, motor_enable);
  180. PROCESS_PACKET_30(kmotor_rotate, ZIMotor, motor_rotate);
  181. PROCESS_PACKET_30(kmotor_move_by, ZIMotor, motor_move_by);
  182. PROCESS_PACKET_30(kmotor_move_to, ZIMotor, motor_move_to);
  183. PROCESS_PACKET_20(kmotor_rotate_with_torque, ZIMotor, motor_rotate_with_torque);
  184. PROCESS_PACKET_30(kmotor_rotate_acctime, ZIMotor, motor_rotate_acctime);
  185. PROCESS_PACKET_30(kmotor_move_by_acctime, ZIMotor, motor_move_by_acctime);
  186. PROCESS_PACKET_30(kmotor_move_to_acctime, ZIMotor, motor_move_to_acctime);
  187. PROCESS_PACKET_40(kmotor_move_to_zero_forward, ZIMotor, motor_move_to_zero_forward);
  188. PROCESS_PACKET_40(kmotor_move_to_zero_backward, ZIMotor, motor_move_to_zero_backward);
  189. PROCESS_PACKET_01(kmotor_read_pos, ZIMotor, motor_read_pos);
  190. PROCESS_PACKET_10(kmotor_set_current_pos_by_change_shift, ZIMotor, motor_set_current_pos_by_change_shift);
  191. PROCESS_PACKET_40(kmotor_motor_move_to_zero_forward_and_calculated_shift, ZIMotor, motor_move_to_zero_forward_and_calculated_shift);
  192. PROCESS_PACKET_40(kmotor_motor_move_to_zero_backward_and_calculated_shift, ZIMotor, motor_move_to_zero_backward_and_calculated_shift);
  193. PROCESS_PACKET_30(kmotor_move_to_torque, ZIMotor, motor_move_to_torque);
  194. PROCESS_PACKET_00(kmotor_calculated_pos_by_move_to_zero, ZIMotor, motor_calculated_pos_by_move_to_zero);
  195. PROCESS_PACKET_10(kmotor_easy_rotate, ZIMotor, motor_easy_rotate);
  196. PROCESS_PACKET_10(kmotor_easy_move_by, ZIMotor, motor_easy_move_by);
  197. PROCESS_PACKET_10(kmotor_easy_move_to, ZIMotor, motor_easy_move_to);
  198. PROCESS_PACKET_10(kmotor_easy_move_to_zero, ZIMotor, motor_easy_move_to_zero);
  199. PROCESS_PACKET_10(kmotor_easy_set_current_pos, ZIMotor, motor_easy_set_current_pos);
  200. PROCESS_PACKET_20(kmotor_easy_move_to_io, ZIMotor, motor_easy_move_to_io);
  201. /*******************************************************************************
  202. * xymotor *
  203. *******************************************************************************/
  204. #if 0
  205. virtual ~ZIXYMotor() {}
  206. virtual int32_t xymotor_enable(int32_t enable) { return err::koperation_not_support; }
  207. virtual int32_t xymotor_move_by(int32_t dx, int32_t dy, int32_t motor_velocity) { return err::koperation_not_support; }
  208. virtual int32_t xymotor_move_to(int32_t x, int32_t y, int32_t motor_velocity) { return err::koperation_not_support; }
  209. virtual int32_t xymotor_move_to_zero() { return err::koperation_not_support; }
  210. virtual int32_t xymotor_move_to_zero_and_calculated_shift() { return err::koperation_not_support; }
  211. virtual int32_t xymotor_read_pos(int32_t *x, int32_t *y) { return err::koperation_not_support; }
  212. virtual int32_t xymotor_calculated_pos_by_move_to_zero() { return err::koperation_not_support; }
  213. #endif
  214. PROCESS_PACKET_10(kxymotor_enable, ZIXYMotor, xymotor_enable);
  215. PROCESS_PACKET_30(kxymotor_move_by, ZIXYMotor, xymotor_move_by);
  216. PROCESS_PACKET_30(kxymotor_move_to, ZIXYMotor, xymotor_move_to);
  217. PROCESS_PACKET_00(kxymotor_move_to_zero, ZIXYMotor, xymotor_move_to_zero);
  218. PROCESS_PACKET_00(kxymotor_move_to_zero_and_calculated_shift, ZIXYMotor, xymotor_move_to_zero_and_calculated_shift);
  219. PROCESS_PACKET_02(kxymotor_read_pos, ZIXYMotor, xymotor_read_pos);
  220. PROCESS_PACKET_00(kxymotor_calculated_pos_by_move_to_zero, ZIXYMotor, xymotor_calculated_pos_by_move_to_zero);
  221. #if 0
  222. virtual int32_t code_scaner_start_scan() { return err::koperation_not_support; }
  223. virtual int32_t code_scaner_stop_scan() { return err::koperation_not_support; }
  224. virtual int32_t code_scaner_read_scaner_result(int32_t startadd, uint8_t *data, int32_t *len) { return err::koperation_not_support; }
  225. PROCESS_PACKET_00(kcode_scaner_start_scan, ZICodeScaner, code_scaner_start_scan);
  226. PROCESS_PACKET_00(kcode_scaner_stop_scan, ZICodeScaner, code_scaner_stop_scan);
  227. PROCESS_BUF_REQUEST_1(kcode_scaner_read_scaner_result, ZICodeScaner, code_scaner_read_scaner_result);
  228. #endif
  229. #if 0
  230. virtual int32_t pipette_ctrl_init_device() { return err::koperation_not_support; };
  231. virtual int32_t pipette_ctrl_put_tip() { return err::koperation_not_support; };
  232. virtual int32_t pipette_ctrl_move_to_ul(int32_t ul) { return err::koperation_not_support; };
  233. #endif
  234. PROCESS_PACKET_00(kpipette_ctrl_init_device, ZIPipetteCtrlModule, pipette_ctrl_init_device);
  235. PROCESS_PACKET_00(kpipette_ctrl_put_tip, ZIPipetteCtrlModule, pipette_ctrl_put_tip);
  236. PROCESS_PACKET_10(kpipette_ctrl_move_to_ul, ZIPipetteCtrlModule, pipette_ctrl_move_to_ul);
  237. #if 0
  238. virtual int32_t a8000_optical_module_power_ctrl(int32_t state) = 0;
  239. virtual int32_t a8000_optical_open_laser(int32_t type) = 0;
  240. virtual int32_t a8000_optical_close_laser(int32_t type) = 0;
  241. virtual int32_t a8000_optical_set_laster_gain(int32_t type, int32_t gain) = 0;
  242. virtual int32_t a8000_optical_set_scan_amp_gain(int32_t type, int32_t gain) = 0;
  243. virtual int32_t a8000_optical_read_scanner_adc_val(int32_t type, int32_t* adcval) = 0;
  244. virtual int32_t a8000_optical_read_laster_adc_val(int32_t type, int32_t* adcval) = 0;
  245. 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;
  246. #endif
  247. PROCESS_PACKET_10(ka8000_optical_module_power_ctrl, ZIA8000OpticalModule, a8000_optical_module_power_ctrl);
  248. PROCESS_PACKET_10(ka8000_optical_open_laser, ZIA8000OpticalModule, a8000_optical_open_laser);
  249. PROCESS_PACKET_10(ka8000_optical_close_laser, ZIA8000OpticalModule, a8000_optical_close_laser);
  250. PROCESS_PACKET_20(ka8000_optical_set_laster_gain, ZIA8000OpticalModule, a8000_optical_set_laster_gain);
  251. PROCESS_PACKET_20(ka8000_optical_set_scan_amp_gain, ZIA8000OpticalModule, a8000_optical_set_scan_amp_gain);
  252. PROCESS_PACKET_11(ka8000_optical_read_scanner_adc_val, ZIA8000OpticalModule, a8000_optical_read_scanner_adc_val);
  253. PROCESS_PACKET_11(ka8000_optical_read_laster_adc_val, ZIA8000OpticalModule, a8000_optical_read_laster_adc_val);
  254. PROCESS_PACKET_32(ka8000_optical_scan_current_point_amp_adc_val, ZIA8000OpticalModule, a8000_optical_scan_current_point_amp_adc_val);
  255. }