aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpx4dev <px4@purgatory.org>2013-01-25 21:54:04 -0800
committerpx4dev <px4@purgatory.org>2013-01-25 21:54:04 -0800
commit818e898a7e084d6529da549ca3ea7c7d53fe5c46 (patch)
tree0cc551155491f07ecd64d92a134441a9cace39bb
parent1b30cd2f938c05841470e5aedcbd535105ea3f36 (diff)
downloadpx4-firmware-818e898a7e084d6529da549ca3ea7c7d53fe5c46.tar.gz
px4-firmware-818e898a7e084d6529da549ca3ea7c7d53fe5c46.tar.bz2
px4-firmware-818e898a7e084d6529da549ca3ea7c7d53fe5c46.zip
Fix the handling of max transfer size to leave room for the page/offset bytes.
-rw-r--r--apps/drivers/px4io/px4io.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/apps/drivers/px4io/px4io.cpp b/apps/drivers/px4io/px4io.cpp
index 985244873..fbbc0277e 100644
--- a/apps/drivers/px4io/px4io.cpp
+++ b/apps/drivers/px4io/px4io.cpp
@@ -270,8 +270,6 @@ PX4IO::PX4IO() :
_to_actuators_effective(0),
_to_outputs(0),
_to_battery(0),
- _mix_buf(nullptr),
- _mix_buf_len(0),
_primary_pwm_device(false)
{
/* we need this potentially before it could be set in task_main */
@@ -315,7 +313,7 @@ PX4IO::init()
/* get some parameters */
_max_actuators = io_reg_get(PX4IO_PAGE_CONFIG, PX4IO_P_CONFIG_ACTUATOR_COUNT);
_max_relays = io_reg_get(PX4IO_PAGE_CONFIG, PX4IO_P_CONFIG_RELAY_COUNT);
- _max_transfer = io_reg_get(PX4IO_PAGE_CONFIG, PX4IO_P_CONFIG_MAX_TRANSFER);
+ _max_transfer = io_reg_get(PX4IO_PAGE_CONFIG, PX4IO_P_CONFIG_MAX_TRANSFER) - 2;
_max_rc_input = io_reg_get(PX4IO_PAGE_CONFIG, PX4IO_P_CONFIG_RC_INPUT_COUNT);
if ((_max_actuators < 1) || (_max_actuators > 255) ||
(_max_relays < 1) || (_max_relays > 255) ||
@@ -816,9 +814,9 @@ PX4IO::io_publish_pwm_outputs()
int
PX4IO::io_reg_set(uint8_t page, uint8_t offset, const uint16_t *values, unsigned num_values)
{
- uint8_t buf[_max_transfer];
+ uint8_t buf[_max_transfer + 2];
- if (num_values > ((_max_transfer - 2) / sizeof(*values)))
+ if (num_values > ((_max_transfer) / sizeof(*values)))
return -EINVAL;
unsigned datalen = num_values * sizeof(*values);
@@ -928,16 +926,22 @@ PX4IO::mixer_send(const char *buf, unsigned buflen)
if (ret) {
log("mixer send error %d", ret);
return ret;
+ } else {
+ debug("mixer sent %u", total_len);
}
msg->action = F2I_MIXER_ACTION_APPEND;
} while (buflen > 0);
+ debug("mixer upload OK");
+
/* check for the mixer-OK flag */
if (io_reg_get(PX4IO_PAGE_STATUS, PX4IO_P_STATUS_FLAGS) & PX4IO_P_STATUS_FLAGS_MIXER_OK)
return 0;
+ debug("mixer rejected");
+
/* load must have failed for some reason */
return -EINVAL;
}