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