mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-20 05:23:34 +08:00
I2C/SPI require device type in constructor
This commit is contained in:
@@ -57,7 +57,7 @@
|
||||
#include <drivers/airspeed/airspeed.h>
|
||||
|
||||
Airspeed::Airspeed(int bus, int bus_frequency, int address, unsigned conversion_interval) :
|
||||
I2C("Airspeed", nullptr, bus, address, bus_frequency),
|
||||
I2C(0, "Airspeed", bus, address, bus_frequency),
|
||||
_sensor_ok(false),
|
||||
_measure_interval(conversion_interval),
|
||||
_collect_phase(false),
|
||||
|
||||
@@ -166,7 +166,6 @@ public:
|
||||
* @return The bus type
|
||||
*/
|
||||
DeviceBusType get_device_bus_type() const { return _device_id.devid_s.bus_type; }
|
||||
void set_device_bus_type(DeviceBusType bus_type) { _device_id.devid_s.bus_type = bus_type; }
|
||||
|
||||
static const char *get_device_bus_string(DeviceBusType bus)
|
||||
{
|
||||
@@ -195,7 +194,6 @@ public:
|
||||
* @return The bus ID
|
||||
*/
|
||||
uint8_t get_device_bus() const { return _device_id.devid_s.bus; }
|
||||
void set_device_bus(uint8_t bus) { _device_id.devid_s.bus = bus; }
|
||||
|
||||
/**
|
||||
* Return the bus address of the device.
|
||||
@@ -242,26 +240,15 @@ protected:
|
||||
const char *_name{nullptr}; /**< driver name */
|
||||
bool _debug_enabled{false}; /**< if true, debug messages are printed */
|
||||
|
||||
explicit Device(const char *name) : _name(name)
|
||||
{
|
||||
set_device_bus_type(DeviceBusType_UNKNOWN);
|
||||
}
|
||||
Device() = delete;
|
||||
explicit Device(const char *name) : _name(name) {}
|
||||
|
||||
Device(const char *name, DeviceBusType bus_type, uint8_t bus, uint8_t address, uint8_t devtype = 0)
|
||||
: _name(name)
|
||||
Device(uint8_t devtype, const char *name, DeviceBusType bus_type, uint8_t bus, uint8_t address) : _name(name)
|
||||
{
|
||||
set_device_bus_type(bus_type);
|
||||
set_device_bus(bus);
|
||||
set_device_address(address);
|
||||
set_device_type(devtype);
|
||||
}
|
||||
|
||||
Device(DeviceBusType bus_type, uint8_t bus, uint8_t address, uint8_t devtype = 0)
|
||||
{
|
||||
set_device_bus_type(bus_type);
|
||||
set_device_bus(bus);
|
||||
_device_id.devid_s.bus_type = bus_type;
|
||||
_device_id.devid_s.bus = bus;
|
||||
set_device_address(address);
|
||||
set_device_type(devtype);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@@ -53,17 +53,15 @@ namespace device
|
||||
|
||||
unsigned int I2C::_bus_clocks[PX4_NUMBER_I2C_BUSES] = PX4_I2C_BUS_CLOCK_INIT;
|
||||
|
||||
I2C::I2C(const char *name, const char *devname, const int bus, const uint16_t address, const uint32_t frequency) :
|
||||
CDev(name, devname),
|
||||
I2C::I2C(uint8_t device_type, const char *name, const int bus, const uint16_t address, const uint32_t frequency) :
|
||||
CDev(name, nullptr),
|
||||
_frequency(frequency)
|
||||
{
|
||||
DEVICE_DEBUG("I2C::I2C name = %s devname = %s", name, devname);
|
||||
// fill in _device_id fields for a I2C device
|
||||
_device_id.devid_s.devtype = device_type;
|
||||
_device_id.devid_s.bus_type = DeviceBusType_I2C;
|
||||
_device_id.devid_s.bus = bus;
|
||||
_device_id.devid_s.address = address;
|
||||
// devtype needs to be filled in by the driver
|
||||
_device_id.devid_s.devtype = 0;
|
||||
}
|
||||
|
||||
I2C::~I2C()
|
||||
|
||||
@@ -80,13 +80,13 @@ protected:
|
||||
/**
|
||||
* @ Constructor
|
||||
*
|
||||
* @param device_type The device type (see drv_sensor.h)
|
||||
* @param name Driver name
|
||||
* @param devname Device node name
|
||||
* @param bus I2C bus on which the device lives
|
||||
* @param address I2C bus address, or zero if set_address will be used
|
||||
* @param frequency I2C bus frequency for the device (currently not used)
|
||||
*/
|
||||
I2C(const char *name, const char *devname, const int bus, const uint16_t address, const uint32_t frequency);
|
||||
I2C(uint8_t device_type, const char *name, const int bus, const uint16_t address, const uint32_t frequency);
|
||||
virtual ~I2C();
|
||||
|
||||
/**
|
||||
|
||||
@@ -57,21 +57,19 @@
|
||||
namespace device
|
||||
{
|
||||
|
||||
SPI::SPI(const char *name, const char *devname, int bus, uint32_t device, enum spi_mode_e mode, uint32_t frequency) :
|
||||
CDev(name, devname),
|
||||
SPI::SPI(uint8_t device_type, const char *name, int bus, uint32_t device, enum spi_mode_e mode, uint32_t frequency) :
|
||||
CDev(name, nullptr),
|
||||
_device(device),
|
||||
_mode(mode),
|
||||
_frequency(frequency),
|
||||
_dev(nullptr)
|
||||
_frequency(frequency)
|
||||
{
|
||||
_device_id.devid_s.devtype = device_type;
|
||||
// fill in _device_id fields for a SPI device
|
||||
_device_id.devid_s.bus_type = DeviceBusType_SPI;
|
||||
_device_id.devid_s.bus = bus;
|
||||
// Use the 2. LSB byte as SPI address. This is currently 0, but will allow to extend
|
||||
// for multiple instances of the same device on a bus, should that ever be required.
|
||||
_device_id.devid_s.address = (uint8_t)(device >> 8);
|
||||
// devtype needs to be filled in by the driver
|
||||
_device_id.devid_s.devtype = 0;
|
||||
|
||||
if (!px4_spi_bus_requires_locking(bus)) {
|
||||
_locking_mode = LOCK_NONE;
|
||||
|
||||
@@ -64,14 +64,14 @@ protected:
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param device_type The device type (see drv_sensor.h)
|
||||
* @param name Driver name
|
||||
* @param devname Device node name
|
||||
* @param bus SPI bus on which the device lives
|
||||
* @param device Device handle (used by SPI_SELECT)
|
||||
* @param mode SPI clock/data mode
|
||||
* @param frequency SPI clock frequency
|
||||
*/
|
||||
SPI(const char *name, const char *devname, int bus, uint32_t device, enum spi_mode_e mode, uint32_t frequency);
|
||||
SPI(uint8_t device_type, const char *name, int bus, uint32_t device, enum spi_mode_e mode, uint32_t frequency);
|
||||
virtual ~SPI();
|
||||
|
||||
/**
|
||||
@@ -158,7 +158,7 @@ private:
|
||||
uint32_t _device;
|
||||
enum spi_mode_e _mode;
|
||||
uint32_t _frequency;
|
||||
struct spi_dev_s *_dev;
|
||||
struct spi_dev_s *_dev {nullptr};
|
||||
|
||||
LockMode _locking_mode{LOCK_THREADS}; /**< selected locking mode */
|
||||
|
||||
|
||||
@@ -50,16 +50,14 @@
|
||||
namespace device
|
||||
{
|
||||
|
||||
I2C::I2C(const char *name, const char *devname, const int bus, const uint16_t address, const uint32_t frequency) :
|
||||
CDev(name, devname)
|
||||
I2C::I2C(uint8_t device_type, const char *name, const int bus, const uint16_t address, const uint32_t frequency) :
|
||||
CDev(name, nullptr)
|
||||
{
|
||||
DEVICE_DEBUG("I2C::I2C name = %s devname = %s", name, devname);
|
||||
// fill in _device_id fields for a I2C device
|
||||
_device_id.devid_s.devtype = device_type;
|
||||
_device_id.devid_s.bus_type = DeviceBusType_I2C;
|
||||
_device_id.devid_s.bus = bus;
|
||||
_device_id.devid_s.address = address;
|
||||
// devtype needs to be filled in by the driver
|
||||
_device_id.devid_s.devtype = 0;
|
||||
}
|
||||
|
||||
I2C::~I2C()
|
||||
|
||||
@@ -72,13 +72,13 @@ protected:
|
||||
/**
|
||||
* @ Constructor
|
||||
*
|
||||
* @param device_type The device type (see drv_sensor.h)
|
||||
* @param name Driver name
|
||||
* @param devname Device node name
|
||||
* @param bus I2C bus on which the device lives
|
||||
* @param address I2C bus address, or zero if set_address will be used
|
||||
* @param frequency I2C bus frequency for the device (currently not used)
|
||||
*/
|
||||
I2C(const char *name, const char *devname, const int bus, const uint16_t address, const uint32_t frequency);
|
||||
I2C(uint8_t device_type, const char *name, const int bus, const uint16_t address, const uint32_t frequency);
|
||||
virtual ~I2C();
|
||||
|
||||
/**
|
||||
|
||||
@@ -53,20 +53,17 @@
|
||||
namespace device
|
||||
{
|
||||
|
||||
SPI::SPI(const char *name, const char *devname, int bus, uint32_t device, enum spi_mode_e mode, uint32_t frequency) :
|
||||
CDev(name, devname),
|
||||
SPI::SPI(uint8_t device_type, const char *name, int bus, uint32_t device, enum spi_mode_e mode, uint32_t frequency) :
|
||||
CDev(name, nullptr),
|
||||
_device(device),
|
||||
_mode(mode),
|
||||
_frequency(frequency)
|
||||
{
|
||||
DEVICE_DEBUG("SPI::SPI name = %s devname = %s", name, devname);
|
||||
|
||||
_device_id.devid_s.devtype = device_type;
|
||||
// fill in _device_id fields for a SPI device
|
||||
_device_id.devid_s.bus_type = DeviceBusType_SPI;
|
||||
_device_id.devid_s.bus = bus;
|
||||
_device_id.devid_s.address = (uint8_t)device;
|
||||
// devtype needs to be filled in by the driver
|
||||
_device_id.devid_s.devtype = 0;
|
||||
}
|
||||
|
||||
SPI::~SPI()
|
||||
|
||||
@@ -77,14 +77,14 @@ protected:
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param device_type The device type (see drv_sensor.h)
|
||||
* @param name Driver name
|
||||
* @param devname Device node name
|
||||
* @param bus SPI bus on which the device lives
|
||||
* @param device Device handle (used by SPI_SELECT)
|
||||
* @param mode SPI clock/data mode
|
||||
* @param frequency SPI clock frequency
|
||||
*/
|
||||
SPI(const char *name, const char *devname, int bus, uint32_t device, enum spi_mode_e mode, uint32_t frequency);
|
||||
SPI(uint8_t device_type, const char *name, int bus, uint32_t device, enum spi_mode_e mode, uint32_t frequency);
|
||||
virtual ~SPI();
|
||||
|
||||
/**
|
||||
|
||||
@@ -47,17 +47,15 @@
|
||||
namespace device
|
||||
{
|
||||
|
||||
I2C::I2C(const char *name, const char *devname, const int bus, const uint16_t address, const uint32_t frequency) :
|
||||
CDev(name, devname),
|
||||
I2C::I2C(uint8_t device_type, const char *name, const int bus, const uint16_t address, const uint32_t frequency) :
|
||||
CDev(name, nullptr),
|
||||
_frequency(frequency)
|
||||
{
|
||||
DEVICE_DEBUG("I2C::I2C name = %s devname = %s", name, devname);
|
||||
// fill in _device_id fields for a I2C device
|
||||
_device_id.devid_s.devtype = device_type;
|
||||
_device_id.devid_s.bus_type = DeviceBusType_I2C;
|
||||
_device_id.devid_s.bus = bus;
|
||||
_device_id.devid_s.address = address;
|
||||
// devtype needs to be filled in by the driver
|
||||
_device_id.devid_s.devtype = 0;
|
||||
}
|
||||
|
||||
I2C::~I2C()
|
||||
|
||||
@@ -71,13 +71,13 @@ protected:
|
||||
/**
|
||||
* @ Constructor
|
||||
*
|
||||
* @param device_type The device type (see drv_sensor.h)
|
||||
* @param name Driver name
|
||||
* @param devname Device node name
|
||||
* @param bus I2C bus on which the device lives
|
||||
* @param address I2C bus address, or zero if set_address will be used
|
||||
* @param frequency I2C bus frequency for the device (currently not used)
|
||||
*/
|
||||
I2C(const char *name, const char *devname, const int bus, const uint16_t address, const uint32_t frequency);
|
||||
I2C(uint8_t device_type, const char *name, const int bus, const uint16_t address, const uint32_t frequency);
|
||||
virtual ~I2C();
|
||||
|
||||
/**
|
||||
|
||||
@@ -51,20 +51,17 @@
|
||||
namespace device
|
||||
{
|
||||
|
||||
SPI::SPI(const char *name, const char *devname, int bus, uint32_t device, enum spi_mode_e mode, uint32_t frequency) :
|
||||
CDev(name, devname),
|
||||
SPI::SPI(uint8_t device_type, const char *name, int bus, uint32_t device, enum spi_mode_e mode, uint32_t frequency) :
|
||||
CDev(name, nullptr),
|
||||
_device(device),
|
||||
_mode(mode),
|
||||
_frequency(frequency)
|
||||
{
|
||||
DEVICE_DEBUG("SPI::SPI name = %s devname = %s", name, devname);
|
||||
|
||||
_device_id.devid_s.devtype = device_type;
|
||||
// fill in _device_id fields for a SPI device
|
||||
_device_id.devid_s.bus_type = DeviceBusType_SPI;
|
||||
_device_id.devid_s.bus = bus;
|
||||
_device_id.devid_s.address = (uint8_t)device;
|
||||
// devtype needs to be filled in by the driver
|
||||
_device_id.devid_s.devtype = 0;
|
||||
}
|
||||
|
||||
SPI::~SPI()
|
||||
|
||||
@@ -62,14 +62,14 @@ protected:
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param device_type The device type (see drv_sensor.h)
|
||||
* @param name Driver name
|
||||
* @param devname Device node name
|
||||
* @param bus SPI bus on which the device lives
|
||||
* @param device Device handle (used by SPI_SELECT)
|
||||
* @param mode SPI clock/data mode
|
||||
* @param frequency SPI clock frequency
|
||||
*/
|
||||
SPI(const char *name, const char *devname, int bus, uint32_t device, enum spi_mode_e mode, uint32_t frequency);
|
||||
SPI(uint8_t device_type, const char *name, int bus, uint32_t device, enum spi_mode_e mode, uint32_t frequency);
|
||||
virtual ~SPI();
|
||||
|
||||
/**
|
||||
@@ -140,7 +140,7 @@ protected:
|
||||
* @param frequency Frequency to set (Hz)
|
||||
*/
|
||||
void set_frequency(uint32_t frequency) { _frequency = frequency; }
|
||||
uint32_t get_frequency() { return _frequency; }
|
||||
uint32_t get_frequency() { return _frequency; }
|
||||
|
||||
/**
|
||||
* Set the SPI bus locking mode
|
||||
@@ -159,10 +159,6 @@ private:
|
||||
enum spi_mode_e _mode;
|
||||
uint32_t _frequency;
|
||||
|
||||
/* this class does not allow copying */
|
||||
SPI(const SPI &);
|
||||
SPI operator=(const SPI &);
|
||||
|
||||
protected:
|
||||
|
||||
bool external() { return px4_spi_bus_external(get_device_bus()); }
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
#include "SMBus.hpp"
|
||||
|
||||
SMBus::SMBus(int bus_num, uint16_t address) :
|
||||
I2C("BATT_SMBUS_I2C", nullptr, bus_num, address, 100000)
|
||||
I2C(DRV_BAT_DEVTYPE_SMBUS, MODULE_NAME, bus_num, address, 100000)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -138,6 +138,10 @@ bool param_modify_on_import(const char *name, bson_type_t type, void *value)
|
||||
device_id.devid_s.devtype = DRV_IMU_DEVTYPE_ICM20689;
|
||||
}
|
||||
|
||||
if (device_id.devid_s.devtype == DRV_MAG_DEVTYPE_LSM303D_LEGACY) {
|
||||
device_id.devid_s.devtype = DRV_IMU_DEVTYPE_LSM303D;
|
||||
}
|
||||
|
||||
int32_t new_value = (int32_t)device_id.devid;
|
||||
|
||||
if (new_value != *ivalue) {
|
||||
|
||||
Reference in New Issue
Block a user