9 namespace experimental {
13 throw std::out_of_range(
"Invalid button number");
19 throw std::out_of_range(
"Invalid axis number");
20 return axes_[axis - 1];
39 throw std::out_of_range(
"Invalid button number");
43 std::unique_ptr<MobileIO>
MobileIO::create(
const std::string& family,
const std::string& name) {
45 std::shared_ptr<hebi::Group> group = lookup.
getGroupFromNames({ family }, { name });
48 return std::unique_ptr<MobileIO>(
new MobileIO(group));
60 if (group_->getNextFeedback(fbk_)) {
67 if (f0.io().b().hasInt(i)) {
68 current_state_.
buttons_[i - 1] = f0.io().b().getInt(i) == 1;
73 if (f0.io().a().hasFloat(i)) {
74 current_state_.axes_[i - 1] = f0.io().a().getFloat(i);
75 }
else if (f0.io().a().hasInt(i)) {
78 current_state_.axes_[i - 1] = f0.io().a().getInt(i);
82 return current_state_;
87 cmd[0].io().a().setFloat(axis_number, snap_to);
88 return group_->sendCommand(cmd);
93 cmd[0].io().f().setFloat(axis_number, value);
94 return group_->sendCommand(cmd);
99 cmd[0].io().b().setInt(button_number, mode == ButtonMode::Toggle ? 1 : 0);
100 return group_->sendCommand(cmd);
105 cmd[0].io().e().setInt(button_number, on ? 1 : 0);
106 return group_->sendCommand(cmd);
111 cmd[0].led().set({r, g, b});
112 return group_->sendCommand(cmd);
117 cmd[0].appendLog().set(message);
118 return group_->sendCommand(cmd);
123 cmd[0].clearLog().set();
124 return group_->sendCommand(cmd);
128 : group_(group), fbk_(group_->size())
bool sendText(const std::string &message)
bool getButton(size_t button) const
static std::unique_ptr< MobileIO > create(const std::string &family, const std::string &name)
std::array< float, NumButtons > axes_
std::bitset< NumButtons > buttons_
MobileIO(std::shared_ptr< hebi::Group >)
bool setLedColor(uint8_t r, uint8_t g, uint8_t b)
static constexpr size_t NumButtons
bool setSnap(size_t axis_number, float snap_to)
bool setButtonMode(size_t button_number, ButtonMode mode)
ButtonState get(int button) const
bool setButtonOutput(size_t button_number, bool on)
A list of Command objects appropriate for sending to a Group of modules; the size() must match the nu...
bool setAxisValue(size_t axis_number, float value)
MobileIODiff(const MobileIOState &prev, const MobileIOState ¤t)
Maintains a registry of network-connected modules and returns Group objects to the user...
std::shared_ptr< Group > getGroupFromNames(const std::vector< std::string > &families, const std::vector< std::string > &names, int32_t timeout_ms=DEFAULT_TIMEOUT)
Get a group from modules with the given names and families.
float getAxis(size_t axis) const