aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2013-08-12 14:59:58 +1000
committerLorenz Meier <lm@inf.ethz.ch>2013-08-14 15:02:35 +0200
commit3b10f8431def73222823c1c2abe1bb7422d851dc (patch)
tree7668af53c8346e93d11ba7de0bfef12e86414c41
parent21a919d973c13d7d2259b47116480ade819d7b8c (diff)
downloadpx4-firmware-3b10f8431def73222823c1c2abe1bb7422d851dc.tar.gz
px4-firmware-3b10f8431def73222823c1c2abe1bb7422d851dc.tar.bz2
px4-firmware-3b10f8431def73222823c1c2abe1bb7422d851dc.zip
rgbled: try expansion bus first, unless specific bus given
this will allow "rgbled start" to detect which bus the LED is on, supporting boards with either external or internal LEDs
-rw-r--r--src/drivers/rgbled/rgbled.cpp35
1 files changed, 24 insertions, 11 deletions
diff --git a/src/drivers/rgbled/rgbled.cpp b/src/drivers/rgbled/rgbled.cpp
index 427537508..44aa922e6 100644
--- a/src/drivers/rgbled/rgbled.cpp
+++ b/src/drivers/rgbled/rgbled.cpp
@@ -166,7 +166,6 @@ RGBLED::init()
ret = I2C::init();
if (ret != OK) {
- warnx("I2C init failed");
return ret;
}
@@ -440,7 +439,7 @@ void rgbled_usage() {
int
rgbled_main(int argc, char *argv[])
{
- int i2cdevice = PX4_I2C_BUS_LED;
+ int i2cdevice = -1;
int rgbledadr = ADDR; /* 7bit */
int ch;
@@ -464,15 +463,29 @@ rgbled_main(int argc, char *argv[])
if (g_rgbled != nullptr)
errx(1, "already started");
- g_rgbled = new RGBLED(i2cdevice, rgbledadr);
-
- if (g_rgbled == nullptr)
- errx(1, "new failed");
-
- if (OK != g_rgbled->init()) {
- delete g_rgbled;
- g_rgbled = nullptr;
- errx(1, "init failed");
+ if (i2cdevice == -1) {
+ // try the external bus first
+ i2cdevice = PX4_I2C_BUS_EXPANSION;
+ g_rgbled = new RGBLED(PX4_I2C_BUS_EXPANSION, rgbledadr);
+ if (g_rgbled != nullptr && OK != g_rgbled->init()) {
+ delete g_rgbled;
+ g_rgbled = nullptr;
+ }
+ if (g_rgbled == nullptr) {
+ // fall back to default bus
+ i2cdevice = PX4_I2C_BUS_LED;
+ }
+ }
+ if (g_rgbled == nullptr) {
+ g_rgbled = new RGBLED(i2cdevice, rgbledadr);
+ if (g_rgbled == nullptr)
+ errx(1, "new failed");
+
+ if (OK != g_rgbled->init()) {
+ delete g_rgbled;
+ g_rgbled = nullptr;
+ errx(1, "init failed");
+ }
}
exit(0);