|
|
|
@ -52,7 +52,8 @@
@@ -52,7 +52,8 @@
|
|
|
|
|
|
|
|
|
|
using namespace time_literals; |
|
|
|
|
|
|
|
|
|
#define ADDR 0x39 /**< I2C adress of NCP5623C */ |
|
|
|
|
#define ADDR 0x39 /**< I2C address of NCP5623C */ |
|
|
|
|
#define ALT_ADDR 0x38 /**< Alternative I2C address of NCP5623C */ |
|
|
|
|
|
|
|
|
|
#define NCP5623_LED_CURRENT 0x20 /**< Current register */ |
|
|
|
|
#define NCP5623_LED_PWM0 0x40 /**< pwm0 register */ |
|
|
|
@ -96,11 +97,18 @@ private:
@@ -96,11 +97,18 @@ private:
|
|
|
|
|
void update_params(); |
|
|
|
|
|
|
|
|
|
int write(uint8_t reg, uint8_t data); |
|
|
|
|
|
|
|
|
|
uint8_t red; |
|
|
|
|
uint8_t green; |
|
|
|
|
uint8_t blue; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
RGBLED_NCP5623C::RGBLED_NCP5623C(const I2CSPIDriverConfig &config) : |
|
|
|
|
I2C(config), |
|
|
|
|
I2CSPIDriver(config) |
|
|
|
|
I2CSPIDriver(config), |
|
|
|
|
red(NCP5623_LED_PWM0), |
|
|
|
|
green(NCP5623_LED_PWM1), |
|
|
|
|
blue(NCP5623_LED_PWM2) |
|
|
|
|
{ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -136,9 +144,21 @@ RGBLED_NCP5623C::init()
@@ -136,9 +144,21 @@ RGBLED_NCP5623C::init()
|
|
|
|
|
int |
|
|
|
|
RGBLED_NCP5623C::probe() |
|
|
|
|
{ |
|
|
|
|
int status = PX4_ERROR; |
|
|
|
|
_retries = 4; |
|
|
|
|
status = write(NCP5623_LED_CURRENT, NCP5623_LED_OFF); |
|
|
|
|
|
|
|
|
|
if (status == PX4_ERROR) { |
|
|
|
|
set_device_address(ALT_ADDR); |
|
|
|
|
status = write(NCP5623_LED_CURRENT, NCP5623_LED_OFF); |
|
|
|
|
|
|
|
|
|
if (status == PX4_OK) { |
|
|
|
|
red = NCP5623_LED_PWM2; |
|
|
|
|
blue = NCP5623_LED_PWM0; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return write(NCP5623_LED_CURRENT, 0x00); |
|
|
|
|
return status; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
@ -215,9 +235,9 @@ RGBLED_NCP5623C::send_led_rgb()
@@ -215,9 +235,9 @@ RGBLED_NCP5623C::send_led_rgb()
|
|
|
|
|
uint8_t brightness = 0x1f * _max_brightness; |
|
|
|
|
|
|
|
|
|
msg[0] = NCP5623_LED_CURRENT | (brightness & 0x1f); |
|
|
|
|
msg[2] = NCP5623_LED_PWM0 | (uint8_t(_r * _brightness) & 0x1f); |
|
|
|
|
msg[4] = NCP5623_LED_PWM1 | (uint8_t(_g * _brightness) & 0x1f); |
|
|
|
|
msg[6] = NCP5623_LED_PWM2 | (uint8_t(_b * _brightness) & 0x1f); |
|
|
|
|
msg[2] = red | (uint8_t(_r * _brightness) & 0x1f); |
|
|
|
|
msg[4] = green | (uint8_t(_g * _brightness) & 0x1f); |
|
|
|
|
msg[6] = blue | (uint8_t(_b * _brightness) & 0x1f); |
|
|
|
|
|
|
|
|
|
return transfer(&msg[0], 7, nullptr, 0); |
|
|
|
|
} |
|
|
|
|