diff options
author | Lorenz Meier <lm@inf.ethz.ch> | 2013-08-04 01:52:22 +0200 |
---|---|---|
committer | Lorenz Meier <lm@inf.ethz.ch> | 2013-08-04 01:52:22 +0200 |
commit | 9499e48a524941d955c1b092c7b4e8ebdc1cc807 (patch) | |
tree | ebd1136fc9bb7e63411b5ba2348d45ddfd09911e /src | |
parent | 6cf24ac106688d70bdeda9d13fa252246f599b5a (diff) | |
download | px4-firmware-9499e48a524941d955c1b092c7b4e8ebdc1cc807.tar.gz px4-firmware-9499e48a524941d955c1b092c7b4e8ebdc1cc807.tar.bz2 px4-firmware-9499e48a524941d955c1b092c7b4e8ebdc1cc807.zip |
Fixed setting mag queue depth
Diffstat (limited to 'src')
-rw-r--r-- | src/drivers/lsm303d/lsm303d.cpp | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/drivers/lsm303d/lsm303d.cpp b/src/drivers/lsm303d/lsm303d.cpp index d9801f88f..7a65f644a 100644 --- a/src/drivers/lsm303d/lsm303d.cpp +++ b/src/drivers/lsm303d/lsm303d.cpp @@ -811,8 +811,34 @@ LSM303D::mag_ioctl(struct file *filp, int cmd, unsigned long arg) return SENSOR_POLLRATE_MANUAL; return 1000000 / _call_mag_interval; - case SENSORIOCSQUEUEDEPTH: + + case SENSORIOCSQUEUEDEPTH: { + /* account for sentinel in the ring */ + arg++; + + /* lower bound is mandatory, upper bound is a sanity check */ + if ((arg < 2) || (arg > 100)) + return -EINVAL; + + /* allocate new buffer */ + struct mag_report *buf = new struct mag_report[arg]; + + if (nullptr == buf) + return -ENOMEM; + + /* reset the measurement state machine with the new buffer, free the old */ + stop(); + delete[] _mag_reports; + _num_mag_reports = arg; + _mag_reports = buf; + start(); + + return OK; + } + case SENSORIOCGQUEUEDEPTH: + return _num_mag_reports - 1; + case SENSORIOCRESET: return ioctl(filp, cmd, arg); |