diff options
author | Lorenz Meier <lm@inf.ethz.ch> | 2014-10-10 11:57:46 +0200 |
---|---|---|
committer | Lorenz Meier <lm@inf.ethz.ch> | 2015-01-02 12:28:21 +0100 |
commit | 2effc9a23d8df3922f9f7cec9b0af9b15b2e2367 (patch) | |
tree | 68789a6016344bb4fb8c1a0e9e9539823e982413 | |
parent | 500ac1443bcfc9082a76b0a2a0a72b0a3d539b9b (diff) | |
download | px4-firmware-2effc9a23d8df3922f9f7cec9b0af9b15b2e2367.tar.gz px4-firmware-2effc9a23d8df3922f9f7cec9b0af9b15b2e2367.tar.bz2 px4-firmware-2effc9a23d8df3922f9f7cec9b0af9b15b2e2367.zip |
MS5611: Allow two instances
-rw-r--r-- | src/drivers/ms5611/ms5611.cpp | 60 |
1 files changed, 45 insertions, 15 deletions
diff --git a/src/drivers/ms5611/ms5611.cpp b/src/drivers/ms5611/ms5611.cpp index 889643d0d..340a2e660 100644 --- a/src/drivers/ms5611/ms5611.cpp +++ b/src/drivers/ms5611/ms5611.cpp @@ -787,7 +787,9 @@ MS5611::print_info() namespace ms5611 { -MS5611 *g_dev; +/* initialize explicitely for clarity */ +MS5611 *g_dev_ext = nullptr; +MS5611 *g_dev_int = nullptr; void start(bool external_bus); void test(); @@ -852,9 +854,13 @@ start(bool external_bus) int fd; prom_u prom_buf; - if (g_dev != nullptr) + if (external_bus && (g_dev_ext != nullptr)) /* if already started, the still command succeeded */ - errx(0, "already started"); + errx(0, "ext already started"); + + if (g_dev_int != nullptr) + /* if already started, the still command succeeded */ + errx(0, "int already started"); device::Device *interface = nullptr; @@ -872,13 +878,25 @@ start(bool external_bus) errx(1, "interface init failed"); } - g_dev = new MS5611(interface, prom_buf); - if (g_dev == nullptr) { - delete interface; - errx(1, "failed to allocate driver"); + if (external_bus) { + g_dev_ext = new MS5611(interface, prom_buf); + if (g_dev_ext == nullptr) { + delete interface; + errx(1, "failed to allocate driver"); + } + if (g_dev_ext->init() != OK) + goto fail; + } else { + + g_dev_int = new MS5611(interface, prom_buf); + if (g_dev_int == nullptr) { + delete interface; + errx(1, "failed to allocate driver"); + } + if (g_dev_int->init() != OK) + goto fail; + } - if (g_dev->init() != OK) - goto fail; /* set the poll rate to default, starts automatic data collection */ fd = open(MS5611_BARO_DEVICE_PATH, O_RDONLY); @@ -895,9 +913,14 @@ start(bool external_bus) fail: - if (g_dev != nullptr) { - delete g_dev; - g_dev = nullptr; + if (g_dev_int != nullptr) { + delete g_dev_int; + g_dev_int = nullptr; + } + + if (g_dev_ext != nullptr) { + delete g_dev_ext; + g_dev_ext = nullptr; } errx(1, "driver start failed"); @@ -994,11 +1017,18 @@ reset() void info() { - if (g_dev == nullptr) + if (g_dev_ext == nullptr && g_dev_int == nullptr) errx(1, "driver not running"); - printf("state @ %p\n", g_dev); - g_dev->print_info(); + if (g_dev_ext) { + warnx("ext:"); + g_dev_ext->print_info(); + } + + if (g_dev_int) { + warnx("int:"); + g_dev_int->print_info(); + } exit(0); } |