diff --git a/boards/px4/fmu-v3/init/rc.board_sensors b/boards/px4/fmu-v3/init/rc.board_sensors index 33e5698d76..49af4d46ee 100644 --- a/boards/px4/fmu-v3/init/rc.board_sensors +++ b/boards/px4/fmu-v3/init/rc.board_sensors @@ -33,6 +33,12 @@ then if mpu9250 -s -b 4 -R 10 start then set BOARD_FMUV3 21 + else + + # some boards have an internal hmc5883 or ist8310, make sure they + # are not detected as external + hmc5883 start -X -b 2 -i + ist8310 start -X -b 2 -i fi fi fi diff --git a/src/drivers/magnetometer/hmc5883/HMC5883.cpp b/src/drivers/magnetometer/hmc5883/HMC5883.cpp index fdf0a9353e..1fd7074f4b 100644 --- a/src/drivers/magnetometer/hmc5883/HMC5883.cpp +++ b/src/drivers/magnetometer/hmc5883/HMC5883.cpp @@ -48,7 +48,7 @@ HMC5883::HMC5883(device::Device *interface, const I2CSPIDriverConfig &config) : _temperature_counter(0), _temperature_error_count(0) { - _px4_mag.set_external(_interface->external()); + _px4_mag.set_external(config.custom2 != 1 && _interface->external()); } HMC5883::~HMC5883() diff --git a/src/drivers/magnetometer/hmc5883/hmc5883_main.cpp b/src/drivers/magnetometer/hmc5883/hmc5883_main.cpp index a8fa83f4f6..d2bf390ef4 100644 --- a/src/drivers/magnetometer/hmc5883/hmc5883_main.cpp +++ b/src/drivers/magnetometer/hmc5883/hmc5883_main.cpp @@ -96,6 +96,7 @@ void HMC5883::print_usage() PRINT_MODULE_USAGE_PARAMS_I2C_SPI_DRIVER(true, true); PRINT_MODULE_USAGE_PARAM_INT('R', 0, 0, 35, "Rotation", true); PRINT_MODULE_USAGE_PARAM_FLAG('T', "Enable temperature compensation", true); + PRINT_MODULE_USAGE_PARAM_FLAG('i', "Force as internal", true); PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); } @@ -107,7 +108,7 @@ extern "C" int hmc5883_main(int argc, char *argv[]) cli.default_i2c_frequency = 400000; cli.default_spi_frequency = 11 * 1000 * 1000; - while ((ch = cli.getOpt(argc, argv, "R:T")) != EOF) { + while ((ch = cli.getOpt(argc, argv, "R:Ti")) != EOF) { switch (ch) { case 'R': cli.rotation = (enum Rotation)atoi(cli.optArg()); @@ -116,6 +117,10 @@ extern "C" int hmc5883_main(int argc, char *argv[]) case 'T': cli.custom1 = 1; break; + + case 'i': + cli.custom2 = 1; + break; } } diff --git a/src/drivers/magnetometer/isentek/ist8310/IST8310.cpp b/src/drivers/magnetometer/isentek/ist8310/IST8310.cpp index cc98c5df60..d4d277a115 100644 --- a/src/drivers/magnetometer/isentek/ist8310/IST8310.cpp +++ b/src/drivers/magnetometer/isentek/ist8310/IST8310.cpp @@ -45,7 +45,7 @@ IST8310::IST8310(const I2CSPIDriverConfig &config) : I2CSPIDriver(config), _px4_mag(get_device_id(), config.rotation) { - _px4_mag.set_external(external()); + _px4_mag.set_external(config.custom2 != 1 && external()); } IST8310::~IST8310() diff --git a/src/drivers/magnetometer/isentek/ist8310/ist8310_main.cpp b/src/drivers/magnetometer/isentek/ist8310/ist8310_main.cpp index eee1a01c1d..3731be2f03 100644 --- a/src/drivers/magnetometer/isentek/ist8310/ist8310_main.cpp +++ b/src/drivers/magnetometer/isentek/ist8310/ist8310_main.cpp @@ -44,6 +44,7 @@ void IST8310::print_usage() PRINT_MODULE_USAGE_PARAMS_I2C_SPI_DRIVER(true, false); PRINT_MODULE_USAGE_PARAMS_I2C_ADDRESS(0x0E); PRINT_MODULE_USAGE_PARAM_INT('R', 0, 0, 35, "Rotation", true); + PRINT_MODULE_USAGE_PARAM_FLAG('i', "Force as internal", true); PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); } @@ -55,11 +56,15 @@ extern "C" int ist8310_main(int argc, char *argv[]) cli.i2c_address = I2C_ADDRESS_DEFAULT; cli.default_i2c_frequency = I2C_SPEED; - while ((ch = cli.getOpt(argc, argv, "R:")) != EOF) { + while ((ch = cli.getOpt(argc, argv, "R:i")) != EOF) { switch (ch) { case 'R': cli.rotation = (enum Rotation)atoi(cli.optArg()); break; + + case 'i': + cli.custom2 = 1; + break; } }