Browse Source

Sensors: Clean up boot output (#8005)

Various sensors had too verbose or confusing boot output that would make the boot log hard to read. This patch ensures all output is consistently indicating if there is a real error or an optional sensor just not present. It also removed redundant error messages and adds an indication on which bus the sensor was probed.
sbg
Lorenz Meier 7 years ago committed by Daniel Agar
parent
commit
a945cd9fc2
  1. 1
      src/drivers/bmi055/bmi055_accel.cpp
  2. 2
      src/drivers/bmi055/bmi055_gyro.cpp
  3. 8
      src/drivers/bmi055/bmi055_main.cpp
  4. 52
      src/drivers/ets_airspeed/ets_airspeed.cpp
  5. 57
      src/drivers/ms4525_airspeed/ms4525_airspeed.cpp
  6. 54
      src/drivers/ms5525_airspeed/MS5525_main.cpp
  7. 1
      src/drivers/sdp3x_airspeed/SDP3X.cpp
  8. 68
      src/drivers/sdp3x_airspeed/SDP3X_main.cpp

1
src/drivers/bmi055/bmi055_accel.cpp

@ -79,7 +79,6 @@ BMI055_accel::init() @@ -79,7 +79,6 @@ BMI055_accel::init()
/* if probe/setup failed, bail now */
if (ret != OK) {
warnx("SPI error");
DEVICE_DEBUG("SPI setup failed");
return ret;
}

2
src/drivers/bmi055/bmi055_gyro.cpp

@ -184,7 +184,7 @@ BMI055_gyro::probe() @@ -184,7 +184,7 @@ BMI055_gyro::probe()
return OK;
}
PX4_ERR("unexpected whoami 0x%02x", _whoami);
DEVICE_DEBUG("unexpected whoami 0x%02x", _whoami);
return -EIO;
}

8
src/drivers/bmi055/bmi055_main.cpp

@ -133,7 +133,7 @@ start(bool external_bus, enum Rotation rotation, enum sensor_type sensor) @@ -133,7 +133,7 @@ start(bool external_bus, enum Rotation rotation, enum sensor_type sensor)
close(fd_gyr);
}
exit(0);
exit(PX4_OK);
fail_accel:
@ -142,7 +142,8 @@ fail_accel: @@ -142,7 +142,8 @@ fail_accel:
*g_dev_acc_ptr = nullptr;
}
errx(1, "bmi055 accel driver start failed");
PX4_WARN("No BMI055 accel found");
exit(PX4_ERROR);
fail_gyro:
@ -151,7 +152,8 @@ fail_gyro: @@ -151,7 +152,8 @@ fail_gyro:
*g_dev_gyr_ptr = nullptr;
}
errx(1, "bmi055 gyro driver start failed");
PX4_WARN("No BMI055 gyro found");
exit(PX4_ERROR);
}

52
src/drivers/ets_airspeed/ets_airspeed.cpp

