24 #ifndef ASYNCAXISPOSITIONMONITORCONTROLLER_HPP__
25 #define ASYNCAXISPOSITIONMONITORCONTROLLER_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/AxisPositionMonitor.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)
56 addTag(*
this,
"monitor");
59 void addParams(
const std::shared_ptr<oatpp::web::server::api::Endpoint::Info>& info,
bool units =
false)
61 info->pathParams.add<String>(
"id")
62 .addExample(
"Resolver monitor for axis X", String(
"mfe://1/resolver/X/monitor"))
63 .addExample(
"Resolver monitor for axis Y", String(
"mfe://1/resolver/Y/monitor"))
64 .addExample(
"Resolver monitor for axis Z", String(
"mfe://1/resolver/Z/monitor"));
68 auto ¶m = info->queryParams.add<String>(
"unit")
69 .addExample(
"steps (default)", String(
"steps"))
70 .addExample(
"radians", String(
"rad"));
72 param.required =
false;
73 param.description =
"request unit";
77 ENDPOINT_INFO(getDifference)
79 info->summary =
"get position difference between axis and positionSensor";
80 info->addResponse<Float64>(Status::CODE_200,
"application/json")
81 .addExample(
"example", Float64(1234));
82 addParams(info,
true);
84 ENDPOINT_ASYNC(
"GET",
"/monitor/{id}/diff", getDifference)
87 ENDPOINT_ASYNC_INIT(getDifference)
88 Action act()
override;
92 ENDPOINT_INFO(getMaxDifference)
94 info->summary =
"get max position difference measured since monitor was enabled";
95 info->addResponse(Status::CODE_200,
"application/json")
96 .addExample(
"example", Float64(123));
97 addParams(info,
true);
99 ENDPOINT_ASYNC(
"GET",
"/monitor/{id}/diff/max", getMaxDifference)
102 ENDPOINT_ASYNC_INIT(getMaxDifference)
103 Action act()
override;
107 ENDPOINT_INFO(getState)
109 info->summary =
"get current monitor state";
110 info->addResponse(Status::CODE_200,
"application/json")
111 .addExample(
"example", String(
"enabled"))
112 .addExample(
"example2", String(
"triggered"));
115 ENDPOINT_ASYNC(
"GET",
"/monitor/{id}/state", getState)
118 ENDPOINT_ASYNC_INIT(getState)
119 Action act()
override;
120 Action onResult(
const smc::AxisPositionMonitor::State &value);
123 ENDPOINT_INFO(getEnabled)
125 info->summary =
"check if monitor is enabled";
126 info->addResponse(Status::CODE_200,
"application/json")
127 .addExample(
"example", Boolean(
true));
130 ENDPOINT_ASYNC(
"GET",
"/monitor/{id}/enabled", getEnabled)
133 ENDPOINT_ASYNC_INIT(getEnabled)
134 Action act()
override;
135 Action onResult(
const smc::AxisPositionMonitor::State &value);
138 ENDPOINT_INFO(putEnabled)
140 info->summary =
"set current monitor state";
141 info->addResponse(Status::CODE_200,
"application/json");
142 info->addConsumes<Float64>(
"application/json")
143 .addExample(
"example", Boolean(
true));
146 ENDPOINT_ASYNC(
"PUT",
"/monitor/{id}/enabled", putEnabled)
149 ENDPOINT_ASYNC_INIT(putEnabled)
150 Action act()
override;
151 Action onBody(
const Boolean &value);
157 #include OATPP_CODEGEN_END(ApiController)