feedback.cpp
Go to the documentation of this file.
1 #include "feedback.hpp"
2 
3 #include <cmath>
4 #include <limits>
5 #ifndef M_PI
6 #define M_PI 3.14159265358979323846
7 #endif
8 
9 namespace hebi {
10 
12  : internal_(internal), field_(field) {}
13 
15  return (floatGetter(internal_, field_, nullptr) == HebiStatusSuccess);
16 }
17 
19  float ret;
21  ret = std::numeric_limits<float>::quiet_NaN();
22  }
23  return ret;
24 }
25 
27  : internal_(internal), field_(field) {}
28 
30  return (highResAngleGetter(internal_, field_, nullptr, nullptr) == HebiStatusSuccess);
31 }
32 
34  int64_t revolutions;
35  float radian_offset;
36  if (highResAngleGetter(internal_, field_, &revolutions, &radian_offset) != HebiStatusSuccess) {
37  return std::numeric_limits<double>::quiet_NaN();
38  }
39  return (static_cast<double>(revolutions) * 2.0 * M_PI + static_cast<double>(radian_offset));
40 }
41 
42 void Feedback::HighResAngleField::get(int64_t* revolutions, float* radian_offset) const {
43  if (highResAngleGetter(internal_, field_, revolutions, radian_offset) != HebiStatusSuccess) {
44  *revolutions = 0;
45  *radian_offset = std::numeric_limits<float>::quiet_NaN();
46  }
47 }
48 
50  : internal_(internal), field_(field) {}
51 
52 bool Feedback::NumberedFloatField::has(size_t fieldNumber) const {
53  return (numberedFloatGetter(internal_, field_, fieldNumber, nullptr) == HebiStatusSuccess);
54 }
55 
56 float Feedback::NumberedFloatField::get(size_t fieldNumber) const {
57  float ret;
58  if (numberedFloatGetter(internal_, field_, fieldNumber, &ret) != HebiStatusSuccess) {
59  ret = std::numeric_limits<float>::quiet_NaN();
60  }
61  return ret;
62 }
63 
65  : internal_(internal), field_(field) {}
66 
68  return (uint64Getter(internal_, field_, nullptr) == HebiStatusSuccess);
69 }
70 
71 uint64_t Feedback::UInt64Field::get() const {
72  uint64_t ret;
74  ret = 0;
75  }
76  return ret;
77 }
78 
80  : internal_(internal), field_(field) {}
81 
83  return (vector3fGetter(internal_, field_, nullptr) == HebiStatusSuccess);
84 }
85 
87  HebiVector3f ret;
89  ret.x = std::numeric_limits<float>::quiet_NaN();
90  ret.y = std::numeric_limits<float>::quiet_NaN();
91  ret.z = std::numeric_limits<float>::quiet_NaN();
92  }
93  return ret;
94 }
95 
97  : internal_(internal), field_(field) {}
98 
100  return (quaternionfGetter(internal_, field_, nullptr) == HebiStatusSuccess);
101 }
102 
104  HebiQuaternionf ret;
106  ret.w = std::numeric_limits<float>::quiet_NaN();
107  ret.x = std::numeric_limits<float>::quiet_NaN();
108  ret.y = std::numeric_limits<float>::quiet_NaN();
109  ret.z = std::numeric_limits<float>::quiet_NaN();
110  }
111  return ret;
112 }
113 
114 Feedback::IoBank::IoBank(const HebiFeedbackRef& internal, HebiFeedbackIoPinBank bank) : internal_(internal), bank_(bank) {}
115 
116 bool Feedback::IoBank::hasInt(size_t pinNumber) const {
117  return (intIoPinGetter(internal_, bank_, pinNumber, nullptr) == HebiStatusSuccess);
118 }
119 
120 bool Feedback::IoBank::hasFloat(size_t pinNumber) const {
121  return (floatIoPinGetter(internal_, bank_, pinNumber, nullptr) == HebiStatusSuccess);
122 }
123 
124 int64_t Feedback::IoBank::getInt(size_t pinNumber) const {
125  int64_t ret;
126  intIoPinGetter(internal_, bank_, pinNumber, &ret);
127  return ret;
128 }
129 
130 float Feedback::IoBank::getFloat(size_t pinNumber) const {
131  float ret;
132  floatIoPinGetter(internal_, bank_, pinNumber, &ret);
133  return ret;
134 }
135 
137  : internal_(internal), field_(field) {}
138 
140  return ledGetter(internal_, field_, nullptr, nullptr, nullptr, nullptr) == HebiStatusSuccess;
141 }
142 
144  uint8_t r, g, b, a;
145  if (ledGetter(internal_, field_, &r, &g, &b, &a) != HebiStatusSuccess) {
146  r = 0;
147  g = 0;
148  b = 0;
149  a = 0;
150  }
151  return Color(r, g, b, a);
152 }
153 
155  : internal_(feedback),
171 }
172 
174  : internal_(other.internal_),
189  // NOTE: it would be nice to also cleanup the actual internal pointer of other
190  // but alas we cannot change a const variable.
192 }
193 
194 } // namespace hebi
Ambient temperature inside the module (measured at the IMU chip)
Definition: hebi.h:163
HebiFeedbackQuaternionfField
Definition: hebi.h:206
struct HebiFeedback_ * HebiFeedbackPtr
The C-style&#39;s API representation of feedback.
Definition: hebi.h:451
UInt64Field hardware_receive_time_us_
Definition: feedback.hpp:734
Timestamp of when message was received from module (local)
Definition: hebi.h:194
const HebiFeedbackRef & internal_
Definition: feedback.hpp:297
FloatField processor_temperature_
Definition: feedback.hpp:729
HebiStatusCode ledGetter(const RefT &ref, MetadataT &metadata, int field, uint8_t *r, uint8_t *g, uint8_t *b, uint8_t *a)
HebiFeedbackIoPinBank const bank_
Definition: feedback.hpp:406
bool hasInt(size_t pinNumber) const
True if (and only if) the particular numbered pin in this bank has an integer (e.g., digital) value.
Definition: feedback.cpp:116
UInt64Field transmit_time_us_
Definition: feedback.hpp:733
float getFloat(size_t pinNumber) const
If this numbered pin in this bank has an floating point (e.g., analog or PWM) value, returns that value; otherwise returns a default.
Definition: feedback.cpp:130
FloatField board_temperature_
Definition: feedback.hpp:728
Structure to hold a 3-D floating point vector (i.e., x/y/z components)
Definition: vector_3_f.hpp:8
Vector3fField(const HebiFeedbackRef &internal, HebiFeedbackVector3fField field)
Definition: feedback.cpp:79
const HebiFeedbackRef & internal_
Definition: feedback.hpp:329
Feedback(HebiFeedbackPtr)
Wraps an existing C-style object that is managed by its parent. NOTE: this should not be used except ...
Definition: feedback.cpp:154
HebiFeedbackVector3fField
Definition: hebi.h:200
FloatField voltage_
Definition: feedback.hpp:730
HebiStatusCode numberedFloatGetter(const RefT &ref, MetadataT &metadata, int field, size_t number, float *value)
HebiFeedbackHighResAngleField
Definition: hebi.h:181
bool has() const
True if (and only if) the field has a value.
Definition: feedback.cpp:29
LedField led_
Definition: feedback.hpp:737
const HebiFeedbackRef & internal_
Definition: feedback.hpp:158
Definition: arm.cpp:5
HebiFeedbackNumberedFloatField
Definition: hebi.h:187
HebiFeedbackLedField
Definition: hebi.h:230
Structure to hold a floating point quaternion (i.e., w/x/y/z components)
Definition: quaternion_f.hpp:8
Vector3f get() const
If the field has a value, returns that value; otherwise, returns a default.
Definition: feedback.cpp:86
HebiFeedbackRef internal_ref_
Definition: feedback.hpp:660
bool has() const
True if (and only if) the field has a value.
Definition: feedback.cpp:82
NumberedFloatField debug_
Definition: feedback.hpp:731
HebiFeedbackFloatField
Feedback Enums.
Definition: hebi.h:161
int64_t getInt(size_t pinNumber) const
If this numbered pin in this bank has an integer (e.g., digital) value, returns that value; otherwise...
Definition: feedback.cpp:124
HebiStatusCode floatGetter(const RefT &ref, MetadataT &metadata, int field, float *value)
HebiFeedbackLedField const field_
Definition: feedback.hpp:436
Sequence number going to module (local)
Definition: hebi.h:193
HebiFeedbackUInt64Field const field_
Definition: feedback.hpp:266
UInt64Field receive_time_us_
Definition: feedback.hpp:732
HebiFeedbackVector3fField const field_
Definition: feedback.hpp:298
UInt64Field hardware_transmit_time_us_
Definition: feedback.hpp:735
const HebiFeedbackRef & internal_
Definition: feedback.hpp:234
float x
Definition: hebi.h:565
Feedback objects have various fields representing feedback from modules; which fields are populated d...
Definition: feedback.hpp:32
void hebiFeedbackGetReference(HebiFeedbackPtr feedback, HebiFeedbackRef *ref)
Feedback API.
float get(size_t fieldNumber) const
If the particular numbered subvalue of this field has a value, returns that value; otherwise returns ...
Definition: feedback.cpp:56
double get() const
If the field has a value, returns that value as a double; otherwise, returns a default.
Definition: feedback.cpp:33
float z
Definition: hebi.h:567
LedField(const HebiFeedbackRef &internal, HebiFeedbackLedField field)
Definition: feedback.cpp:136
bool has() const
True if (and only if) the field has a value.
Definition: feedback.cpp:14
HebiStatusCode highResAngleGetter(const RefT &ref, MetadataT &metadata, int field, int64_t *revs, float *offset)
bool hasFloat(size_t pinNumber) const
True if (and only if) the particular numbered pin in this bank has an floating point (e...
Definition: feedback.cpp:120
HebiFeedbackUInt64Field
Definition: hebi.h:191
IoBank(const HebiFeedbackRef &internal, HebiFeedbackIoPinBank bank)
Definition: feedback.cpp:114
bool hasColor() const
Returns true if the LED color is set, and false otherwise.
Definition: feedback.cpp:139
Timestamp of when message was transmitted to module (local)
Definition: hebi.h:195
HebiFeedbackHighResAngleField const field_
Definition: feedback.hpp:209
float y
Definition: hebi.h:566
const HebiFeedbackRef & internal_
Definition: feedback.hpp:208
bool has() const
True if (and only if) the field has a value.
Definition: feedback.cpp:99
Mobile mobile_
Definition: feedback.hpp:725
bool has() const
True if (and only if) the field has a value.
Definition: feedback.cpp:67
const HebiFeedbackRef & internal_
Definition: feedback.hpp:435
Timestamp of when message was transmitted from module (remote)
Definition: hebi.h:197
const HebiFeedbackRef & internal_
Definition: feedback.hpp:405
const HebiFeedbackRef & internal_
Definition: feedback.hpp:265
bool has(size_t fieldNumber) const
True if (and only if) the particular numbered subvalue of this field has a value. ...
Definition: feedback.cpp:52
#define M_PI
Definition: feedback.cpp:6
float get() const
If the field has a value, returns that value; otherwise, returns a default.
Definition: feedback.cpp:18
HebiStatusCode floatIoPinGetter(const RefT &ref, MetadataT &metadata, int index, size_t pin_number, float *value)
Actuator actuator_
Definition: feedback.hpp:724
Temperature of the processor chip.
Definition: hebi.h:164
HebiStatusCode intIoPinGetter(const RefT &ref, MetadataT &metadata, int index, size_t pin_number, int64_t *value)
QuaternionfField(const HebiFeedbackRef &internal, HebiFeedbackQuaternionfField field)
Definition: feedback.cpp:96
HebiFeedbackFloatField const field_
Definition: feedback.hpp:159
UInt64Field(const HebiFeedbackRef &internal, HebiFeedbackUInt64Field field)
Definition: feedback.cpp:64
HebiStatusCode uint64Getter(const RefT &ref, MetadataT &metadata, int field, uint64_t *value)
HebiFeedbackQuaternionfField const field_
Definition: feedback.hpp:330
Quaternionf get() const
If the field has a value, returns that value; otherwise, returns a default.
Definition: feedback.cpp:103
uint64_t get() const
If the field has a value, returns that value; otherwise, returns a default.
Definition: feedback.cpp:71
HebiStatusCode quaternionfGetter(const RefT &ref, MetadataT &metadata, int field, HebiQuaternionf *value)
Structure to describe an RGB color.
Definition: color.hpp:8
NumberedFloatField(const HebiFeedbackRef &internal, HebiFeedbackNumberedFloatField field)
Definition: feedback.cpp:49
HebiFeedbackNumberedFloatField const field_
Definition: feedback.hpp:235
Timestamp of when message was received by module (remote)
Definition: hebi.h:196
HebiFeedbackIoPinBank
Definition: hebi.h:221
Color getColor() const
Returns the led color.
Definition: feedback.cpp:143
UInt64Field sender_id_
Definition: feedback.hpp:736
HebiFeedbackPtr internal_
Definition: feedback.hpp:659
FloatField(const HebiFeedbackRef &internal, HebiFeedbackFloatField field)
Definition: feedback.cpp:11
HighResAngleField(const HebiFeedbackRef &internal, HebiFeedbackHighResAngleField field)
Definition: feedback.cpp:26
HebiStatusCode vector3fGetter(const RefT &ref, MetadataT &metadata, int field, HebiVector3f *value)


hebi_cpp_api_ros
Author(s): Chris Bollinger , Matthew Tesch
autogenerated on Thu May 28 2020 03:14:44