mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-03 15:28:53 +08:00
drivers: use updated I2C SPI driver interface
This commit is contained in:
@@ -38,13 +38,14 @@ static constexpr int16_t combine(uint8_t msb, uint8_t lsb)
|
||||
return (msb << 8u) | lsb;
|
||||
}
|
||||
|
||||
PAW3902::PAW3902(I2CSPIBusOption bus_option, int bus, int devid, int bus_frequency, spi_mode_e spi_mode,
|
||||
spi_drdy_gpio_t drdy_gpio, float yaw_rotation_degrees) :
|
||||
SPI(DRV_FLOW_DEVTYPE_PAW3902, MODULE_NAME, bus, devid, spi_mode, bus_frequency),
|
||||
I2CSPIDriver(MODULE_NAME, px4::device_bus_to_wq(get_device_id()), bus_option, bus),
|
||||
_drdy_gpio(drdy_gpio)
|
||||
PAW3902::PAW3902(const I2CSPIDriverConfig &config) :
|
||||
SPI(config),
|
||||
I2CSPIDriver(config),
|
||||
_drdy_gpio(config.drdy_gpio)
|
||||
{
|
||||
if (PX4_ISFINITE(yaw_rotation_degrees)) {
|
||||
float yaw_rotation_degrees = (float)config.custom1;
|
||||
|
||||
if (yaw_rotation_degrees >= 0.f) {
|
||||
PX4_INFO("using yaw rotation %.3f degrees (%.3f radians)",
|
||||
(double)yaw_rotation_degrees, (double)math::radians(yaw_rotation_degrees));
|
||||
|
||||
|
||||
@@ -62,12 +62,9 @@ using namespace PixArt_PAW3902JF;
|
||||
class PAW3902 : public device::SPI, public I2CSPIDriver<PAW3902>
|
||||
{
|
||||
public:
|
||||
PAW3902(I2CSPIBusOption bus_option, int bus, int devid, int bus_frequency, spi_mode_e spi_mode,
|
||||
spi_drdy_gpio_t drdy_gpio, float yaw_rotation_degrees = NAN);
|
||||
PAW3902(const I2CSPIDriverConfig &config);
|
||||
virtual ~PAW3902();
|
||||
|
||||
static I2CSPIDriverBase *instantiate(const BusCLIArguments &cli, const BusInstanceIterator &iterator,
|
||||
int runtime_instance);
|
||||
static void print_usage();
|
||||
|
||||
int init() override;
|
||||
|
||||
@@ -43,31 +43,6 @@ void PAW3902::print_usage()
|
||||
PRINT_MODULE_USAGE_DEFAULT_COMMANDS();
|
||||
}
|
||||
|
||||
I2CSPIDriverBase *PAW3902::instantiate(const BusCLIArguments &cli, const BusInstanceIterator &iterator,
|
||||
int runtime_instance)
|
||||
{
|
||||
float yaw_rotation_degrees = NAN;
|
||||
|
||||
if (cli.custom1 >= 0) {
|
||||
yaw_rotation_degrees = cli.custom1;
|
||||
}
|
||||
|
||||
PAW3902 *instance = new PAW3902(iterator.configuredBusOption(), iterator.bus(), iterator.devid(), cli.bus_frequency,
|
||||
cli.spi_mode, iterator.DRDYGPIO(), yaw_rotation_degrees);
|
||||
|
||||
if (!instance) {
|
||||
PX4_ERR("alloc failed");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (OK != instance->init()) {
|
||||
delete instance;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
extern "C" __EXPORT int paw3902_main(int argc, char *argv[])
|
||||
{
|
||||
int ch = 0;
|
||||
|
||||
@@ -35,13 +35,12 @@
|
||||
|
||||
static constexpr uint32_t TIME_us_TSWW = 11; // - actually 10.5us
|
||||
|
||||
PMW3901::PMW3901(I2CSPIBusOption bus_option, int bus, int devid, enum Rotation yaw_rotation, int bus_frequency,
|
||||
spi_mode_e spi_mode) :
|
||||
SPI(DRV_FLOW_DEVTYPE_PMW3901, MODULE_NAME, bus, devid, spi_mode, bus_frequency),
|
||||
I2CSPIDriver(MODULE_NAME, px4::device_bus_to_wq(get_device_id()), bus_option, bus),
|
||||
PMW3901::PMW3901(const I2CSPIDriverConfig &config) :
|
||||
SPI(config),
|
||||
I2CSPIDriver(config),
|
||||
_sample_perf(perf_alloc(PC_ELAPSED, "pmw3901: read")),
|
||||
_comms_errors(perf_alloc(PC_COUNT, "pmw3901: com err")),
|
||||
_yaw_rotation(yaw_rotation)
|
||||
_yaw_rotation(config.rotation)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -65,13 +65,10 @@
|
||||
class PMW3901 : public device::SPI, public I2CSPIDriver<PMW3901>
|
||||
{
|
||||
public:
|
||||
PMW3901(I2CSPIBusOption bus_option, int bus, int devid, enum Rotation yaw_rotation, int bus_frequency,
|
||||
spi_mode_e spi_mode);
|
||||
PMW3901(const I2CSPIDriverConfig &config);
|
||||
|
||||
virtual ~PMW3901();
|
||||
|
||||
static I2CSPIDriverBase *instantiate(const BusCLIArguments &cli, const BusInstanceIterator &iterator,
|
||||
int runtime_instance);
|
||||
static void print_usage();
|
||||
|
||||
virtual int init();
|
||||
|
||||
@@ -46,25 +46,6 @@ PMW3901::print_usage()
|
||||
PRINT_MODULE_USAGE_DEFAULT_COMMANDS();
|
||||
}
|
||||
|
||||
I2CSPIDriverBase *PMW3901::instantiate(const BusCLIArguments &cli, const BusInstanceIterator &iterator,
|
||||
int runtime_instance)
|
||||
{
|
||||
PMW3901 *instance = new PMW3901(iterator.configuredBusOption(), iterator.bus(), iterator.devid(), cli.rotation,
|
||||
cli.bus_frequency, cli.spi_mode);
|
||||
|
||||
if (!instance) {
|
||||
PX4_ERR("alloc failed");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (OK != instance->init()) {
|
||||
delete instance;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
int
|
||||
pmw3901_main(int argc, char *argv[])
|
||||
{
|
||||
|
||||
@@ -75,12 +75,9 @@
|
||||
class PX4FLOW: public device::I2C, public I2CSPIDriver<PX4FLOW>
|
||||
{
|
||||
public:
|
||||
PX4FLOW(I2CSPIBusOption bus_option, int bus, int address, uint8_t sonar_rotation, int bus_frequency,
|
||||
int conversion_interval = PX4FLOW_CONVERSION_INTERVAL_DEFAULT, enum Rotation rotation = ROTATION_NONE);
|
||||
PX4FLOW(const I2CSPIDriverConfig &config);
|
||||
virtual ~PX4FLOW();
|
||||
|
||||
static I2CSPIDriverBase *instantiate(const BusCLIArguments &cli, const BusInstanceIterator &iterator,
|
||||
int runtime_instance);
|
||||
static void print_usage();
|
||||
|
||||
int init() override;
|
||||
@@ -139,14 +136,13 @@ private:
|
||||
|
||||
extern "C" __EXPORT int px4flow_main(int argc, char *argv[]);
|
||||
|
||||
PX4FLOW::PX4FLOW(I2CSPIBusOption bus_option, int bus, int address, uint8_t sonar_rotation, int bus_frequency,
|
||||
int conversion_interval, enum Rotation rotation) :
|
||||
I2C(DRV_FLOW_DEVTYPE_PX4FLOW, MODULE_NAME, bus, address, bus_frequency),
|
||||
I2CSPIDriver(MODULE_NAME, px4::device_bus_to_wq(get_device_id()), bus_option, bus, address),
|
||||
_sonar_rotation(sonar_rotation),
|
||||
PX4FLOW::PX4FLOW(const I2CSPIDriverConfig &config) :
|
||||
I2C(config),
|
||||
I2CSPIDriver(config),
|
||||
_sonar_rotation(config.rotation),
|
||||
_sample_perf(perf_alloc(PC_ELAPSED, MODULE_NAME": read")),
|
||||
_comms_errors(perf_alloc(PC_COUNT, MODULE_NAME": com_err")),
|
||||
_sensor_rotation(rotation)
|
||||
_sensor_rotation(Rotation::ROTATION_NONE)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -382,25 +378,6 @@ PX4FLOW::print_usage()
|
||||
PRINT_MODULE_USAGE_DEFAULT_COMMANDS();
|
||||
}
|
||||
|
||||
I2CSPIDriverBase *PX4FLOW::instantiate(const BusCLIArguments &cli, const BusInstanceIterator &iterator,
|
||||
int runtime_instance)
|
||||
{
|
||||
PX4FLOW *instance = new PX4FLOW(iterator.configuredBusOption(), iterator.bus(), cli.i2c_address, cli.orientation,
|
||||
cli.bus_frequency);
|
||||
|
||||
if (!instance) {
|
||||
PX4_ERR("alloc failed");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (OK != instance->init()) {
|
||||
delete instance;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
int
|
||||
px4flow_main(int argc, char *argv[])
|
||||
{
|
||||
@@ -408,13 +385,13 @@ px4flow_main(int argc, char *argv[])
|
||||
using ThisDriver = PX4FLOW;
|
||||
BusCLIArguments cli{true, false};
|
||||
cli.default_i2c_frequency = PX4FLOW_I2C_MAX_BUS_SPEED;
|
||||
cli.orientation = distance_sensor_s::ROTATION_DOWNWARD_FACING;
|
||||
cli.rotation = (Rotation)distance_sensor_s::ROTATION_DOWNWARD_FACING;
|
||||
cli.i2c_address = I2C_FLOW_ADDRESS_DEFAULT;
|
||||
|
||||
while ((ch = cli.getOpt(argc, argv, "R:")) != EOF) {
|
||||
switch (ch) {
|
||||
case 'R':
|
||||
cli.orientation = atoi(cli.optArg());
|
||||
cli.rotation = (Rotation)atoi(cli.optArg());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user