Browse Source

rgbled_ncp5623c:Add comand line mapping of PWM to color

release/1.12
David Sidrane 4 years ago committed by Daniel Agar
parent
commit
8e57a62c9d
  1. 49
      src/drivers/lights/rgbled_ncp5623c/rgbled_ncp5623c.cpp

49
src/drivers/lights/rgbled_ncp5623c/rgbled_ncp5623c.cpp

@ -68,7 +68,7 @@ using namespace time_literals; @@ -68,7 +68,7 @@ using namespace time_literals;
class RGBLED_NCP5623C : public device::I2C, public I2CSPIDriver<RGBLED_NCP5623C>
{
public:
RGBLED_NCP5623C(I2CSPIBusOption bus_option, const int bus, int bus_frequency, const int address);
RGBLED_NCP5623C(I2CSPIBusOption bus_option, const int bus, int bus_frequency, const int address, const int order);
virtual ~RGBLED_NCP5623C() = default;
static I2CSPIDriverBase *instantiate(const BusCLIArguments &cli, const BusInstanceIterator &iterator,
@ -106,10 +106,35 @@ private: @@ -106,10 +106,35 @@ private:
uint8_t _blue{NCP5623_LED_PWM2};
};
RGBLED_NCP5623C::RGBLED_NCP5623C(I2CSPIBusOption bus_option, const int bus, int bus_frequency, const int address) :
RGBLED_NCP5623C::RGBLED_NCP5623C(I2CSPIBusOption bus_option, const int bus, int bus_frequency, const int address,
const int order) :
I2C(DRV_LED_DEVTYPE_RGBLED_NCP5623C, MODULE_NAME, bus, address, bus_frequency),
I2CSPIDriver(MODULE_NAME, px4::device_bus_to_wq(get_device_id()), bus_option, bus, address)
{
int ordering = order;
// ordering is RGB: Hundreds is Red, Tens is green and ones is Blue
// 123 would drive the
// R LED from = NCP5623_LED_PWM0
// G LED from = NCP5623_LED_PWM1
// B LED from = NCP5623_LED_PWM2
// 321 would drive the
// R LED from = NCP5623_LED_PWM2
// G LED from = NCP5623_LED_PWM1
// B LED from = NCP5623_LED_PWM0
const uint8_t sig[] = {NCP5623_LED_PWM0, NCP5623_LED_PWM1, NCP5623_LED_PWM2};
// Process ordering in lsd to msd order.(BGR)
uint8_t *color[] = {&_blue, &_green, &_red };
unsigned int s = 0;
for (unsigned int i = 0; i < arraySize(color); i++) {
s = (ordering % 10) - 1;
if (s < arraySize(sig)) {
*color[i] = sig[s];
}
ordering /= 10;
}
}
int
@ -150,11 +175,6 @@ RGBLED_NCP5623C::probe() @@ -150,11 +175,6 @@ RGBLED_NCP5623C::probe()
if (status == PX4_ERROR) {
set_device_address(NCP5623B_ADDR);
status = write(NCP5623_LED_CURRENT, NCP5623_LED_OFF);
if (status == PX4_OK) {
_red = NCP5623_LED_PWM2;
_blue = NCP5623_LED_PWM0;
}
}
return status;
@ -262,6 +282,7 @@ RGBLED_NCP5623C::print_usage() @@ -262,6 +282,7 @@ RGBLED_NCP5623C::print_usage()
PRINT_MODULE_USAGE_COMMAND("start");
PRINT_MODULE_USAGE_PARAMS_I2C_SPI_DRIVER(true, false);
PRINT_MODULE_USAGE_PARAMS_I2C_ADDRESS(0x39);
PRINT_MODULE_USAGE_PARAM_INT('o', 123, 123, 321, "RGB PWM Assignment", true);
PRINT_MODULE_USAGE_DEFAULT_COMMANDS();
}
@ -269,7 +290,7 @@ I2CSPIDriverBase *RGBLED_NCP5623C::instantiate(const BusCLIArguments &cli, const @@ -269,7 +290,7 @@ I2CSPIDriverBase *RGBLED_NCP5623C::instantiate(const BusCLIArguments &cli, const
int runtime_instance)
{
RGBLED_NCP5623C *instance = new RGBLED_NCP5623C(iterator.configuredBusOption(), iterator.bus(), cli.bus_frequency,
cli.i2c_address);
cli.i2c_address, cli.custom1);
if (instance == nullptr) {
PX4_ERR("alloc failed");
@ -290,8 +311,18 @@ extern "C" __EXPORT int rgbled_ncp5623c_main(int argc, char *argv[]) @@ -290,8 +311,18 @@ extern "C" __EXPORT int rgbled_ncp5623c_main(int argc, char *argv[])
BusCLIArguments cli{true, false};
cli.default_i2c_frequency = 100000;
cli.i2c_address = NCP5623C_ADDR;
cli.custom1 = 123;
int ch;
while ((ch = cli.getOpt(argc, argv, "o:")) != EOF) {
switch (ch) {
case 'o':
cli.custom1 = atoi(cli.optArg());
break;
}
}
const char *verb = cli.parseDefaultArguments(argc, argv);
const char *verb = cli.optArg();
if (!verb) {
ThisDriver::print_usage();

Loading…
Cancel
Save