aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/lsm303d/lsm303d.cpp
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2013-10-21 10:06:43 +1100
committerLorenz Meier <lm@inf.ethz.ch>2013-12-10 11:57:54 +0100
commit93f3398dfedd787419f54294adc6c92c30e282b9 (patch)
tree2725eb09cd281dd698ef3c741c26b737707c72fc /src/drivers/lsm303d/lsm303d.cpp
parent39634d100104b64f205b69017562b3ac549cf264 (diff)
downloadpx4-firmware-93f3398dfedd787419f54294adc6c92c30e282b9.tar.gz
px4-firmware-93f3398dfedd787419f54294adc6c92c30e282b9.tar.bz2
px4-firmware-93f3398dfedd787419f54294adc6c92c30e282b9.zip
lsm303d: added 'lsm303d regdump' command
useful for diagnosing issues
Diffstat (limited to 'src/drivers/lsm303d/lsm303d.cpp')
-rw-r--r--src/drivers/lsm303d/lsm303d.cpp53
1 files changed, 52 insertions, 1 deletions
diff --git a/src/drivers/lsm303d/lsm303d.cpp b/src/drivers/lsm303d/lsm303d.cpp
index 60601e22c..c21a25522 100644
--- a/src/drivers/lsm303d/lsm303d.cpp
+++ b/src/drivers/lsm303d/lsm303d.cpp
@@ -201,6 +201,11 @@ public:
*/
void print_info();
+ /**
+ * dump register values
+ */
+ void print_registers();
+
protected:
virtual int probe();
@@ -1380,6 +1385,30 @@ LSM303D::print_info()
_mag_reports->print_info("mag reports");
}
+void
+LSM303D::print_registers()
+{
+ const struct {
+ uint8_t reg;
+ const char *name;
+ } regmap[] = {
+ { ADDR_WHO_AM_I, "WHO_AM_I" },
+ { ADDR_STATUS_A, "STATUS_A" },
+ { ADDR_STATUS_M, "STATUS_M" },
+ { ADDR_CTRL_REG0, "CTRL_REG0" },
+ { ADDR_CTRL_REG1, "CTRL_REG1" },
+ { ADDR_CTRL_REG2, "CTRL_REG2" },
+ { ADDR_CTRL_REG3, "CTRL_REG3" },
+ { ADDR_CTRL_REG4, "CTRL_REG4" },
+ { ADDR_CTRL_REG5, "CTRL_REG5" },
+ { ADDR_CTRL_REG6, "CTRL_REG6" },
+ { ADDR_CTRL_REG7, "CTRL_REG7" },
+ };
+ for (uint8_t i=0; i<sizeof(regmap)/sizeof(regmap[0]); i++) {
+ printf("0x%02x %s\n", read_reg(regmap[i].reg), regmap[i].name);
+ }
+}
+
LSM303D_mag::LSM303D_mag(LSM303D *parent) :
CDev("LSM303D_mag", MAG_DEVICE_PATH),
_parent(parent)
@@ -1432,6 +1461,7 @@ void start();
void test();
void reset();
void info();
+void regdump();
/**
* Start the driver.
@@ -1603,6 +1633,21 @@ info()
exit(0);
}
+/**
+ * dump registers from device
+ */
+void
+regdump()
+{
+ if (g_dev == nullptr)
+ errx(1, "driver not running\n");
+
+ printf("regdump @ %p\n", g_dev);
+ g_dev->print_registers();
+
+ exit(0);
+}
+
} // namespace
@@ -1634,5 +1679,11 @@ lsm303d_main(int argc, char *argv[])
if (!strcmp(argv[1], "info"))
lsm303d::info();
- errx(1, "unrecognized command, try 'start', 'test', 'reset' or 'info'");
+ /*
+ * dump device registers
+ */
+ if (!strcmp(argv[1], "regdump"))
+ lsm303d::regdump();
+
+ errx(1, "unrecognized command, try 'start', 'test', 'reset', 'info' or 'regdump'");
}