mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-18 07:23:34 +08:00
drivers: use updated I2C SPI driver interface
This commit is contained in:
@@ -41,10 +41,10 @@
|
||||
#include "ina226.h"
|
||||
|
||||
|
||||
INA226::INA226(I2CSPIBusOption bus_option, const int bus, int bus_frequency, int address, int battery_index) :
|
||||
I2C(DRV_POWER_DEVTYPE_INA226, MODULE_NAME, bus, address, bus_frequency),
|
||||
INA226::INA226(const I2CSPIDriverConfig &config, int battery_index) :
|
||||
I2C(config),
|
||||
ModuleParams(nullptr),
|
||||
I2CSPIDriver(MODULE_NAME, px4::device_bus_to_wq(get_device_id()), bus_option, bus, address),
|
||||
I2CSPIDriver(config),
|
||||
_sample_perf(perf_alloc(PC_ELAPSED, "ina226_read")),
|
||||
_comms_errors(perf_alloc(PC_COUNT, "ina226_com_err")),
|
||||
_collection_errors(perf_alloc(PC_COUNT, "ina226_collection_err")),
|
||||
|
||||
@@ -152,11 +152,10 @@ using namespace time_literals;
|
||||
class INA226 : public device::I2C, public ModuleParams, public I2CSPIDriver<INA226>
|
||||
{
|
||||
public:
|
||||
INA226(I2CSPIBusOption bus_option, const int bus, int bus_frequency, int address, int battery_index);
|
||||
INA226(const I2CSPIDriverConfig &config, int battery_index);
|
||||
virtual ~INA226();
|
||||
|
||||
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();
|
||||
|
||||
void RunImpl();
|
||||
|
||||
@@ -35,20 +35,18 @@
|
||||
|
||||
#include "ina226.h"
|
||||
|
||||
I2CSPIDriverBase *INA226::instantiate(const BusCLIArguments &cli, const BusInstanceIterator &iterator,
|
||||
int runtime_instance)
|
||||
I2CSPIDriverBase *INA226::instantiate(const I2CSPIDriverConfig &config, int runtime_instance)
|
||||
{
|
||||
INA226 *instance = new INA226(iterator.configuredBusOption(), iterator.bus(), cli.bus_frequency, cli.i2c_address,
|
||||
cli.custom2);
|
||||
INA226 *instance = new INA226(config, config.custom1);
|
||||
|
||||
if (instance == nullptr) {
|
||||
PX4_ERR("alloc failed");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (cli.keep_running) {
|
||||
if (config.keep_running) {
|
||||
if (instance->force_init() != PX4_OK) {
|
||||
PX4_INFO("Failed to init INA226 on bus %d, but will try again periodically.", iterator.bus());
|
||||
PX4_INFO("Failed to init INA226 on bus %d, but will try again periodically.", config.bus);
|
||||
}
|
||||
|
||||
} else if (instance->init() != PX4_OK) {
|
||||
@@ -97,12 +95,12 @@ ina226_main(int argc, char *argv[])
|
||||
cli.i2c_address = INA226_BASEADDR;
|
||||
cli.default_i2c_frequency = 100000;
|
||||
cli.support_keep_running = true;
|
||||
cli.custom2 = 1;
|
||||
cli.custom1 = 1;
|
||||
|
||||
while ((ch = cli.getOpt(argc, argv, "t:")) != EOF) {
|
||||
switch (ch) {
|
||||
case 't': // battery index
|
||||
cli.custom2 = (int)strtol(cli.optArg(), NULL, 0);
|
||||
cli.custom1 = (int)strtol(cli.optArg(), NULL, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,13 +47,13 @@
|
||||
* Address 0x44 - measures battery voltage and current with a 0.0005 ohm sense resistor
|
||||
* Address 0x45 - measures 5VDC/12VDC ouptut voltage and current with a 0.005 ohm sense resistor
|
||||
*/
|
||||
VOXLPM::VOXLPM(I2CSPIBusOption bus_option, const int bus, int bus_frequency, VOXLPM_CH_TYPE ch_type) :
|
||||
I2C(DRV_POWER_DEVTYPE_VOXLPM, MODULE_NAME, bus, VOXLPM_INA231_ADDR_VBATT, bus_frequency),
|
||||
VOXLPM::VOXLPM(const I2CSPIDriverConfig &config) :
|
||||
I2C(config),
|
||||
ModuleParams(nullptr),
|
||||
I2CSPIDriver(MODULE_NAME, px4::device_bus_to_wq(get_device_id()), bus_option, bus),
|
||||
I2CSPIDriver(config),
|
||||
_sample_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": sample")),
|
||||
_comms_errors(perf_alloc(PC_COUNT, MODULE_NAME": comms_errors")),
|
||||
_ch_type(ch_type),
|
||||
_ch_type((VOXLPM_CH_TYPE)config.custom1),
|
||||
_battery(1, this, _meas_interval_us)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -225,11 +225,10 @@ enum VOXLPM_CH_TYPE {
|
||||
class VOXLPM : public device::I2C, public ModuleParams, public I2CSPIDriver<VOXLPM>
|
||||
{
|
||||
public:
|
||||
VOXLPM(I2CSPIBusOption bus_option, const int bus, int bus_frequency, VOXLPM_CH_TYPE ch_type);
|
||||
VOXLPM(const I2CSPIDriverConfig &config);
|
||||
virtual ~VOXLPM();
|
||||
|
||||
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 int init();
|
||||
|
||||
@@ -36,21 +36,18 @@
|
||||
|
||||
#include "voxlpm.hpp"
|
||||
|
||||
I2CSPIDriverBase *VOXLPM::instantiate(const BusCLIArguments &cli, const BusInstanceIterator &iterator,
|
||||
int runtime_instance)
|
||||
I2CSPIDriverBase *VOXLPM::instantiate(const I2CSPIDriverConfig &config, int runtime_instance)
|
||||
{
|
||||
VOXLPM *instance = new VOXLPM(iterator.configuredBusOption(), iterator.bus(), cli.bus_frequency,
|
||||
(VOXLPM_CH_TYPE)cli.type);
|
||||
VOXLPM *instance = new VOXLPM(config);
|
||||
|
||||
if (instance == nullptr) {
|
||||
PX4_ERR("alloc failed");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (cli.keep_running) {
|
||||
if (config.keep_running) {
|
||||
if (OK != instance->force_init()) {
|
||||
PX4_INFO("Failed to init voxlpm type: %d on bus: %d, but will try again periodically.", (VOXLPM_CH_TYPE)cli.type,
|
||||
iterator.bus());
|
||||
PX4_INFO("Failed to init voxlpm type: %d on bus: %d, but will try again periodically.", config.custom1, config.bus);
|
||||
}
|
||||
|
||||
} else if (OK != instance->init()) {
|
||||
@@ -68,6 +65,7 @@ VOXLPM::print_usage()
|
||||
|
||||
PRINT_MODULE_USAGE_COMMAND("start");
|
||||
PRINT_MODULE_USAGE_PARAMS_I2C_SPI_DRIVER(true, false);
|
||||
PRINT_MODULE_USAGE_PARAMS_I2C_ADDRESS(0x44);
|
||||
PRINT_MODULE_USAGE_PARAM_STRING('T', "VBATT", "VBATT|P5VDC|P12VDC", "Type", true);
|
||||
PRINT_MODULE_USAGE_PARAMS_I2C_KEEP_RUNNING_FLAG();
|
||||
PRINT_MODULE_USAGE_DEFAULT_COMMANDS();
|
||||
@@ -80,20 +78,21 @@ voxlpm_main(int argc, char *argv[])
|
||||
using ThisDriver = VOXLPM;
|
||||
BusCLIArguments cli{true, false};
|
||||
cli.default_i2c_frequency = 400000;
|
||||
cli.type = VOXLPM_CH_TYPE_VBATT;
|
||||
cli.custom1 = VOXLPM_CH_TYPE_VBATT;
|
||||
cli.support_keep_running = true;
|
||||
cli.i2c_address = VOXLPM_INA231_ADDR_VBATT;
|
||||
|
||||
while ((ch = cli.getOpt(argc, argv, "T:")) != EOF) {
|
||||
switch (ch) {
|
||||
case 'T':
|
||||
if (strcmp(cli.optArg(), "VBATT") == 0) {
|
||||
cli.type = VOXLPM_CH_TYPE_VBATT;
|
||||
cli.custom1 = VOXLPM_CH_TYPE_VBATT;
|
||||
|
||||
} else if (strcmp(cli.optArg(), "P5VDC") == 0) {
|
||||
cli.type = VOXLPM_CH_TYPE_P5VDC;
|
||||
cli.custom1 = VOXLPM_CH_TYPE_P5VDC;
|
||||
|
||||
} else if (strcmp(cli.optArg(), "P12VDC") == 0) {
|
||||
cli.type = VOXLPM_CH_TYPE_P12VDC; // same as P5VDC
|
||||
cli.custom1 = VOXLPM_CH_TYPE_P12VDC; // same as P5VDC
|
||||
|
||||
} else {
|
||||
PX4_ERR("unknown type");
|
||||
|
||||
Reference in New Issue
Block a user