diff options
Diffstat (limited to 'quantum')
-rw-r--r-- | quantum/audio/audio_arm.c | 148 | ||||
-rw-r--r-- | quantum/audio/muse.c | 111 | ||||
-rw-r--r-- | quantum/audio/muse.h | 9 | ||||
-rw-r--r-- | quantum/config_common.h | 102 | ||||
-rw-r--r-- | quantum/process_keycode/process_audio.c | 4 | ||||
-rw-r--r-- | quantum/process_keycode/process_audio.h | 4 | ||||
-rw-r--r-- | quantum/process_keycode/process_music.c | 31 | ||||
-rw-r--r-- | quantum/process_keycode/process_music.h | 5 | ||||
-rw-r--r-- | quantum/rgblight.c | 20 | ||||
-rw-r--r-- | quantum/rgblight_types.h | 4 |
10 files changed, 339 insertions, 99 deletions
diff --git a/quantum/audio/audio_arm.c b/quantum/audio/audio_arm.c index 247dc337d..d38184f32 100644 --- a/quantum/audio/audio_arm.c +++ b/quantum/audio/audio_arm.c | |||
@@ -79,7 +79,7 @@ float startup_song[][2] = STARTUP_SONG; | |||
79 | 79 | ||
80 | static void gpt_cb8(GPTDriver *gptp); | 80 | static void gpt_cb8(GPTDriver *gptp); |
81 | 81 | ||
82 | #define DAC_BUFFER_SIZE 360 | 82 | #define DAC_BUFFER_SIZE 720 |
83 | 83 | ||
84 | #define START_CHANNEL_1() gptStart(&GPTD6, &gpt6cfg1); \ | 84 | #define START_CHANNEL_1() gptStart(&GPTD6, &gpt6cfg1); \ |
85 | gptStartContinuous(&GPTD6, 2U) | 85 | gptStartContinuous(&GPTD6, 2U) |
@@ -167,6 +167,39 @@ GPTConfig gpt8cfg1 = { | |||
167 | // 1622, 1657, 1692, 1727, 1763, 1798, 1834, 1869, 1905, 1940, 1976, 2012 | 167 | // 1622, 1657, 1692, 1727, 1763, 1798, 1834, 1869, 1905, 1940, 1976, 2012 |
168 | // }; | 168 | // }; |
169 | 169 | ||
170 | // static const dacsample_t dac_buffer_2[DAC_BUFFER_SIZE] = { | ||
171 | // 12, 8, 5, 3, 2, 1, 0, 1, 2, 3, 5, 8, | ||
172 | // 12, 16, 20, 26, 32, 38, 45, 53, 61, 70, 80, 90, | ||
173 | // 101, 112, 124, 136, 150, 163, 177, 192, 208, 224, 240, 257, | ||
174 | // 275, 293, 312, 331, 350, 371, 391, 413, 434, 457, 479, 503, | ||
175 | // 526, 550, 575, 600, 626, 651, 678, 705, 732, 759, 787, 816, | ||
176 | // 844, 873, 903, 933, 963, 993, 1024, 1055, 1086, 1118, 1150, 1182, | ||
177 | // 1215, 1248, 1281, 1314, 1347, 1381, 1415, 1449, 1483, 1518, 1552, 1587, | ||
178 | // 1622, 1657, 1692, 1727, 1763, 1798, 1834, 1869, 1905, 1940, 1976, 2012, | ||
179 | // 2047, 2082, 2118, 2154, 2189, 2225, 2260, 2296, 2331, 2367, 2402, 2437, | ||
180 | // 2472, 2507, 2542, 2576, 2611, 2645, 2679, 2713, 2747, 2780, 2813, 2846, | ||
181 | // 2879, 2912, 2944, 2976, 3008, 3039, 3070, 3101, 3131, 3161, 3191, 3221, | ||
182 | // 3250, 3278, 3307, 3335, 3362, 3389, 3416, 3443, 3468, 3494, 3519, 3544, | ||
183 | // 3568, 3591, 3615, 3637, 3660, 3681, 3703, 3723, 3744, 3763, 3782, 3801, | ||
184 | // 3819, 3837, 3854, 3870, 3886, 3902, 3917, 3931, 3944, 3958, 3970, 3982, | ||
185 | // 3993, 4004, 4014, 4024, 4033, 4041, 4049, 4056, 4062, 4068, 4074, 4078, | ||
186 | // 4082, 4086, 4089, 4091, 4092, 4093, 4094, 4093, 4092, 4091, 4089, 4086, | ||
187 | // 4082, 4078, 4074, 4068, 4062, 4056, 4049, 4041, 4033, 4024, 4014, 4004, | ||
188 | // 3993, 3982, 3970, 3958, 3944, 3931, 3917, 3902, 3886, 3870, 3854, 3837, | ||
189 | // 3819, 3801, 3782, 3763, 3744, 3723, 3703, 3681, 3660, 3637, 3615, 3591, | ||
190 | // 3568, 3544, 3519, 3494, 3468, 3443, 3416, 3389, 3362, 3335, 3307, 3278, | ||
191 | // 3250, 3221, 3191, 3161, 3131, 3101, 3070, 3039, 3008, 2976, 2944, 2912, | ||
192 | // 2879, 2846, 2813, 2780, 2747, 2713, 2679, 2645, 2611, 2576, 2542, 2507, | ||
193 | // 2472, 2437, 2402, 2367, 2331, 2296, 2260, 2225, 2189, 2154, 2118, 2082, | ||
194 | // 2047, 2012, 1976, 1940, 1905, 1869, 1834, 1798, 1763, 1727, 1692, 1657, | ||
195 | // 1622, 1587, 1552, 1518, 1483, 1449, 1415, 1381, 1347, 1314, 1281, 1248, | ||
196 | // 1215, 1182, 1150, 1118, 1086, 1055, 1024, 993, 963, 933, 903, 873, | ||
197 | // 844, 816, 787, 759, 732, 705, 678, 651, 626, 600, 575, 550, | ||
198 | // 526, 503, 479, 457, 434, 413, 391, 371, 350, 331, 312, 293, | ||
199 | // 275, 257, 240, 224, 208, 192, 177, 163, 150, 136, 124, 112, | ||
200 | // 101, 90, 80, 70, 61, 53, 45, 38, 32, 26, 20, 16 | ||
201 | // }; | ||
202 | |||
170 | // squarewave | 203 | // squarewave |
171 | static const dacsample_t dac_buffer[DAC_BUFFER_SIZE] = { | 204 | static const dacsample_t dac_buffer[DAC_BUFFER_SIZE] = { |
172 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | 205 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, |
@@ -184,6 +217,21 @@ static const dacsample_t dac_buffer[DAC_BUFFER_SIZE] = { | |||
184 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | 217 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, |
185 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | 218 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, |
186 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | 219 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, |
220 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
221 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
222 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
223 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
224 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
225 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
226 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
227 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
228 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
229 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
230 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
231 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
232 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
233 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
234 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
187 | 235 | ||
188 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 236 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
189 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 237 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
@@ -199,26 +247,26 @@ static const dacsample_t dac_buffer[DAC_BUFFER_SIZE] = { | |||
199 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 247 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
200 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 248 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
201 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 249 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
250 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
251 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
252 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
253 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
254 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
255 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
256 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
257 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
258 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
259 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
260 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
261 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
262 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
263 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
264 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
202 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | 265 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 |
203 | }; | 266 | }; |
204 | 267 | ||
205 | // squarewave | 268 | // squarewave |
206 | static const dacsample_t dac_buffer_2[DAC_BUFFER_SIZE] = { | 269 | static const dacsample_t dac_buffer_2[DAC_BUFFER_SIZE] = { |
207 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
208 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
209 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
210 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
211 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
212 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
213 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
214 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
215 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
216 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
217 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
218 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
219 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
220 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
221 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
222 | 270 | ||
223 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 271 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
224 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 272 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
@@ -234,7 +282,52 @@ static const dacsample_t dac_buffer_2[DAC_BUFFER_SIZE] = { | |||
234 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 282 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
235 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 283 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
236 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 284 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
237 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | 285 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
286 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
287 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
288 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
289 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
290 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
291 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
292 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
293 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
294 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
295 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
296 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
297 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
298 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
299 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
300 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
301 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
302 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
303 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
304 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
305 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
306 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
307 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
308 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
309 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
310 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
311 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
312 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
313 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
314 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
315 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
316 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
317 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
318 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
319 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
320 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
321 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
322 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
323 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
324 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
325 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
326 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
327 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
328 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
329 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
330 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047 | ||
238 | }; | 331 | }; |
239 | 332 | ||
240 | /* | 333 | /* |
@@ -317,7 +410,7 @@ void audio_init() | |||
317 | dacStart(&DACD2, &dac1cfg2); | 410 | dacStart(&DACD2, &dac1cfg2); |
318 | 411 | ||
319 | /* | 412 | /* |
320 | * Starting GPT6 driver, it is used for triggering the DAC. | 413 | * Starting GPT6/7 driver, it is used for triggering the DAC. |
321 | */ | 414 | */ |
322 | START_CHANNEL_1(); | 415 | START_CHANNEL_1(); |
323 | START_CHANNEL_2(); | 416 | START_CHANNEL_2(); |
@@ -325,12 +418,8 @@ void audio_init() | |||
325 | /* | 418 | /* |
326 | * Starting a continuous conversion. | 419 | * Starting a continuous conversion. |
327 | */ | 420 | */ |
328 | dacStartConversion(&DACD1, &dacgrpcfg1, | 421 | dacStartConversion(&DACD1, &dacgrpcfg1, (dacsample_t *)dac_buffer, DAC_BUFFER_SIZE); |
329 | (dacsample_t *)dac_buffer, DAC_BUFFER_SIZE); | 422 | dacStartConversion(&DACD2, &dacgrpcfg2, (dacsample_t *)dac_buffer_2, DAC_BUFFER_SIZE); |
330 | dacStartConversion(&DACD2, &dacgrpcfg2, | ||
331 | (dacsample_t *)dac_buffer_2, DAC_BUFFER_SIZE); | ||
332 | // gptStartContinuous(&GPTD6, 2U); | ||
333 | |||
334 | 423 | ||
335 | audio_initialized = true; | 424 | audio_initialized = true; |
336 | 425 | ||
@@ -469,6 +558,8 @@ static void gpt_cb8(GPTDriver *gptp) { | |||
469 | 558 | ||
470 | if (GET_CHANNEL_2_FREQ != (uint16_t)freq_alt) { | 559 | if (GET_CHANNEL_2_FREQ != (uint16_t)freq_alt) { |
471 | UPDATE_CHANNEL_2_FREQ(freq_alt); | 560 | UPDATE_CHANNEL_2_FREQ(freq_alt); |
561 | } else { | ||
562 | RESTART_CHANNEL_2(); | ||
472 | } | 563 | } |
473 | //note_timbre; | 564 | //note_timbre; |
474 | } | 565 | } |
@@ -528,6 +619,8 @@ static void gpt_cb8(GPTDriver *gptp) { | |||
528 | 619 | ||
529 | if (GET_CHANNEL_1_FREQ != (uint16_t)freq) { | 620 | if (GET_CHANNEL_1_FREQ != (uint16_t)freq) { |
530 | UPDATE_CHANNEL_1_FREQ(freq); | 621 | UPDATE_CHANNEL_1_FREQ(freq); |
622 | } else { | ||
623 | RESTART_CHANNEL_1(); | ||
531 | } | 624 | } |
532 | //note_timbre; | 625 | //note_timbre; |
533 | } | 626 | } |
@@ -565,11 +658,11 @@ static void gpt_cb8(GPTDriver *gptp) { | |||
565 | bool end_of_note = false; | 658 | bool end_of_note = false; |
566 | if (GET_CHANNEL_1_FREQ > 0) { | 659 | if (GET_CHANNEL_1_FREQ > 0) { |
567 | if (!note_resting) | 660 | if (!note_resting) |
568 | end_of_note = (note_position >= (note_length*16 - 1)); | 661 | end_of_note = (note_position >= (note_length*8 - 1)); |
569 | else | 662 | else |
570 | end_of_note = (note_position >= (note_length*16)); | 663 | end_of_note = (note_position >= (note_length*8)); |
571 | } else { | 664 | } else { |
572 | end_of_note = (note_position >= (note_length*16)); | 665 | end_of_note = (note_position >= (note_length*8)); |
573 | } | 666 | } |
574 | 667 | ||
575 | if (end_of_note) { | 668 | if (end_of_note) { |
@@ -622,6 +715,7 @@ void play_note(float freq, int vol) { | |||
622 | 715 | ||
623 | if (audio_config.enable && voices < 8) { | 716 | if (audio_config.enable && voices < 8) { |
624 | 717 | ||
718 | |||
625 | // Cancel notes if notes are playing | 719 | // Cancel notes if notes are playing |
626 | if (playing_notes) | 720 | if (playing_notes) |
627 | stop_all_notes(); | 721 | stop_all_notes(); |
diff --git a/quantum/audio/muse.c b/quantum/audio/muse.c new file mode 100644 index 000000000..f3cb592d8 --- /dev/null +++ b/quantum/audio/muse.c | |||
@@ -0,0 +1,111 @@ | |||
1 | #include "muse.h" | ||
2 | |||
3 | enum { | ||
4 | MUSE_OFF, | ||
5 | MUSE_ON, | ||
6 | MUSE_C_1_2, | ||
7 | MUSE_C1, | ||
8 | MUSE_C2, | ||
9 | MUSE_C4, | ||
10 | MUSE_C8, | ||
11 | MUSE_C3, | ||
12 | MUSE_C6, | ||
13 | MUSE_B1, | ||
14 | MUSE_B2, | ||
15 | MUSE_B3, | ||
16 | MUSE_B4, | ||
17 | MUSE_B5, | ||
18 | MUSE_B6, | ||
19 | MUSE_B7, | ||
20 | MUSE_B8, | ||
21 | MUSE_B9, | ||
22 | MUSE_B10, | ||
23 | MUSE_B11, | ||
24 | MUSE_B12, | ||
25 | MUSE_B13, | ||
26 | MUSE_B14, | ||
27 | MUSE_B15, | ||
28 | MUSE_B16, | ||
29 | MUSE_B17, | ||
30 | MUSE_B18, | ||
31 | MUSE_B19, | ||
32 | MUSE_B20, | ||
33 | MUSE_B21, | ||
34 | MUSE_B22, | ||
35 | MUSE_B23, | ||
36 | MUSE_B24, | ||
37 | MUSE_B25, | ||
38 | MUSE_B26, | ||
39 | MUSE_B27, | ||
40 | MUSE_B28, | ||
41 | MUSE_B29, | ||
42 | MUSE_B30, | ||
43 | MUSE_B31 | ||
44 | }; | ||
45 | |||
46 | bool number_of_ones_to_bool[16] = { | ||
47 | 1, 0, 0, 1, 0, 1, 1, 0, | ||
48 | 0, 1, 1, 0, 1, 0, 0, 1 | ||
49 | }; | ||
50 | |||
51 | uint8_t muse_interval[4] = {MUSE_B7, MUSE_B19, MUSE_B3, MUSE_B28}; | ||
52 | uint8_t muse_theme[4] = {MUSE_B8, MUSE_B23, MUSE_B18, MUSE_B17}; | ||
53 | |||
54 | bool muse_timer_1bit = 0; | ||
55 | uint8_t muse_timer_2bit = 0; | ||
56 | uint8_t muse_timer_2bit_counter = 0; | ||
57 | uint8_t muse_timer_4bit = 0; | ||
58 | uint32_t muse_timer_31bit = 0; | ||
59 | |||
60 | bool bit_for_value(uint8_t value) { | ||
61 | switch (value) { | ||
62 | case MUSE_OFF: | ||
63 | return 0; | ||
64 | case MUSE_ON: | ||
65 | return 1; | ||
66 | case MUSE_C_1_2: | ||
67 | return muse_timer_1bit; | ||
68 | case MUSE_C1: | ||
69 | return (muse_timer_4bit & 1); | ||
70 | case MUSE_C2: | ||
71 | return (muse_timer_4bit & 2); | ||
72 | case MUSE_C4: | ||
73 | return (muse_timer_4bit & 4); | ||
74 | case MUSE_C8: | ||
75 | return (muse_timer_4bit & 8); | ||
76 | case MUSE_C3: | ||
77 | return (muse_timer_2bit & 1); | ||
78 | case MUSE_C6: | ||
79 | return (muse_timer_2bit & 2); | ||
80 | default: | ||
81 | return muse_timer_31bit & (1UL << (value - MUSE_B1)); | ||
82 | } | ||
83 | } | ||
84 | |||
85 | uint8_t muse_clock_pulse(void) { | ||
86 | |||
87 | bool top = number_of_ones_to_bool[ | ||
88 | bit_for_value(muse_theme[0]) + | ||
89 | (bit_for_value(muse_theme[1]) << 1) + | ||
90 | (bit_for_value(muse_theme[2]) << 2) + | ||
91 | (bit_for_value(muse_theme[3]) << 3) | ||
92 | ]; | ||
93 | |||
94 | if (muse_timer_1bit == 0) { | ||
95 | if (muse_timer_2bit_counter == 0) { | ||
96 | muse_timer_2bit = (muse_timer_2bit + 1) % 4; | ||
97 | } | ||
98 | muse_timer_2bit_counter = (muse_timer_2bit_counter + 1) % 3; | ||
99 | muse_timer_4bit = (muse_timer_4bit + 1) % 16; | ||
100 | muse_timer_31bit = (muse_timer_31bit << 1) + top; | ||
101 | } | ||
102 | |||
103 | muse_timer_1bit = (muse_timer_1bit + 1) % 2; | ||
104 | |||
105 | return | ||
106 | bit_for_value(muse_interval[0]) + | ||
107 | (bit_for_value(muse_interval[1]) << 1) + | ||
108 | (bit_for_value(muse_interval[2]) << 2) + | ||
109 | (bit_for_value(muse_interval[3]) << 3); | ||
110 | |||
111 | } | ||
diff --git a/quantum/audio/muse.h b/quantum/audio/muse.h new file mode 100644 index 000000000..6f382a7fe --- /dev/null +++ b/quantum/audio/muse.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #ifndef MUSE_H | ||
2 | #define MUSE_H | ||
3 | |||
4 | #include "quantum.h" | ||
5 | #include "process_audio.h" | ||
6 | |||
7 | uint8_t muse_clock_pulse(void); | ||
8 | |||
9 | #endif | ||
diff --git a/quantum/config_common.h b/quantum/config_common.h index 4c6a702af..f6f51b367 100644 --- a/quantum/config_common.h +++ b/quantum/config_common.h | |||
@@ -22,56 +22,58 @@ | |||
22 | #define ROW2COL 1 | 22 | #define ROW2COL 1 |
23 | #define CUSTOM_MATRIX 2 /* Disables built-in matrix scanning code */ | 23 | #define CUSTOM_MATRIX 2 /* Disables built-in matrix scanning code */ |
24 | 24 | ||
25 | /* I/O pins */ | 25 | #ifdef __AVR__ |
26 | #ifndef F0 | 26 | /* I/O pins */ |
27 | #define B0 0x30 | 27 | #ifndef F0 |
28 | #define B1 0x31 | 28 | #define B0 0x30 |
29 | #define B2 0x32 | 29 | #define B1 0x31 |
30 | #define B3 0x33 | 30 | #define B2 0x32 |
31 | #define B4 0x34 | 31 | #define B3 0x33 |
32 | #define B5 0x35 | 32 | #define B4 0x34 |
33 | #define B6 0x36 | 33 | #define B5 0x35 |
34 | #define B7 0x37 | 34 | #define B6 0x36 |
35 | #define C0 0x60 | 35 | #define B7 0x37 |
36 | #define C1 0x61 | 36 | #define C0 0x60 |
37 | #define C2 0x62 | 37 | #define C1 0x61 |
38 | #define C3 0x63 | 38 | #define C2 0x62 |
39 | #define C4 0x64 | 39 | #define C3 0x63 |
40 | #define C5 0x65 | 40 | #define C4 0x64 |
41 | #define C6 0x66 | 41 | #define C5 0x65 |
42 | #define C7 0x67 | 42 | #define C6 0x66 |
43 | #define D0 0x90 | 43 | #define C7 0x67 |
44 | #define D1 0x91 | 44 | #define D0 0x90 |
45 | #define D2 0x92 | 45 | #define D1 0x91 |
46 | #define D3 0x93 | 46 | #define D2 0x92 |
47 | #define D4 0x94 | 47 | #define D3 0x93 |
48 | #define D5 0x95 | 48 | #define D4 0x94 |
49 | #define D6 0x96 | 49 | #define D5 0x95 |
50 | #define D7 0x97 | 50 | #define D6 0x96 |
51 | #define E0 0xC0 | 51 | #define D7 0x97 |
52 | #define E1 0xC1 | 52 | #define E0 0xC0 |
53 | #define E2 0xC2 | 53 | #define E1 0xC1 |
54 | #define E3 0xC3 | 54 | #define E2 0xC2 |
55 | #define E4 0xC4 | 55 | #define E3 0xC3 |
56 | #define E5 0xC5 | 56 | #define E4 0xC4 |
57 | #define E6 0xC6 | 57 | #define E5 0xC5 |
58 | #define E7 0xC7 | 58 | #define E6 0xC6 |
59 | #define F0 0xF0 | 59 | #define E7 0xC7 |
60 | #define F1 0xF1 | 60 | #define F0 0xF0 |
61 | #define F2 0xF2 | 61 | #define F1 0xF1 |
62 | #define F3 0xF3 | 62 | #define F2 0xF2 |
63 | #define F4 0xF4 | 63 | #define F3 0xF3 |
64 | #define F5 0xF5 | 64 | #define F4 0xF4 |
65 | #define F6 0xF6 | 65 | #define F5 0xF5 |
66 | #define F7 0xF7 | 66 | #define F6 0xF6 |
67 | #define A0 0x00 | 67 | #define F7 0xF7 |
68 | #define A1 0x01 | 68 | #define A0 0x00 |
69 | #define A2 0x02 | 69 | #define A1 0x01 |
70 | #define A3 0x03 | 70 | #define A2 0x02 |
71 | #define A4 0x04 | 71 | #define A3 0x03 |
72 | #define A5 0x05 | 72 | #define A4 0x04 |
73 | #define A6 0x06 | 73 | #define A5 0x05 |
74 | #define A7 0x07 | 74 | #define A6 0x06 |
75 | #define A7 0x07 | ||
76 | #endif | ||
75 | #endif | 77 | #endif |
76 | 78 | ||
77 | /* USART configuration */ | 79 | /* USART configuration */ |
diff --git a/quantum/process_keycode/process_audio.c b/quantum/process_keycode/process_audio.c index e9b20512e..0a25aa535 100644 --- a/quantum/process_keycode/process_audio.c +++ b/quantum/process_keycode/process_audio.c | |||
@@ -10,9 +10,7 @@ float voice_change_song[][2] = VOICE_CHANGE_SONG; | |||
10 | #define PITCH_STANDARD_A 440.0f | 10 | #define PITCH_STANDARD_A 440.0f |
11 | #endif | 11 | #endif |
12 | 12 | ||
13 | 13 | float compute_freq_for_midi_note(uint8_t note) | |
14 | |||
15 | static float compute_freq_for_midi_note(uint8_t note) | ||
16 | { | 14 | { |
17 | // https://en.wikipedia.org/wiki/MIDI_tuning_standard | 15 | // https://en.wikipedia.org/wiki/MIDI_tuning_standard |
18 | return pow(2.0, (note - 69) / 12.0) * PITCH_STANDARD_A; | 16 | return pow(2.0, (note - 69) / 12.0) * PITCH_STANDARD_A; |
diff --git a/quantum/process_keycode/process_audio.h b/quantum/process_keycode/process_audio.h index 7ac15b733..3a84c3d86 100644 --- a/quantum/process_keycode/process_audio.h +++ b/quantum/process_keycode/process_audio.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef PROCESS_AUDIO_H | 1 | #ifndef PROCESS_AUDIO_H |
2 | #define PROCESS_AUDIO_H | 2 | #define PROCESS_AUDIO_H |
3 | 3 | ||
4 | float compute_freq_for_midi_note(uint8_t note); | ||
5 | |||
4 | bool process_audio(uint16_t keycode, keyrecord_t *record); | 6 | bool process_audio(uint16_t keycode, keyrecord_t *record); |
5 | void process_audio_noteon(uint8_t note); | 7 | void process_audio_noteon(uint8_t note); |
6 | void process_audio_noteoff(uint8_t note); | 8 | void process_audio_noteoff(uint8_t note); |
@@ -8,4 +10,4 @@ void process_audio_all_notes_off(void); | |||
8 | 10 | ||
9 | void audio_on_user(void); | 11 | void audio_on_user(void); |
10 | 12 | ||
11 | #endif \ No newline at end of file | 13 | #endif |
diff --git a/quantum/process_keycode/process_music.c b/quantum/process_keycode/process_music.c index 742bb08b1..697aa237f 100644 --- a/quantum/process_keycode/process_music.c +++ b/quantum/process_keycode/process_music.c | |||
@@ -197,17 +197,26 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { | |||
197 | } | 197 | } |
198 | } | 198 | } |
199 | 199 | ||
200 | uint8_t note; | 200 | uint8_t note = 36; |
201 | if (music_mode == MUSIC_MODE_CHROMATIC) | 201 | #ifdef MUSIC_MAP |
202 | note = (music_starting_note + record->event.key.col + music_offset - 3)+12*(MATRIX_ROWS - record->event.key.row); | 202 | if (music_mode == MUSIC_MODE_CHROMATIC) { |
203 | else if (music_mode == MUSIC_MODE_GUITAR) | 203 | note = music_starting_note + music_offset + 36 + music_map[record->event.key.row][record->event.key.col]; |
204 | note = (music_starting_note + record->event.key.col + music_offset + 32)+5*(MATRIX_ROWS - record->event.key.row); | 204 | } else { |
205 | else if (music_mode == MUSIC_MODE_VIOLIN) | 205 | uint8_t position = music_map[record->event.key.row][record->event.key.col]; |
206 | note = (music_starting_note + record->event.key.col + music_offset + 32)+7*(MATRIX_ROWS - record->event.key.row); | 206 | note = music_starting_note + music_offset + 36 + SCALE[position % 12] + (position / 12)*12; |
207 | else if (music_mode == MUSIC_MODE_MAJOR) | 207 | } |
208 | note = (music_starting_note + SCALE[record->event.key.col + music_offset] - 3)+12*(MATRIX_ROWS - record->event.key.row); | 208 | #else |
209 | else | 209 | if (music_mode == MUSIC_MODE_CHROMATIC) |
210 | note = music_starting_note; | 210 | note = (music_starting_note + record->event.key.col + music_offset - 3)+12*(MATRIX_ROWS - record->event.key.row); |
211 | else if (music_mode == MUSIC_MODE_GUITAR) | ||
212 | note = (music_starting_note + record->event.key.col + music_offset + 32)+5*(MATRIX_ROWS - record->event.key.row); | ||
213 | else if (music_mode == MUSIC_MODE_VIOLIN) | ||
214 | note = (music_starting_note + record->event.key.col + music_offset + 32)+7*(MATRIX_ROWS - record->event.key.row); | ||
215 | else if (music_mode == MUSIC_MODE_MAJOR) | ||
216 | note = (music_starting_note + SCALE[record->event.key.col + music_offset] - 3)+12*(MATRIX_ROWS - record->event.key.row); | ||
217 | else | ||
218 | note = music_starting_note; | ||
219 | #endif | ||
211 | 220 | ||
212 | if (record->event.pressed) { | 221 | if (record->event.pressed) { |
213 | music_noteon(note); | 222 | music_noteon(note); |
diff --git a/quantum/process_keycode/process_music.h b/quantum/process_keycode/process_music.h index 8ccb7a3a5..f6753d4f2 100644 --- a/quantum/process_keycode/process_music.h +++ b/quantum/process_keycode/process_music.h | |||
@@ -29,6 +29,11 @@ enum music_modes { | |||
29 | NUMBER_OF_MODES | 29 | NUMBER_OF_MODES |
30 | }; | 30 | }; |
31 | 31 | ||
32 | |||
33 | #ifdef MUSIC_MAP | ||
34 | extern const uint8_t music_map[MATRIX_ROWS][MATRIX_COLS]; | ||
35 | #endif | ||
36 | |||
32 | bool process_music(uint16_t keycode, keyrecord_t *record); | 37 | bool process_music(uint16_t keycode, keyrecord_t *record); |
33 | 38 | ||
34 | bool is_music_on(void); | 39 | bool is_music_on(void); |
diff --git a/quantum/rgblight.c b/quantum/rgblight.c index 4e2671d24..2490a1d9f 100644 --- a/quantum/rgblight.c +++ b/quantum/rgblight.c | |||
@@ -14,9 +14,11 @@ | |||
14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
15 | */ | 15 | */ |
16 | #include <math.h> | 16 | #include <math.h> |
17 | #include <avr/eeprom.h> | 17 | #ifdef __AVR__ |
18 | #include <avr/interrupt.h> | 18 | #include <avr/eeprom.h> |
19 | #include <util/delay.h> | 19 | #include <avr/interrupt.h> |
20 | #endif | ||
21 | #include "wait.h" | ||
20 | #include "progmem.h" | 22 | #include "progmem.h" |
21 | #include "timer.h" | 23 | #include "timer.h" |
22 | #include "rgblight.h" | 24 | #include "rgblight.h" |
@@ -113,10 +115,16 @@ void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1) { | |||
113 | 115 | ||
114 | 116 | ||
115 | uint32_t eeconfig_read_rgblight(void) { | 117 | uint32_t eeconfig_read_rgblight(void) { |
116 | return eeprom_read_dword(EECONFIG_RGBLIGHT); | 118 | #ifdef __AVR__ |
119 | return eeprom_read_dword(EECONFIG_RGBLIGHT); | ||
120 | #else | ||
121 | return 0; | ||
122 | #endif | ||
117 | } | 123 | } |
118 | void eeconfig_update_rgblight(uint32_t val) { | 124 | void eeconfig_update_rgblight(uint32_t val) { |
119 | eeprom_update_dword(EECONFIG_RGBLIGHT, val); | 125 | #ifdef __AVR__ |
126 | eeprom_update_dword(EECONFIG_RGBLIGHT, val); | ||
127 | #endif | ||
120 | } | 128 | } |
121 | void eeconfig_update_rgblight_default(void) { | 129 | void eeconfig_update_rgblight_default(void) { |
122 | dprintf("eeconfig_update_rgblight_default\n"); | 130 | dprintf("eeconfig_update_rgblight_default\n"); |
@@ -311,7 +319,7 @@ void rgblight_disable(void) { | |||
311 | #ifdef RGBLIGHT_ANIMATIONS | 319 | #ifdef RGBLIGHT_ANIMATIONS |
312 | rgblight_timer_disable(); | 320 | rgblight_timer_disable(); |
313 | #endif | 321 | #endif |
314 | _delay_ms(50); | 322 | wait_ms(50); |
315 | rgblight_set(); | 323 | rgblight_set(); |
316 | } | 324 | } |
317 | 325 | ||
diff --git a/quantum/rgblight_types.h b/quantum/rgblight_types.h index b1aa7026c..49ef5c8ea 100644 --- a/quantum/rgblight_types.h +++ b/quantum/rgblight_types.h | |||
@@ -23,7 +23,9 @@ | |||
23 | #ifndef RGBLIGHT_TYPES | 23 | #ifndef RGBLIGHT_TYPES |
24 | #define RGBLIGHT_TYPES | 24 | #define RGBLIGHT_TYPES |
25 | 25 | ||
26 | #include <avr/io.h> | 26 | #ifdef __AVR__ |
27 | #include <avr/io.h> | ||
28 | #endif | ||
27 | 29 | ||
28 | #ifdef RGBW | 30 | #ifdef RGBW |
29 | #define LED_TYPE struct cRGBW | 31 | #define LED_TYPE struct cRGBW |