Jelajahi Sumber

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.
Nick Brassel 4 tahun lalu
induk
melakukan
c990dc1e6c
3 mengubah file dengan 24 tambahan dan 4 penghapusan
  1. 0 1
      keyboards/anavi/macropad8/rules.mk
  2. 23 3
      quantum/color.c
  3. 1 0
      quantum/color.h

+ 0 - 1
keyboards/anavi/macropad8/rules.mk

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

+ 23 - 3
quantum/color.c

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

+ 1 - 0
quantum/color.h

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