From c8632d9eeec401f0961d6c62ba2e7ef04c9f8960 Mon Sep 17 00:00:00 2001 From: Zack Selgrath Date: Sun, 14 Oct 2018 18:36:18 -0400 Subject: [PATCH] batt_smbus_main: Fixed bus arguments from shell - Added two external I2C bus options corresponding to newer Pixhawk hardware (px4fmu-v5) - Switched from getopt to px4_getopt - Fixed bus checking loop exiting early --- src/drivers/batt_smbus/batt_smbus_main.cpp | 23 +++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/drivers/batt_smbus/batt_smbus_main.cpp b/src/drivers/batt_smbus/batt_smbus_main.cpp index 4d0fbd070e..25c8b652bd 100644 --- a/src/drivers/batt_smbus/batt_smbus_main.cpp +++ b/src/drivers/batt_smbus/batt_smbus_main.cpp @@ -33,6 +33,7 @@ #include "batt_smbus.h" #include +#include extern "C" __EXPORT int batt_smbus_main(int argc, char *argv[]); @@ -57,6 +58,12 @@ struct batt_smbus_bus_option { BATT_SMBUS *dev; } bus_options[] = { { BATT_SMBUS_BUS_I2C_EXTERNAL, "/dev/batt_smbus_ext", &BATT_SMBUS_I2C_interface, PX4_I2C_BUS_EXPANSION, nullptr }, +#ifdef PX4_I2C_BUS_EXPANSION1 + { BATT_SMBUS_BUS_I2C_EXTERNAL, "/dev/batt_smbus_ext1", &BATT_SMBUS_I2C_interface, PX4_I2C_BUS_EXPANSION1, nullptr }, +#endif +#ifdef PX4_I2C_BUS_EXPANSION2 + { BATT_SMBUS_BUS_I2C_EXTERNAL, "/dev/batt_smbus_ext2", &BATT_SMBUS_I2C_interface, PX4_I2C_BUS_EXPANSION2, nullptr }, +#endif #ifdef PX4_I2C_BUS_ONBOARD { BATT_SMBUS_BUS_I2C_INTERNAL, "/dev/batt_smbus_int", &BATT_SMBUS_I2C_interface, PX4_I2C_BUS_ONBOARD, nullptr }, #endif @@ -116,6 +123,7 @@ bool start_bus(struct batt_smbus_bus_option &bus) int start(enum BATT_SMBUS_BUS busid) { for (unsigned i = 0; i < NUM_BUS_OPTIONS; i++) { + if (busid == BATT_SMBUS_BUS_ALL && bus_options[i].dev != nullptr) { // This device is already started. PX4_INFO("Smart battery %d already started", bus_options[i].dev); @@ -132,7 +140,11 @@ int start(enum BATT_SMBUS_BUS busid) } PX4_INFO("Smart battery failed to start"); - return PX4_ERROR; + + if (busid != BATT_SMBUS_BUS_ALL) { + return PX4_ERROR; + } + } return PX4_ERROR; @@ -285,11 +297,12 @@ int batt_smbus_main(int argc, char *argv[]) { enum BATT_SMBUS_BUS busid = BATT_SMBUS_BUS_I2C_EXTERNAL; + int myoptind = 1; int ch; - + const char* myoptarg = nullptr; // Jump over start/off/etc and look at options first. - while ((ch = getopt(argc, argv, "XIA:")) != EOF) { + while ((ch = px4_getopt(argc, argv, "XIA",&myoptind,&myoptarg)) != EOF) { switch (ch) { case 'X': busid = BATT_SMBUS_BUS_I2C_EXTERNAL; @@ -309,7 +322,7 @@ batt_smbus_main(int argc, char *argv[]) } } - const char *input = argv[optind]; + const char *input = argv[myoptind]; if(!input) { batt_smbus::usage("Please enter an appropriate command."); @@ -518,4 +531,4 @@ batt_smbus_main(int argc, char *argv[]) batt_smbus::usage("unrecognized argument"); return 1; -} \ No newline at end of file +}