EEROS  1.0.0.0
API for the EEROS Real-Time Robotics Framework
InputAction.hpp
Go to the documentation of this file.
1 #ifndef ORG_EEROS_SAFETY_INPUTACTION_HPP_
2 #define ORG_EEROS_SAFETY_INPUTACTION_HPP_
3 
4 #include <stdint.h>
5 #include <eeros/hal/Input.hpp>
8 
9 namespace eeros {
10  namespace safety {
11 
12  class SafetyContext;
13 
14  class InputAction {
15  public:
16  InputAction(hal::InputInterface& input) : input(&input) { }
17  virtual ~InputAction() { }
18  virtual bool check(SafetyContext* context) { return false; }
19  virtual hal::InputInterface* getInput() {return input;}
20  protected:
22  };
23 
24  template <typename T>
25  class IgnoreInputAction : public InputAction {
26  public:
28  virtual ~IgnoreInputAction() { }
29  virtual bool check(SafetyContext* context) { return false; }
30  };
31 
32  template <typename T>
33  class CheckInputAction : public InputAction {
34  public:
35  CheckInputAction(hal::Input<T>& input, T value, SafetyEvent& event) : InputAction(input), value(value), event(event) { }
36  virtual ~CheckInputAction() { }
37  virtual bool check(SafetyContext* context) {
38  if (dynamic_cast<hal::Input<T>*>(input)->get() != value) {
39  context->triggerEvent(event);
40  return true;
41  }
42  return false;
43  }
44  private:
45  T value;
46  SafetyEvent& event;
47  };
48 
49  template <typename T>
51  public:
52  CheckRangeInputAction(hal::Input<T>& input, T min, T max, SafetyEvent& event) : InputAction(input), min(min), max(max), event(event) { }
53  virtual ~CheckRangeInputAction() { }
54  virtual bool check(SafetyContext* context) {
55  T value = dynamic_cast<hal::Input<T>*>(input)->get();
56  if (value < min || value > max) {
57  context->triggerEvent(event);
58  return true;
59  }
60  return false;
61  }
62  private:
63  T min;
64  T max;
65  SafetyEvent& event;
66  };
67 
68  template <typename T>
70  return new IgnoreInputAction<T>(input);
71  }
72 
73  template <typename T>
75  return new IgnoreInputAction<T>(*input);
76  }
77 
78  template <typename T>
80  return new CheckInputAction<T>(input, value, event);
81  }
82 
83  template <typename T>
85  return new CheckInputAction<T>(*input, value, event);
86  }
87 
88  template <typename T>
90  return new CheckRangeInputAction<T>(input, min, max, event);
91  }
92 
93  template <typename T>
95  return new CheckRangeInputAction<T>(*input, min, max, event);
96  }
97 
98  };
99 };
100 
101 #endif // ORG_EEROS_SAFETY_INPUTACTION_HPP_
Definition: InputAction.hpp:33
CheckInputAction(hal::Input< T > &input, T value, SafetyEvent &event)
Definition: InputAction.hpp:35
InputAction(hal::InputInterface &input)
Definition: InputAction.hpp:16
IgnoreInputAction(hal::Input< T > &input)
Definition: InputAction.hpp:27
Definition: Input.hpp:17
virtual bool check(SafetyContext *context)
Definition: InputAction.hpp:29
virtual hal::InputInterface * getInput()
Definition: InputAction.hpp:19
Definition: Config.hpp:14
CheckRangeInputAction(hal::Input< T > &input, T min, T max, SafetyEvent &event)
Definition: InputAction.hpp:52
IgnoreInputAction< T > * ignore(eeros::hal::Input< T > &input)
Definition: InputAction.hpp:69
virtual ~InputAction()
Definition: InputAction.hpp:17
Definition: SafetyContext.hpp:12
CheckRangeInputAction< T > * range(eeros::hal::Input< T > &input, T min, T max, SafetyEvent &event)
Definition: InputAction.hpp:89
Definition: InputAction.hpp:14
virtual bool check(SafetyContext *context)
Definition: InputAction.hpp:54
virtual ~CheckRangeInputAction()
Definition: InputAction.hpp:53
virtual bool check(SafetyContext *context)
Definition: InputAction.hpp:37
Definition: InputAction.hpp:50
hal::InputInterface * input
Definition: InputAction.hpp:21
virtual ~CheckInputAction()
Definition: InputAction.hpp:36
virtual bool check(SafetyContext *context)
Definition: InputAction.hpp:18
Definition: SafetyLevel.hpp:21
Definition: Input.hpp:9
void triggerEvent(SafetyEvent event)
Definition: SafetyContext.cpp:10
Definition: InputAction.hpp:25
virtual ~IgnoreInputAction()
Definition: InputAction.hpp:28