@ -243,11 +243,11 @@ namespace ets_airspeed @@ -243,11 +243,11 @@ namespace ets_airspeed
ETSAirspeed *g_dev;
void start(int i2c_bus);
void stop();
void test();
void reset();
void info();
int start(int i2c_bus);
int stop();
int test();
int reset();
int info();
/**
* Start the driver.
@ -255,13 +255,14 @@ void info(); @@ -255,13 +255,14 @@ void info();
* This function only returns if the sensor is up and running
* or could not be detected successfully.
*/
void
int
start(int i2c_bus)
{
int fd;
if (g_dev != nullptr) {
PX4_ERR("already started");
return PX4_ERROR;
}
/* create the driver */
@ -286,7 +287,7 @@ start(int i2c_bus) @@ -286,7 +287,7 @@ start(int i2c_bus)
goto fail;
}
return;
return PX4_OK;
fail:
@ -295,13 +296,14 @@ fail: @@ -295,13 +296,14 @@ fail:
g_dev = nullptr;
}
PX4_WARN("no ETS airspeed sensor connected");
PX4_WARN("no ETS airspeed sensor connected on bus %d", i2c_bus);
return PX4_ERROR;
}
/**
* Stop the driver
*/
void
int
stop()
{
if (g_dev != nullptr) {
@ -310,7 +312,10 @@ stop() @@ -310,7 +312,10 @@ stop()
} else {
PX4_ERR("driver not running");
return PX4_ERROR;
}
return PX4_OK;
}
/**
@ -318,7 +323,7 @@ stop() @@ -318,7 +323,7 @@ stop()
* make sure we can collect data from the sensor in polled
* and automatic modes.
*/
void
int
test()
{
struct differential_pressure_s report;
@ -329,6 +334,7 @@ test() @@ -329,6 +334,7 @@ test()
if (fd < 0) {
PX4_ERR("%s open failed (try 'ets_airspeed start' if the driver is not running", ETS_PATH);
return PX4_ERROR;
}
/* do a simple demand read */
@ -336,6 +342,7 @@ test() @@ -336,6 +342,7 @@ test()
if (sz != sizeof(report)) {
PX4_ERR("immediate read failed");
return PX4_ERROR;
}
PX4_INFO("single read");
@ -344,6 +351,7 @@ test() @@ -344,6 +351,7 @@ test()
/* start the sensor polling at 2Hz */
if (OK != px4_ioctl(fd, SENSORIOCSPOLLRATE, 2)) {
PX4_ERR("failed to set 2Hz poll rate");
return PX4_ERROR;
}
/* read the sensor 5x and report each value */
@ -373,44 +381,52 @@ test() @@ -373,44 +381,52 @@ test()
/* reset the sensor polling to its default rate */
if (OK != px4_ioctl(fd, SENSORIOCSPOLLRATE, SENSOR_POLLRATE_DEFAULT)) {
PX4_ERR("failed to set default rate");
return PX4_ERROR;
}
errx(0, "PASS");
return PX4_OK;
}
/**
* Reset the driver.
*/
void
int
reset()
{
int fd = px4_open(ETS_PATH, O_RDONLY);
if (fd < 0) {
PX4_ERR("failed ");
return PX4_ERROR;
}
if (px4_ioctl(fd, SENSORIOCRESET, 0) < 0) {
PX4_ERR("driver reset failed");
return PX4_ERROR;
}
if (px4_ioctl(fd, SENSORIOCSPOLLRATE, SENSOR_POLLRATE_DEFAULT) < 0) {
PX4_ERR("driver poll restart failed");
return PX4_ERROR;
}
return PX4_OK;
}
/**
* Print a little info about the driver.
*/
void
int
info()
{
if (g_dev == nullptr) {
PX4_ERR("driver not running");
return PX4_ERROR;
}
PX4_INFO("state @ %p", g_dev);
g_dev->print_info();
return PX4_OK;
}
} // namespace
@ -445,35 +461,35 @@ ets_airspeed_main(int argc, char *argv[]) @@ -445,35 +461,35 @@ ets_airspeed_main(int argc, char *argv[])
* Start/load the driver.
*/
if (!strcmp(argv[1], "start")) {
ets_airspeed::start(i2c_bus);
return ets_airspeed::start(i2c_bus);
}
/*
* Stop the driver
*/
if (!strcmp(argv[1], "stop")) {
ets_airspeed::stop();
return ets_airspeed::stop();
}
/*
* Test the driver/device.
*/
if (!strcmp(argv[1], "test")) {
ets_airspeed::test();
return ets_airspeed::test();
}
/*
* Reset the driver.
*/
if (!strcmp(argv[1], "reset")) {
ets_airspeed::reset();
return ets_airspeed::reset();
}
/*
* Print driver information.
*/
if (!strcmp(argv[1], "info") || !strcmp(argv[1], "status")) {
ets_airspeed::info();
return ets_airspeed::info();
}
ets_airspeed_usage();

57
src/drivers/ms4525_airspeed/ms4525_airspeed.cpp

