MotionLib  1.0.0
SamBuCa motion library
MGrblTrigger.cpp
1 /*
2 ** Copyright (C) 2025 CERN
3 **
4 ** This software is provided 'as-is', without any express or implied
5 ** warranty. In no event will the authors be held liable for any damages
6 ** arising from the use of this software.
7 **
8 ** Permission is granted to anyone to use this software for any purpose,
9 ** including commercial applications, and to alter it and redistribute it
10 ** freely, subject to the following restrictions:
11 **
12 ** 1. The origin of this software must not be misrepresented; you must not
13 ** claim that you wrote the original software. If you use this software
14 ** in a product, an acknowledgment in the product documentation would be
15 ** appreciated but is not required.
16 ** 2. Altered source versions must be plainly marked as such, and must not be
17 ** misrepresented as being the original software.
18 ** 3. This notice may not be removed or altered from any source distribution.
19 **
20 ** Created on: 2025-04-17T11:10:27
21 ** Author: Sylvain Fargier <sylvain.fargier@cern.ch>
22 */
23 
24 #include "MGrblTrigger.hpp"
25 
26 #include <ccut/async.hpp>
27 
28 #include "MGrblPlatform.hpp"
29 
30 using namespace logger;
31 using namespace smc;
32 using namespace smc::internal;
33 using namespace smc::units;
34 
35 MGrblTrigger::MGrblTrigger(const std::string &uid,
36  const std::shared_ptr<MGrblPlatform> &mgrbl,
37  const std::shared_ptr<GrblPlatform> &grbl) :
38  GrblTrigger(uid, grbl),
39  m_mgrbl{mgrbl}
40 {}
41 
42 std::future<void> MGrblTrigger::arm() const
43 {
44  try
45  {
46  std::shared_ptr<MGrblPlatform> mgrbl(m_mgrbl.lock());
47  if (!mgrbl)
48  throw Exception(ErrorCode::Canceled, "platform stopped (deleted)");
49 
50  mgrbl->updateInstance(const_cast<MGrblTrigger &>(*this));
51  return GrblTrigger::arm();
52  }
53  catch (const Exception &ex)
54  {
55  return ccut::make_future_error(ex);
56  }
57 }
58 
59 std::future<void> MGrblTrigger::disarm() const
60 {
61  try
62  {
63  std::shared_ptr<MGrblPlatform> mgrbl(m_mgrbl.lock());
64  if (!mgrbl)
65  throw Exception(ErrorCode::Canceled, "platform stopped (deleted)");
66 
67  mgrbl->updateInstance(const_cast<MGrblTrigger &>(*this));
68  return GrblTrigger::disarm();
69  }
70  catch (const Exception &ex)
71  {
72  return ccut::make_future_error(ex);
73  }
74 }
75 
76 std::future<bool> MGrblTrigger::isArmed() const
77 {
78  try
79  {
80  std::shared_ptr<MGrblPlatform> mgrbl(m_mgrbl.lock());
81  if (!mgrbl)
82  throw Exception(ErrorCode::Canceled, "platform stopped (deleted)");
83 
84  mgrbl->updateInstance(const_cast<MGrblTrigger &>(*this));
85  return GrblTrigger::isArmed();
86  }
87  catch (const Exception &ex)
88  {
89  return ccut::make_future_error<bool>(ex);
90  }
91 }
92 
93 std::future<void> MGrblTrigger::trig() const
94 {
95  try
96  {
97  std::shared_ptr<MGrblPlatform> mgrbl(m_mgrbl.lock());
98  if (!mgrbl)
99  throw Exception(ErrorCode::Canceled, "platform stopped (deleted)");
100 
101  mgrbl->updateInstance(const_cast<MGrblTrigger &>(*this));
102  return GrblTrigger::trig();
103  }
104  catch (const Exception &ex)
105  {
106  return ccut::make_future_error(ex);
107  }
108 }
Exception thrown by MotionController in case of issues with command.
Definition: Exception.hpp:61
std::future< bool > isArmed() const override
check if trigger is armed
Definition: GrblTrigger.cpp:91
std::future< void > trig() const override
soft-trigger the trigger
Definition: GrblTrigger.cpp:98
std::future< void > arm() const override
arm the trigger
Definition: GrblTrigger.cpp:45
std::future< void > disarm() const override
disarm the trigger
Definition: GrblTrigger.cpp:68
std::future< void > trig() const override
soft-trigger the trigger
std::future< void > disarm() const override
disarm the trigger
std::future< bool > isArmed() const override
check if trigger is armed
main motion-lib namespace
Definition: Client.cpp:30