mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-05-29 19:57:12 +08:00
ms5611: fix start_bus() logic to work on linux and add RPi I2C bus config (#13814)
This commit is contained in:
committed by
Daniel Agar
parent
c8fb3c589a
commit
87e5da189b
@@ -48,8 +48,10 @@
|
|||||||
/*
|
/*
|
||||||
* I2C busses
|
* I2C busses
|
||||||
*/
|
*/
|
||||||
#define PX4_I2C_BUS_EXPANSION 1
|
#define PX4_I2C_BUS_ONBOARD 1
|
||||||
#define PX4_NUMBER_I2C_BUSES 1
|
#define PX4_I2C_BUS_EXPANSION 0
|
||||||
|
|
||||||
|
#define PX4_NUMBER_I2C_BUSES 2
|
||||||
|
|
||||||
#define ADC_BATTERY_VOLTAGE_CHANNEL 0
|
#define ADC_BATTERY_VOLTAGE_CHANNEL 0
|
||||||
#define ADC_BATTERY_CURRENT_CHANNEL 1
|
#define ADC_BATTERY_CURRENT_CHANNEL 1
|
||||||
|
|||||||
@@ -96,12 +96,12 @@ class MS5611 : public cdev::CDev, public px4::ScheduledWorkItem
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MS5611(device::Device *interface, ms5611::prom_u &prom_buf, const char *path, enum MS56XX_DEVICE_TYPES device_type);
|
MS5611(device::Device *interface, ms5611::prom_u &prom_buf, const char *path, enum MS56XX_DEVICE_TYPES device_type);
|
||||||
~MS5611();
|
~MS5611() override;
|
||||||
|
|
||||||
virtual int init();
|
int init() override;
|
||||||
|
|
||||||
virtual ssize_t read(cdev::file_t *filp, char *buffer, size_t buflen);
|
ssize_t read(cdev::file_t *filp, char *buffer, size_t buflen) override;
|
||||||
virtual int ioctl(cdev::file_t *filp, int cmd, unsigned long arg);
|
int ioctl(cdev::file_t *filp, int cmd, unsigned long arg) override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Diagnostics - print some basic information about the driver.
|
* Diagnostics - print some basic information about the driver.
|
||||||
@@ -168,10 +168,10 @@ protected:
|
|||||||
*
|
*
|
||||||
* @return OK if the measurement command was successful.
|
* @return OK if the measurement command was successful.
|
||||||
*/
|
*/
|
||||||
virtual int measure();
|
int measure();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Collect the result of the most recent measurement.
|
* Collect the result of the most recent measurement.
|
||||||
*/
|
*/
|
||||||
virtual int collect();
|
int collect();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -50,13 +50,13 @@ class MS5611_I2C : public device::I2C
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MS5611_I2C(uint8_t bus, ms5611::prom_u &prom_buf);
|
MS5611_I2C(uint8_t bus, ms5611::prom_u &prom_buf);
|
||||||
virtual ~MS5611_I2C() = default;
|
~MS5611_I2C() override = default;
|
||||||
|
|
||||||
virtual int read(unsigned offset, void *data, unsigned count);
|
int read(unsigned offset, void *data, unsigned count) override;
|
||||||
virtual int ioctl(unsigned operation, unsigned &arg);
|
int ioctl(unsigned operation, unsigned &arg) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual int probe();
|
int probe() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ms5611::prom_u &_prom;
|
ms5611::prom_u &_prom;
|
||||||
@@ -240,7 +240,7 @@ MS5611_I2C::_read_prom()
|
|||||||
last_val = prom_buf[0];
|
last_val = prom_buf[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prom_buf[0] != last_val || prom_buf[1] != last_val) {
|
if ((prom_buf[0] != last_val) || (prom_buf[1] != last_val)) {
|
||||||
bits_stuck = false;
|
bits_stuck = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -111,9 +111,14 @@ start_bus(struct ms5611_bus_option &bus, enum MS56XX_DEVICE_TYPES device_type)
|
|||||||
|
|
||||||
bus.dev = new MS5611(interface, prom_buf, bus.devpath, device_type);
|
bus.dev = new MS5611(interface, prom_buf, bus.devpath, device_type);
|
||||||
|
|
||||||
if (bus.dev != nullptr && OK != bus.dev->init()) {
|
if (bus.dev == nullptr) {
|
||||||
|
PX4_ERR("alloc failed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bus.dev->init() != PX4_OK) {
|
||||||
delete bus.dev;
|
delete bus.dev;
|
||||||
bus.dev = NULL;
|
bus.dev = nullptr;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,7 +130,7 @@ start_bus(struct ms5611_bus_option &bus, enum MS56XX_DEVICE_TYPES device_type)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ioctl(fd, SENSORIOCSPOLLRATE, SENSOR_POLLRATE_DEFAULT) < 0) {
|
if (px4_ioctl(fd, SENSORIOCSPOLLRATE, SENSOR_POLLRATE_DEFAULT) < 0) {
|
||||||
px4_close(fd);
|
px4_close(fd);
|
||||||
PX4_ERR("failed setting default poll rate");
|
PX4_ERR("failed setting default poll rate");
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
Reference in New Issue
Block a user