@ -382,11 +382,11 @@ namespace meas_airspeed @@ -382,11 +382,11 @@ namespace meas_airspeed
MEASAirspeed *g_dev = nullptr;
void start(int i2c_bus);
void stop();
void test();
void reset();
void info();
int start(int i2c_bus);
int stop();
int test();
int reset();
int info();
/**
* Start the driver.
@ -394,13 +394,14 @@ void info(); @@ -394,13 +394,14 @@ void info();
* This function call only returns once the driver is up and running
* or failed to detect the sensor.
*/
void
int
start(int i2c_bus)
{
int fd;
if (g_dev != nullptr) {
PX4_ERR("already started");
return PX4_ERROR;
}
/* create the driver, try the MS4525DO first */
@ -413,7 +414,6 @@ start(int i2c_bus) @@ -413,7 +414,6 @@ start(int i2c_bus)
/* both versions failed if the init for the MS5525DSO fails, give up */
if (OK != g_dev->Airspeed::init()) {
PX4_ERR("init fail");
goto fail;
}
@ -428,7 +428,7 @@ start(int i2c_bus) @@ -428,7 +428,7 @@ start(int i2c_bus)
goto fail;
}
return;
return PX4_OK;
fail:
@ -437,13 +437,14 @@ fail: @@ -437,13 +437,14 @@ fail:
g_dev = nullptr;
}
PX4_WARN("no MS4525 airspeed sensor connected");
PX4_WARN("no MS4525 airspeed sensor connected on bus %d", i2c_bus);
return PX4_ERROR;
}
/**
* Stop the driver
*/
void
int
stop()
{
if (g_dev != nullptr) {
@ -452,7 +453,10 @@ stop() @@ -452,7 +453,10 @@ stop()
} else {
PX4_ERR("driver not running");
return PX4_ERROR;
}
return PX4_OK;
}
/**
@ -460,7 +464,7 @@ stop() @@ -460,7 +464,7 @@ stop()
* make sure we can collect data from the sensor in polled
* and automatic modes.
*/
void
int
test()
{
struct differential_pressure_s report;
@ -471,6 +475,7 @@ test() @@ -471,6 +475,7 @@ test()
if (fd < 0) {
PX4_ERR("%s open failed (try 'meas_airspeed start' if the driver is not running", PATH_MS4525);
return PX4_ERROR;
}
/* do a simple demand read */
@ -478,6 +483,7 @@ test() @@ -478,6 +483,7 @@ test()
if (sz != sizeof(report)) {
PX4_ERR("immediate read failed");
return PX4_ERROR;
}
PX4_INFO("single read");
@ -486,6 +492,7 @@ test() @@ -486,6 +492,7 @@ test()
/* start the sensor polling at 2Hz */
if (OK != px4_ioctl(fd, SENSORIOCSPOLLRATE, 2)) {
PX4_ERR("failed to set 2Hz poll rate");
return PX4_ERROR;
}
/* read the sensor 5x and report each value */
@ -506,6 +513,7 @@ test() @@ -506,6 +513,7 @@ test()
if (sz != sizeof(report)) {
PX4_ERR("periodic read failed");
return PX4_ERROR;
}
PX4_INFO("periodic read %u", i);
@ -516,42 +524,53 @@ test() @@ -516,42 +524,53 @@ test()
/* reset the sensor polling to its default rate */
if (OK != px4_ioctl(fd, SENSORIOCSPOLLRATE, SENSOR_POLLRATE_DEFAULT)) {
PX4_ERR("failed to set default rate");
return PX4_ERROR;
}
return PX4_OK;
}
/**
* Reset the driver.
*/
void
int
reset()
{
int fd = px4_open(PATH_MS4525, O_RDONLY);
if (fd < 0) {
PX4_ERR("failed ");
return PX4_ERROR;
}
if (px4_ioctl(fd, SENSORIOCRESET, 0) < 0) {
PX4_ERR("driver reset failed");
return PX4_ERROR;
}
if (px4_ioctl(fd, SENSORIOCSPOLLRATE, SENSOR_POLLRATE_DEFAULT) < 0) {
PX4_ERR("driver poll restart failed");
return PX4_ERROR;
}
return PX4_OK;
}
/**
* Print a little info about the driver.
*/
void
int
info()
{
if (g_dev == nullptr) {
PX4_ERR("driver not running");
return PX4_ERROR;
}
PX4_INFO("state @ %p", g_dev);
g_dev->print_info();
return PX4_OK;
}
} // namespace
@ -586,38 +605,38 @@ ms4525_airspeed_main(int argc, char *argv[]) @@ -586,38 +605,38 @@ ms4525_airspeed_main(int argc, char *argv[])
* Start/load the driver.
*/
if (!strcmp(argv[1], "start")) {
meas_airspeed::start(i2c_bus);
return meas_airspeed::start(i2c_bus);
}
/*
* Stop the driver
*/
if (!strcmp(argv[1], "stop")) {
meas_airspeed::stop();
return meas_airspeed::stop();
}
/*
* Test the driver/device.
*/
if (!strcmp(argv[1], "test")) {
meas_airspeed::test();
return meas_airspeed::test();
}
/*
* Reset the driver.
*/
if (!strcmp(argv[1], "reset")) {
meas_airspeed::reset();
return meas_airspeed::reset();
}
/*
* Print driver information.
*/
if (!strcmp(argv[1], "info") || !strcmp(argv[1], "status")) {
meas_airspeed::info();
return meas_airspeed::info();
}
meas_airspeed_usage();
return 0;
return PX4_OK;
}

