NCP5623c RGB LED driver I2C address auto detect

* Enables the LED on mRobotics GPS receivers
 * Probes I2C addresses and sets colors accordingly
This commit is contained in:
InspiredBrandon
2021-08-02 17:36:09 -07:00
committed by GitHub
parent 93aa6e3f78
commit b2def13d6f
2 changed files with 28 additions and 9 deletions
@@ -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:
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()
int
RGBLED_NCP5623C::probe()
{
int status = PX4_ERROR;
_retries = 4;
status = write(NCP5623_LED_CURRENT, NCP5623_LED_OFF);
return write(NCP5623_LED_CURRENT, 0x00);
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 status;
}
void
@@ -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);
}
@@ -6,9 +6,9 @@
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* 1. Redistribution of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* 2. Redistribution in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
@@ -53,4 +53,3 @@
* @group System
*/
PARAM_DEFINE_INT32(LED_RGB1_MAXBRT, 31);