aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/lsm303d/lsm303d.cpp
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2013-12-04 15:50:41 +1100
committerLorenz Meier <lm@inf.ethz.ch>2013-12-10 12:00:55 +0100
commit2de588e8611c99d54b8499937764539e543df58f (patch)
tree3b307e290c8ffb91759e4e3ed99dc02065940ee2 /src/drivers/lsm303d/lsm303d.cpp
parentc46ab017e12f5ccbe0f22ec77f90d8a8e28a8c63 (diff)
downloadpx4-firmware-2de588e8611c99d54b8499937764539e543df58f.tar.gz
px4-firmware-2de588e8611c99d54b8499937764539e543df58f.tar.bz2
px4-firmware-2de588e8611c99d54b8499937764539e543df58f.zip
lsm303d: changed tones for accel fail to 3 tones
distinct tones for init fail, post-boot fail and recovery
Diffstat (limited to 'src/drivers/lsm303d/lsm303d.cpp')
-rw-r--r--src/drivers/lsm303d/lsm303d.cpp24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/drivers/lsm303d/lsm303d.cpp b/src/drivers/lsm303d/lsm303d.cpp
index 5c9a87eaa..44cb46912 100644
--- a/src/drivers/lsm303d/lsm303d.cpp
+++ b/src/drivers/lsm303d/lsm303d.cpp
@@ -664,6 +664,7 @@ void
LSM303D::check_extremes(const accel_report *arb)
{
const float extreme_threshold = 30;
+ static bool boot_ok = false;
bool is_extreme = (fabsf(arb->x) > extreme_threshold &&
fabsf(arb->y) > extreme_threshold &&
fabsf(arb->z) > extreme_threshold);
@@ -671,7 +672,9 @@ LSM303D::check_extremes(const accel_report *arb)
perf_count(_extreme_values);
// force accel logging on if we see extreme values
_accel_logging_enabled = true;
- }
+ } else {
+ boot_ok = true;
+ }
if (! _accel_logging_enabled) {
// logging has been disabled by user, close
@@ -705,15 +708,16 @@ LSM303D::check_extremes(const accel_report *arb)
if (_last_log_us == 0 ||
now - _last_log_us > 1000*1000) {
_last_log_us = now;
- ::dprintf(_accel_log_fd, "ARB %llu %.3f %.3f %.3f %d %d %d\r\n",
+ ::dprintf(_accel_log_fd, "ARB %llu %.3f %.3f %.3f %d %d %d boot_ok=%u\r\n",
(unsigned long long)arb->timestamp,
arb->x, arb->y, arb->z,
(int)arb->x_raw,
(int)arb->y_raw,
- (int)arb->z_raw);
+ (int)arb->z_raw,
+ (unsigned)boot_ok);
}
- const uint8_t reglist[] = { ADDR_WHO_AM_I, ADDR_STATUS_A, ADDR_STATUS_M, ADDR_CTRL_REG0, ADDR_CTRL_REG1,
+ const uint8_t reglist[] = { ADDR_WHO_AM_I, 0x02, 0x15, ADDR_STATUS_A, ADDR_STATUS_M, ADDR_CTRL_REG0, ADDR_CTRL_REG1,
ADDR_CTRL_REG2, ADDR_CTRL_REG3, ADDR_CTRL_REG4, ADDR_CTRL_REG5, ADDR_CTRL_REG6,
ADDR_CTRL_REG7, ADDR_OUT_TEMP_L, ADDR_OUT_TEMP_H, ADDR_INT_CTRL_M, ADDR_INT_SRC_M,
ADDR_REFERENCE_X, ADDR_REFERENCE_Y, ADDR_REFERENCE_Z, ADDR_OUT_X_L_A, ADDR_OUT_X_H_A,
@@ -723,7 +727,7 @@ LSM303D::check_extremes(const accel_report *arb)
ADDR_CLICK_THS, ADDR_TIME_LIMIT, ADDR_TIME_LATENCY, ADDR_TIME_WINDOW,
ADDR_ACT_THS, ADDR_ACT_DUR,
ADDR_OUT_X_L_M, ADDR_OUT_X_H_M,
- ADDR_OUT_Y_L_M, ADDR_OUT_Y_H_M, ADDR_OUT_Z_L_M, ADDR_OUT_Z_H_M};
+ ADDR_OUT_Y_L_M, ADDR_OUT_Y_H_M, ADDR_OUT_Z_L_M, ADDR_OUT_Z_H_M, 0x02, 0x15, ADDR_WHO_AM_I};
uint8_t regval[sizeof(reglist)];
for (uint8_t i=0; i<sizeof(reglist); i++) {
regval[i] = read_reg(reglist[i]);
@@ -753,7 +757,15 @@ LSM303D::check_extremes(const accel_report *arb)
_last_log_alarm_us = now;
int tfd = ::open(TONEALARM_DEVICE_PATH, 0);
if (tfd != -1) {
- ::ioctl(tfd, TONE_SET_ALARM, is_extreme?4:3);
+ uint8_t tone = 3;
+ if (!is_extreme) {
+ tone = 3;
+ } else if (boot_ok) {
+ tone = 4;
+ } else {
+ tone = 5;
+ }
+ ::ioctl(tfd, TONE_SET_ALARM, tone);
::close(tfd);
}
}