2023-09-07 17:24:47 +00:00
|
|
|
#include "configuration.h"
|
|
|
|
|
|
|
|
#ifdef HAS_NCP5623
|
|
|
|
#include <graphics/RAKled.h>
|
|
|
|
NCP5623 rgb;
|
|
|
|
#endif
|
|
|
|
|
2024-04-16 20:28:12 +00:00
|
|
|
#ifdef UNPHONE
|
|
|
|
#include "unPhone.h"
|
|
|
|
extern unPhone unphone;
|
|
|
|
#endif
|
|
|
|
|
2023-09-07 17:24:47 +00:00
|
|
|
namespace concurrency
|
|
|
|
{
|
|
|
|
class AmbientLightingThread : public concurrency::OSThread
|
|
|
|
{
|
|
|
|
public:
|
2023-12-14 13:35:46 +00:00
|
|
|
explicit AmbientLightingThread(ScanI2C::DeviceType type) : OSThread("AmbientLightingThread")
|
2023-09-07 17:24:47 +00:00
|
|
|
{
|
|
|
|
// Uncomment to test module
|
|
|
|
// moduleConfig.ambient_lighting.led_state = true;
|
|
|
|
// moduleConfig.ambient_lighting.current = 10;
|
|
|
|
// // Default to a color based on our node number
|
|
|
|
// moduleConfig.ambient_lighting.red = (myNodeInfo.my_node_num & 0xFF0000) >> 16;
|
|
|
|
// moduleConfig.ambient_lighting.green = (myNodeInfo.my_node_num & 0x00FF00) >> 8;
|
|
|
|
// moduleConfig.ambient_lighting.blue = myNodeInfo.my_node_num & 0x0000FF;
|
|
|
|
|
2024-04-16 20:28:12 +00:00
|
|
|
#ifdef HAS_NCP5623
|
2024-04-18 21:00:33 +00:00
|
|
|
_type = type;
|
2023-09-07 17:24:47 +00:00
|
|
|
if (_type == ScanI2C::DeviceType::NONE) {
|
|
|
|
LOG_DEBUG("AmbientLightingThread disabling due to no RGB leds found on I2C bus\n");
|
|
|
|
disable();
|
|
|
|
return;
|
|
|
|
}
|
2024-04-21 07:59:40 +00:00
|
|
|
#endif
|
|
|
|
#if defined(HAS_NCP5623) || defined(UNPHONE) || defined(RGBLED_RED)
|
2023-09-07 17:24:47 +00:00
|
|
|
if (!moduleConfig.ambient_lighting.led_state) {
|
|
|
|
LOG_DEBUG("AmbientLightingThread disabling due to moduleConfig.ambient_lighting.led_state OFF\n");
|
|
|
|
disable();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
LOG_DEBUG("AmbientLightingThread initializing\n");
|
2024-04-21 07:59:40 +00:00
|
|
|
#ifdef HAS_NCP5623
|
2023-09-07 17:24:47 +00:00
|
|
|
if (_type == ScanI2C::NCP5623) {
|
|
|
|
rgb.begin();
|
2024-04-18 21:00:33 +00:00
|
|
|
#endif
|
|
|
|
#ifdef RGBLED_RED
|
2024-04-21 07:59:40 +00:00
|
|
|
pinMode(RGBLED_RED, OUTPUT);
|
|
|
|
pinMode(RGBLED_GREEN, OUTPUT);
|
|
|
|
pinMode(RGBLED_BLUE, OUTPUT);
|
|
|
|
#endif
|
|
|
|
setLighting();
|
|
|
|
#endif
|
|
|
|
#ifdef HAS_NCP5623
|
2024-04-18 21:00:33 +00:00
|
|
|
}
|
2023-09-07 17:24:47 +00:00
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
protected:
|
|
|
|
int32_t runOnce() override
|
|
|
|
{
|
2024-04-21 07:59:40 +00:00
|
|
|
#if defined(HAS_NCP5623) || defined(UNPHONE) || defined(RGBLED_RED)
|
2024-04-18 21:00:33 +00:00
|
|
|
#ifdef HAS_NCP5623
|
|
|
|
if (_type == ScanI2C::NCP5623 && moduleConfig.ambient_lighting.led_state) {
|
2024-04-21 07:59:40 +00:00
|
|
|
#endif
|
2023-09-07 17:24:47 +00:00
|
|
|
setLighting();
|
|
|
|
return 30000; // 30 seconds to reset from any animations that may have been running from Ext. Notification
|
2024-04-21 07:59:40 +00:00
|
|
|
#ifdef HAS_NCP5623
|
2023-09-07 17:24:47 +00:00
|
|
|
}
|
|
|
|
#endif
|
2024-04-18 21:00:33 +00:00
|
|
|
#endif
|
|
|
|
return disable();
|
2023-09-07 17:24:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
ScanI2C::DeviceType _type = ScanI2C::DeviceType::NONE;
|
|
|
|
|
|
|
|
void setLighting()
|
|
|
|
{
|
|
|
|
#ifdef HAS_NCP5623
|
|
|
|
rgb.setCurrent(moduleConfig.ambient_lighting.current);
|
|
|
|
rgb.setRed(moduleConfig.ambient_lighting.red);
|
|
|
|
rgb.setGreen(moduleConfig.ambient_lighting.green);
|
|
|
|
rgb.setBlue(moduleConfig.ambient_lighting.blue);
|
2024-04-18 21:00:33 +00:00
|
|
|
LOG_DEBUG("Initializing NCP5623 Ambient lighting w/ current=%d, red=%d, green=%d, blue=%d\n",
|
2023-09-07 17:24:47 +00:00
|
|
|
moduleConfig.ambient_lighting.current, moduleConfig.ambient_lighting.red, moduleConfig.ambient_lighting.green,
|
|
|
|
moduleConfig.ambient_lighting.blue);
|
2024-04-16 20:28:12 +00:00
|
|
|
#endif
|
|
|
|
#ifdef UNPHONE
|
|
|
|
unphone.rgb(moduleConfig.ambient_lighting.red, moduleConfig.ambient_lighting.green, moduleConfig.ambient_lighting.blue);
|
2024-04-18 21:00:33 +00:00
|
|
|
LOG_DEBUG("Initializing unPhone Ambient lighting w/ red=%d, green=%d, blue=%d\n", moduleConfig.ambient_lighting.red,
|
2024-04-16 20:28:12 +00:00
|
|
|
moduleConfig.ambient_lighting.green, moduleConfig.ambient_lighting.blue);
|
2024-04-18 21:00:33 +00:00
|
|
|
#endif
|
|
|
|
#ifdef RGBLED_CA
|
|
|
|
analogWrite(RGBLED_RED, 255 - moduleConfig.ambient_lighting.red);
|
|
|
|
analogWrite(RGBLED_GREEN, 255 - moduleConfig.ambient_lighting.green);
|
|
|
|
analogWrite(RGBLED_BLUE, 255 - moduleConfig.ambient_lighting.blue);
|
|
|
|
LOG_DEBUG("Initializing Ambient lighting RGB Common Anode w/ red=%d, green=%d, blue=%d\n",
|
|
|
|
moduleConfig.ambient_lighting.red, moduleConfig.ambient_lighting.green, moduleConfig.ambient_lighting.blue);
|
2024-04-18 23:28:20 +00:00
|
|
|
#elif defined(RGBLED_RED)
|
2024-04-18 21:00:33 +00:00
|
|
|
analogWrite(RGBLED_RED, moduleConfig.ambient_lighting.red);
|
|
|
|
analogWrite(RGBLED_GREEN, moduleConfig.ambient_lighting.green);
|
|
|
|
analogWrite(RGBLED_BLUE, moduleConfig.ambient_lighting.blue);
|
|
|
|
LOG_DEBUG("Initializing Ambient lighting RGB Common Cathode w/ red=%d, green=%d, blue=%d\n",
|
|
|
|
moduleConfig.ambient_lighting.red, moduleConfig.ambient_lighting.green, moduleConfig.ambient_lighting.blue);
|
2023-09-07 17:24:47 +00:00
|
|
|
#endif
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace concurrency
|