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.

182 lines
13 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
  1. #include "zmodule_device_manager.hpp"
  2. #include <assert.h>
  3. #include <stdio.h>
  4. using namespace iflytop;
  5. using namespace std;
  6. #define PROXY_IMPL(type, functionName, ...) \
  7. type *module = nullptr; \
  8. int32_t ecode = findModule<type>(id, &module); \
  9. if (ecode != 0) { \
  10. return ecode; \
  11. } \
  12. return module->functionName(__VA_ARGS__);
  13. void ZModuleDeviceManager::initialize(IZcanCmderMaster *cancmder) {
  14. m_cancmder = cancmder;
  15. assert(m_cancmder != nullptr);
  16. m_cancmder->regEventPacketListener([this](int32_t fromboard, zcr_cmd_header_t *packet, int32_t datalen) {
  17. if (datalen < 4) return;
  18. int32_t *pdata = (int32_t *)packet->data;
  19. int32_t event = pdata[0];
  20. if (event == kreg_change_event) {
  21. int32_t moduleid = pdata[1];
  22. int32_t event_id = pdata[2];
  23. int32_t eventval = pdata[3];
  24. callOnRegValChangeEvent(moduleid, event_id, eventval);
  25. }
  26. });
  27. }
  28. void ZModuleDeviceManager::registerModule(ZIModule *module) {
  29. assert(module != nullptr);
  30. int32_t id = 0;
  31. module->getid(&id);
  32. uint16_t id16 = id;
  33. m_modulers[id16] = module;
  34. }
  35. /*******************************************************************************
  36. * ZIModule *
  37. *******************************************************************************/
  38. int32_t ZModuleDeviceManager::module_stop(uint16_t id) { PROXY_IMPL(ZIModule, module_stop); }
  39. int32_t ZModuleDeviceManager::module_break(uint16_t id) { PROXY_IMPL(ZIModule, module_break); }
  40. int32_t ZModuleDeviceManager::module_get_last_exec_status(uint16_t id, int32_t *ack0) { PROXY_IMPL(ZIModule, module_get_last_exec_status, ack0); }
  41. int32_t ZModuleDeviceManager::module_get_status(uint16_t id, int32_t *status) { PROXY_IMPL(ZIModule, module_get_status, status); }
  42. int32_t ZModuleDeviceManager::module_set_reg(uint16_t id, int32_t param_id, int32_t param_value) {
  43. PROXY_IMPL(ZIModule, module_set_reg, param_id, param_value);
  44. }
  45. int32_t ZModuleDeviceManager::module_get_reg(uint16_t id, int32_t param_id, int32_t *param_value) {
  46. PROXY_IMPL(ZIModule, module_get_reg, param_id, param_value);
  47. }
  48. int32_t ZModuleDeviceManager::module_readio(uint16_t id, int32_t *io) { PROXY_IMPL(ZIModule, module_readio, io); }
  49. int32_t ZModuleDeviceManager::module_writeio(uint16_t id, int32_t ioindex, int32_t io) { PROXY_IMPL(ZIModule, module_writeio, ioindex, io); }
  50. int32_t ZModuleDeviceManager::module_read_adc(uint16_t id, int32_t adcindex, int32_t *adc) { PROXY_IMPL(ZIModule, module_read_adc, adcindex, adc); }
  51. int32_t ZModuleDeviceManager::module_get_error(uint16_t id, int32_t *iserror) { PROXY_IMPL(ZIModule, module_get_error, iserror); }
  52. int32_t ZModuleDeviceManager::module_clear_error(uint16_t id) { PROXY_IMPL(ZIModule, module_clear_error); }
  53. int32_t ZModuleDeviceManager::module_set_inited_flag(uint16_t id, int32_t flag) { PROXY_IMPL(ZIModule, module_set_inited_flag, flag); }
  54. int32_t ZModuleDeviceManager::module_get_inited_flag(uint16_t id, int32_t *flag) { PROXY_IMPL(ZIModule, module_get_inited_flag, flag); }
  55. int32_t ZModuleDeviceManager::module_factory_reset(uint16_t id) { PROXY_IMPL(ZIModule, module_factory_reset); }
  56. int32_t ZModuleDeviceManager::module_flush_cfg(uint16_t id) { PROXY_IMPL(ZIModule, module_flush_cfg); }
  57. int32_t ZModuleDeviceManager::module_active_cfg(uint16_t id) { PROXY_IMPL(ZIModule, module_active_cfg); }
  58. int32_t ZModuleDeviceManager::module_read_raw(uint16_t id, int32_t startadd, uint8_t *data, int32_t *len) {
  59. PROXY_IMPL(ZIModule, module_read_raw, startadd, data, len);
  60. }
  61. int32_t ZModuleDeviceManager::module_enable(uint16_t id, int32_t enable) { PROXY_IMPL(ZIModule, module_enable, enable); }
  62. int32_t ZModuleDeviceManager::module_start(uint16_t id) { PROXY_IMPL(ZIModule, module_start); }
  63. /*******************************************************************************
  64. * ZIMotor *
  65. *******************************************************************************/
  66. #if 0
  67. virtual int32_t motor_enable(int32_t enable) { return err::koperation_not_support; }
  68. virtual int32_t motor_rotate(int32_t direction, int32_t motor_velocity, int32_t acc) { return err::koperation_not_support; }
  69. virtual int32_t motor_move_by(int32_t distance, int32_t motor_velocity, int32_t acc) { return err::koperation_not_support; }
  70. virtual int32_t motor_move_to(int32_t position, int32_t motor_velocity, int32_t acc) { return err::koperation_not_support; }
  71. virtual int32_t motor_rotate_acctime(int32_t direction, int32_t motor_velocity, int32_t acctime) { return err::koperation_not_support; }
  72. virtual int32_t motor_move_by_acctime(int32_t distance, int32_t motor_velocity, int32_t acctime) { return err::koperation_not_support; }
  73. virtual int32_t motor_move_to_acctime(int32_t position, int32_t motor_velocity, int32_t acctime) { return err::koperation_not_support; }
  74. virtual int32_t motor_rotate_with_torque(int32_t direction, int32_t torque) { return err::koperation_not_support; }
  75. virtual int32_t motor_move_to_torque(int32_t pos, int32_t torque, int32_t overtime) { return err::koperation_not_support; }
  76. 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; }
  77. 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; }
  78. 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; }
  79. 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; }
  80. virtual int32_t motor_read_pos(int32_t* pos) { return err::koperation_not_support; }
  81. virtual int32_t motor_set_current_pos_by_change_shift(int32_t pos) { return err::koperation_not_support; } // һ�����ڶ��
  82. virtual int32_t motor_calculated_pos_by_move_to_zero() { return err::koperation_not_support; }
  83. #endif
  84. int32_t ZModuleDeviceManager::motor_enable(uint16_t id, int32_t enable) { PROXY_IMPL(ZIMotor, motor_enable, enable); }
  85. int32_t ZModuleDeviceManager::motor_rotate(uint16_t id, int32_t direction, int32_t motor_velocity, int32_t acc) {
  86. PROXY_IMPL(ZIMotor, motor_rotate, direction, motor_velocity, acc);
  87. }
  88. int32_t ZModuleDeviceManager::motor_move_by(uint16_t id, int32_t distance, int32_t motor_velocity, int32_t acc) {
  89. PROXY_IMPL(ZIMotor, motor_move_by, distance, motor_velocity, acc);
  90. }
  91. int32_t ZModuleDeviceManager::motor_move_to(uint16_t id, int32_t position, int32_t motor_velocity, int32_t acc) {
  92. PROXY_IMPL(ZIMotor, motor_move_to, position, motor_velocity, acc);
  93. }
  94. int32_t ZModuleDeviceManager::motor_rotate_with_torque(uint16_t id, int32_t direction, int32_t torque) {
  95. PROXY_IMPL(ZIMotor, motor_rotate_with_torque, direction, torque);
  96. }
  97. int32_t ZModuleDeviceManager::motor_rotate_acctime(uint16_t id, int32_t direction, int32_t motor_velocity, int32_t acctime) {
  98. PROXY_IMPL(ZIMotor, motor_rotate_acctime, direction, motor_velocity, acctime);
  99. }
  100. int32_t ZModuleDeviceManager::motor_move_by_acctime(uint16_t id, int32_t distance, int32_t motor_velocity, int32_t acctime) {
  101. PROXY_IMPL(ZIMotor, motor_move_by_acctime, distance, motor_velocity, acctime);
  102. }
  103. int32_t ZModuleDeviceManager::motor_move_to_acctime(uint16_t id, int32_t position, int32_t motor_velocity, int32_t acctime) {
  104. PROXY_IMPL(ZIMotor, motor_move_to_acctime, position, motor_velocity, acctime);
  105. }
  106. int32_t ZModuleDeviceManager::motor_move_to_zero_forward(uint16_t id, int32_t findzerospeed, int32_t findzeroedge_speed, int32_t acc, int32_t overtime) {
  107. PROXY_IMPL(ZIMotor, motor_move_to_zero_forward, findzerospeed, findzeroedge_speed, acc, overtime);
  108. }
  109. int32_t ZModuleDeviceManager::motor_move_to_zero_backward(uint16_t id, int32_t findzerospeed, int32_t findzeroedge_speed, int32_t acc, int32_t overtime) {
  110. PROXY_IMPL(ZIMotor, motor_move_to_zero_backward, findzerospeed, findzeroedge_speed, acc, overtime);
  111. }
  112. int32_t ZModuleDeviceManager::motor_read_pos(uint16_t id, int32_t *pos) { PROXY_IMPL(ZIMotor, motor_read_pos, pos); }
  113. int32_t ZModuleDeviceManager::motor_set_current_pos_by_change_shift(uint16_t id, int32_t pos) {
  114. PROXY_IMPL(ZIMotor, motor_set_current_pos_by_change_shift, pos);
  115. }
  116. int32_t ZModuleDeviceManager::motor_move_to_zero_forward_and_calculated_shift(uint16_t id, int32_t findzerospeed, int32_t findzeroedge_speed, int32_t acc,
  117. int32_t overtime) {
  118. PROXY_IMPL(ZIMotor, motor_move_to_zero_forward_and_calculated_shift, findzerospeed, findzeroedge_speed, acc, overtime);
  119. }
  120. int32_t ZModuleDeviceManager::motor_move_to_zero_backward_and_calculated_shift(uint16_t id, int32_t findzerospeed, int32_t findzeroedge_speed, int32_t acc,
  121. int32_t overtime) {
  122. PROXY_IMPL(ZIMotor, motor_move_to_zero_backward_and_calculated_shift, findzerospeed, findzeroedge_speed, acc, overtime);
  123. }
  124. int32_t ZModuleDeviceManager::motor_move_to_torque(uint16_t id, int32_t pos, int32_t torque, int32_t overtime) {
  125. PROXY_IMPL(ZIMotor, motor_move_to_torque, pos, torque, overtime);
  126. }
  127. int32_t ZModuleDeviceManager::motor_calculated_pos_by_move_to_zero(uint16_t id) { PROXY_IMPL(ZIMotor, motor_calculated_pos_by_move_to_zero); }
  128. /*******************************************************************************
  129. * ZIXYMotor *
  130. *******************************************************************************/
  131. #if 0
  132. virtual int32_t xymotor_enable(int32_t enable) { return err::koperation_not_support; }
  133. virtual int32_t xymotor_move_by(int32_t dx, int32_t dy, int32_t motor_velocity) { return err::koperation_not_support; }
  134. virtual int32_t xymotor_move_to(int32_t x, int32_t y, int32_t motor_velocity) { return err::koperation_not_support; }
  135. virtual int32_t xymotor_move_to_zero() { return err::koperation_not_support; }
  136. virtual int32_t xymotor_move_to_zero_and_calculated_shift() { return err::koperation_not_support; }
  137. virtual int32_t xymotor_read_pos(int32_t *x, int32_t *y) { return err::koperation_not_support; }
  138. #endif
  139. int32_t ZModuleDeviceManager::xymotor_enable(uint16_t id, int32_t enable) { PROXY_IMPL(ZIXYMotor, xymotor_enable, enable); }
  140. int32_t ZModuleDeviceManager::xymotor_move_by(uint16_t id, int32_t dx, int32_t dy, int32_t motor_velocity) {
  141. PROXY_IMPL(ZIXYMotor, xymotor_move_by, dx, dy, motor_velocity);
  142. }
  143. int32_t ZModuleDeviceManager::xymotor_move_to(uint16_t id, int32_t x, int32_t y, int32_t motor_velocity) {
  144. PROXY_IMPL(ZIXYMotor, xymotor_move_to, x, y, motor_velocity);
  145. }
  146. int32_t ZModuleDeviceManager::xymotor_move_to_zero(uint16_t id) { PROXY_IMPL(ZIXYMotor, xymotor_move_to_zero); }
  147. int32_t ZModuleDeviceManager::xymotor_move_to_zero_and_calculated_shift(uint16_t id) { PROXY_IMPL(ZIXYMotor, xymotor_move_to_zero_and_calculated_shift); }
  148. int32_t ZModuleDeviceManager::xymotor_read_pos(uint16_t id, int32_t *x, int32_t *y) { PROXY_IMPL(ZIXYMotor, xymotor_read_pos, x, y); }
  149. int32_t ZModuleDeviceManager::xymotor_calculated_pos_by_move_to_zero(uint16_t id) { PROXY_IMPL(ZIXYMotor, xymotor_calculated_pos_by_move_to_zero); }
  150. #if 0
  151. virtual int32_t code_scaner_start_scan(uint16_t id);
  152. virtual int32_t code_scaner_stop_scan(uint16_t id);
  153. virtual int32_t code_scaner_read_scaner_result(uint16_t id, int32_t startadd, uint8_t *data, int32_t *len);
  154. #endif
  155. int32_t ZModuleDeviceManager::code_scaner_start_scan(uint16_t id) { PROXY_IMPL(ZICodeScaner, code_scaner_start_scan); }
  156. int32_t ZModuleDeviceManager::code_scaner_stop_scan(uint16_t id) { PROXY_IMPL(ZICodeScaner, code_scaner_stop_scan); }
  157. int32_t ZModuleDeviceManager::code_scaner_read_scaner_result(uint16_t id, int32_t startadd, uint8_t *data, int32_t *len) {
  158. PROXY_IMPL(ZICodeScaner, code_scaner_read_scaner_result, startadd, data, len);
  159. }
  160. #if 0
  161. virtual int32_t pipette_ctrl_init_device() { return err::koperation_not_support; };
  162. virtual int32_t pipette_ctrl_put_tip() { return err::koperation_not_support; };
  163. virtual int32_t pipette_ctrl_move_to_ul(int32_t ul) { return err::koperation_not_support; };
  164. #endif
  165. int32_t ZModuleDeviceManager::pipette_ctrl_init_device(uint16_t id) { PROXY_IMPL(ZIPipetteCtrlModule, pipette_ctrl_init_device); }
  166. int32_t ZModuleDeviceManager::pipette_ctrl_put_tip(uint16_t id) { PROXY_IMPL(ZIPipetteCtrlModule, pipette_ctrl_put_tip); }
  167. int32_t ZModuleDeviceManager::pipette_ctrl_move_to_ul(uint16_t id, int32_t ul) { PROXY_IMPL(ZIPipetteCtrlModule, pipette_ctrl_move_to_ul, ul); }