|
|
@ -33,7 +33,7 @@ int32_t MiniRobotCtrlModule::position_calibrate(s32 nowpos) { |
|
|
|
if (m_bus->reCalibration(m_id, nowpos)) return err::kce_subdevice_overtime; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
int32_t MiniRobotCtrlModule::rotate(s32 speed, s32 torque, s32 run_time, function<void(rotate_cb_status_t& status)> status_cb) { |
|
|
|
int32_t MiniRobotCtrlModule::rotate(s32 speed, s32 torque, s32 run_time, action_cb_status_t status_cb) { |
|
|
|
ZLOGI(TAG, "rotate speed:%d torque:%d run_time:%d", speed, torque, run_time); |
|
|
|
m_thread.stop(); |
|
|
|
if (!m_bus->ping(m_id)) return err::kce_subdevice_overtime; |
|
|
@ -44,18 +44,31 @@ int32_t MiniRobotCtrlModule::rotate(s32 speed, s32 torque, s32 run_time, functio |
|
|
|
|
|
|
|
m_thread.start([this, speed, torque, run_time, status_cb]() { |
|
|
|
int32_t entertime = zos_get_tick(); |
|
|
|
while (!m_thread.getExitFlag() || zos_haspassedms(entertime) > run_time) { |
|
|
|
while (true) { |
|
|
|
if (m_thread.getExitFlag() && run_time != 0) { |
|
|
|
stop(0); |
|
|
|
call_status_cb(status_cb, err::kcommon_error_break_by_user); |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
if (m_thread.getExitFlag() && run_time == 0) { |
|
|
|
stop(0); |
|
|
|
call_status_cb(status_cb, 0); |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
if (run_time != 0 && zos_haspassedms(entertime) > run_time) { |
|
|
|
stop(0); |
|
|
|
call_status_cb(status_cb, 0); |
|
|
|
break; |
|
|
|
} |
|
|
|
m_thread.sleep(10); |
|
|
|
} |
|
|
|
stop(0); |
|
|
|
rotate_cb_status_t status; |
|
|
|
status.has_run_time = zos_haspassedms(entertime); |
|
|
|
if (status_cb) status_cb(status); |
|
|
|
}); |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
int32_t MiniRobotCtrlModule::move_to(s32 pos, s32 speed, s32 torque, function<void(move_to_cb_status_t& status)> status_cb) { |
|
|
|
int32_t MiniRobotCtrlModule::move_to(s32 pos, s32 speed, s32 torque, action_cb_status_t status_cb) { |
|
|
|
ZLOGI(TAG, "move_to pos:%d speed:%d torque:%d", pos, speed, torque); |
|
|
|
m_thread.stop(); |
|
|
|
|
|
|
@ -70,22 +83,27 @@ int32_t MiniRobotCtrlModule::move_to(s32 pos, s32 speed, s32 torque, function<vo |
|
|
|
if (!m_bus->moveTo(m_id, pos, speed, torque)) return err::kce_subdevice_overtime; |
|
|
|
|
|
|
|
m_thread.start([this, pos, speed, torque, status_cb]() { |
|
|
|
while (!m_thread.getExitFlag()) { |
|
|
|
while (true) { |
|
|
|
uint8_t moveflag = 0; |
|
|
|
m_bus->getMoveFlag(m_id, moveflag); |
|
|
|
if (moveflag == 0) break; |
|
|
|
if (moveflag == 0) { |
|
|
|
stop(0); |
|
|
|
call_status_cb(status_cb, 0); |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
if (m_thread.getExitFlag()) { |
|
|
|
stop(0); |
|
|
|
call_status_cb(status_cb, err::kcommon_error_break_by_user); |
|
|
|
break; |
|
|
|
} |
|
|
|
m_thread.sleep(10); |
|
|
|
} |
|
|
|
stop(0); |
|
|
|
move_to_cb_status_t status; |
|
|
|
status.pos = pos; |
|
|
|
status.exec_status = 0; |
|
|
|
if (status_cb) status_cb(status); |
|
|
|
}); |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
int32_t MiniRobotCtrlModule::move_by(s32 dpos, s32 speed, s32 torque, function<void(move_by_cb_status_t& status)> status_cb) { |
|
|
|
int32_t MiniRobotCtrlModule::move_by(s32 dpos, s32 speed, s32 torque, action_cb_status_t status_cb) { |
|
|
|
ZLOGI(TAG, "move_by pos:%d speed:%d torque:%d", dpos, speed, torque); |
|
|
|
m_thread.stop(); |
|
|
|
|
|
|
@ -100,16 +118,16 @@ int32_t MiniRobotCtrlModule::move_by(s32 dpos, s32 speed, s32 torque, function<v |
|
|
|
if (targetpos > 4095) targetpos = 4095; |
|
|
|
if (targetpos < 0) targetpos = 0; |
|
|
|
|
|
|
|
move_to(targetpos, speed, torque, [this, nowpos, status_cb](move_to_cb_status_t& status) { |
|
|
|
move_by_cb_status_t moveby_status = {0}; |
|
|
|
moveby_status.dpos = status.pos - nowpos; |
|
|
|
moveby_status.exec_status = status.exec_status; |
|
|
|
if (status_cb) status_cb(moveby_status); |
|
|
|
move_to(targetpos, speed, torque, [this, nowpos, status_cb](int32_t status) { |
|
|
|
// move_by_cb_status_t moveby_status = {0};
|
|
|
|
// moveby_status.dpos = status.pos - nowpos;
|
|
|
|
// moveby_status.exec_status = status.exec_status;
|
|
|
|
if (status_cb) status_cb(status); |
|
|
|
}); |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
int32_t MiniRobotCtrlModule::run_with_torque(s32 torque, s32 run_time, function<void(run_with_torque_cb_status_t& status)> status_cb) { |
|
|
|
int32_t MiniRobotCtrlModule::run_with_torque(s32 torque, s32 run_time, action_cb_status_t status_cb) { |
|
|
|
ZLOGI(TAG, "run_with_torque torque:%d run_time:%d", torque, run_time); |
|
|
|
m_thread.stop(); |
|
|
|
|
|
|
@ -121,19 +139,33 @@ int32_t MiniRobotCtrlModule::run_with_torque(s32 torque, s32 run_time, function< |
|
|
|
|
|
|
|
m_thread.start([this, torque, run_time, status_cb]() { |
|
|
|
int32_t entertime = zos_get_tick(); |
|
|
|
while (!m_thread.getExitFlag() || zos_haspassedms(entertime) > run_time) { |
|
|
|
// while (!m_thread.getExitFlag() || zos_haspassedms(entertime) > run_time) {
|
|
|
|
while (true) { |
|
|
|
if (m_thread.getExitFlag() && run_time != 0) { |
|
|
|
stop(0); |
|
|
|
call_status_cb(status_cb, err::kcommon_error_break_by_user); |
|
|
|
break; |
|
|
|
} |
|
|
|
if (m_thread.getExitFlag() && run_time == 0) { |
|
|
|
stop(0); |
|
|
|
call_status_cb(status_cb, 0); |
|
|
|
break; |
|
|
|
} |
|
|
|
if (run_time != 0 && zos_haspassedms(entertime) > run_time) { |
|
|
|
stop(0); |
|
|
|
call_status_cb(status_cb, 0); |
|
|
|
break; |
|
|
|
} |
|
|
|
m_thread.sleep(10); |
|
|
|
} |
|
|
|
stop(0); |
|
|
|
run_with_torque_cb_status_t status; |
|
|
|
status.has_run_time = zos_haspassedms(entertime); |
|
|
|
if (status_cb) status_cb(status); |
|
|
|
if (status_cb) status_cb(0); |
|
|
|
}); |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
int32_t MiniRobotCtrlModule::move_by_nolimit(s32 pos, s32 speed, s32 torque, function<void(move_by_nolimit_cb_status_t& status)> status_cb) { return err::kcommon_error_operation_not_support; } |
|
|
|
int32_t MiniRobotCtrlModule::move_by_nolimit(s32 pos, s32 speed, s32 torque, action_cb_status_t status_cb) { return err::kcommon_error_operation_not_support; } |
|
|
|
|
|
|
|
int32_t MiniRobotCtrlModule::read_version(version_t& version) { |
|
|
|
uint8_t mainversion, subversion, miniserv_mainversion, miniserv_subversion; |
|
|
@ -185,3 +217,8 @@ int32_t MiniRobotCtrlModule::set_warning_limit_param(warning_limit_param_t& para |
|
|
|
int32_t MiniRobotCtrlModule::get_run_param(run_param_t& param) { return 0; } |
|
|
|
int32_t MiniRobotCtrlModule::get_basic_param(basic_param_t& param) { return 0; } |
|
|
|
int32_t MiniRobotCtrlModule::get_warning_limit_param(warning_limit_param_t& param) { return 0; } |
|
|
|
|
|
|
|
void MiniRobotCtrlModule::call_status_cb(action_cb_status_t cb, int32_t status) { |
|
|
|
m_last_exec_status = status; |
|
|
|
if (cb) cb(status); |
|
|
|
} |