fastcat 0.13.15
C++ EtherCAT Device Command & Control Library
Loading...
Searching...
No Matches
device_base.h
Go to the documentation of this file.
1#ifndef FASTCAT_DEVICE_BASE_H_
2#define FASTCAT_DEVICE_BASE_H_
3
4// Include related header (for cc files)
5
6// Include c then c++ libraries
7#include <memory>
8#include <queue>
9#include <string>
10
11// Include external then project includes
12#include <yaml-cpp/yaml.h>
13
14#include "fastcat/types.h"
15#include "fastcat/thread_safe_queue.h"
16
17namespace fastcat
18{
20{
21 public:
22 virtual ~DeviceBase();
23 // Pure virtual methods
24 virtual bool ConfigFromYaml(const YAML::Node& node) = 0;
25 virtual bool Read() = 0;
26
27 // Non-pure virtual methods with default implementation
28 virtual FaultType Process();
29 virtual bool Write(DeviceCmd& cmd);
30 virtual void Fault();
31 virtual void Reset();
32 virtual void SetInitializationTime(double time_sec, double monotonic_time_sec)
33 {
34 initialization_time_sec_ = time_sec;
35 monotonic_initialization_time_sec_ = monotonic_time_sec;
36 }
37
38 // non-virtual methods
39 void RegisterCmdQueue(std::shared_ptr<ThreadSafeQueue<DeviceCmd>> cmd_queue);
40 std::string GetName();
41 std::shared_ptr<DeviceState> GetState();
42
43 void SetTime(double time, double monotonic_time);
44 void SetLoopPeriod(double loop_period);
45
46 std::vector<Signal> signals_;
47
48 protected:
49 std::string name_;
50
52 double loop_period_ = 0.0;
55
58
59 std::shared_ptr<DeviceState> state_;
60
62 std::shared_ptr<ThreadSafeQueue<DeviceCmd>> cmd_queue_;
63};
64
65} // namespace fastcat
66
67#endif
Definition device_base.h:20
virtual void Fault()
Definition device_base.cc:41
bool device_fault_active_
device-level fault, manager also has fault status flag
Definition device_base.h:57
std::vector< Signal > signals_
Definition device_base.h:46
virtual FaultType Process()
Definition device_base.cc:53
double loop_period_
only some devices need
Definition device_base.h:52
double initialization_time_sec_
only some devices need
Definition device_base.h:53
virtual bool Write(DeviceCmd &cmd)
Definition device_base.cc:35
virtual bool ConfigFromYaml(const YAML::Node &node)=0
void RegisterCmdQueue(std::shared_ptr< ThreadSafeQueue< DeviceCmd > > cmd_queue)
Definition device_base.cc:11
std::string name_
unique device name
Definition device_base.h:49
void SetLoopPeriod(double loop_period)
Definition device_base.cc:23
virtual void SetInitializationTime(double time_sec, double monotonic_time_sec)
Definition device_base.h:32
void SetTime(double time, double monotonic_time)
Definition device_base.cc:28
std::shared_ptr< DeviceState > state_
Fastcat state data.
Definition device_base.h:59
virtual void Reset()
Definition device_base.cc:47
double monotonic_initialization_time_sec_
only some devices need
Definition device_base.h:54
virtual ~DeviceBase()
Definition device_base.cc:9
double last_monotonic_time_
Definition device_base.h:51
std::shared_ptr< DeviceState > GetState()
Definition device_base.cc:18
virtual bool Read()=0
std::shared_ptr< ThreadSafeQueue< DeviceCmd > > cmd_queue_
for intra-device commands
Definition device_base.h:62
std::string GetName()
Definition device_base.cc:17
Definition thread_safe_queue.h:10
Definition device_base.h:18