24 #ifndef ASYNCAXISCONTROLLER_HPP__
25 #define ASYNCAXISCONTROLLER_HPP__
31 #include <ccut/async.hpp>
32 #include <ccut/utils.hpp>
33 #include <logger/Logger.hpp>
34 #include <oatpp/core/macro/component.hpp>
36 #include "Exception.hpp"
37 #include "FutureCoroutine.hpp"
39 #include "SmcController.hpp"
40 #include "device/Axis.hpp"
41 #include "device/DeviceBase.hpp"
42 #include "device/DeviceStore.hpp"
43 #include "platform/PlatformFactory.hpp"
44 #include "util/serialize.hpp"
46 #include OATPP_CODEGEN_BEGIN(ApiController)
54 void addParams(
const std::shared_ptr<oatpp::web::server::api::Endpoint::Info>& info);
56 ENDPOINT_INFO(getPosition)
58 info->summary =
"get current axis position";
59 info->addResponse<Float64>(Status::CODE_200,
"application/json")
60 .addExample(
"example", Float64(1234));
63 ENDPOINT_ASYNC(
"GET",
"/axis/{id}/position", getPosition)
66 ENDPOINT_ASYNC_INIT(getPosition)
67 Action act()
override;
71 ENDPOINT_INFO(putPosition)
73 info->summary =
"Absolute axis movement";
74 info->addResponse(Status::CODE_200,
"application/json");
75 info->addConsumes<Float64>(
"application/json")
76 .addExample(
"absolute position", Float64(123));
79 ENDPOINT_ASYNC(
"PUT",
"/axis/{id}/position", putPosition)
82 ENDPOINT_ASYNC_INIT(putPosition)
83 Action act()
override;
84 Action onMoveTo(
const Float64 &position);
88 ENDPOINT_INFO(postPosition)
90 info->summary =
"Relative axis movement";
91 info->addResponse(Status::CODE_200,
"application/json");
92 info->addConsumes<Float64>(
"application/json")
93 .addExample(
"relative position", Float64(-10));
96 ENDPOINT_ASYNC(
"POST",
"/axis/{id}/position", postPosition)
99 ENDPOINT_ASYNC_INIT(postPosition)
100 Action act()
override;
101 Action onMoveBy(
const Float64 &position);
104 ENDPOINT_INFO(putCurrentPosition)
106 info->summary =
"Set axis current position";
107 info->addResponse(Status::CODE_200,
"application/json");
108 info->addConsumes<Float64>(
"application/json")
109 .addExample(
"absolute position", Float64(123));
112 ENDPOINT_ASYNC(
"PUT",
"/axis/{id}/settings/position", putCurrentPosition)
115 ENDPOINT_ASYNC_INIT(putCurrentPosition)
116 Action act()
override;
117 Action onSetCurrentPosition(
const Float64 &position);
120 ENDPOINT_INFO(putStop)
122 info->summary =
"Stop motion";
123 info->addResponse(Status::CODE_200,
"application/json");
126 ENDPOINT_ASYNC(
"PUT",
"/axis/{id}/stop", putStop)
129 ENDPOINT_ASYNC_INIT(putStop)
130 Action act()
override;
133 ENDPOINT_INFO(putPause)
135 info->summary =
"Pause ongoing motion";
136 info->addResponse(Status::CODE_200,
"application/json");
139 ENDPOINT_ASYNC(
"PUT",
"/axis/{id}/pause", putPause)
142 ENDPOINT_ASYNC_INIT(putPause)
143 Action act()
override;
146 ENDPOINT_INFO(putResume)
148 info->summary =
"Resume paused motion";
149 info->addResponse(Status::CODE_200,
"application/json");
152 ENDPOINT_ASYNC(
"PUT",
"/axis/{id}/resume", putResume)
155 ENDPOINT_ASYNC_INIT(putResume)
156 Action act()
override;
159 ENDPOINT_INFO(postTakeReference)
161 info->summary =
"Begin the homing sequence";
162 info->description =
"Timeout is in milliseconds";
163 info->addResponse(Status::CODE_200,
"application/json");
164 info->addConsumes<Float64>(
"application/json")
165 .addExample(
"homing timeout (ms)", Float64(120*1000));
166 info->pathParams.add<String>(
"id").addExample(
"Grbl axis X",
167 String(
"grbl://1/axis/X"));
169 ENDPOINT_ASYNC(
"POST",
"/axis/{id}/homing", postTakeReference)
172 ENDPOINT_ASYNC_INIT(postTakeReference)
173 Action act()
override;
174 Action onTakeReference(
const Float64 &timeout);
177 ENDPOINT_INFO(getState)
179 info->summary =
"Get axis state";
180 info->addResponse<String>(Status::CODE_200,
"application/json")
181 .addExample(
"State", String(
"idle"));
184 ENDPOINT_ASYNC(
"GET",
"/axis/{id}/state", getState)
187 ENDPOINT_ASYNC_INIT(getState)
188 Action act()
override;
195 #include OATPP_CODEGEN_END(ApiController)