mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-06-01 02:55:07 +08:00
Refactor PCA9685 (#26379)
* refactor: use parseDefaultArguments * style: reverted changes to docs (should be auto-generated) * refactor: use parseDefaultArguments * style: reverted changes to docs (should be auto-generated)
This commit is contained in:
committed by
GitHub
parent
61d2173524
commit
010f6dcbae
@@ -100,7 +100,7 @@ bmp388 -I start
|
|||||||
# Start an external PWM generator
|
# Start an external PWM generator
|
||||||
if param greater PCA9685_EN_BUS 0
|
if param greater PCA9685_EN_BUS 0
|
||||||
then
|
then
|
||||||
pca9685_pwm_out start
|
pca9685_pwm_out start -X
|
||||||
fi
|
fi
|
||||||
|
|
||||||
unset HAVE_PM2
|
unset HAVE_PM2
|
||||||
|
|||||||
@@ -20,5 +20,5 @@ bmp388 -I -b 2 start
|
|||||||
# Start an external PWM generator
|
# Start an external PWM generator
|
||||||
if param greater PCA9685_EN_BUS 0
|
if param greater PCA9685_EN_BUS 0
|
||||||
then
|
then
|
||||||
pca9685_pwm_out start
|
pca9685_pwm_out start -X
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -38,5 +38,5 @@ afbrs50 start
|
|||||||
# Start an external PWM generator
|
# Start an external PWM generator
|
||||||
if param greater PCA9685_EN_BUS 0
|
if param greater PCA9685_EN_BUS 0
|
||||||
then
|
then
|
||||||
pca9685_pwm_out start
|
pca9685_pwm_out start -X
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -77,5 +77,5 @@ ist8310 -X -b 1 -R 10 start
|
|||||||
# Start an external PWM generator
|
# Start an external PWM generator
|
||||||
if param greater PCA9685_EN_BUS 0
|
if param greater PCA9685_EN_BUS 0
|
||||||
then
|
then
|
||||||
pca9685_pwm_out start
|
pca9685_pwm_out start -X
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ then
|
|||||||
echo "ads1115 not found."
|
echo "ads1115 not found."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! pca9685_pwm_out start
|
if ! pca9685_pwm_out start -X
|
||||||
then
|
then
|
||||||
echo "pca9685_pwm_out not found."
|
echo "pca9685_pwm_out not found."
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ ms5611 start -I
|
|||||||
ads1115 start -I
|
ads1115 start -I
|
||||||
|
|
||||||
# PWM
|
# PWM
|
||||||
pca9685_pwm_out start
|
pca9685_pwm_out start -X
|
||||||
control_allocator start
|
control_allocator start
|
||||||
|
|
||||||
# external GPS & compass
|
# external GPS & compass
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ ms5611 start -I
|
|||||||
ads1115 start -I
|
ads1115 start -I
|
||||||
|
|
||||||
# PWM
|
# PWM
|
||||||
pca9685_pwm_out start
|
pca9685_pwm_out start -X
|
||||||
control_allocator start
|
control_allocator start
|
||||||
|
|
||||||
# external GPS & compass
|
# external GPS & compass
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
#include <drivers/device/i2c.h>
|
#include <drivers/device/i2c.h>
|
||||||
#include <px4_boardconfig.h>
|
#include <px4_boardconfig.h>
|
||||||
|
#include <px4_platform_common/i2c_spi_buses.h>
|
||||||
|
|
||||||
#define PCA9685_REG_MODE1 0x00 // Mode register 1
|
#define PCA9685_REG_MODE1 0x00 // Mode register 1
|
||||||
#define PCA9685_REG_MODE2 0x01 // Mode register 2
|
#define PCA9685_REG_MODE2 0x01 // Mode register 2
|
||||||
|
|||||||
@@ -332,7 +332,7 @@ that can be accepted by most ESCs and servos.
|
|||||||
|
|
||||||
### Examples
|
### Examples
|
||||||
It is typically started with:
|
It is typically started with:
|
||||||
$ pca9685_pwm_out start -a 0x40 -b 1
|
$ pca9685_pwm_out start -X -a 0x40 -b 1
|
||||||
|
|
||||||
)DESCR_STR");
|
)DESCR_STR");
|
||||||
|
|
||||||
@@ -352,6 +352,11 @@ int PCA9685Wrapper::print_status() {
|
|||||||
pca9685->get_device_address(),
|
pca9685->get_device_address(),
|
||||||
(double)(pca9685->getFreq()));
|
(double)(pca9685->getFreq()));
|
||||||
|
|
||||||
|
perf_print_counter(_cycle_perf);
|
||||||
|
perf_print_counter(_comms_errors);
|
||||||
|
perf_print_counter(_registers_invalid_reset);
|
||||||
|
perf_print_counter(_registers_transfer_reset);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -360,61 +365,11 @@ int PCA9685Wrapper::custom_command(int argc, char **argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int PCA9685Wrapper::task_spawn(int argc, char **argv) {
|
int PCA9685Wrapper::task_spawn(int argc, char **argv) {
|
||||||
int ch;
|
BusCLIArguments cli{true, false};
|
||||||
int address = PCA9685_DEFAULT_ADDRESS;
|
cli.default_i2c_frequency = 400000;
|
||||||
int iicbus = PCA9685_DEFAULT_IICBUS;
|
cli.i2c_address = PCA9685_DEFAULT_ADDRESS;
|
||||||
|
cli.requested_bus = PCA9685_DEFAULT_IICBUS;
|
||||||
int32_t en_bus = 0;
|
cli.parseDefaultArguments(argc, argv);
|
||||||
param_t param_handle = param_find("PCA9685_EN_BUS");
|
|
||||||
|
|
||||||
if (param_handle != PARAM_INVALID) {
|
|
||||||
param_get(param_handle, &en_bus);
|
|
||||||
|
|
||||||
if (en_bus > 0) {
|
|
||||||
iicbus = en_bus;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t i2c_addr = 0;
|
|
||||||
param_handle = param_find("PCA9685_I2C_ADDR");
|
|
||||||
|
|
||||||
if (param_handle != PARAM_INVALID) {
|
|
||||||
param_get(param_handle, &i2c_addr);
|
|
||||||
|
|
||||||
if (i2c_addr > 0) {
|
|
||||||
address = i2c_addr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int myoptind = 1;
|
|
||||||
const char *myoptarg = nullptr;
|
|
||||||
while ((ch = px4_getopt(argc, argv, "a:b:", &myoptind, &myoptarg)) != EOF) {
|
|
||||||
switch (ch) {
|
|
||||||
case 'a':
|
|
||||||
errno = 0;
|
|
||||||
address = strtol(myoptarg, nullptr, 16);
|
|
||||||
if (errno != 0) {
|
|
||||||
PX4_WARN("Invalid address");
|
|
||||||
return PX4_ERROR;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'b':
|
|
||||||
iicbus = strtol(myoptarg, nullptr, 10);
|
|
||||||
if (errno != 0) {
|
|
||||||
PX4_WARN("Invalid bus");
|
|
||||||
return PX4_ERROR;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '?':
|
|
||||||
PX4_WARN("Unsupported args");
|
|
||||||
return PX4_ERROR;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
auto *instance = new PCA9685Wrapper();
|
auto *instance = new PCA9685Wrapper();
|
||||||
|
|
||||||
@@ -422,7 +377,8 @@ int PCA9685Wrapper::task_spawn(int argc, char **argv) {
|
|||||||
desc.object.store(instance);
|
desc.object.store(instance);
|
||||||
desc.task_id = task_id_is_work_queue;
|
desc.task_id = task_id_is_work_queue;
|
||||||
|
|
||||||
instance->pca9685 = new PCA9685(iicbus, address);
|
instance->pca9685 = new PCA9685(cli.requested_bus, cli.i2c_address);
|
||||||
|
|
||||||
if(instance->pca9685==nullptr){
|
if(instance->pca9685==nullptr){
|
||||||
PX4_ERR("alloc failed");
|
PX4_ERR("alloc failed");
|
||||||
goto driverInstanceAllocFailed;
|
goto driverInstanceAllocFailed;
|
||||||
|
|||||||
Reference in New Issue
Block a user