mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-30 09:53:34 +08:00
drivers: use updated I2C SPI driver interface
This commit is contained in:
@@ -33,9 +33,9 @@
|
||||
|
||||
#include "HMC5883.hpp"
|
||||
|
||||
HMC5883::HMC5883(device::Device *interface, enum Rotation rotation, I2CSPIBusOption bus_option, int bus) :
|
||||
I2CSPIDriver(MODULE_NAME, px4::device_bus_to_wq(interface->get_device_id()), bus_option, bus),
|
||||
_px4_mag(interface->get_device_id(), rotation),
|
||||
HMC5883::HMC5883(device::Device *interface, const I2CSPIDriverConfig &config) :
|
||||
I2CSPIDriver(config),
|
||||
_px4_mag(interface->get_device_id(), config.rotation),
|
||||
_interface(interface),
|
||||
_range_ga(1.9f),
|
||||
_collect_phase(false),
|
||||
|
||||
@@ -86,11 +86,10 @@
|
||||
class HMC5883 : public I2CSPIDriver<HMC5883>
|
||||
{
|
||||
public:
|
||||
HMC5883(device::Device *interface, enum Rotation rotation, I2CSPIBusOption bus_option, int bus);
|
||||
HMC5883(device::Device *interface, const I2CSPIDriverConfig &config);
|
||||
virtual ~HMC5883();
|
||||
|
||||
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();
|
||||
|
||||
@@ -42,6 +42,8 @@
|
||||
#include <drivers/device/Device.hpp>
|
||||
#include <drivers/device/spi.h>
|
||||
|
||||
#define HMC5883L_ADDRESS 0x1E
|
||||
|
||||
#define ADDR_ID_A 0x0a
|
||||
#define ADDR_ID_B 0x0b
|
||||
#define ADDR_ID_C 0x0c
|
||||
|
||||
@@ -42,8 +42,6 @@
|
||||
|
||||
#include "hmc5883.h"
|
||||
|
||||
#define HMC5883L_ADDRESS 0x1E
|
||||
|
||||
device::Device *HMC5883_I2C_interface(int bus, int bus_frequency);
|
||||
|
||||
class HMC5883_I2C : public device::I2C
|
||||
|
||||
@@ -45,16 +45,15 @@
|
||||
|
||||
extern "C" __EXPORT int hmc5883_main(int argc, char *argv[]);
|
||||
|
||||
I2CSPIDriverBase *HMC5883::instantiate(const BusCLIArguments &cli, const BusInstanceIterator &iterator,
|
||||
int runtime_instance)
|
||||
I2CSPIDriverBase *HMC5883::instantiate(const I2CSPIDriverConfig &config, int runtime_instance)
|
||||
{
|
||||
device::Device *interface = nullptr;
|
||||
|
||||
if (iterator.busType() == BOARD_I2C_BUS) {
|
||||
interface = HMC5883_I2C_interface(iterator.bus(), cli.bus_frequency);
|
||||
if (config.bus_type == BOARD_I2C_BUS) {
|
||||
interface = HMC5883_I2C_interface(config.bus, config.bus_frequency);
|
||||
|
||||
} else if (iterator.busType() == BOARD_SPI_BUS) {
|
||||
interface = HMC5883_SPI_interface(iterator.bus(), iterator.devid(), cli.bus_frequency, cli.spi_mode);
|
||||
} else if (config.bus_type == BOARD_SPI_BUS) {
|
||||
interface = HMC5883_SPI_interface(config.bus, config.spi_devid, config.bus_frequency, config.spi_mode);
|
||||
}
|
||||
|
||||
if (interface == nullptr) {
|
||||
@@ -64,11 +63,11 @@ I2CSPIDriverBase *HMC5883::instantiate(const BusCLIArguments &cli, const BusInst
|
||||
|
||||
if (interface->init() != OK) {
|
||||
delete interface;
|
||||
PX4_DEBUG("no device on bus %i (devid 0x%x)", iterator.bus(), iterator.devid());
|
||||
PX4_DEBUG("no device on bus %i (devid 0x%x)", config.bus, config.spi_devid);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
HMC5883 *dev = new HMC5883(interface, cli.rotation, iterator.configuredBusOption(), iterator.bus());
|
||||
HMC5883 *dev = new HMC5883(interface, config);
|
||||
|
||||
if (dev == nullptr) {
|
||||
delete interface;
|
||||
@@ -80,7 +79,7 @@ I2CSPIDriverBase *HMC5883::instantiate(const BusCLIArguments &cli, const BusInst
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bool enable_temp_compensation = cli.custom1 == 1;
|
||||
bool enable_temp_compensation = config.custom1 == 1;
|
||||
|
||||
if (enable_temp_compensation) {
|
||||
dev->set_temperature_compensation(1);
|
||||
@@ -127,6 +126,8 @@ extern "C" int hmc5883_main(int argc, char *argv[])
|
||||
return -1;
|
||||
}
|
||||
|
||||
cli.i2c_address = HMC5883L_ADDRESS;
|
||||
|
||||
BusInstanceIterator iterator(MODULE_NAME, cli, DRV_MAG_DEVTYPE_HMC5883);
|
||||
|
||||
if (!strcmp(verb, "start")) {
|
||||
|
||||
Reference in New Issue
Block a user