Motorcortex Core  version: 2.7.6
log_module.h
1 /*
2  * Developer : Alexey Zakharov (alexey.zakharov@vectioneer.com)
3  * All rights reserved. Copyright (c) 2016 VECTIONEER.
4  */
5 
6 #ifndef LOG_MODULE_H
7 #define LOG_MODULE_H
8 
9 #include "ct_module.h"
10 #include <chrono>
11 #include <cstdio>
12 
13 namespace mcx {
14 
15 namespace log {
16 
18  static constexpr unsigned int MAX_LOG_STR_LENGTH{256};
19  static constexpr unsigned int MAX_LOG_BUFFER_LENGTH{1024};
20  static constexpr unsigned int MAX_PIPE_BUFFER_LENGTH{1048576};
21 public:
22  Module(const std::string& folder, FILE* stream = stdout);
23 
24  Module(const Module& orig) = delete;
25 
26  ~Module() override;
27 
28  static bool readLine(const char* buffer, size_t& buffer_offset, size_t buffer_max_len,
29  char* line, size_t& line_offset, size_t max_line_len, bool& ignore);
30 
31 private:
32 
33  static FILE* createNewFile(const std::string& path);
34 
35  void create_(const char* name, mcx::parameter_server::Parameter* parameter_server,
36  uint64_t dt_micro_s) override;
37 
38  bool initPhase1_() override;
39 
40  bool initPhase2_() override;
41 
42  bool startOp_() override;
43 
44  bool stopOp_() override;
45 
46  bool iteratePreOp_(const mcx::container::TaskTime& system_time, mcx::container::UserTime* user_time) override;
47 
48  bool iterateOp_(const mcx::container::TaskTime& system_time, mcx::container::UserTime* user_time) override;
49 
50  std::array<char, MAX_LOG_STR_LENGTH> log_str_{};
51  std::array<char, MAX_LOG_STR_LENGTH> log_marker_{};
52  std::array<char, MAX_LOG_BUFFER_LENGTH> buffer_str_{};
53  size_t buffer_offset_{};
54  size_t buffer_len_{};
55  size_t line_offset_{};
56 
57  FILE* log_stream_{};
58  FILE* file_input_{};
59  int out_pipe_[2]{};
60  bool ignore_control_char_{};
61 
62  mcx::parameter_server::ParamHandle log_out_handle_;
63  mcx::parameter_server::ParamHandle log_marker_in_handle_;
64 
65  long timer24_{};
66  std::string folder_;
67  bool log_is_empty_{};
68 
69 };
70 
71 } // namespace log
72 
73 } // namespace mcx
74 
75 #endif /* LOG_MODULE_H */
mcx::log::Module
Definition: log_module.h:17
mcx::parameter_server::Parameter
Definition: ps_parameter.h:45
mcx::container::Module::Module
Module()
Default constructor.
Definition: ct_module.cpp:13
mcx::log::Module::~Module
~Module() override
Default destructor.
Definition: log_module.cpp:71
mcx::container::TaskTime
Internal time source.
Definition: ct_time.h:25
mcx::container::UserTime
External time source.
Definition: ct_time.h:40
mcx::container::Module
A building block of the Motorcortex components.
Definition: ct_module.h:64
mcx::parameter_server::ParamHandle
Definition: ps_handlers.h:43