|
@@ -18,14 +18,20 @@
|
|
|
#include "led_tables.h"
|
|
|
#include "progmem.h"
|
|
|
|
|
|
-RGB hsv_to_rgb(HSV hsv) {
|
|
|
+RGB hsv_to_rgb_impl(HSV hsv, bool use_cie) {
|
|
|
RGB rgb;
|
|
|
uint8_t region, remainder, p, q, t;
|
|
|
uint16_t h, s, v;
|
|
|
|
|
|
if (hsv.s == 0) {
|
|
|
#ifdef USE_CIE1931_CURVE
|
|
|
- rgb.r = rgb.g = rgb.b = pgm_read_byte(&CIE1931_CURVE[hsv.v]);
|
|
|
+ if (use_cie) {
|
|
|
+ rgb.r = rgb.g = rgb.b = pgm_read_byte(&CIE1931_CURVE[hsv.v]);
|
|
|
+ } else {
|
|
|
+ rgb.r = hsv.v;
|
|
|
+ rgb.g = hsv.v;
|
|
|
+ rgb.b = hsv.v;
|
|
|
+ }
|
|
|
#else
|
|
|
rgb.r = hsv.v;
|
|
|
rgb.g = hsv.v;
|
|
@@ -37,7 +43,11 @@ RGB hsv_to_rgb(HSV hsv) {
|
|
|
h = hsv.h;
|
|
|
s = hsv.s;
|
|
|
#ifdef USE_CIE1931_CURVE
|
|
|
- v = pgm_read_byte(&CIE1931_CURVE[hsv.v]);
|
|
|
+ if (use_cie) {
|
|
|
+ v = pgm_read_byte(&CIE1931_CURVE[hsv.v]);
|
|
|
+ } else {
|
|
|
+ v = hsv.v;
|
|
|
+ }
|
|
|
#else
|
|
|
v = hsv.v;
|
|
|
#endif
|
|
@@ -86,6 +96,16 @@ RGB hsv_to_rgb(HSV hsv) {
|
|
|
return rgb;
|
|
|
}
|
|
|
|
|
|
+RGB hsv_to_rgb(HSV hsv) {
|
|
|
+#ifdef USE_CIE1931_CURVE
|
|
|
+ return hsv_to_rgb_impl(hsv, true);
|
|
|
+#else
|
|
|
+ return hsv_to_rgb_impl(hsv, false);
|
|
|
+#endif
|
|
|
+}
|
|
|
+
|
|
|
+RGB hsv_to_rgb_nocie(HSV hsv) { return hsv_to_rgb_impl(hsv, false); }
|
|
|
+
|
|
|
#ifdef RGBW
|
|
|
# ifndef MIN
|
|
|
# define MIN(a, b) ((a) < (b) ? (a) : (b))
|