mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-27 17:13:34 +08:00
drivers: use updated I2C SPI driver interface
This commit is contained in:
@@ -36,18 +36,15 @@
|
||||
#include "BMI055_Accelerometer.hpp"
|
||||
#include "BMI055_Gyroscope.hpp"
|
||||
|
||||
I2CSPIDriverBase *BMI055::instantiate(const BusCLIArguments &cli, const BusInstanceIterator &iterator,
|
||||
int runtime_instance)
|
||||
I2CSPIDriverBase *BMI055::instantiate(const I2CSPIDriverConfig &config, int runtime_instance)
|
||||
{
|
||||
BMI055 *instance = nullptr;
|
||||
|
||||
if (cli.type == DRV_ACC_DEVTYPE_BMI055) {
|
||||
instance = new Bosch::BMI055::Accelerometer::BMI055_Accelerometer(iterator.configuredBusOption(), iterator.bus(),
|
||||
iterator.devid(), cli.rotation, cli.bus_frequency, cli.spi_mode, iterator.DRDYGPIO());
|
||||
if (config.devid_driver_index == DRV_ACC_DEVTYPE_BMI055) {
|
||||
instance = new Bosch::BMI055::Accelerometer::BMI055_Accelerometer(config);
|
||||
|
||||
} else if (cli.type == DRV_GYR_DEVTYPE_BMI055) {
|
||||
instance = new Bosch::BMI055::Gyroscope::BMI055_Gyroscope(iterator.configuredBusOption(), iterator.bus(),
|
||||
iterator.devid(), cli.rotation, cli.bus_frequency, cli.spi_mode, iterator.DRDYGPIO());
|
||||
} else if (config.devid_driver_index == DRV_GYR_DEVTYPE_BMI055) {
|
||||
instance = new Bosch::BMI055::Gyroscope::BMI055_Gyroscope(config);
|
||||
}
|
||||
|
||||
if (!instance) {
|
||||
@@ -63,11 +60,10 @@ I2CSPIDriverBase *BMI055::instantiate(const BusCLIArguments &cli, const BusInsta
|
||||
return instance;
|
||||
}
|
||||
|
||||
BMI055::BMI055(uint8_t devtype, const char *name, I2CSPIBusOption bus_option, int bus, uint32_t device,
|
||||
enum spi_mode_e mode, uint32_t frequency, spi_drdy_gpio_t drdy_gpio) :
|
||||
SPI(devtype, name, bus, device, mode, frequency),
|
||||
I2CSPIDriver(MODULE_NAME, px4::device_bus_to_wq(get_device_id()), bus_option, bus, devtype),
|
||||
_drdy_gpio(drdy_gpio)
|
||||
BMI055::BMI055(const I2CSPIDriverConfig &config) :
|
||||
SPI(config),
|
||||
I2CSPIDriver(config),
|
||||
_drdy_gpio(config.drdy_gpio)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -43,13 +43,11 @@ static constexpr int16_t combine(uint8_t msb, uint8_t lsb) { return (msb << 8u)
|
||||
class BMI055 : public device::SPI, public I2CSPIDriver<BMI055>
|
||||
{
|
||||
public:
|
||||
BMI055(uint8_t devtype, const char *name, I2CSPIBusOption bus_option, int bus, uint32_t device, enum spi_mode_e mode,
|
||||
uint32_t frequency, spi_drdy_gpio_t drdy_gpio);
|
||||
BMI055(const I2CSPIDriverConfig &config);
|
||||
|
||||
virtual ~BMI055() = default;
|
||||
|
||||
static I2CSPIDriverBase *instantiate(const BusCLIArguments &cli, const BusInstanceIterator &iterator,
|
||||
int runtime_instance);
|
||||
static I2CSPIDriverBase *instantiate(const I2CSPIDriverConfig &config, int runtime_instance);
|
||||
static void print_usage();
|
||||
|
||||
virtual void RunImpl() = 0;
|
||||
|
||||
@@ -40,12 +40,11 @@ using namespace time_literals;
|
||||
namespace Bosch::BMI055::Accelerometer
|
||||
{
|
||||
|
||||
BMI055_Accelerometer::BMI055_Accelerometer(I2CSPIBusOption bus_option, int bus, uint32_t device, enum Rotation rotation,
|
||||
int bus_frequency, spi_mode_e spi_mode, spi_drdy_gpio_t drdy_gpio) :
|
||||
BMI055(DRV_ACC_DEVTYPE_BMI055, "BMI055_Accelerometer", bus_option, bus, device, spi_mode, bus_frequency, drdy_gpio),
|
||||
_px4_accel(get_device_id(), rotation)
|
||||
BMI055_Accelerometer::BMI055_Accelerometer(const I2CSPIDriverConfig &config) :
|
||||
BMI055(config),
|
||||
_px4_accel(get_device_id(), config.rotation)
|
||||
{
|
||||
if (drdy_gpio != 0) {
|
||||
if (config.drdy_gpio != 0) {
|
||||
_drdy_missed_perf = perf_alloc(PC_COUNT, MODULE_NAME"_accel: DRDY missed");
|
||||
}
|
||||
|
||||
|
||||
@@ -45,8 +45,7 @@ namespace Bosch::BMI055::Accelerometer
|
||||
class BMI055_Accelerometer : public BMI055
|
||||
{
|
||||
public:
|
||||
BMI055_Accelerometer(I2CSPIBusOption bus_option, int bus, uint32_t device, enum Rotation rotation, int bus_frequency,
|
||||
spi_mode_e spi_mode, spi_drdy_gpio_t drdy_gpio);
|
||||
BMI055_Accelerometer(const I2CSPIDriverConfig &config);
|
||||
~BMI055_Accelerometer() override;
|
||||
|
||||
void RunImpl() override;
|
||||
|
||||
@@ -40,12 +40,11 @@ using namespace time_literals;
|
||||
namespace Bosch::BMI055::Gyroscope
|
||||
{
|
||||
|
||||
BMI055_Gyroscope::BMI055_Gyroscope(I2CSPIBusOption bus_option, int bus, uint32_t device, enum Rotation rotation,
|
||||
int bus_frequency, spi_mode_e spi_mode, spi_drdy_gpio_t drdy_gpio) :
|
||||
BMI055(DRV_GYR_DEVTYPE_BMI055, "BMI055_Gyroscope", bus_option, bus, device, spi_mode, bus_frequency, drdy_gpio),
|
||||
_px4_gyro(get_device_id(), rotation)
|
||||
BMI055_Gyroscope::BMI055_Gyroscope(const I2CSPIDriverConfig &config) :
|
||||
BMI055(config),
|
||||
_px4_gyro(get_device_id(), config.rotation)
|
||||
{
|
||||
if (drdy_gpio != 0) {
|
||||
if (config.drdy_gpio != 0) {
|
||||
_drdy_missed_perf = perf_alloc(PC_COUNT, MODULE_NAME"_gyro: DRDY missed");
|
||||
}
|
||||
|
||||
|
||||
@@ -45,8 +45,7 @@ namespace Bosch::BMI055::Gyroscope
|
||||
class BMI055_Gyroscope : public BMI055
|
||||
{
|
||||
public:
|
||||
BMI055_Gyroscope(I2CSPIBusOption bus_option, int bus, uint32_t device, enum Rotation rotation, int bus_frequency,
|
||||
spi_mode_e spi_mode, spi_drdy_gpio_t drdy_gpio);
|
||||
BMI055_Gyroscope(const I2CSPIDriverConfig &config);
|
||||
~BMI055_Gyroscope() override;
|
||||
|
||||
void RunImpl() override;
|
||||
|
||||
@@ -53,17 +53,20 @@ extern "C" int bmi055_main(int argc, char *argv[])
|
||||
int ch;
|
||||
using ThisDriver = BMI055;
|
||||
BusCLIArguments cli{false, true};
|
||||
cli.type = 0;
|
||||
uint16_t type = 0;
|
||||
cli.default_spi_frequency = 10000000;
|
||||
const char *name = MODULE_NAME;
|
||||
|
||||
while ((ch = cli.getOpt(argc, argv, "AGR:")) != EOF) {
|
||||
switch (ch) {
|
||||
case 'A':
|
||||
cli.type = DRV_ACC_DEVTYPE_BMI055;
|
||||
type = DRV_ACC_DEVTYPE_BMI055;
|
||||
name = MODULE_NAME "_accel";
|
||||
break;
|
||||
|
||||
case 'G':
|
||||
cli.type = DRV_GYR_DEVTYPE_BMI055;
|
||||
type = DRV_GYR_DEVTYPE_BMI055;
|
||||
name = MODULE_NAME "_gyro";
|
||||
break;
|
||||
|
||||
case 'R':
|
||||
@@ -74,12 +77,12 @@ extern "C" int bmi055_main(int argc, char *argv[])
|
||||
|
||||
const char *verb = cli.optArg();
|
||||
|
||||
if (!verb) {
|
||||
if (!verb || type == 0) {
|
||||
ThisDriver::print_usage();
|
||||
return -1;
|
||||
}
|
||||
|
||||
BusInstanceIterator iterator(MODULE_NAME, cli, cli.type);
|
||||
BusInstanceIterator iterator(name, cli, type);
|
||||
|
||||
if (!strcmp(verb, "start")) {
|
||||
return ThisDriver::module_start(cli, iterator);
|
||||
|
||||
@@ -36,18 +36,15 @@
|
||||
#include "BMI088_Accelerometer.hpp"
|
||||
#include "BMI088_Gyroscope.hpp"
|
||||
|
||||
I2CSPIDriverBase *BMI088::instantiate(const BusCLIArguments &cli, const BusInstanceIterator &iterator,
|
||||
int runtime_instance)
|
||||
I2CSPIDriverBase *BMI088::instantiate(const I2CSPIDriverConfig &config, int runtime_instance)
|
||||
{
|
||||
BMI088 *instance = nullptr;
|
||||
|
||||
if (cli.type == DRV_ACC_DEVTYPE_BMI088) {
|
||||
instance = new Bosch::BMI088::Accelerometer::BMI088_Accelerometer(iterator.configuredBusOption(), iterator.bus(),
|
||||
iterator.devid(), cli.rotation, cli.bus_frequency, cli.spi_mode, iterator.DRDYGPIO());
|
||||
if (config.devid_driver_index == DRV_ACC_DEVTYPE_BMI088) {
|
||||
instance = new Bosch::BMI088::Accelerometer::BMI088_Accelerometer(config);
|
||||
|
||||
} else if (cli.type == DRV_GYR_DEVTYPE_BMI088) {
|
||||
instance = new Bosch::BMI088::Gyroscope::BMI088_Gyroscope(iterator.configuredBusOption(), iterator.bus(),
|
||||
iterator.devid(), cli.rotation, cli.bus_frequency, cli.spi_mode, iterator.DRDYGPIO());
|
||||
} else if (config.devid_driver_index == DRV_GYR_DEVTYPE_BMI088) {
|
||||
instance = new Bosch::BMI088::Gyroscope::BMI088_Gyroscope(config);
|
||||
}
|
||||
|
||||
if (!instance) {
|
||||
@@ -63,11 +60,10 @@ I2CSPIDriverBase *BMI088::instantiate(const BusCLIArguments &cli, const BusInsta
|
||||
return instance;
|
||||
}
|
||||
|
||||
BMI088::BMI088(uint8_t devtype, const char *name, I2CSPIBusOption bus_option, int bus, uint32_t device,
|
||||
enum spi_mode_e mode, uint32_t frequency, spi_drdy_gpio_t drdy_gpio) :
|
||||
SPI(devtype, name, bus, device, mode, frequency),
|
||||
I2CSPIDriver(MODULE_NAME, px4::device_bus_to_wq(get_device_id()), bus_option, bus, devtype),
|
||||
_drdy_gpio(drdy_gpio)
|
||||
BMI088::BMI088(const I2CSPIDriverConfig &config) :
|
||||
SPI(config),
|
||||
I2CSPIDriver(config),
|
||||
_drdy_gpio(config.drdy_gpio)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -43,13 +43,11 @@ static constexpr int16_t combine(uint8_t msb, uint8_t lsb) { return (msb << 8u)
|
||||
class BMI088 : public device::SPI, public I2CSPIDriver<BMI088>
|
||||
{
|
||||
public:
|
||||
BMI088(uint8_t devtype, const char *name, I2CSPIBusOption bus_option, int bus, uint32_t device, enum spi_mode_e mode,
|
||||
uint32_t frequency, spi_drdy_gpio_t drdy_gpio);
|
||||
BMI088(const I2CSPIDriverConfig &config);
|
||||
|
||||
virtual ~BMI088() = default;
|
||||
|
||||
static I2CSPIDriverBase *instantiate(const BusCLIArguments &cli, const BusInstanceIterator &iterator,
|
||||
int runtime_instance);
|
||||
static I2CSPIDriverBase *instantiate(const I2CSPIDriverConfig &config, int runtime_instance);
|
||||
static void print_usage();
|
||||
|
||||
virtual void RunImpl() = 0;
|
||||
|
||||
@@ -40,12 +40,11 @@ using namespace time_literals;
|
||||
namespace Bosch::BMI088::Accelerometer
|
||||
{
|
||||
|
||||
BMI088_Accelerometer::BMI088_Accelerometer(I2CSPIBusOption bus_option, int bus, uint32_t device, enum Rotation rotation,
|
||||
int bus_frequency, spi_mode_e spi_mode, spi_drdy_gpio_t drdy_gpio) :
|
||||
BMI088(DRV_ACC_DEVTYPE_BMI088, "BMI088_Accelerometer", bus_option, bus, device, spi_mode, bus_frequency, drdy_gpio),
|
||||
_px4_accel(get_device_id(), rotation)
|
||||
BMI088_Accelerometer::BMI088_Accelerometer(const I2CSPIDriverConfig &config) :
|
||||
BMI088(config),
|
||||
_px4_accel(get_device_id(), config.rotation)
|
||||
{
|
||||
if (drdy_gpio != 0) {
|
||||
if (config.drdy_gpio != 0) {
|
||||
_drdy_missed_perf = perf_alloc(PC_COUNT, MODULE_NAME"_accel: DRDY missed");
|
||||
}
|
||||
|
||||
|
||||
@@ -45,8 +45,7 @@ namespace Bosch::BMI088::Accelerometer
|
||||
class BMI088_Accelerometer : public BMI088
|
||||
{
|
||||
public:
|
||||
BMI088_Accelerometer(I2CSPIBusOption bus_option, int bus, uint32_t device, enum Rotation rotation, int bus_frequency,
|
||||
spi_mode_e spi_mode, spi_drdy_gpio_t drdy_gpio);
|
||||
BMI088_Accelerometer(const I2CSPIDriverConfig &config);
|
||||
~BMI088_Accelerometer() override;
|
||||
|
||||
void RunImpl() override;
|
||||
|
||||
@@ -40,12 +40,11 @@ using namespace time_literals;
|
||||
namespace Bosch::BMI088::Gyroscope
|
||||
{
|
||||
|
||||
BMI088_Gyroscope::BMI088_Gyroscope(I2CSPIBusOption bus_option, int bus, uint32_t device, enum Rotation rotation,
|
||||
int bus_frequency, spi_mode_e spi_mode, spi_drdy_gpio_t drdy_gpio) :
|
||||
BMI088(DRV_GYR_DEVTYPE_BMI088, "BMI088_Gyroscope", bus_option, bus, device, spi_mode, bus_frequency, drdy_gpio),
|
||||
_px4_gyro(get_device_id(), rotation)
|
||||
BMI088_Gyroscope::BMI088_Gyroscope(const I2CSPIDriverConfig &config) :
|
||||
BMI088(config),
|
||||
_px4_gyro(get_device_id(), config.rotation)
|
||||
{
|
||||
if (drdy_gpio != 0) {
|
||||
if (config.drdy_gpio != 0) {
|
||||
_drdy_missed_perf = perf_alloc(PC_COUNT, MODULE_NAME"_gyro: DRDY missed");
|
||||
}
|
||||
|
||||
|
||||
@@ -45,8 +45,7 @@ namespace Bosch::BMI088::Gyroscope
|
||||
class BMI088_Gyroscope : public BMI088
|
||||
{
|
||||
public:
|
||||
BMI088_Gyroscope(I2CSPIBusOption bus_option, int bus, uint32_t device, enum Rotation rotation, int bus_frequency,
|
||||
spi_mode_e spi_mode, spi_drdy_gpio_t drdy_gpio);
|
||||
BMI088_Gyroscope(const I2CSPIDriverConfig &config);
|
||||
~BMI088_Gyroscope() override;
|
||||
|
||||
void RunImpl() override;
|
||||
|
||||
@@ -36,18 +36,15 @@
|
||||
#include "BMI088_Accelerometer.hpp"
|
||||
#include "BMI088_Gyroscope.hpp"
|
||||
|
||||
I2CSPIDriverBase *BMI088::instantiate(const BusCLIArguments &cli, const BusInstanceIterator &iterator,
|
||||
int runtime_instance)
|
||||
I2CSPIDriverBase *BMI088::instantiate(const I2CSPIDriverConfig &config, int runtime_instance)
|
||||
{
|
||||
BMI088 *instance = nullptr;
|
||||
|
||||
if (cli.type == DRV_ACC_DEVTYPE_BMI088) {
|
||||
instance = new Bosch::BMI088::Accelerometer::BMI088_Accelerometer(iterator.configuredBusOption(), iterator.bus(),
|
||||
cli.i2c_address, cli.rotation, cli.bus_frequency, cli.spi_mode, iterator.DRDYGPIO());
|
||||
if (config.devid_driver_index == DRV_ACC_DEVTYPE_BMI088) {
|
||||
instance = new Bosch::BMI088::Accelerometer::BMI088_Accelerometer(config);
|
||||
|
||||
} else if (cli.type == DRV_GYR_DEVTYPE_BMI088) {
|
||||
instance = new Bosch::BMI088::Gyroscope::BMI088_Gyroscope(iterator.configuredBusOption(), iterator.bus(),
|
||||
cli.i2c_address, cli.rotation, cli.bus_frequency, cli.spi_mode, iterator.DRDYGPIO());
|
||||
} else if (config.devid_driver_index == DRV_GYR_DEVTYPE_BMI088) {
|
||||
instance = new Bosch::BMI088::Gyroscope::BMI088_Gyroscope(config);
|
||||
}
|
||||
|
||||
if (!instance) {
|
||||
@@ -63,11 +60,10 @@ I2CSPIDriverBase *BMI088::instantiate(const BusCLIArguments &cli, const BusInsta
|
||||
return instance;
|
||||
}
|
||||
|
||||
BMI088::BMI088(uint8_t devtype, const char *name, I2CSPIBusOption bus_option, int bus, uint32_t device,
|
||||
enum spi_mode_e mode, uint32_t frequency, spi_drdy_gpio_t drdy_gpio) :
|
||||
I2C(devtype, name, bus, device, frequency),
|
||||
I2CSPIDriver(MODULE_NAME, px4::device_bus_to_wq(get_device_id()), bus_option, bus, devtype),
|
||||
_drdy_gpio(drdy_gpio)
|
||||
BMI088::BMI088(const I2CSPIDriverConfig &config) :
|
||||
I2C(config),
|
||||
I2CSPIDriver(config),
|
||||
_drdy_gpio(config.drdy_gpio)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -43,13 +43,11 @@ static constexpr int16_t combine(uint8_t msb, uint8_t lsb) { return (msb << 8u)
|
||||
class BMI088 : public device::I2C, public I2CSPIDriver<BMI088>
|
||||
{
|
||||
public:
|
||||
BMI088(uint8_t devtype, const char *name, I2CSPIBusOption bus_option, int bus, uint32_t device, enum spi_mode_e mode,
|
||||
uint32_t frequency, spi_drdy_gpio_t drdy_gpio);
|
||||
BMI088(const I2CSPIDriverConfig &config);
|
||||
|
||||
virtual ~BMI088() = default;
|
||||
|
||||
static I2CSPIDriverBase *instantiate(const BusCLIArguments &cli, const BusInstanceIterator &iterator,
|
||||
int runtime_instance);
|
||||
static I2CSPIDriverBase *instantiate(const I2CSPIDriverConfig &config, int runtime_instance);
|
||||
static void print_usage();
|
||||
|
||||
virtual void RunImpl() = 0;
|
||||
|
||||
@@ -39,12 +39,11 @@ using namespace time_literals;
|
||||
|
||||
namespace Bosch::BMI088::Accelerometer
|
||||
{
|
||||
BMI088_Accelerometer::BMI088_Accelerometer(I2CSPIBusOption bus_option, int bus, uint32_t device, enum Rotation rotation,
|
||||
int bus_frequency, spi_mode_e spi_mode, spi_drdy_gpio_t drdy_gpio) :
|
||||
BMI088(DRV_ACC_DEVTYPE_BMI088, "BMI088_Accelerometer", bus_option, bus, device, spi_mode, bus_frequency, drdy_gpio),
|
||||
_px4_accel(get_device_id(), rotation)
|
||||
BMI088_Accelerometer::BMI088_Accelerometer(const I2CSPIDriverConfig &config) :
|
||||
BMI088(config),
|
||||
_px4_accel(get_device_id(), config.rotation)
|
||||
{
|
||||
if (drdy_gpio != 0) {
|
||||
if (config.drdy_gpio != 0) {
|
||||
_drdy_missed_perf = perf_alloc(PC_COUNT, MODULE_NAME"_accel: DRDY missed");
|
||||
}
|
||||
|
||||
|
||||
@@ -45,8 +45,7 @@ namespace Bosch::BMI088::Accelerometer
|
||||
class BMI088_Accelerometer : public BMI088
|
||||
{
|
||||
public:
|
||||
BMI088_Accelerometer(I2CSPIBusOption bus_option, int bus, uint32_t device, enum Rotation rotation, int bus_frequency,
|
||||
spi_mode_e spi_mode, spi_drdy_gpio_t drdy_gpio);
|
||||
BMI088_Accelerometer(const I2CSPIDriverConfig &config);
|
||||
~BMI088_Accelerometer() override;
|
||||
|
||||
void RunImpl() override;
|
||||
|
||||
@@ -40,12 +40,11 @@ using namespace time_literals;
|
||||
namespace Bosch::BMI088::Gyroscope
|
||||
{
|
||||
|
||||
BMI088_Gyroscope::BMI088_Gyroscope(I2CSPIBusOption bus_option, int bus, uint32_t device, enum Rotation rotation,
|
||||
int bus_frequency, spi_mode_e spi_mode, spi_drdy_gpio_t drdy_gpio) :
|
||||
BMI088(DRV_GYR_DEVTYPE_BMI088, "BMI088_Gyroscope", bus_option, bus, device, spi_mode, bus_frequency, drdy_gpio),
|
||||
_px4_gyro(get_device_id(), rotation)
|
||||
BMI088_Gyroscope::BMI088_Gyroscope(const I2CSPIDriverConfig &config) :
|
||||
BMI088(config),
|
||||
_px4_gyro(get_device_id(), config.rotation)
|
||||
{
|
||||
if (drdy_gpio != 0) {
|
||||
if (config.drdy_gpio != 0) {
|
||||
_drdy_missed_perf = perf_alloc(PC_COUNT, MODULE_NAME"_gyro: DRDY missed");
|
||||
}
|
||||
|
||||
|
||||
@@ -45,8 +45,7 @@ namespace Bosch::BMI088::Gyroscope
|
||||
class BMI088_Gyroscope : public BMI088
|
||||
{
|
||||
public:
|
||||
BMI088_Gyroscope(I2CSPIBusOption bus_option, int bus, uint32_t device, enum Rotation rotation, int bus_frequency,
|
||||
spi_mode_e spi_mode, spi_drdy_gpio_t drdy_gpio);
|
||||
BMI088_Gyroscope(const I2CSPIDriverConfig &config);
|
||||
~BMI088_Gyroscope() override;
|
||||
|
||||
void RunImpl() override;
|
||||
|
||||
@@ -45,7 +45,7 @@ void BMI088::print_usage()
|
||||
PRINT_MODULE_USAGE_PARAM_FLAG('A', "Accel", true);
|
||||
PRINT_MODULE_USAGE_PARAM_FLAG('G', "Gyro", true);
|
||||
PRINT_MODULE_USAGE_PARAMS_I2C_SPI_DRIVER(true, false);
|
||||
PRINT_MODULE_USAGE_PARAMS_I2C_ADDRESS(0x76);
|
||||
PRINT_MODULE_USAGE_PARAMS_I2C_ADDRESS(0x18);
|
||||
PRINT_MODULE_USAGE_PARAM_INT('R', 0, 0, 35, "Rotation", true);
|
||||
PRINT_MODULE_USAGE_DEFAULT_COMMANDS();
|
||||
}
|
||||
@@ -54,21 +54,24 @@ extern "C" int bmi088_i2c_main(int argc, char *argv[])
|
||||
{
|
||||
int ch;
|
||||
using ThisDriver = BMI088;
|
||||
BusCLIArguments cli{true, true};
|
||||
BusCLIArguments cli{true, false};
|
||||
cli.i2c_address = 0x18;
|
||||
cli.default_i2c_frequency = 400 * 1000;
|
||||
cli.default_spi_frequency = 400 * 1000;
|
||||
uint16_t type = 0;
|
||||
const char *name = MODULE_NAME;
|
||||
|
||||
|
||||
while ((ch = cli.getOpt(argc, argv, "AGR:")) != EOF) {
|
||||
switch (ch) {
|
||||
case 'A':
|
||||
cli.type = DRV_ACC_DEVTYPE_BMI088;
|
||||
type = DRV_ACC_DEVTYPE_BMI088;
|
||||
name = MODULE_NAME "_accel";
|
||||
cli.i2c_address = 0x18;
|
||||
break;
|
||||
|
||||
case 'G':
|
||||
cli.type = DRV_GYR_DEVTYPE_BMI088;
|
||||
type = DRV_GYR_DEVTYPE_BMI088;
|
||||
name = MODULE_NAME "_gyro";
|
||||
cli.i2c_address = 0x69;
|
||||
break;
|
||||
|
||||
@@ -80,12 +83,12 @@ extern "C" int bmi088_i2c_main(int argc, char *argv[])
|
||||
|
||||
const char *verb = cli.optArg();
|
||||
|
||||
if (!verb) {
|
||||
if (!verb || type == 0) {
|
||||
ThisDriver::print_usage();
|
||||
return -1;
|
||||
}
|
||||
|
||||
BusInstanceIterator iterator(MODULE_NAME, cli, cli.type);
|
||||
BusInstanceIterator iterator(name, cli, type);
|
||||
|
||||
if (!strcmp(verb, "start")) {
|
||||
return ThisDriver::module_start(cli, iterator);
|
||||
|
||||
@@ -53,17 +53,20 @@ extern "C" int bmi088_main(int argc, char *argv[])
|
||||
int ch;
|
||||
using ThisDriver = BMI088;
|
||||
BusCLIArguments cli{false, true};
|
||||
cli.type = 0;
|
||||
uint16_t type = 0;
|
||||
cli.default_spi_frequency = 10000000;
|
||||
const char *name = MODULE_NAME;
|
||||
|
||||
while ((ch = cli.getOpt(argc, argv, "AGR:")) != EOF) {
|
||||
switch (ch) {
|
||||
case 'A':
|
||||
cli.type = DRV_ACC_DEVTYPE_BMI088;
|
||||
type = DRV_ACC_DEVTYPE_BMI088;
|
||||
name = MODULE_NAME "_accel";
|
||||
break;
|
||||
|
||||
case 'G':
|
||||
cli.type = DRV_GYR_DEVTYPE_BMI088;
|
||||
type = DRV_GYR_DEVTYPE_BMI088;
|
||||
name = MODULE_NAME "_gyro";
|
||||
break;
|
||||
|
||||
case 'R':
|
||||
@@ -74,12 +77,12 @@ extern "C" int bmi088_main(int argc, char *argv[])
|
||||
|
||||
const char *verb = cli.optArg();
|
||||
|
||||
if (!verb) {
|
||||
if (!verb || type == 0) {
|
||||
ThisDriver::print_usage();
|
||||
return -1;
|
||||
}
|
||||
|
||||
BusInstanceIterator iterator(MODULE_NAME, cli, cli.type);
|
||||
BusInstanceIterator iterator(name, cli, type);
|
||||
|
||||
if (!strcmp(verb, "start")) {
|
||||
return ThisDriver::module_start(cli, iterator);
|
||||
|
||||
Reference in New Issue
Block a user