Add support for hsv->rgb conversion without using CIE curve. (#9856)

* Add support for hsv->rgb conversion without using CIE curve.

* Modify anavi/macropad8 to disable unicode (was unused), otherwise firmware size is too large.
This commit is contained in:
Nick Brassel 2020-08-05 15:11:06 +10:00 committed by James Young
parent 200444f8d2
commit c990dc1e6c
3 changed files with 24 additions and 4 deletions

View File

@ -23,7 +23,6 @@ NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: ht
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6 AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = yes # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
OLED_DRIVER_ENABLE = yes # Enable Support for SSD1306 or SH1106 OLED Displays; Communicating over I2C OLED_DRIVER_ENABLE = yes # Enable Support for SSD1306 or SH1106 OLED Displays; Communicating over I2C

View File

@ -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))

View File

@ -64,6 +64,7 @@ typedef struct PACKED {
#endif #endif
RGB hsv_to_rgb(HSV hsv); RGB hsv_to_rgb(HSV hsv);
RGB hsv_to_rgb_nocie(HSV hsv);
#ifdef RGBW #ifdef RGBW
void convert_rgb_to_rgbw(LED_TYPE *led); void convert_rgb_to_rgbw(LED_TYPE *led);
#endif #endif