| pnd-cpp-sdk 1.0.0

Loading...
Searching...
No Matches
group.hpp
1#pragma once
2
3#include <functional>
4#include <memory>
5#include <mutex>
6#include <vector>
7
8#include "aios.h"
9
10 namespace Pnd {
11
12 class GroupFeedback;
13 class GroupCommand;
14
15 using GroupFeedbackHandler = std::function<void(const GroupFeedback &)>;
16
21 class Group final {
22 public:
28 Group(PndGroupPtr group, float initial_feedback_frequency = 0.0f,
29 int32_t initial_command_lifetime = 0);
30
34 ~Group() noexcept;
35
39 int size();
40
44 bool setCommandLifetimeMs(int32_t ms);
45
57 bool sendCommand(const GroupCommand &group_command);
58
70 bool sendFeedbackRequest(
71 PndFeedbackCode feedbackCode = PndFeedbackAll);
72
88 bool getNextFeedback(GroupFeedback &feedback,
89 int32_t timeout_ms = DEFAULT_TIMEOUT_MS);
90
100 bool setFeedbackFrequencyHz(float frequency);
101
105 float getFeedbackFrequencyHz();
106
110 void addFeedbackHandler(GroupFeedbackHandler handler);
111
115 void clearFeedbackHandlers();
116
120 PndFeedbackErrorPtr getError(int idx);
121
122 private:
126 PndGroupPtr internal_;
127
131 const int number_of_modules_;
132
136 std::mutex handler_lock_;
137
141 std::vector<GroupFeedbackHandler> handlers_;
142
146 friend void callbackWrapper(PndGroupFeedbackPtr group_feedback,
147 void *user_data);
148
152 void callAttachedHandlers(PndGroupFeedbackPtr group_feedback);
153
154 public:
155 static const int32_t DEFAULT_TIMEOUT_MS = 500;
156};
157
158} // namespace Pnd
Pnd::GroupCommand
A list of Command objects appropriate for sending to a Group of modules; the size() must match the nu...
Definition groupCommand.hpp:14
Pnd::GroupFeedback
A list of Feedback objects that can be received from a Group of modules; the size() must match the nu...
Definition groupFeedback.hpp:13
Pnd::Group
Represents a group of physical Pnd actuator, and allows Command, Feedback, and Info objects to be sen...
Definition group.hpp:21
Pnd::Group::callbackWrapper
friend void callbackWrapper(PndGroupFeedbackPtr group_feedback, void *user_data)
Definition group.cpp:8
Pnd::Group::setCommandLifetimeMs
bool setCommandLifetimeMs(int32_t ms)
Sets the command lifetime for the modules in this group.
Definition group.cpp:43
Pnd::Group::sendFeedbackRequest
bool sendFeedbackRequest(PndFeedbackCode feedbackCode=PndFeedbackAll)
Requests feedback from the group.
Definition group.cpp:52
Pnd::Group::clearFeedbackHandlers
void clearFeedbackHandlers()
Definition group.cpp:79
Pnd::Group::getNextFeedback
bool getNextFeedback(GroupFeedback &feedback, int32_t timeout_ms=DEFAULT_TIMEOUT_MS)
Returns the most recently stored feedback from a sent feedback request, or returns the next one recei...
Definition group.cpp:57
Pnd::Group::getFeedbackFrequencyHz
float getFeedbackFrequencyHz()
Definition group.cpp:67
Pnd::Group::addFeedbackHandler
void addFeedbackHandler(GroupFeedbackHandler handler)
Definition group.cpp:71
Pnd::Group::getError
PndFeedbackErrorPtr getError(int idx)
Gets the actuator error message.
Definition group.cpp:85
Pnd::Group::~Group
~Group() noexcept
Destructor cleans up group.
Definition group.cpp:35
Pnd::Group::setFeedbackFrequencyHz
bool setFeedbackFrequencyHz(float frequency)
Sets the frequency of the internal feedback request + callback thread.
Definition group.cpp:62
Pnd::Group::sendCommand
bool sendCommand(const GroupCommand &group_command)
Send a command to the given group, requesting an acknowledgement of transmission to be sent back.
Definition group.cpp:47
Pnd::Group::size
int size()
Returns the number of modules in the group.
Definition group.cpp:41