Browse Source

lsm303d: changed tones for accel fail to 3 tones

distinct tones for init fail, post-boot fail and recovery
sbg
Andrew Tridgell 11 years ago committed by Lorenz Meier
parent
commit
2de588e861
  1. 24
      src/drivers/lsm303d/lsm303d.cpp

24
src/drivers/lsm303d/lsm303d.cpp

@ -664,6 +664,7 @@ void
LSM303D::check_extremes(const accel_report *arb) LSM303D::check_extremes(const accel_report *arb)
{ {
const float extreme_threshold = 30; const float extreme_threshold = 30;
static bool boot_ok = false;
bool is_extreme = (fabsf(arb->x) > extreme_threshold && bool is_extreme = (fabsf(arb->x) > extreme_threshold &&
fabsf(arb->y) > extreme_threshold && fabsf(arb->y) > extreme_threshold &&
fabsf(arb->z) > extreme_threshold); fabsf(arb->z) > extreme_threshold);
@ -671,7 +672,9 @@ LSM303D::check_extremes(const accel_report *arb)
perf_count(_extreme_values); perf_count(_extreme_values);
// force accel logging on if we see extreme values // force accel logging on if we see extreme values
_accel_logging_enabled = true; _accel_logging_enabled = true;
} } else {
boot_ok = true;
}
if (! _accel_logging_enabled) { if (! _accel_logging_enabled) {
// logging has been disabled by user, close // logging has been disabled by user, close
@ -705,15 +708,16 @@ LSM303D::check_extremes(const accel_report *arb)
if (_last_log_us == 0 || if (_last_log_us == 0 ||
now - _last_log_us > 1000*1000) { now - _last_log_us > 1000*1000) {
_last_log_us = now; _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, (unsigned long long)arb->timestamp,
arb->x, arb->y, arb->z, arb->x, arb->y, arb->z,
(int)arb->x_raw, (int)arb->x_raw,
(int)arb->y_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_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_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, 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_CLICK_THS, ADDR_TIME_LIMIT, ADDR_TIME_LATENCY, ADDR_TIME_WINDOW,
ADDR_ACT_THS, ADDR_ACT_DUR, ADDR_ACT_THS, ADDR_ACT_DUR,
ADDR_OUT_X_L_M, ADDR_OUT_X_H_M, 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)]; uint8_t regval[sizeof(reglist)];
for (uint8_t i=0; i<sizeof(reglist); i++) { for (uint8_t i=0; i<sizeof(reglist); i++) {
regval[i] = read_reg(reglist[i]); regval[i] = read_reg(reglist[i]);
@ -753,7 +757,15 @@ LSM303D::check_extremes(const accel_report *arb)
_last_log_alarm_us = now; _last_log_alarm_us = now;
int tfd = ::open(TONEALARM_DEVICE_PATH, 0); int tfd = ::open(TONEALARM_DEVICE_PATH, 0);
if (tfd != -1) { 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); ::close(tfd);
} }
} }

Loading…
Cancel
Save