MotionLib  1.0.0
SamBuCa motion library
GrblSim.hpp
1 /*
2 ** Copyright (C) 2021 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-02-11T16:32:53+01:00
21 * Author: Michal Mysior <mmysior> <michal.mysior@cern.ch>
22 **
23 */
24 
25 #ifndef GRBLSIM_HPP__
26 #define GRBLSIM_HPP__
27 
28 #include <chrono>
29 #include <cstdint>
30 #include <string>
31 #include <vector>
32 
33 #include <ccut/Regex.hpp>
34 
35 #include "GrblDeviceBase.hpp"
36 
37 namespace mgrbl {
38 class MGrblSim;
39 }
40 
41 namespace grbl {
47 class GrblSim : public GrblDeviceBase
48 {
49 public:
50  GrblSim();
51  ~GrblSim() override;
52 
53  void flush();
54 
55  void read() override;
56  void write(const std::string &data) override;
57  bool wait(const std::chrono::milliseconds &timeout) override;
58  void wake() override;
59 
60  static const std::chrono::milliseconds defaultExpectTimeout;
61 
62 protected:
63  friend class mgrbl::MGrblSim;
64 
65  void sendCmd(const std::string &command);
66 
67  int m_in;
68  int m_out;
69  int m_wakeFd[2];
70  pid_t m_simPid;
71 };
72 
75 } // namespace grbl
76 
77 #endif
bool wait(const std::chrono::milliseconds &timeout) override
wait for input
Definition: GrblSim.cpp:181
void wake() override
wake thread waiting for input
Definition: GrblSim.cpp:202
void read() override
fill LineBuffer with incoming bytes
Definition: GrblSim.cpp:148
void write(const std::string &data) override
raw write some bytes
Definition: GrblSim.cpp:164