diff options
author | Lorenz Meier <lm@inf.ethz.ch> | 2012-12-22 00:47:52 +0100 |
---|---|---|
committer | Lorenz Meier <lm@inf.ethz.ch> | 2012-12-22 00:47:52 +0100 |
commit | 4cf2266b79a28445ad0b493c36cf125081900423 (patch) | |
tree | 94f065f916ce7b0a5d4d0c48d40bf9b1086b2049 /apps/drivers/px4io/px4io.cpp | |
parent | fe6496a04dd0a232bb530f57031cfb4f6e65bb44 (diff) | |
download | px4-firmware-4cf2266b79a28445ad0b493c36cf125081900423.tar.gz px4-firmware-4cf2266b79a28445ad0b493c36cf125081900423.tar.bz2 px4-firmware-4cf2266b79a28445ad0b493c36cf125081900423.zip |
Robustified actuator output topic, added number of mixed outputs
Diffstat (limited to 'apps/drivers/px4io/px4io.cpp')
-rw-r--r-- | apps/drivers/px4io/px4io.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/apps/drivers/px4io/px4io.cpp b/apps/drivers/px4io/px4io.cpp index 695304926..701955298 100644 --- a/apps/drivers/px4io/px4io.cpp +++ b/apps/drivers/px4io/px4io.cpp @@ -402,8 +402,8 @@ PX4IO::task_main() /* mix */ if (_mixers != nullptr) { - /* XXX is this the right count? */ - _mixers->mix(&_outputs.output[0], _max_actuators); + _outputs.timestamp = hrt_absolute_time(); + _outputs.noutputs = _mixers->mix(&_outputs.output[0], _max_actuators); // XXX output actual limited values memcpy(&_controls_effective, &_controls, sizeof(_controls_effective)); @@ -413,7 +413,11 @@ PX4IO::task_main() /* convert to PWM values */ for (unsigned i = 0; i < _max_actuators; i++) { /* last resort: catch NaN, INF and out-of-band errors */ - if (isfinite(_outputs.output[i]) && _outputs.output[i] >= -1.0f && _outputs.output[i] <= 1.0f) { + if (i < _outputs.noutputs && + isfinite(_outputs.output[i]) && + _outputs.output[i] >= -1.0f && + _outputs.output[i] <= 1.0f) { + /* scale for PWM output 900 - 2100us */ _outputs.output[i] = 1500 + (600 * _outputs.output[i]); } else { /* |