mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-03-03 12:14:10 -04:00
AP_Notify: support both NCP5623 addresses
This commit is contained in:
parent
935165a8f8
commit
c9a830bf3f
@ -241,7 +241,9 @@ void AP_Notify::add_backends(void)
|
|||||||
break;
|
break;
|
||||||
#if !HAL_MINIMIZE_FEATURES
|
#if !HAL_MINIMIZE_FEATURES
|
||||||
case Notify_LED_NCP5623_I2C_External:
|
case Notify_LED_NCP5623_I2C_External:
|
||||||
ADD_BACKEND(new NCP5623(TOSHIBA_LED_I2C_BUS_EXTERNAL));
|
FOREACH_I2C_EXTERNAL(b) {
|
||||||
|
ADD_BACKEND(new NCP5623(b));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case Notify_LED_NCP5623_I2C_Internal:
|
case Notify_LED_NCP5623_I2C_Internal:
|
||||||
ADD_BACKEND(new NCP5623(TOSHIBA_LED_I2C_BUS_INTERNAL));
|
ADD_BACKEND(new NCP5623(TOSHIBA_LED_I2C_BUS_INTERNAL));
|
||||||
|
@ -29,6 +29,7 @@ extern const AP_HAL::HAL& hal;
|
|||||||
#define NCP5623_LED_OFF 0x00 // off
|
#define NCP5623_LED_OFF 0x00 // off
|
||||||
|
|
||||||
#define NCP5623_LED_I2C_ADDR 0x38 // default I2C bus address
|
#define NCP5623_LED_I2C_ADDR 0x38 // default I2C bus address
|
||||||
|
#define NCP5623_C_LED_I2C_ADDR 0x39 // default I2C bus address for the NCP5623C
|
||||||
|
|
||||||
#define NCP5623_LED_PWM0 0x40 // pwm0 register
|
#define NCP5623_LED_PWM0 0x40 // pwm0 register
|
||||||
#define NCP5623_LED_PWM1 0x60 // pwm1 register
|
#define NCP5623_LED_PWM1 0x60 // pwm1 register
|
||||||
@ -62,36 +63,40 @@ bool NCP5623::write_pwm(uint8_t _rgb[3])
|
|||||||
|
|
||||||
bool NCP5623::hw_init(void)
|
bool NCP5623::hw_init(void)
|
||||||
{
|
{
|
||||||
// first look for led on external bus
|
uint8_t addrs[] = { NCP5623_LED_I2C_ADDR, NCP5623_C_LED_I2C_ADDR };
|
||||||
_dev = std::move(hal.i2c_mgr->get_device(_bus, NCP5623_LED_I2C_ADDR));
|
for (uint8_t i=0; i<ARRAY_SIZE(addrs); i++) {
|
||||||
if (!_dev) {
|
// first look for led on external bus
|
||||||
return false;
|
_dev = std::move(hal.i2c_mgr->get_device(_bus, addrs[i]));
|
||||||
}
|
if (!_dev) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
_dev->get_semaphore()->take_blocking();
|
_dev->get_semaphore()->take_blocking();
|
||||||
_dev->set_retries(10);
|
_dev->set_retries(10);
|
||||||
|
|
||||||
// enable the led
|
// enable the led
|
||||||
bool ret = write(NCP5623_LED_ENABLE, 0x1f);
|
bool ret = write(NCP5623_LED_ENABLE, 0x1f);
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
|
_dev->get_semaphore()->give();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// update the red, green and blue values to zero
|
||||||
|
uint8_t off[3] = { _led_off, _led_off, _led_off };
|
||||||
|
ret = write_pwm(off);
|
||||||
|
|
||||||
|
_dev->set_retries(1);
|
||||||
|
|
||||||
|
// give back i2c semaphore
|
||||||
_dev->get_semaphore()->give();
|
_dev->get_semaphore()->give();
|
||||||
return false;
|
|
||||||
|
if (ret) {
|
||||||
|
_dev->register_periodic_callback(20000, FUNCTOR_BIND_MEMBER(&NCP5623::_timer, void));
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// update the red, green and blue values to zero
|
return false;
|
||||||
uint8_t off[3] = { _led_off, _led_off, _led_off };
|
|
||||||
ret = write_pwm(off);
|
|
||||||
|
|
||||||
_dev->set_retries(1);
|
|
||||||
|
|
||||||
// give back i2c semaphore
|
|
||||||
_dev->get_semaphore()->give();
|
|
||||||
|
|
||||||
if (ret) {
|
|
||||||
_dev->register_periodic_callback(20000, FUNCTOR_BIND_MEMBER(&NCP5623::_timer, void));
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// set_rgb - set color as a combination of red, green and blue values
|
// set_rgb - set color as a combination of red, green and blue values
|
||||||
|
Loading…
Reference in New Issue
Block a user