aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpx4dev <px4@purgatory.org>2012-12-29 12:58:10 -0800
committerpx4dev <px4@purgatory.org>2012-12-29 12:58:10 -0800
commit6ede0e2f18f001afb390f3bbb0b989bdd2759c24 (patch)
tree98f1fe5cd1db4823b759e6ca3498b7e421033d76
parentd5da457e292d5c4276774c3da85b3805d3d2bbb7 (diff)
downloadpx4-firmware-6ede0e2f18f001afb390f3bbb0b989bdd2759c24.tar.gz
px4-firmware-6ede0e2f18f001afb390f3bbb0b989bdd2759c24.tar.bz2
px4-firmware-6ede0e2f18f001afb390f3bbb0b989bdd2759c24.zip
Add the ability to reset a mixer group. Report the remaining buffer size from load_from_buf.
-rw-r--r--apps/systemlib/mixer/mixer.h10
-rw-r--r--apps/systemlib/mixer/mixer_group.cpp24
2 files changed, 23 insertions, 11 deletions
diff --git a/apps/systemlib/mixer/mixer.h b/apps/systemlib/mixer/mixer.h
index 0023dc380..95b576d41 100644
--- a/apps/systemlib/mixer/mixer.h
+++ b/apps/systemlib/mixer/mixer.h
@@ -234,6 +234,11 @@ public:
void add_mixer(Mixer *mixer);
/**
+ * Remove all the mixers from the group.
+ */
+ void reset();
+
+ /**
* Adds mixers to the group based on a text description in a buffer.
*
* Mixer definitions begin with a single capital letter and a colon.
@@ -269,10 +274,11 @@ public:
* R: <geometry> <roll scale> <pitch scale> <yaw scale> <deadband>
*
* @param buf The mixer configuration buffer.
- * @param buflen The length of the buffer.
+ * @param buflen The length of the buffer, updated to reflect
+ * bytes as they are consumed.
* @return Zero on successful load, nonzero otherwise.
*/
- int load_from_buf(const char *buf, unsigned buflen);
+ int load_from_buf(const char *buf, unsigned &buflen);
private:
Mixer *_first; /**< linked list of mixers */
diff --git a/apps/systemlib/mixer/mixer_group.cpp b/apps/systemlib/mixer/mixer_group.cpp
index af5569001..6dfe4fbef 100644
--- a/apps/systemlib/mixer/mixer_group.cpp
+++ b/apps/systemlib/mixer/mixer_group.cpp
@@ -64,14 +64,7 @@ MixerGroup::MixerGroup(ControlCallback control_cb, uintptr_t cb_handle) :
MixerGroup::~MixerGroup()
{
- Mixer *mixer;
-
- /* discard sub-mixers */
- while (_first != nullptr) {
- mixer = _first;
- _first = mixer->_next;
- delete mixer;
- }
+ reset();
}
void
@@ -88,6 +81,19 @@ MixerGroup::add_mixer(Mixer *mixer)
mixer->_next = nullptr;
}
+void
+MixerGroup::reset()
+{
+ Mixer *mixer;
+
+ /* discard sub-mixers */
+ while (_first != nullptr) {
+ mixer = _first;
+ _first = mixer->_next;
+ delete mixer;
+ }
+}
+
unsigned
MixerGroup::mix(float *outputs, unsigned space)
{
@@ -114,7 +120,7 @@ MixerGroup::groups_required(uint32_t &groups)
}
int
-MixerGroup::load_from_buf(const char *buf, unsigned buflen)
+MixerGroup::load_from_buf(const char *buf, unsigned &buflen)
{
int ret = -1;
const char *end = buf + buflen;