MotionLib  1.0.0
SamBuCa motion library
GrblPlatform.hxx
1 /*
2  * Copyright (C) 2022 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: 2022-06-17
21  * Author: Michal Mysior <mmysior> <michal.mysior@cern.ch>
22  *
23  */
24 
25 #ifndef GRBL_PLATFORM_HXX__
26 #define GRBL_PLATFORM_HXX__
27 
28 #pragma once
29 
30 #include "GrblPlatform.hpp"
31 #include "GrblPlatformData.hpp"
32 
33 namespace smc {
34 namespace internal {
35 
36 template<typename T>
37 std::future<T> GrblPlatform::run(std::function<void(ImmediateCmd &, Context &)> fun)
38 {
39  ImmediateCmd cmd{fun, new Promise<T>()};
40  std::future<T> ret = cmd.prom->get<T>().get_future();
41 
42  std::unique_lock<std::mutex> lock(m_lock);
43  if (m_started)
44  {
45  m_immediate.push(std::move(cmd));
46  lock.unlock();
47  wake();
48  }
49  else
50  cmd.prom->set_exception(
51  Exception(ErrorCode::Canceled, "platform stopped"));
52  return ret;
53 }
54 
55 } // namespace internal
56 } // namespace smc
57 
58 #endif /* GRBL_PLATFORM_HXX__ */
main motion-lib namespace
Definition: Client.cpp:30