|
|
#pragma once
#include <map>
#include "api/api.hpp"
#include "api\i_zcan_cmder_master.hpp"
#include "cmdid.hpp"
namespace iflytop { class ZModuleDeviceManager { private: map<uint16_t, ZIModule *> m_modulers; IZcanCmderMaster *m_cancmder = nullptr;
public: void initialize(); void registerModule(uint16_t id, ZIModule *module); /*******************************************************************************
* ZIModule * *******************************************************************************/ int32_t module_stop(uint16_t id); int32_t module_break(uint16_t id);
int32_t module_get_last_exec_status(uint16_t id, int32_t *status); int32_t module_get_status(uint16_t id, int32_t *status);
int32_t module_set_param(uint16_t id, int32_t param_id, int32_t param_value); int32_t module_get_param(uint16_t id, int32_t param_id, int32_t *param_value);
int32_t module_readio(uint16_t id, int32_t *io); int32_t module_writeio(uint16_t id, int32_t io);
int32_t module_read_adc(uint16_t id, int32_t adcindex, int32_t *adc);
int32_t module_get_error(uint16_t id, int32_t *iserror); int32_t module_clear_error(uint16_t id);
int32_t module_set_inited_flag(uint16_t id, int32_t flag); int32_t module_get_inited_flag(uint16_t id, int32_t *flag);
/*******************************************************************************
* ZIMotor * *******************************************************************************/
int32_t motor_enable(uint16_t id, int32_t enable); int32_t motor_rotate(uint16_t id, int32_t direction, int32_t motor_velocity, int32_t acc); int32_t motor_move_by(uint16_t id, int32_t distance, int32_t motor_velocity, int32_t acc); int32_t motor_move_to(uint16_t id, int32_t position, int32_t motor_velocity, int32_t acc); int32_t motor_rotate_acctime(uint16_t id, int32_t direction, int32_t motor_velocity, int32_t acctime); int32_t motor_move_by_acctime(uint16_t id, int32_t distance, int32_t motor_velocity, int32_t acctime); int32_t motor_move_to_acctime(uint16_t id, int32_t position, int32_t motor_velocity, int32_t acctime); int32_t motor_move_to_zero_forward(uint16_t id, int32_t findzerospeed, int32_t findzeroedge_speed, int32_t acc, int32_t overtime); int32_t motor_move_to_zero_backward(uint16_t id, int32_t findzerospeed, int32_t findzeroedge_speed, int32_t acc, int32_t overtime); int32_t motor_move_to_with_torque(uint16_t id, int32_t pos, int32_t torque); int32_t motor_read_pos(uint16_t id, int32_t *pos); int32_t motor_set_current_pos_by_change_shift(uint16_t id, int32_t pos);
/*******************************************************************************
* ZIXYMotor * *******************************************************************************/ int32_t xymotor_enable(uint16_t id, int32_t enable); int32_t xymotor_move_by(uint16_t id, int32_t dx, int32_t dy, int32_t motor_velocity); int32_t xymotor_move_to(uint16_t id, int32_t x, int32_t y, int32_t motor_velocity);
private: template <typename T> int32_t findModule(uint16_t id, T **module) { auto it = m_modulers.find(id); if (it == m_modulers.end()) { return err::kmodule_not_found; } T *_module = dynamic_cast<T *>(it->second); if (_module == nullptr) { return err::koperation_not_support; } *module = _module; return 0; } };
} // namespace iflytop
|