aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Humbert <jack.humb@gmail.com>2016-12-19 11:18:18 -0500
committerJack Humbert <jack.humb@gmail.com>2016-12-19 11:18:18 -0500
commit06c64bbff3e228df542149acde64eadaf59b9b0f (patch)
tree9bda86e11116ba8f66de345fd4ce940c2698d630
parentae95834f5af7404c04e6fe3446019046278d814b (diff)
downloadqmk_firmware-06c64bbff3e228df542149acde64eadaf59b9b0f.tar.gz
qmk_firmware-06c64bbff3e228df542149acde64eadaf59b9b0f.zip
rgb clean-up, api clean-up
-rw-r--r--keyboards/ergodox/ez/config.h1
-rw-r--r--quantum/api.c43
-rw-r--r--quantum/audio/audio.c15
-rw-r--r--quantum/audio/voices.c45
-rw-r--r--quantum/audio/voices.h1
-rwxr-xr-xquantum/light_ws2812.h7
6 files changed, 77 insertions, 35 deletions
diff --git a/keyboards/ergodox/ez/config.h b/keyboards/ergodox/ez/config.h
index c2750a321..f532b2d5a 100644
--- a/keyboards/ergodox/ez/config.h
+++ b/keyboards/ergodox/ez/config.h
@@ -52,6 +52,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
52#define RGB_MIDI 52#define RGB_MIDI
53#define RGBW_BB_TWI 53#define RGBW_BB_TWI
54 54
55#define RGBW 1
55 56
56/* Set 0 if debouncing isn't needed */ 57/* Set 0 if debouncing isn't needed */
57#define DEBOUNCE 5 58#define DEBOUNCE 5
diff --git a/quantum/api.c b/quantum/api.c
index 4ca3b9676..6a7c0a433 100644
--- a/quantum/api.c
+++ b/quantum/api.c
@@ -116,28 +116,29 @@ void process_api(uint16_t length, uint8_t * data) {
116 MT_GET_DATA_ACK(DT_KEYMAP_SIZE, keymap_size, 2); 116 MT_GET_DATA_ACK(DT_KEYMAP_SIZE, keymap_size, 2);
117 break; 117 break;
118 } 118 }
119 case DT_KEYMAP: { 119 // This may be too much
120 uint8_t keymap_data[MATRIX_ROWS * MATRIX_COLS * 4 + 3]; 120 // case DT_KEYMAP: {
121 keymap_data[0] = data[2]; 121 // uint8_t keymap_data[MATRIX_ROWS * MATRIX_COLS * 4 + 3];
122 keymap_data[1] = MATRIX_ROWS; 122 // keymap_data[0] = data[2];
123 keymap_data[2] = MATRIX_COLS; 123 // keymap_data[1] = MATRIX_ROWS;
124 for (int i = 0; i < MATRIX_ROWS; i++) { 124 // keymap_data[2] = MATRIX_COLS;
125 for (int j = 0; j < MATRIX_COLS; j++) { 125 // for (int i = 0; i < MATRIX_ROWS; i++) {
126 keymap_data[3 + (i*MATRIX_COLS*2) + (j*2)] = pgm_read_word(&keymaps[data[2]][i][j]) >> 8; 126 // for (int j = 0; j < MATRIX_COLS; j++) {
127 keymap_data[3 + (i*MATRIX_COLS*2) + (j*2) + 1] = pgm_read_word(&keymaps[data[2]][i][j]) & 0xFF; 127 // keymap_data[3 + (i*MATRIX_COLS*2) + (j*2)] = pgm_read_word(&keymaps[data[2]][i][j]) >> 8;
128 } 128 // keymap_data[3 + (i*MATRIX_COLS*2) + (j*2) + 1] = pgm_read_word(&keymaps[data[2]][i][j]) & 0xFF;
129 } 129 // }
130 MT_GET_DATA_ACK(DT_KEYMAP, keymap_data, MATRIX_ROWS * MATRIX_COLS * 4 + 3); 130 // }
131 // uint8_t keymap_data[5]; 131 // MT_GET_DATA_ACK(DT_KEYMAP, keymap_data, MATRIX_ROWS * MATRIX_COLS * 4 + 3);
132 // keymap_data[0] = data[2]; 132 // // uint8_t keymap_data[5];
133 // keymap_data[1] = data[3]; 133 // // keymap_data[0] = data[2];
134 // keymap_data[2] = data[4]; 134 // // keymap_data[1] = data[3];
135 // keymap_data[3] = pgm_read_word(&keymaps[data[2]][data[3]][data[4]]) >> 8; 135 // // keymap_data[2] = data[4];
136 // keymap_data[4] = pgm_read_word(&keymaps[data[2]][data[3]][data[4]]) & 0xFF; 136 // // keymap_data[3] = pgm_read_word(&keymaps[data[2]][data[3]][data[4]]) >> 8;
137 // // keymap_data[4] = pgm_read_word(&keymaps[data[2]][data[3]][data[4]]) & 0xFF;
137 138
138 // MT_GET_DATA_ACK(DT_KEYMAP, keymap_data, 5); 139 // // MT_GET_DATA_ACK(DT_KEYMAP, keymap_data, 5);
139 break; 140 // break;
140 } 141 // }
141 default: 142 default:
142 break; 143 break;
143 } 144 }
diff --git a/quantum/audio/audio.c b/quantum/audio/audio.c
index ead5fbf3e..2a315fd16 100644
--- a/quantum/audio/audio.c
+++ b/quantum/audio/audio.c
@@ -77,6 +77,7 @@ static bool audio_initialized = false;
77audio_config_t audio_config; 77audio_config_t audio_config;
78 78
79uint16_t envelope_index = 0; 79uint16_t envelope_index = 0;
80bool glissando = true;
80 81
81void audio_init() 82void audio_init()
82{ 83{
@@ -205,13 +206,17 @@ ISR(TIMER3_COMPA_vect)
205 freq = frequencies[voice_place]; 206 freq = frequencies[voice_place];
206 #endif 207 #endif
207 } else { 208 } else {
208 if (frequency != 0 && frequency < frequencies[voices - 1] && frequency < frequencies[voices - 1] * pow(2, -440/frequencies[voices - 1]/12/2)) { 209 if (glissando) {
209 frequency = frequency * pow(2, 440/frequency/12/2); 210 if (frequency != 0 && frequency < frequencies[voices - 1] && frequency < frequencies[voices - 1] * pow(2, -440/frequencies[voices - 1]/12/2)) {
210 } else if (frequency != 0 && frequency > frequencies[voices - 1] && frequency > frequencies[voices - 1] * pow(2, 440/frequencies[voices - 1]/12/2)) { 211 frequency = frequency * pow(2, 440/frequency/12/2);
211 frequency = frequency * pow(2, -440/frequency/12/2); 212 } else if (frequency != 0 && frequency > frequencies[voices - 1] && frequency > frequencies[voices - 1] * pow(2, 440/frequencies[voices - 1]/12/2)) {
213 frequency = frequency * pow(2, -440/frequency/12/2);
214 } else {
215 frequency = frequencies[voices - 1];
216 }
212 } else { 217 } else {
213 frequency = frequencies[voices - 1]; 218 frequency = frequencies[voices - 1];
214 } 219 }
215 220
216 #ifdef VIBRATO_ENABLE 221 #ifdef VIBRATO_ENABLE
217 if (vibrato_strength > 0) { 222 if (vibrato_strength > 0) {
diff --git a/quantum/audio/voices.c b/quantum/audio/voices.c
index 19f7b646e..06ff275ba 100644
--- a/quantum/audio/voices.c
+++ b/quantum/audio/voices.c
@@ -6,6 +6,7 @@
6extern uint16_t envelope_index; 6extern uint16_t envelope_index;
7extern float note_timbre; 7extern float note_timbre;
8extern float polyphony_rate; 8extern float polyphony_rate;
9extern bool glissando;
9 10
10voice_type voice = default_voice; 11voice_type voice = default_voice;
11 12
@@ -27,11 +28,13 @@ float voice_envelope(float frequency) {
27 28
28 switch (voice) { 29 switch (voice) {
29 case default_voice: 30 case default_voice:
31 glissando = true;
30 note_timbre = TIMBRE_50; 32 note_timbre = TIMBRE_50;
31 polyphony_rate = 0; 33 polyphony_rate = 0;
32 break; 34 break;
33 35
34 case something: 36 case something:
37 glissando = false;
35 polyphony_rate = 0; 38 polyphony_rate = 0;
36 switch (compensated_index) { 39 switch (compensated_index) {
37 case 0 ... 9: 40 case 0 ... 9:
@@ -43,16 +46,51 @@ float voice_envelope(float frequency) {
43 break; 46 break;
44 47
45 case 20 ... 200: 48 case 20 ... 200:
46 note_timbre = .25 + .125 + pow(((float)compensated_index - 20) / (200 - 20), 2)*.125; 49 note_timbre = .125 + .125;
47 break; 50 break;
48 51
49 default: 52 default:
50 note_timbre = .25; 53 note_timbre = .125;
51 break; 54 break;
52 } 55 }
53 break; 56 break;
54 57
58 case drums:
59 glissando = false;
60 polyphony_rate = 0;
61 note_timbre = 0;
62 switch (envelope_index) {
63 case 0 ... 20:
64 note_timbre = 0.5;
65 default:
66 frequency = (rand() % (int)(frequency * 1.2 - frequency)) + (frequency * 0.8);
67 break;
68 }
69 // if (frequency < 80.0) {
70 // switch (envelope_index % 4) {
71 // case 0:
72 // frequency = 348.0;
73 // case 1:
74 // frequency = 53.0;
75 // case 2:
76 // frequency = 128.0;
77 // case 3:
78 // frequency = 934.0;
79 // default:
80 // break;
81 // }
82 // } else if (frequency < 160.0) {
83
84 // } else if (frequency < 320.0) {
85
86 // } else if (frequency < 640.0) {
87
88 // } else if (frequency < 1280.0) {
89
90 // }
91 break;
55 case butts_fader: 92 case butts_fader:
93 glissando = true;
56 polyphony_rate = 0; 94 polyphony_rate = 0;
57 switch (compensated_index) { 95 switch (compensated_index) {
58 case 0 ... 9: 96 case 0 ... 9:
@@ -100,6 +138,7 @@ float voice_envelope(float frequency) {
100 138
101 case duty_osc: 139 case duty_osc:
102 // This slows the loop down a substantial amount, so higher notes may freeze 140 // This slows the loop down a substantial amount, so higher notes may freeze
141 glissando = true;
103 polyphony_rate = 0; 142 polyphony_rate = 0;
104 switch (compensated_index) { 143 switch (compensated_index) {
105 default: 144 default:
@@ -114,6 +153,7 @@ float voice_envelope(float frequency) {
114 break; 153 break;
115 154
116 case duty_octave_down: 155 case duty_octave_down:
156 glissando = true;
117 polyphony_rate = 0; 157 polyphony_rate = 0;
118 note_timbre = (envelope_index % 2) * .125 + .375 * 2; 158 note_timbre = (envelope_index % 2) * .125 + .375 * 2;
119 if ((envelope_index % 4) == 0) 159 if ((envelope_index % 4) == 0)
@@ -122,6 +162,7 @@ float voice_envelope(float frequency) {
122 note_timbre = 0; 162 note_timbre = 0;
123 break; 163 break;
124 case delayed_vibrato: 164 case delayed_vibrato:
165 glissando = true;
125 polyphony_rate = 0; 166 polyphony_rate = 0;
126 note_timbre = TIMBRE_50; 167 note_timbre = TIMBRE_50;
127 #define VOICE_VIBRATO_DELAY 150 168 #define VOICE_VIBRATO_DELAY 150
diff --git a/quantum/audio/voices.h b/quantum/audio/voices.h
index b43def3d7..72f139e9c 100644
--- a/quantum/audio/voices.h
+++ b/quantum/audio/voices.h
@@ -12,6 +12,7 @@ float voice_envelope(float frequency);
12typedef enum { 12typedef enum {
13 default_voice, 13 default_voice,
14 something, 14 something,
15 drums,
15 butts_fader, 16 butts_fader,
16 octave_crunch, 17 octave_crunch,
17 duty_osc, 18 duty_osc,
diff --git a/quantum/light_ws2812.h b/quantum/light_ws2812.h
index 9498e550e..2f78c20fc 100755
--- a/quantum/light_ws2812.h
+++ b/quantum/light_ws2812.h
@@ -18,13 +18,6 @@
18//#include "ws2812_config.h" 18//#include "ws2812_config.h"
19//#include "i2cmaster.h" 19//#include "i2cmaster.h"
20 20
21#define LIGHT_I2C 1
22#define LIGHT_I2C_ADDR 0x84
23#define LIGHT_I2C_ADDR_WRITE ( (LIGHT_I2C_ADDR<<1) | I2C_WRITE )
24#define LIGHT_I2C_ADDR_READ ( (LIGHT_I2C_ADDR<<1) | I2C_READ )
25
26#define RGBW 1
27
28#ifdef RGBW 21#ifdef RGBW
29 #define LED_TYPE struct cRGBW 22 #define LED_TYPE struct cRGBW
30#else 23#else