9 #include <mal/OpcUaMal.hpp>
10 #include <mal/util/OpcUaUtil.hpp>
11 #include <mal/ps/OpcUaDataEntity.hpp>
12 #include <mal/rr/OpcUaClientRrEntity.hpp>
13 #include <mal/bindings/opcua/OpcUaIcdBindings.hpp>
14 #include <mal/types/malTypesOpcUaImpl.hpp>
26 static constexpr
size_t dataValueCount =
28 + ::elt::mal::icd::opcua::Scalar<float>::dataValueCount
29 + ::elt::mal::icd::opcua::Scalar<float>::dataValueCount
32 static std::unique_ptr<::exmalif::TelPosition>
makeImpl();
33 static bool isImpl(const ::exmalif::TelPosition*
object);
38 static constexpr
size_t dataValueCount =
40 + ::elt::mal::icd::opcua::Scalar<float>::dataValueCount
41 + ::elt::mal::icd::opcua::Scalar<float>::dataValueCount
44 static std::unique_ptr<::exmalif::AxesPosition>
makeImpl();
45 static bool isImpl(const ::exmalif::AxesPosition*
object);
50 static constexpr
size_t dataValueCount =
52 + ::elt::mal::icd::opcua::Scalar<std::string>::dataValueCount
53 + ::elt::mal::icd::opcua::Scalar<std::string>::dataValueCount
56 static std::unique_ptr<::exmalif::LogInfo>
makeImpl();
57 static bool isImpl(const ::exmalif::LogInfo*
object);
72 public ::elt::mal::ps::OpcUaDataEntity<::exmalif::TelPosition>
81 void setRa(
float value)
override {
95 std::unique_ptr<::exmalif::TelPosition>
clone()
const override {
96 return std::unique_ptr<::exmalif::TelPosition>(
new TelPosition(*
this));
99 bool keyEquals(const ::exmalif::TelPosition& other)
const override {
104 std::size_t seed = 0;
108 std::unique_ptr<::exmalif::TelPosition>
cloneKey()
const override {
109 std::unique_ptr<::exmalif::TelPosition> entity(
new TelPosition);
120 return ::elt::mal::icd::opcua::MalOpcUaTraits<::exmalif::TelPosition>::dataValueCount;
124 resultIterator = dm_ra.assignFromDataValue(
"::exmalif::TelPosition.ra", resultIterator);
125 resultIterator = dm_dec.assignFromDataValue(
"::exmalif::TelPosition.dec", resultIterator);
129 auto* fieldIterator = m_dataValues.data();
131 fieldIterator = dm_ra.assignToDataValue(fieldIterator);
132 fieldIterator = dm_dec.assignToDataValue(fieldIterator);
134 return m_dataValues.data();
137 void copy(const ::exmalif::TelPosition& from)
override {
138 dm_ra = from.getRa();
139 dm_dec = from.getDec();
144 ::elt::mal::icd::opcua::Scalar<float> dm_ra;
145 ::elt::mal::icd::opcua::Scalar<float> dm_dec;
147 mutable std::array<UA_DataValue, ::elt::mal::icd::opcua::MalOpcUaTraits<::exmalif::TelPosition>::dataValueCount> m_dataValues;
152 public ::elt::mal::ps::OpcUaDataEntity<::exmalif::AxesPosition>
175 std::unique_ptr<::exmalif::AxesPosition>
clone()
const override {
176 return std::unique_ptr<::exmalif::AxesPosition>(
new AxesPosition(*
this));
179 bool keyEquals(const ::exmalif::AxesPosition& other)
const override {
184 std::size_t seed = 0;
188 std::unique_ptr<::exmalif::AxesPosition>
cloneKey()
const override {
189 std::unique_ptr<::exmalif::AxesPosition> entity(
new AxesPosition);
200 return ::elt::mal::icd::opcua::MalOpcUaTraits<::exmalif::AxesPosition>::dataValueCount;
204 resultIterator = dm_alt.assignFromDataValue(
"::exmalif::AxesPosition.alt", resultIterator);
205 resultIterator = dm_az.assignFromDataValue(
"::exmalif::AxesPosition.az", resultIterator);
209 auto* fieldIterator = m_dataValues.data();
211 fieldIterator = dm_alt.assignToDataValue(fieldIterator);
212 fieldIterator = dm_az.assignToDataValue(fieldIterator);
214 return m_dataValues.data();
217 void copy(const ::exmalif::AxesPosition& from)
override {
218 dm_alt = from.getAlt();
219 dm_az = from.getAz();
224 ::elt::mal::icd::opcua::Scalar<float> dm_alt;
225 ::elt::mal::icd::opcua::Scalar<float> dm_az;
227 mutable std::array<UA_DataValue, ::elt::mal::icd::opcua::MalOpcUaTraits<::exmalif::AxesPosition>::dataValueCount> m_dataValues;
232 public ::elt::mal::ps::OpcUaDataEntity<::exmalif::LogInfo>
238 return dm_level.get();
246 return dm_logger.get();
255 std::unique_ptr<::exmalif::LogInfo>
clone()
const override {
256 return std::unique_ptr<::exmalif::LogInfo>(
new LogInfo(*
this));
259 bool keyEquals(const ::exmalif::LogInfo& other)
const override {
264 std::size_t seed = 0;
268 std::unique_ptr<::exmalif::LogInfo>
cloneKey()
const override {
269 std::unique_ptr<::exmalif::LogInfo> entity(
new LogInfo);
280 return ::elt::mal::icd::opcua::MalOpcUaTraits<::exmalif::LogInfo>::dataValueCount;
284 resultIterator = dm_level.assignFromDataValue(
"::exmalif::LogInfo.level", resultIterator);
285 resultIterator = dm_logger.assignFromDataValue(
"::exmalif::LogInfo.logger", resultIterator);
289 auto* fieldIterator = m_dataValues.data();
291 fieldIterator = dm_level.assignToDataValue(fieldIterator);
292 fieldIterator = dm_logger.assignToDataValue(fieldIterator);
294 return m_dataValues.data();
297 void copy(const ::exmalif::LogInfo& from)
override {
298 dm_level = from.getLevel();
299 dm_logger = from.getLogger();
304 ::elt::mal::icd::opcua::Scalar<std::string> dm_level;
305 ::elt::mal::icd::opcua::Scalar<std::string> dm_logger;
307 mutable std::array<UA_DataValue, ::elt::mal::icd::opcua::MalOpcUaTraits<::exmalif::LogInfo>::dataValueCount> m_dataValues;
313 public virtual ::elt::mal::rr::OpcUaClientRrEntity<::exmalif::StdCmdsAsync>
318 const ::elt::mal::Uri& uri,
319 const std::vector<std::shared_ptr<::elt::mal::rr::qos::QoS>>& standardQoS,
320 const ::elt::mal::Mal::Properties& malSpecificProperties,
321 const std::shared_ptr<::elt::mal::OpcUaMal>& mal)
323 ::
elt::mal::rr::OpcUaClientRrEntity<StdCmdsAsync>(uri, standardQoS, malSpecificProperties, mal)
327 ::elt::mal::future<std::string>
Stop()
override {
328 const auto methodSeqNr = 0;
331 constexpr
size_t dataValueCount =
335 std::array<UA_Variant, dataValueCount> arguments;
337 const auto extractor = [](
const UA_Variant& resultVariant) {
338 ::elt::mal::icd::opcua::Scalar<std::string> result;
339 result.assignFromVariant(
"StdCmds::Stop (return value)", &resultVariant);
343 return callMethodAsync<std::string>(methodSeqNr, arguments, extractor);
347 ::elt::mal::future<std::string>
Init()
override {
348 const auto methodSeqNr = 1;
351 constexpr
size_t dataValueCount =
355 std::array<UA_Variant, dataValueCount> arguments;
357 const auto extractor = [](
const UA_Variant& resultVariant) {
358 ::elt::mal::icd::opcua::Scalar<std::string> result;
359 result.assignFromVariant(
"StdCmds::Init (return value)", &resultVariant);
363 return callMethodAsync<std::string>(methodSeqNr, arguments, extractor);
367 ::elt::mal::future<std::string>
Reset()
override {
368 const auto methodSeqNr = 2;
371 constexpr
size_t dataValueCount =
375 std::array<UA_Variant, dataValueCount> arguments;
377 const auto extractor = [](
const UA_Variant& resultVariant) {
378 ::elt::mal::icd::opcua::Scalar<std::string> result;
379 result.assignFromVariant(
"StdCmds::Reset (return value)", &resultVariant);
383 return callMethodAsync<std::string>(methodSeqNr, arguments, extractor);
387 ::elt::mal::future<std::string>
Enable()
override {
388 const auto methodSeqNr = 3;
391 constexpr
size_t dataValueCount =
395 std::array<UA_Variant, dataValueCount> arguments;
397 const auto extractor = [](
const UA_Variant& resultVariant) {
398 ::elt::mal::icd::opcua::Scalar<std::string> result;
399 result.assignFromVariant(
"StdCmds::Enable (return value)", &resultVariant);
403 return callMethodAsync<std::string>(methodSeqNr, arguments, extractor);
407 ::elt::mal::future<std::string>
Disable()
override {
408 const auto methodSeqNr = 4;
411 constexpr
size_t dataValueCount =
415 std::array<UA_Variant, dataValueCount> arguments;
417 const auto extractor = [](
const UA_Variant& resultVariant) {
418 ::elt::mal::icd::opcua::Scalar<std::string> result;
419 result.assignFromVariant(
"StdCmds::Disable (return value)", &resultVariant);
423 return callMethodAsync<std::string>(methodSeqNr, arguments, extractor);
427 ::elt::mal::future<std::string>
GetState()
override {
428 const auto methodSeqNr = 5;
431 constexpr
size_t dataValueCount =
435 std::array<UA_Variant, dataValueCount> arguments;
437 const auto extractor = [](
const UA_Variant& resultVariant) {
438 ::elt::mal::icd::opcua::Scalar<std::string> result;
439 result.assignFromVariant(
"StdCmds::GetState (return value)", &resultVariant);
443 return callMethodAsync<std::string>(methodSeqNr, arguments, extractor);
448 const auto methodSeqNr = 6;
451 constexpr
size_t dataValueCount =
455 std::array<UA_Variant, dataValueCount> arguments;
457 const auto extractor = [](
const UA_Variant& resultVariant) {
458 ::elt::mal::icd::opcua::Scalar<std::string> result;
459 result.assignFromVariant(
"StdCmds::GetStatus (return value)", &resultVariant);
463 return callMethodAsync<std::string>(methodSeqNr, arguments, extractor);
468 const auto methodSeqNr = 7;
471 constexpr
size_t dataValueCount =
475 std::array<UA_Variant, dataValueCount> arguments;
477 const auto extractor = [](
const UA_Variant& resultVariant) {
478 ::elt::mal::icd::opcua::Scalar<std::string> result;
479 result.assignFromVariant(
"StdCmds::GetVersion (return value)", &resultVariant);
483 return callMethodAsync<std::string>(methodSeqNr, arguments, extractor);
487 ::elt::mal::future<std::string>
Config()
override {
488 const auto methodSeqNr = 8;
491 constexpr
size_t dataValueCount =
495 std::array<UA_Variant, dataValueCount> arguments;
497 const auto extractor = [](
const UA_Variant& resultVariant) {
498 ::elt::mal::icd::opcua::Scalar<std::string> result;
499 result.assignFromVariant(
"StdCmds::Config (return value)", &resultVariant);
503 return callMethodAsync<std::string>(methodSeqNr, arguments, extractor);
507 ::elt::mal::future<std::string>
Exit()
override {
508 const auto methodSeqNr = 9;
511 constexpr
size_t dataValueCount =
515 std::array<UA_Variant, dataValueCount> arguments;
517 const auto extractor = [](
const UA_Variant& resultVariant) {
518 ::elt::mal::icd::opcua::Scalar<std::string> result;
519 result.assignFromVariant(
"StdCmds::Exit (return value)", &resultVariant);
523 return callMethodAsync<std::string>(methodSeqNr, arguments, extractor);
527 ::elt::mal::future<std::string>
SetLogLevel(
const std::shared_ptr<::exmalif::LogInfo>& info)
override {
528 const auto methodSeqNr = 10;
530 ::elt::mal::icd::opcua::NestedStructure<::exmalif::LogInfo> arg_info;
533 constexpr
size_t dataValueCount =
535 + decltype(arg_info)::dataValueCount
538 std::array<UA_Variant, dataValueCount> arguments;
539 auto* argIterator = arguments.data();
541 argIterator = arg_info.assignToVariant(argIterator);
543 const auto extractor = [](
const UA_Variant& resultVariant) {
544 ::elt::mal::icd::opcua::Scalar<std::string> result;
545 result.assignFromVariant(
"StdCmds::SetLogLevel (return value)", &resultVariant);
549 return callMethodAsync<std::string>(methodSeqNr, arguments, extractor);
553 ::elt::mal::future<std::string>
Preset(
const std::shared_ptr<::exmalif::TelPosition>& pos)
override {
554 const auto methodSeqNr = 11;
556 ::elt::mal::icd::opcua::NestedStructure<::exmalif::TelPosition> arg_pos;
559 constexpr
size_t dataValueCount =
561 + decltype(arg_pos)::dataValueCount
564 std::array<UA_Variant, dataValueCount> arguments;
565 auto* argIterator = arguments.data();
567 argIterator = arg_pos.assignToVariant(argIterator);
569 const auto extractor = [](
const UA_Variant& resultVariant) {
570 ::elt::mal::icd::opcua::Scalar<std::string> result;
571 result.assignFromVariant(
"StdCmds::Preset (return value)", &resultVariant);
575 return callMethodAsync<std::string>(methodSeqNr, arguments, extractor);
579 ::elt::mal::future<std::string>
Move(
const std::shared_ptr<::exmalif::AxesPosition>& pos)
override {
580 const auto methodSeqNr = 12;
582 ::elt::mal::icd::opcua::NestedStructure<::exmalif::AxesPosition> arg_pos;
585 constexpr
size_t dataValueCount =
587 + decltype(arg_pos)::dataValueCount
590 std::array<UA_Variant, dataValueCount> arguments;
591 auto* argIterator = arguments.data();
593 argIterator = arg_pos.assignToVariant(argIterator);
595 const auto extractor = [](
const UA_Variant& resultVariant) {
596 ::elt::mal::icd::opcua::Scalar<std::string> result;
597 result.assignFromVariant(
"StdCmds::Move (return value)", &resultVariant);
601 return callMethodAsync<std::string>(methodSeqNr, arguments, extractor);
606 throw std::runtime_error(
"AMI is not implemented in OPC-UA");
612 public virtual ::elt::mal::rr::OpcUaSyncClientBase
617 const ::elt::mal::Uri& uri,
618 const std::vector<std::shared_ptr<::elt::mal::rr::qos::QoS>>& standardQoS,
619 const ::elt::mal::Mal::Properties& malSpecificProperties,
620 const std::shared_ptr<::elt::mal::OpcUaMal>& mal)
622 ::
elt::mal::rr::OpcUaSyncClientBase(uri, standardQoS, malSpecificProperties, mal),
623 m_asyncClient(uri, standardQoS, malSpecificProperties, mal)
628 return unpackAsync(m_asyncClient.
Stop());
633 return unpackAsync(m_asyncClient.
Init());
638 return unpackAsync(m_asyncClient.
Reset());
643 return unpackAsync(m_asyncClient.
Enable());
648 return unpackAsync(m_asyncClient.
Disable());
653 return unpackAsync(m_asyncClient.
GetState());
658 return unpackAsync(m_asyncClient.
GetStatus());
663 return unpackAsync(m_asyncClient.
GetVersion());
668 return unpackAsync(m_asyncClient.
Config());
673 return unpackAsync(m_asyncClient.
Exit());
677 std::string
SetLogLevel(
const std::shared_ptr<::exmalif::LogInfo>& info)
override {
678 return unpackAsync(m_asyncClient.
SetLogLevel(info));
682 std::string
Preset(
const std::shared_ptr<::exmalif::TelPosition>& pos)
override {
683 return unpackAsync(m_asyncClient.
Preset(pos));
687 std::string
Move(
const std::shared_ptr<::exmalif::AxesPosition>& pos)
override {
688 return unpackAsync(m_asyncClient.
Move(pos));
693 throw std::runtime_error(
"AMI is not implemented in OPC-UA");
697 return m_asyncClient.asyncConnect();
700 ::elt::mal::rr::ListenerRegistration
702 return m_asyncClient.registerConnectionListener(std::move(listener));