24 #include "MockAxis.hpp"
26 #include <ccut/async.hpp>
27 #include <logger/Logger.hpp>
29 #include "MockPlatform.hpp"
31 using namespace logger;
33 using namespace smc::internal;
35 MockAxis::MockAxis(
const std::string &uid,
36 const std::shared_ptr<MockPlatform> &mock) :
41 std::future<void> MockAxis::moveTo(
const units::Value &position)
const
43 std::shared_ptr<MockPlatform> mock(m_mock.lock());
45 return ccut::make_future_error(
46 Exception(ErrorCode::Canceled,
"platform stopped (deleted)"));
48 info(MockPlatform::s_loggerCat)
49 <<
"MoveTo requested on MockPlatform id: " << mock->getPlatformId()
50 <<
" for axis " <<
uid() <<
" to position: " << position.value;
51 std::promise<void> movePromise;
52 auto moveFuture = movePromise.get_future();
57 if (!
convert(convertedPosition, units::unit_t::MILLIMETERS))
59 throw Exception{ErrorCode::IncompatibleUnits};
61 if (convertedPosition.unit != units::MILLIMETERS)
63 throw Exception{ErrorCode::InternalError};
65 mock->setMotorPosition(
uid(), convertedPosition.value);
67 movePromise.set_value();
72 movePromise.set_exception(std::current_exception());
79 std::shared_ptr<MockPlatform> mock(m_mock.lock());
81 return ccut::make_future_error(
82 Exception(ErrorCode::Canceled,
"platform stopped (deleted)"));
84 info(MockPlatform::s_loggerCat)
85 <<
"MoveBy requested on MockPlatform id: " << mock->getPlatformId()
86 <<
" for axis " <<
uid() <<
" by distance: " << distance.value;
87 std::promise<void> movePromise;
88 auto moveFuture = movePromise.get_future();
93 if (!
convert(convertedDistance, units::unit_t::MILLIMETERS))
95 throw Exception{ErrorCode::IncompatibleUnits};
97 if (convertedDistance.unit != units::MILLIMETERS)
99 throw Exception{ErrorCode::InternalError};
102 mock->getMotorPosition(
uid())};
103 newPosition += convertedDistance.value;
105 mock->setMotorPosition(
uid(), newPosition.value);
106 movePromise.set_value();
111 movePromise.set_exception(std::current_exception());
118 std::shared_ptr<MockPlatform> mock(m_mock.lock());
120 return ccut::make_future_error<units::value_t>(
121 Exception(ErrorCode::Canceled,
"platform stopped (deleted)"));
123 info(MockPlatform::s_loggerCat)
124 <<
"Querying axis " <<
uid()
125 <<
" on MockPlatform id: " << mock->getPlatformId() <<
" for position";
126 std::promise<units::value_t> positionPromise;
127 auto positionFuture = positionPromise.get_future();
135 positionPromise.set_exception(std::current_exception());
137 return positionFuture;
142 std::shared_ptr<MockPlatform> mock(m_mock.lock());
144 return ccut::make_future_error(
145 Exception(ErrorCode::Canceled,
"platform stopped (deleted)"));
147 std::promise<void> promise;
148 auto future = promise.get_future();
156 std::shared_ptr<MockPlatform> mock(m_mock.lock());
158 return ccut::make_future_error(
159 Exception(ErrorCode::Canceled,
"platform stopped (deleted)"));
161 std::promise<void> promise;
162 auto future = promise.get_future();
170 std::shared_ptr<MockPlatform> mock(m_mock.lock());
172 return ccut::make_future_error(
173 Exception(ErrorCode::Canceled,
"platform stopped (deleted)"));
175 std::promise<void> promise;
176 auto future = promise.get_future();
184 std::shared_ptr<MockPlatform> mock(m_mock.lock());
186 return ccut::make_future_error(
187 Exception(ErrorCode::Canceled,
"platform stopped (deleted)"));
189 info(MockPlatform::s_loggerCat)
190 <<
"setActualPosition requested on MockPlatform id: "
191 << mock->getPlatformId() <<
" for axis " <<
uid()
192 <<
" to position: " << position;
193 std::promise<void> promise;
194 auto future = promise.get_future();
199 if (!
convert(convertedDistance, units::unit_t::MILLIMETERS))
201 throw Exception{ErrorCode::IncompatibleUnits};
203 if (convertedDistance.unit != units::MILLIMETERS)
205 throw Exception{ErrorCode::InternalError};
208 mock->setMotorPosition(
uid(), convertedDistance.value);
214 promise.set_exception(std::current_exception());
221 std::shared_ptr<MockPlatform> mock(m_mock.lock());
223 throw Exception(ErrorCode::Canceled,
"platform stopped (deleted)");
226 mock->getMotorPosition(
uid())};
227 if (!
convert(motorPosition, unit))
229 throw Exception{ErrorCode::IncompatibleUnits};
231 return motorPosition;
235 const std::chrono::milliseconds &timeout)
const
237 std::shared_ptr<MockPlatform> mock(m_mock.lock());
239 return ccut::make_future_error(
240 Exception(ErrorCode::Canceled,
"platform stopped (deleted)"));
242 info(MockPlatform::s_loggerCat)
243 <<
"Homing sequence (takeReference) requested on MockPlatform id: "
244 << mock->getPlatformId() <<
"with timeout: " << timeout.count() <<
"ms";
246 mock->setMotorPosition(
uid(), 0.0);
248 std::promise<void> promise;
249 auto future = promise.get_future();
257 std::shared_ptr<MockPlatform> mock(m_mock.lock());
259 return ccut::make_future_error<Axis::State>(
260 Exception(ErrorCode::Canceled,
"platform stopped (deleted)"));
262 info(MockPlatform::s_loggerCat)
263 <<
"Querying axis " <<
uid()
264 <<
" on MockPlatform id: " << mock->getPlatformId() <<
" for run state";
265 std::promise<Axis::State> promise;
266 auto future = promise.get_future();
268 promise.set_value(Axis::State::IDLE);
virtual bool convert(units::Value &value, units::unit_t unit) const
Convert value in a manner specific to this device.
DeviceId uid() const
Get the address of device.
Exception thrown by MotionController in case of issues with command.
std::future< units::value_t > getPosition(units::unit_t unit) const override
Get current position of this axis.
units::value_t lastPosition(units::unit_t unit) const override
Get last known position of the axis.
std::future< void > resume() const override
Resume paused motion.
std::future< void > moveBy(const units::Value &distance) const override
Move this axis by given distance.
std::future< State > getState() const override
Get the current axis state.
std::future< void > pause() const override
Pause ongoing motion, prevent queued motions from running.
std::future< void > setActualPosition(const units::Value &position) const override
Set current axis position.
std::future< void > stop() const override
Stop any ongoing motion, flush the motion-queue.
std::future< void > takeReference(const std::chrono::milliseconds &timeout) const override
Start a homing sequence.
main motion-lib namespace