bmm150: add self-test

This commit is contained in:
Beat Küng
2020-05-05 13:14:56 +02:00
committed by Daniel Agar
parent 71b942392d
commit 8d722ac74b
@@ -552,6 +552,49 @@ void BMM150::print_status()
_px4_mag.print_status();
}
int BMM150::self_test()
{
/* normal self-test */
set_power_mode(BMM150_SLEEP_MODE);
modify_reg(BMM150_CTRL_REG, 0, 1);
int i;
for (i = 0; i < 100; ++i) {
px4_usleep(1000);
uint8_t ctrl_reg = read_reg(BMM150_CTRL_REG);
if ((ctrl_reg & 1) == 0) {
break;
}
}
if (i == 100) {
PX4_ERR("timeout");
return -1;
}
uint8_t results[3];
results[0] = read_reg(BMM150_DATA_X_LSB_REG);
results[1] = read_reg(BMM150_DATA_Y_LSB_REG);
results[2] = read_reg(BMM150_DATA_Z_LSB_REG);
bool failed = false;
for (i = 0; i < 3; ++i) {
if ((results[i] & 1) == 0) {
PX4_ERR("Self-test failed for axis %i", i);
failed = true;
}
}
if (failed) {
return -1;
}
PX4_INFO("Success");
return reset();
}
void BMM150::print_registers()
{
printf("BMM150 registers\n");
@@ -584,6 +627,7 @@ void BMM150::print_usage()
PRINT_MODULE_USAGE_PARAM_INT('R', 0, 0, 35, "Rotation", true);
PRINT_MODULE_USAGE_COMMAND("reset");
PRINT_MODULE_USAGE_COMMAND("regdump");
PRINT_MODULE_USAGE_COMMAND("selftest");
PRINT_MODULE_USAGE_DEFAULT_COMMANDS();
}
@@ -595,6 +639,9 @@ void BMM150::custom_method(const BusCLIArguments &cli)
case 1: print_registers();
break;
case 2: self_test();
break;
}
}
@@ -663,6 +710,11 @@ extern "C" __EXPORT int bmm150_main(int argc, char *argv[])
return ThisDriver::module_custom_method(cli, iterator);
}
if (!strcmp(verb, "selftest")) {
cli.custom1 = 2;
return ThisDriver::module_custom_method(cli, iterator);
}
ThisDriver::print_usage();
return -1;
}