aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build_keyboard.mk23
-rw-r--r--keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c37
-rw-r--r--quantum/led_tables.c71
-rw-r--r--quantum/led_tables.h30
-rw-r--r--quantum/rgblight.c58
-rw-r--r--quantum/visualizer/visualizer.mk4
6 files changed, 136 insertions, 87 deletions
diff --git a/build_keyboard.mk b/build_keyboard.mk
index ad92892e2..79d2b6b0f 100644
--- a/build_keyboard.mk
+++ b/build_keyboard.mk
@@ -196,6 +196,8 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
196 OPT_DEFS += -DRGBLIGHT_ENABLE 196 OPT_DEFS += -DRGBLIGHT_ENABLE
197 SRC += $(QUANTUM_DIR)/light_ws2812.c 197 SRC += $(QUANTUM_DIR)/light_ws2812.c
198 SRC += $(QUANTUM_DIR)/rgblight.c 198 SRC += $(QUANTUM_DIR)/rgblight.c
199 CIE1931_CURVE = yes
200 LED_BREATHING_TABLE = yes
199endif 201endif
200 202
201ifeq ($(strip $(TAP_DANCE_ENABLE)), yes) 203ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
@@ -223,6 +225,27 @@ ifneq ($(strip $(MAX_VARIABLE_TRACE_SIZE)),)
223endif 225endif
224endif 226endif
225 227
228ifeq ($(strip $(LCD_ENABLE)), yes)
229CIE1931_CURVE = yes
230endif
231
232ifeq ($(strip $(LED_ENABLE)), yes)
233CIE1931_CURVE = yes
234endif
235
236ifeq ($(strip $(CIE1931_CURVE)), yes)
237 OPT_DEFS += -DUSE_CIE1931_CURVE
238 LED_TABLES = yes
239endif
240ifeq ($(strip $(LED_BREATHING_TABLE)), yes)
241 OPT_DEFS += -DUSE_LED_BREATHING_TABLE
242 LED_TABLES = yes
243endif
244
245ifeq ($(strip $(LED_TABLES)), yes)
246 SRC += $(QUANTUM_DIR)/led_tables.c
247endif
248
226# Optimize size but this may cause error "relocation truncated to fit" 249# Optimize size but this may cause error "relocation truncated to fit"
227#EXTRALDFLAGS = -Wl,--relax 250#EXTRALDFLAGS = -Wl,--relax
228 251
diff --git a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c
index 1d21f0c49..ea09c4bb0 100644
--- a/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c
+++ b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c
@@ -25,6 +25,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
25 25
26#include "board_IS31FL3731C.h" 26#include "board_IS31FL3731C.h"
27 27
28
29// Can't include led_tables from here
30extern const uint8_t CIE1931_CURVE[];
31
28/*===========================================================================*/ 32/*===========================================================================*/
29/* Driver local definitions. */ 33/* Driver local definitions. */
30/*===========================================================================*/ 34/*===========================================================================*/
@@ -100,37 +104,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
100 104
101#define IS31 105#define IS31
102 106
103//Generated by http://jared.geek.nz/2013/feb/linear-led-pwm
104const unsigned char cie[256] = {
105 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
106 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
107 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
108 3, 4, 4, 4, 4, 4, 4, 5, 5, 5,
109 5, 5, 6, 6, 6, 6, 6, 7, 7, 7,
110 7, 8, 8, 8, 8, 9, 9, 9, 10, 10,
111 10, 10, 11, 11, 11, 12, 12, 12, 13, 13,
112 13, 14, 14, 15, 15, 15, 16, 16, 17, 17,
113 17, 18, 18, 19, 19, 20, 20, 21, 21, 22,
114 22, 23, 23, 24, 24, 25, 25, 26, 26, 27,
115 28, 28, 29, 29, 30, 31, 31, 32, 32, 33,
116 34, 34, 35, 36, 37, 37, 38, 39, 39, 40,
117 41, 42, 43, 43, 44, 45, 46, 47, 47, 48,
118 49, 50, 51, 52, 53, 54, 54, 55, 56, 57,
119 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
120 68, 70, 71, 72, 73, 74, 75, 76, 77, 79,
121 80, 81, 82, 83, 85, 86, 87, 88, 90, 91,
122 92, 94, 95, 96, 98, 99, 100, 102, 103, 105,
123 106, 108, 109, 110, 112, 113, 115, 116, 118, 120,
124 121, 123, 124, 126, 128, 129, 131, 132, 134, 136,
125 138, 139, 141, 143, 145, 146, 148, 150, 152, 154,
126 155, 157, 159, 161, 163, 165, 167, 169, 171, 173,
127 175, 177, 179, 181, 183, 185, 187, 189, 191, 193,
128 196, 198, 200, 202, 204, 207, 209, 211, 214, 216,
129 218, 220, 223, 225, 228, 230, 232, 235, 237, 240,
130 242, 245, 247, 250, 252, 255,
131};
132
133
134/*===========================================================================*/ 107/*===========================================================================*/
135/* Driver local functions. */ 108/* Driver local functions. */
136/*===========================================================================*/ 109/*===========================================================================*/
@@ -231,7 +204,7 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) {
231 uint8_t* src = PRIV(g)->frame_buffer; 204 uint8_t* src = PRIV(g)->frame_buffer;
232 for (int y=0;y<GDISP_SCREEN_HEIGHT;y++) { 205 for (int y=0;y<GDISP_SCREEN_HEIGHT;y++) {
233 for (int x=0;x<GDISP_SCREEN_WIDTH;x++) { 206 for (int x=0;x<GDISP_SCREEN_WIDTH;x++) {
234 PRIV(g)->write_buffer[get_led_address(g, x, y)]=cie[*src]; 207 PRIV(g)->write_buffer[get_led_address(g, x, y)]=CIE1931_CURVE[*src];
235 ++src; 208 ++src;
236 } 209 }
237 } 210 }
diff --git a/quantum/led_tables.c b/quantum/led_tables.c
new file mode 100644
index 000000000..b99f26209
--- /dev/null
+++ b/quantum/led_tables.c
@@ -0,0 +1,71 @@
1/*
2Copyright 2017 Fred Sundvik
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8This program is distributed in the hope that it will be useful,
9but WITHOUT ANY WARRANTY; without even the implied warranty of
10MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11GNU General Public License for more details.
12You should have received a copy of the GNU General Public License
13along with this program. If not, see <http://www.gnu.org/licenses/>.
14*/
15
16#include "led_tables.h"
17
18
19#ifdef USE_CIE1931_CURVE
20// Lightness curve using the CIE 1931 lightness formula
21//Generated by the python script provided in http://jared.geek.nz/2013/feb/linear-led-pwm
22const uint8_t CIE1931_CURVE[] PROGMEM = {
23 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
24 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
25 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
26 3, 4, 4, 4, 4, 4, 4, 5, 5, 5,
27 5, 5, 6, 6, 6, 6, 6, 7, 7, 7,
28 7, 8, 8, 8, 8, 9, 9, 9, 10, 10,
29 10, 10, 11, 11, 11, 12, 12, 12, 13, 13,
30 13, 14, 14, 15, 15, 15, 16, 16, 17, 17,
31 17, 18, 18, 19, 19, 20, 20, 21, 21, 22,
32 22, 23, 23, 24, 24, 25, 25, 26, 26, 27,
33 28, 28, 29, 29, 30, 31, 31, 32, 32, 33,
34 34, 34, 35, 36, 37, 37, 38, 39, 39, 40,
35 41, 42, 43, 43, 44, 45, 46, 47, 47, 48,
36 49, 50, 51, 52, 53, 54, 54, 55, 56, 57,
37 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
38 68, 70, 71, 72, 73, 74, 75, 76, 77, 79,
39 80, 81, 82, 83, 85, 86, 87, 88, 90, 91,
40 92, 94, 95, 96, 98, 99, 100, 102, 103, 105,
41 106, 108, 109, 110, 112, 113, 115, 116, 118, 120,
42 121, 123, 124, 126, 128, 129, 131, 132, 134, 136,
43 138, 139, 141, 143, 145, 146, 148, 150, 152, 154,
44 155, 157, 159, 161, 163, 165, 167, 169, 171, 173,
45 175, 177, 179, 181, 183, 185, 187, 189, 191, 193,
46 196, 198, 200, 202, 204, 207, 209, 211, 214, 216,
47 218, 220, 223, 225, 228, 230, 232, 235, 237, 240,
48 242, 245, 247, 250, 252, 255,
49 };
50#endif
51
52#ifdef USE_LED_BREATHING_TABLE
53const uint8_t LED_BREATHING_TABLE[] PROGMEM = {
54 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 5, 5, 6, 7, 9,
55 10, 11, 12, 14, 15, 17, 18, 20, 21, 23, 25, 27, 29, 31, 33, 35,
56 37, 40, 42, 44, 47, 49, 52, 54, 57, 59, 62, 65, 67, 70, 73, 76,
57 79, 82, 85, 88, 90, 93, 97, 100, 103, 106, 109, 112, 115, 118, 121, 124,
58 127, 131, 134, 137, 140, 143, 146, 149, 152, 155, 158, 162, 165, 167, 170, 173,
59 176, 179, 182, 185, 188, 190, 193, 196, 198, 201, 203, 206, 208, 211, 213, 215,
60 218, 220, 222, 224, 226, 228, 230, 232, 234, 235, 237, 238, 240, 241, 243, 244,
61 245, 246, 248, 249, 250, 250, 251, 252, 253, 253, 254, 254, 254, 255, 255, 255,
62 255, 255, 255, 255, 254, 254, 254, 253, 253, 252, 251, 250, 250, 249, 248, 246,
63 245, 244, 243, 241, 240, 238, 237, 235, 234, 232, 230, 228, 226, 224, 222, 220,
64 218, 215, 213, 211, 208, 206, 203, 201, 198, 196, 193, 190, 188, 185, 182, 179,
65 176, 173, 170, 167, 165, 162, 158, 155, 152, 149, 146, 143, 140, 137, 134, 131,
66 128, 124, 121, 118, 115, 112, 109, 106, 103, 100, 97, 93, 90, 88, 85, 82,
67 79, 76, 73, 70, 67, 65, 62, 59, 57, 54, 52, 49, 47, 44, 42, 40,
68 37, 35, 33, 31, 29, 27, 25, 23, 21, 20, 18, 17, 15, 14, 12, 11,
69 10, 9, 7, 6, 5, 5, 4, 3, 2, 2, 1, 1, 1, 0, 0, 0
70};
71#endif
diff --git a/quantum/led_tables.h b/quantum/led_tables.h
new file mode 100644
index 000000000..af49bf332
--- /dev/null
+++ b/quantum/led_tables.h
@@ -0,0 +1,30 @@
1/*
2Copyright 2017 Fred Sundvik
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8This program is distributed in the hope that it will be useful,
9but WITHOUT ANY WARRANTY; without even the implied warranty of
10MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11GNU General Public License for more details.
12You should have received a copy of the GNU General Public License
13along with this program. If not, see <http://www.gnu.org/licenses/>.
14*/
15
16#ifndef LED_TABLES_H
17#define LED_TABLES_H
18
19#include "progmem.h"
20#include <stdint.h>
21
22#ifdef USE_CIE1931_CURVE
23extern const uint8_t CIE1931_CURVE[] PROGMEM;
24#endif
25
26#ifdef USE_LED_BREATHING_TABLE
27extern const uint8_t LED_BREATHING_TABLE[] PROGMEM;
28#endif
29
30#endif
diff --git a/quantum/rgblight.c b/quantum/rgblight.c
index eff70aae1..4eec2a776 100644
--- a/quantum/rgblight.c
+++ b/quantum/rgblight.c
@@ -20,56 +20,8 @@
20#include "timer.h" 20#include "timer.h"
21#include "rgblight.h" 21#include "rgblight.h"
22#include "debug.h" 22#include "debug.h"
23#include "led_tables.h"
23 24
24// Lightness curve using the CIE 1931 lightness formula
25//Generated by the python script provided in http://jared.geek.nz/2013/feb/linear-led-pwm
26const uint8_t DIM_CURVE[] PROGMEM = {
27 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
28 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
29 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
30 3, 4, 4, 4, 4, 4, 4, 5, 5, 5,
31 5, 5, 6, 6, 6, 6, 6, 7, 7, 7,
32 7, 8, 8, 8, 8, 9, 9, 9, 10, 10,
33 10, 10, 11, 11, 11, 12, 12, 12, 13, 13,
34 13, 14, 14, 15, 15, 15, 16, 16, 17, 17,
35 17, 18, 18, 19, 19, 20, 20, 21, 21, 22,
36 22, 23, 23, 24, 24, 25, 25, 26, 26, 27,
37 28, 28, 29, 29, 30, 31, 31, 32, 32, 33,
38 34, 34, 35, 36, 37, 37, 38, 39, 39, 40,
39 41, 42, 43, 43, 44, 45, 46, 47, 47, 48,
40 49, 50, 51, 52, 53, 54, 54, 55, 56, 57,
41 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
42 68, 70, 71, 72, 73, 74, 75, 76, 77, 79,
43 80, 81, 82, 83, 85, 86, 87, 88, 90, 91,
44 92, 94, 95, 96, 98, 99, 100, 102, 103, 105,
45 106, 108, 109, 110, 112, 113, 115, 116, 118, 120,
46 121, 123, 124, 126, 128, 129, 131, 132, 134, 136,
47 138, 139, 141, 143, 145, 146, 148, 150, 152, 154,
48 155, 157, 159, 161, 163, 165, 167, 169, 171, 173,
49 175, 177, 179, 181, 183, 185, 187, 189, 191, 193,
50 196, 198, 200, 202, 204, 207, 209, 211, 214, 216,
51 218, 220, 223, 225, 228, 230, 232, 235, 237, 240,
52 242, 245, 247, 250, 252, 255,
53 };
54
55const uint8_t RGBLED_BREATHING_TABLE[] PROGMEM = {
56 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 5, 5, 6, 7, 9,
57 10, 11, 12, 14, 15, 17, 18, 20, 21, 23, 25, 27, 29, 31, 33, 35,
58 37, 40, 42, 44, 47, 49, 52, 54, 57, 59, 62, 65, 67, 70, 73, 76,
59 79, 82, 85, 88, 90, 93, 97, 100, 103, 106, 109, 112, 115, 118, 121, 124,
60 127, 131, 134, 137, 140, 143, 146, 149, 152, 155, 158, 162, 165, 167, 170, 173,
61 176, 179, 182, 185, 188, 190, 193, 196, 198, 201, 203, 206, 208, 211, 213, 215,
62 218, 220, 222, 224, 226, 228, 230, 232, 234, 235, 237, 238, 240, 241, 243, 244,
63 245, 246, 248, 249, 250, 250, 251, 252, 253, 253, 254, 254, 254, 255, 255, 255,
64 255, 255, 255, 255, 254, 254, 254, 253, 253, 252, 251, 250, 250, 249, 248, 246,
65 245, 244, 243, 241, 240, 238, 237, 235, 234, 232, 230, 228, 226, 224, 222, 220,
66 218, 215, 213, 211, 208, 206, 203, 201, 198, 196, 193, 190, 188, 185, 182, 179,
67 176, 173, 170, 167, 165, 162, 158, 155, 152, 149, 146, 143, 140, 137, 134, 131,
68 128, 124, 121, 118, 115, 112, 109, 106, 103, 100, 97, 93, 90, 88, 85, 82,
69 79, 76, 73, 70, 67, 65, 62, 59, 57, 54, 52, 49, 47, 44, 42, 40,
70 37, 35, 33, 31, 29, 27, 25, 23, 21, 20, 18, 17, 15, 14, 12, 11,
71 10, 9, 7, 6, 5, 5, 4, 3, 2, 2, 1, 1, 1, 0, 0, 0
72};
73 25
74__attribute__ ((weak)) 26__attribute__ ((weak))
75const uint8_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {30, 20, 10, 5}; 27const uint8_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {30, 20, 10, 5};
@@ -135,9 +87,9 @@ void sethsv(uint16_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) {
135 break; 87 break;
136 } 88 }
137 } 89 }
138 r = pgm_read_byte(&DIM_CURVE[r]); 90 r = pgm_read_byte(&CIE1931_CURVE[r]);
139 g = pgm_read_byte(&DIM_CURVE[g]); 91 g = pgm_read_byte(&CIE1931_CURVE[g]);
140 b = pgm_read_byte(&DIM_CURVE[b]); 92 b = pgm_read_byte(&CIE1931_CURVE[b]);
141 93
142 setrgb(r, g, b, led1); 94 setrgb(r, g, b, led1);
143} 95}
@@ -509,7 +461,7 @@ void rgblight_effect_breathing(uint8_t interval) {
509 } 461 }
510 last_timer = timer_read(); 462 last_timer = timer_read();
511 463
512 rgblight_sethsv_noeeprom(rgblight_config.hue, rgblight_config.sat, pgm_read_byte(&RGBLED_BREATHING_TABLE[pos])); 464 rgblight_sethsv_noeeprom(rgblight_config.hue, rgblight_config.sat, pgm_read_byte(&LED_BREATHING_TABLE[pos]));
513 pos = (pos + 1) % 256; 465 pos = (pos + 1) % 256;
514} 466}
515void rgblight_effect_rainbow_mood(uint8_t interval) { 467void rgblight_effect_rainbow_mood(uint8_t interval) {
diff --git a/quantum/visualizer/visualizer.mk b/quantum/visualizer/visualizer.mk
index 8f5fb8933..3861cb1f0 100644
--- a/quantum/visualizer/visualizer.mk
+++ b/quantum/visualizer/visualizer.mk
@@ -32,12 +32,12 @@ OPT_DEFS += -DLCD_ENABLE
32ULIBS += -lm 32ULIBS += -lm
33endif 33endif
34 34
35ifdef LCD_BACKLIGHT_ENABLE 35ifeq ($(strip $(LCD_ENABLE)), yes)
36SRC += $(VISUALIZER_DIR)/lcd_backlight.c 36SRC += $(VISUALIZER_DIR)/lcd_backlight.c
37OPT_DEFS += -DLCD_BACKLIGHT_ENABLE 37OPT_DEFS += -DLCD_BACKLIGHT_ENABLE
38endif 38endif
39 39
40ifdef LED_ENABLE 40ifeq ($(strip $(LED_ENABLE)), yes)
41SRC += $(VISUALIZER_DIR)/led_test.c 41SRC += $(VISUALIZER_DIR)/led_test.c
42OPT_DEFS += -DLED_ENABLE 42OPT_DEFS += -DLED_ENABLE
43endif 43endif