EEROS  1.0.0.0
API for the EEROS Real-Time Robotics Framework
Signal.hpp
Go to the documentation of this file.
1 #ifndef ORG_EEROS_CONTROL_SIGNAL_HPP_
2 #define ORG_EEROS_CONTROL_SIGNAL_HPP_
3 
4 #include <string>
5 #include <list>
6 #include <type_traits>
7 #include <limits>
8 #include <eeros/types.hpp>
10 
11 namespace eeros {
12  namespace control {
13 
14  extern uint16_t signalCounter;
15 
16  template < typename T = double >
17  class Signal : public SignalInterface {
18  public:
19  Signal() {
20  id = signalCounter++;
21 // signalList.push_back(this);
22  }
23 
24  virtual sigid_t getId() const {
25  return static_cast<sigid_t>(id) << 16;
26  }
27 
28  virtual std::string getName() const {
29  return name;
30  }
31 
32  virtual void setName(std::string name) {
33  this->name = name;
34  }
35 
36  virtual std::string getLabel() const {
37 // std::stringstream label;
38 // label << '#' << id << '.' << index << ": " << getName(index);
39 // if(getAffiliation(index) != "") {
40 // label << " (" << getAffiliation(index) << ')';
41 // }
42 // if(getUnit(index) != "") {
43 // label << " [" << getUnit(index) << ']';
44 // }
45 // return label.str();
46  return name; // TODO
47  }
48 
49  virtual T getValue() const {
50  return value;
51  }
52 
53  virtual void setValue(T newValue) {
54  value = newValue;
55  }
56 
57  template < typename VT >
58  void setValue(VT newValue) {
59  value = newValue;
60  }
61 
62  virtual timestamp_t getTimestamp() const {
63  return timestamp;
64  }
65 
66  virtual void setTimestamp(timestamp_t newTimestamp) {
67  timestamp = newTimestamp;
68  }
69 
70  virtual void clear() {
71  _clear<T>();
72  }
73 
75  value = right.value;
76  timestamp = right.timestamp;
77  return *this;
78  }
79 
80  Signal<T>& operator= (T right) {
81  value = right;
82  return *this;
83  }
84 
86  return illegalSignal;
87  }
88 
89  static std::list<SignalInterface*> getSignalList() {
90  return signalList;
91  }
92 
94  std::list<SignalInterface*>::iterator i = signalList.begin();
95  while(i != signalList.end()) {
96  if((*i)->getId() == id) {
97  return (*i);
98  }
99  i++;
100  }
101  return NULL;
102  }
103 
104  protected:
105  T value;
108  std::string name;
109 
110  private:
111  template <typename S> typename std::enable_if<std::is_integral<S>::value>::type _clear() {
112  value = std::numeric_limits<int32_t>::min();
113  }
114  template <typename S> typename std::enable_if<std::is_floating_point<S>::value>::type _clear() {
115  value = std::numeric_limits<double>::quiet_NaN();
116  }
117  template <typename S> typename std::enable_if<!std::is_arithmetic<S>::value && std::is_integral<typename S::value_type>::value>::type _clear() {
118  value.fill(std::numeric_limits<int32_t>::min());
119  }
120  template <typename S> typename std::enable_if< !std::is_arithmetic<S>::value && std::is_floating_point<typename S::value_type>::value>::type _clear() {
121  value.fill(std::numeric_limits<double>::quiet_NaN());
122  }
123 
124  static std::list<SignalInterface*> signalList;
125  static Signal<T> illegalSignal;
126  };
127 
128  template < typename T>
129  std::list<SignalInterface*> Signal<T>::signalList;
130 
131  template < typename T>
133 
134  /********** Print functions **********/
135  template <typename T>
136  std::ostream& operator<<(std::ostream& os, Signal<T>& signal) {
137  os << "Signal: '" << signal.getName() << "' timestamp = " << signal.getTimestamp() << " value = " << signal.getValue();
138  }
139  template <typename T>
140  std::ostream& operator<<(std::ostream& os, Signal<T>* signal) {
141  os << "Signal: '" << signal.getName() << "' timestamp = " << signal.getTimestamp() << " value = " << signal.getValue();
142  }
143 
144  };
145 };
146 
147 #endif /* ORG_EEROS_CONTROL_SIGNAL_HPP_ */
virtual void clear()
Definition: Signal.hpp:70
sigid_t id
Definition: Signal.hpp:107
void setValue(VT newValue)
Definition: Signal.hpp:58
virtual T getValue() const
Definition: Signal.hpp:49
virtual sigid_t getId() const
Definition: Signal.hpp:24
virtual std::string getName() const
Definition: Signal.hpp:28
Definition: Config.hpp:14
virtual void setValue(T newValue)
Definition: Signal.hpp:53
virtual void setName(std::string name)
Definition: Signal.hpp:32
T value
Definition: Signal.hpp:105
Signal< T > & operator=(Signal< T > right)
Definition: Signal.hpp:74
virtual void setTimestamp(timestamp_t newTimestamp)
Definition: Signal.hpp:66
std::string name
Definition: Signal.hpp:108
static Signal< T > & getIllegalSignal()
Definition: Signal.hpp:85
timestamp_t timestamp
Definition: Signal.hpp:106
virtual timestamp_t getTimestamp() const
Definition: Signal.hpp:62
static SignalInterface * getSignalById(sigid_t id)
Definition: Signal.hpp:93
Definition: Signal.hpp:17
virtual std::string getLabel() const
Definition: Signal.hpp:36
Signal()
Definition: Signal.hpp:19
uint32_t sigid_t
Definition: types.hpp:9
uint16_t signalCounter
Definition: Signal.cpp:5
static std::list< SignalInterface * > getSignalList()
Definition: Signal.hpp:89
uint64_t timestamp_t
Definition: types.hpp:12
Definition: SignalInterface.hpp:14