54
src/drivers/ms5525_airspeed/MS5525_main.cpp

@ -41,15 +41,15 @@ namespace ms5525_airspeed @@ -41,15 +41,15 @@ namespace ms5525_airspeed
{
MS5525 *g_dev = nullptr;
void start(uint8_t i2c_bus);
void stop();
void test();
void reset();
int start(uint8_t i2c_bus);
int stop();
int test();
int reset();
// Start the driver.
// This function call only returns once the driver is up and running
// or failed to detect the sensor.
void
int
start(uint8_t i2c_bus)
{
int fd = -1;
@ -70,8 +70,6 @@ start(uint8_t i2c_bus) @@ -70,8 +70,6 @@ start(uint8_t i2c_bus)
if (OK != g_dev->Airspeed::init()) {
delete g_dev;
PX4_WARN("trying MS5525 address 2");
g_dev = new MS5525(i2c_bus, I2C_ADDRESS_2_MS5525DSO, PATH_MS5525);
/* check if the MS5525DSO was instantiated */
@ -82,7 +80,6 @@ start(uint8_t i2c_bus) @@ -82,7 +80,6 @@ start(uint8_t i2c_bus)
/* both versions failed if the init for the MS5525DSO fails, give up */
if (OK != g_dev->Airspeed::init()) {
PX4_WARN("MS5525 init fail");
goto fail;
}
}
@ -98,7 +95,7 @@ start(uint8_t i2c_bus) @@ -98,7 +95,7 @@ start(uint8_t i2c_bus)
goto fail;
}
return;
return PX4_OK;
fail:
@ -107,11 +104,12 @@ fail: @@ -107,11 +104,12 @@ fail:
g_dev = nullptr;
}
PX4_WARN("no MS5525 airspeed sensor connected");
PX4_WARN("no MS5525 airspeed sensor connected on bus %d", i2c_bus);
return PX4_ERROR;
}
// stop the driver
void stop()
int stop()
{
if (g_dev != nullptr) {
delete g_dev;
@ -119,19 +117,22 @@ void stop() @@ -119,19 +117,22 @@ void stop()
} else {
PX4_ERR("driver not running");
return PX4_ERROR;
}
return PX4_OK;
}
// perform some basic functional tests on the driver;
// make sure we can collect data from the sensor in polled
// and automatic modes.
void test()
int test()
{
int fd = px4_open(PATH_MS5525, O_RDONLY);
if (fd < 0) {
PX4_WARN("%s open failed (try 'ms5525_airspeed start' if the driver is not running", PATH_MS5525);
return;
return PX4_ERROR;
}
// do a simple demand read
@ -140,7 +141,7 @@ void test() @@ -140,7 +141,7 @@ void test()
if (sz != sizeof(report)) {
PX4_WARN("immediate read failed");
return;
return PX4_ERROR;
}
PX4_WARN("single read");
@ -149,7 +150,7 @@ void test() @@ -149,7 +150,7 @@ void test()
/* start the sensor polling at 2Hz */
if (OK != px4_ioctl(fd, SENSORIOCSPOLLRATE, 2)) {
PX4_WARN("failed to set 2Hz poll rate");
return;
return PX4_ERROR;
}
/* read the sensor 5x and report each value */
@ -163,6 +164,7 @@ void test() @@ -163,6 +164,7 @@ void test()
if (ret != 1) {
PX4_ERR("timed out");
return PX4_ERROR;
}
/* now go get it */
@ -170,6 +172,7 @@ void test() @@ -170,6 +172,7 @@ void test()
if (sz != sizeof(report)) {
PX4_ERR("periodic read failed");
return PX4_ERROR;
}
PX4_WARN("periodic read %u", i);
@ -180,28 +183,33 @@ void test() @@ -180,28 +183,33 @@ void test()
/* reset the sensor polling to its default rate */
if (PX4_OK != px4_ioctl(fd, SENSORIOCSPOLLRATE, SENSOR_POLLRATE_DEFAULT)) {
PX4_WARN("failed to set default rate");
return PX4_ERROR;
}
return PX4_OK;
}
// reset the driver
void reset()
int reset()
{
int fd = px4_open(PATH_MS5525, O_RDONLY);
if (fd < 0) {
PX4_ERR("failed ");
return;
return PX4_ERROR;
}
if (px4_ioctl(fd, SENSORIOCRESET, 0) < 0) {
PX4_ERR("driver reset failed");
return;
return PX4_ERROR;
}
if (px4_ioctl(fd, SENSORIOCSPOLLRATE, SENSOR_POLLRATE_DEFAULT) < 0) {
PX4_ERR("driver poll restart failed");
return;
return PX4_ERROR;
}
return PX4_OK;
}
} // namespace ms5525_airspeed
@ -234,28 +242,28 @@ ms5525_airspeed_main(int argc, char *argv[]) @@ -234,28 +242,28 @@ ms5525_airspeed_main(int argc, char *argv[])
* Start/load the driver.
*/
if (!strcmp(argv[1], "start")) {
ms5525_airspeed::start(i2c_bus);
return ms5525_airspeed::start(i2c_bus);
}
/*
* Stop the driver
*/
if (!strcmp(argv[1], "stop")) {
ms5525_airspeed::stop();
return ms5525_airspeed::stop();
}
/*
* Test the driver/device.
*/
if (!strcmp(argv[1], "test")) {
ms5525_airspeed::test();
return ms5525_airspeed::test();
}
/*
* Reset the driver.
*/
if (!strcmp(argv[1], "reset")) {
ms5525_airspeed::reset();
return ms5525_airspeed::reset();
}
ms5525_airspeed_usage();

