25 #ifndef MOTION_CONTROLLER_UNITS_HPP__
26 #define MOTION_CONTROLLER_UNITS_HPP__
34 #include "util/serialize.hpp"
57 MILLIMETERS_PER_MINUTE,
60 MILLIMETERS_PER_SECOND,
61 MILLIMETERS_PER_SECOND_SQUARED,
64 millimeters = MILLIMETERS,
70 steps_per_turn = STEPS_PER_TURN,
71 millimeters_per_minute = MILLIMETERS_PER_MINUTE,
72 meters_per_second = METERS_PER_SECOND,
73 steps_per_millimeter = STEPS_PER_MILLIMETER,
74 millimeters_per_second = MILLIMETERS_PER_SECOND,
75 millimeters_per_second_squared = MILLIMETERS_PER_SECOND_SQUARED,
81 mm_per_min = MILLIMETERS_PER_MINUTE,
82 m_per_s = METERS_PER_SECOND,
83 steps_per_mm = STEPS_PER_MILLIMETER,
84 mm_per_s = MILLIMETERS_PER_SECOND,
85 mm_per_s2 = MILLIMETERS_PER_SECOND_SQUARED
92 typedef double value_type;
97 Value(unit_t unit, value_type value);
99 bool canConvert(unit_t unit)
const;
100 bool convert(unit_t unit);
102 Value &operator+=(value_type raw);
103 Value &operator-=(value_type raw);
104 Value &operator*=(value_type raw);
105 Value &operator/=(value_type raw);
107 std::string toString(
void)
const;
110 bool checkConvert(value_type &converted, unit_t unit)
const;
114 Value operator*(
double raw, unit_t unit);
116 Value operator"" _mm(
long double raw);
117 Value operator"" _m(
long double raw);
118 Value operator"" _steps(
long double raw);
119 Value operator"" _deg(
long double raw);
120 Value operator"" _rad(
long double raw);
121 Value operator"" _turns(
long double raw);
122 Value operator"" _mm_per_min(
long double raw);
123 Value operator"" _m_per_s(
long double raw);
124 Value operator"" _mm_per_s(
long double raw);
125 Value operator"" _mm_per_s2(
long double raw);
126 Value operator"" _steps_per_mm(
long double raw);
127 Value operator"" _steps_per_turn(
long double raw);
132 template<
class R,
class P>
133 Value operator*(
const Value &value, std::chrono::duration<R, P> duration);
134 template<
class R,
class P>
135 Value operator/(
const Value &value, std::chrono::duration<R, P> duration);
144 typedef size_t size_type;
145 typedef uint64_t value_type;
146 typedef std::bidirectional_iterator_tag iterator_category;
174 bool operator==(
const IOPort &port)
const
178 bool operator!=(
const IOPort &port)
const {
return !(port == *
this); }
180 inline bool operator[](size_type pos)
const
182 return ((
value >> pos) & 1);
184 inline operator bool()
const {
return value; }
186 inline reference operator[](size_type offset);
207 std::string toString(
StrFmt format = StrFmt::AUTO)
const;
224 const std::string &
to_string(units::Unit unit);
242 return value.toString();
260 return port.toString();
AxisPositionMonitor::State from_string(const std::string &str)
convert string to state
const std::set< AxisPositionMonitor::State > & getEnumValues()
Get devices types list (to be iterated)
const std::string & to_string(Axis::State state)
convert State to string
main motion-lib namespace
StrFmt
IOPort format for string representation.
value_type value
port value
size_type size
size in bits