~ruther/qmk_firmware

c990dc1e6cdcabbfe280d60e981f9e7cc733d5db — Nick Brassel 5 years ago 200444f
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.
3 files changed, 24 insertions(+), 4 deletions(-)

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

M quantum/color.c => quantum/color.c +23 -3
@@ 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))

M quantum/color.h => quantum/color.h +1 -0
@@ 64,6 64,7 @@ typedef struct PACKED {
#endif

RGB hsv_to_rgb(HSV hsv);
RGB hsv_to_rgb_nocie(HSV hsv);
#ifdef RGBW
void convert_rgb_to_rgbw(LED_TYPE *led);
#endif