I2C/SPI require device type in constructor

This commit is contained in:
Daniel Agar
2020-04-01 12:24:22 -04:00
committed by GitHub
parent 04bf9afd1b
commit 02f4ad61ec
128 changed files with 181 additions and 351 deletions
+1 -1
View File
@@ -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),
+5 -18
View File
@@ -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);
}
};
+3 -5
View File
@@ -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()
+2 -2
View File
@@ -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();
/**
+4 -6
View File
@@ -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;
+3 -3
View File
@@ -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 */
+3 -5
View File
@@ -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()
+2 -2
View File
@@ -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();
/**
+3 -6
View File
@@ -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()
+2 -2
View File
@@ -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();
/**
+3 -5
View File
@@ -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()
+2 -2
View File
@@ -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();
/**
+3 -6
View File
@@ -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()
+3 -7
View File
@@ -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()); }
+1 -1
View File
@@ -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)
{
}
+4
View File
@@ -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) {