EEROS  1.0.0.0
API for the EEROS Real-Time Robotics Framework
OutputAction.hpp
Go to the documentation of this file.
1 #ifndef ORG_EEROS_SAFETY_OUTPUTACTION_HPP_
2 #define ORG_EEROS_SAFETY_OUTPUTACTION_HPP_
3 
4 #include <stdint.h>
5 #include <memory>
6 #include <bits/algorithmfwd.h>
7 #include <eeros/hal/HAL.hpp>
8 
9 namespace eeros {
10  namespace safety {
11 
12  class OutputAction {
13  public:
15  virtual ~OutputAction() { }
16  virtual void set() = 0;
17  virtual hal::OutputInterface* getOutput() {return output;}
18  protected:
20  };
21 
22  template <typename T>
24  public:
26  virtual ~LeaveOutputAction() { }
27  virtual void set() { }
28  };
29 
30  template < typename T >
31  class SetOutputAction : public OutputAction {
32  public:
33  SetOutputAction(hal::Output<T>* output, T value) : OutputAction(output), value(value) { }
34  virtual ~SetOutputAction() { }
35  virtual void set() {
36  dynamic_cast<hal::Output<T>*>(output)->set(value);
37  }
38  private:
39  T value;
40  };
41 
42  template < typename T >
44  public:
45  ToggleOutputAction(hal::Output<T>* output, T low, T high) : OutputAction(output), value(low), low(low), high(high) { }
46  virtual ~ToggleOutputAction() { }
47  virtual void set() {
48  dynamic_cast<hal::Output<T>*>(output)->set(value);
49  if (value == low)
50  value = high;
51  else
52  value = low;
53  }
54  private:
55  T value;
56  T low;
57  T high;
58  };
59 
60  template <typename T>
62  return new SetOutputAction<T>(output, value);
63  }
64 
65  template <typename T>
67  return new SetOutputAction<T>(output, value);
68  }
69 
70  template <typename T>
72  return new LeaveOutputAction<T>(output);
73  }
74 
75  template <typename T>
77  return new LeaveOutputAction<T>(output);
78  }
79 
80  template <typename T>
81  ToggleOutputAction<T>* toggle(eeros::hal::Output<T>& output, T low = false, T high = true) {
82  return new ToggleOutputAction<T>(output, low, high );
83  }
84 
85  template <typename T>
86  ToggleOutputAction<T>* toggle(eeros::hal::Output<T>* output, T low = false, T high = true) {
87  return new ToggleOutputAction<T>(output, low, high );
88  }
89  };
90 };
91 
92 #endif // ORG_EEROS_SAFETY_OUTPUTACTION_HPP_
virtual ~LeaveOutputAction()
Definition: OutputAction.hpp:26
SetOutputAction(hal::Output< T > *output, T value)
Definition: OutputAction.hpp:33
Definition: Output.hpp:10
virtual hal::OutputInterface * getOutput()
Definition: OutputAction.hpp:17
LeaveOutputAction< T > * leave(eeros::hal::Output< T > &output)
Definition: OutputAction.hpp:71
ToggleOutputAction< T > * toggle(eeros::hal::Output< T > &output, T low=false, T high=true)
Definition: OutputAction.hpp:81
Definition: Config.hpp:14
virtual ~OutputAction()
Definition: OutputAction.hpp:15
virtual ~ToggleOutputAction()
Definition: OutputAction.hpp:46
Definition: OutputAction.hpp:31
Definition: OutputAction.hpp:12
Definition: OutputAction.hpp:23
hal::OutputInterface * output
Definition: OutputAction.hpp:19
Definition: OutputAction.hpp:43
Definition: Output.hpp:18
virtual ~SetOutputAction()
Definition: OutputAction.hpp:34
LeaveOutputAction(hal::Output< T > *output)
Definition: OutputAction.hpp:25
OutputAction(hal::OutputInterface *out)
Definition: OutputAction.hpp:14
ToggleOutputAction(hal::Output< T > *output, T low, T high)
Definition: OutputAction.hpp:45