1
src/drivers/sdp3x_airspeed/SDP3X.cpp

@ -66,7 +66,6 @@ SDP3X::init_sdp3x() @@ -66,7 +66,6 @@ SDP3X::init_sdp3x()
if (ret != PX4_OK) {
perf_count(_comms_errors);
PX4_ERR("reset failed");
return false;
}

68
src/drivers/sdp3x_airspeed/SDP3X_main.cpp

@ -41,22 +41,23 @@ namespace sdp3x_airspeed @@ -41,22 +41,23 @@ namespace sdp3x_airspeed
{
SDP3X *g_dev = nullptr;
void start(int i2c_bus);
void stop();
void test();
void reset();
void info();
int start(int i2c_bus);
int stop();
int test();
int reset();
int info();
// Start the driver.
// This function call only returns once the driver is up and running
// or failed to detect the sensor.
void
int
start(int i2c_bus)
{
int fd = -1;
if (g_dev != nullptr) {
errx(1, "already started");
PX4_WARN("driver already started");
return PX4_ERROR;
}
g_dev = new SDP3X(i2c_bus, I2C_ADDRESS_1_SDP3X, PATH_SDP3X);
@ -70,19 +71,16 @@ start(int i2c_bus) @@ -70,19 +71,16 @@ start(int i2c_bus)
if (OK != g_dev->Airspeed::init()) {
delete g_dev;
PX4_WARN("trying SDP3X 2");
g_dev = new SDP3X(i2c_bus, I2C_ADDRESS_2_SDP3X, PATH_SDP3X);
/* check if the SDP3XDSO was instantiated */
if (g_dev == nullptr) {
PX4_WARN("SDP3X was not instantiated");
PX4_ERR("SDP3X was not instantiated (RAM)");
goto fail;
}
/* both versions failed if the init for the SDP3XDSO fails, give up */
if (OK != g_dev->Airspeed::init()) {
PX4_WARN("SDP3X init fail");
goto fail;
}
}
@ -98,7 +96,7 @@ start(int i2c_bus) @@ -98,7 +96,7 @@ start(int i2c_bus)
goto fail;
}
return;
return PX4_OK;
fail:
@ -107,11 +105,12 @@ fail: @@ -107,11 +105,12 @@ fail:
g_dev = nullptr;
}
PX4_WARN("no SDP3X airspeed sensor connected");
PX4_WARN("no SDP3X airspeed sensor connected on bus %d", i2c_bus);
return PX4_ERROR;
}
// stop the driver
void stop()
int stop()
{
if (g_dev != nullptr) {
delete g_dev;
@ -119,19 +118,22 @@ void stop() @@ -119,19 +118,22 @@ void stop()
} else {
PX4_ERR("driver not running");
return PX4_ERROR;
}
return PX4_OK;
}
// perform some basic functional tests on the driver;
// make sure we can collect data from the sensor in polled
// and automatic modes.
void test()
int test()
{
int fd = px4_open(PATH_SDP3X, O_RDONLY);
if (fd < 0) {
PX4_WARN("%s open failed (try 'sdp3x_airspeed start' if the driver is not running", PATH_SDP3X);
return;
return PX4_ERROR;
}
// do a simple demand read
@ -140,7 +142,7 @@ void test() @@ -140,7 +142,7 @@ void test()
if (sz != sizeof(report)) {
PX4_WARN("immediate read failed");
return;
return PX4_ERROR;
}
PX4_WARN("single read");
@ -149,7 +151,7 @@ void test() @@ -149,7 +151,7 @@ void test()
/* start the sensor polling at 2Hz */
if (OK != px4_ioctl(fd, SENSORIOCSPOLLRATE, 2)) {
PX4_WARN("failed to set 2Hz poll rate");
return;
return PX4_ERROR;
}
/* read the sensor 5x and report each value */
@ -163,6 +165,7 @@ void test() @@ -163,6 +165,7 @@ void test()
if (ret != 1) {
PX4_ERR("timed out");
return PX4_ERROR;
}
/* now go get it */
@ -170,6 +173,7 @@ void test() @@ -170,6 +173,7 @@ void test()
if (sz != sizeof(report)) {
PX4_ERR("periodic read failed");
return PX4_ERROR;
}
PX4_WARN("periodic read %u", i);
@ -180,41 +184,47 @@ void test() @@ -180,41 +184,47 @@ void test()
/* reset the sensor polling to its default rate */
if (PX4_OK != px4_ioctl(fd, SENSORIOCSPOLLRATE, SENSOR_POLLRATE_DEFAULT)) {
PX4_WARN("failed to set default rate");
return;
return PX4_ERROR;
}
return PX4_OK;
}
// reset the driver
void reset()
int reset()
{
int fd = px4_open(PATH_SDP3X, O_RDONLY);
if (fd < 0) {
PX4_ERR("failed ");
return;
return PX4_ERROR;
}
if (px4_ioctl(fd, SENSORIOCRESET, 0) < 0) {
PX4_ERR("driver reset failed");
return;
return PX4_ERROR;
}
if (px4_ioctl(fd, SENSORIOCSPOLLRATE, SENSOR_POLLRATE_DEFAULT) < 0) {
PX4_ERR("driver poll restart failed");
return;
return PX4_ERROR;
}
return PX4_OK;
}
// print a little info about the driver
void
int
info()
{
if (g_dev == nullptr) {
PX4_ERR("driver not running");
return PX4_ERROR;
}
PX4_INFO("state @ %p", g_dev);
g_dev->print_info();
return PX4_OK;
}
} // namespace sdp3x_airspeed
@ -247,35 +257,35 @@ sdp3x_airspeed_main(int argc, char *argv[]) @@ -247,35 +257,35 @@ sdp3x_airspeed_main(int argc, char *argv[])
* Start/load the driver.
*/
if (!strcmp(argv[1], "start")) {
sdp3x_airspeed::start(i2c_bus);
return sdp3x_airspeed::start(i2c_bus);
}
/*
* Stop the driver
*/
if (!strcmp(argv[1], "stop")) {
sdp3x_airspeed::stop();
return sdp3x_airspeed::stop();
}
/*
* Test the driver/device.
*/
if (!strcmp(argv[1], "test")) {
sdp3x_airspeed::test();
return sdp3x_airspeed::test();
}
/*
* Reset the driver.
*/
if (!strcmp(argv[1], "reset")) {
sdp3x_airspeed::reset();
return sdp3x_airspeed::reset();
}
/*
* Print driver information.
*/
if (!strcmp(argv[1], "info") || !strcmp(argv[1], "status")) {
sdp3x_airspeed::info();
return sdp3x_airspeed::info();
}
sdp3x_airspeed_usage();

Loading…
Cancel
Save