summaryrefslogtreecommitdiff
path: root/quantum/sequencer
diff options
context:
space:
mode:
authorQMK Bot <hello@qmk.fm>2022-02-12 10:29:31 -0800
committerGitHub <noreply@github.com>2022-02-12 18:29:31 +0000
commit63646e8906e062d1c1de3925cba70c4e3426a855 (patch)
tree4e91648b77b838e1125cf86331d7e84bde6d07a9 /quantum/sequencer
parentafcdd7079c774dec2aa4b7f2d08adf8b7310919b (diff)
Format code according to conventions (#16322)
Diffstat (limited to 'quantum/sequencer')
-rw-r--r--quantum/sequencer/sequencer.c62
-rw-r--r--quantum/sequencer/sequencer.h8
-rw-r--r--quantum/sequencer/tests/midi_mock.c12
-rw-r--r--quantum/sequencer/tests/sequencer_tests.cpp4
4 files changed, 60 insertions, 26 deletions
diff --git a/quantum/sequencer/sequencer.c b/quantum/sequencer/sequencer.c
index 18a83661ec..2e92f7b3eb 100644
--- a/quantum/sequencer/sequencer.c
+++ b/quantum/sequencer/sequencer.c
@@ -25,16 +25,18 @@
25#endif 25#endif
26 26
27sequencer_config_t sequencer_config = { 27sequencer_config_t sequencer_config = {
28 false, // enabled 28 false, // enabled
29 {false}, // steps 29 {false}, // steps
30 {0}, // track notes 30 {0}, // track notes
31 60, // tempo 31 60, // tempo
32 SQ_RES_4, // resolution 32 SQ_RES_4, // resolution
33}; 33};
34 34
35sequencer_state_t sequencer_internal_state = {0, 0, 0, 0, SEQUENCER_PHASE_ATTACK}; 35sequencer_state_t sequencer_internal_state = {0, 0, 0, 0, SEQUENCER_PHASE_ATTACK};
36 36
37bool is_sequencer_on(void) { return sequencer_config.enabled; } 37bool is_sequencer_on(void) {
38 return sequencer_config.enabled;
39}
38 40
39void sequencer_on(void) { 41void sequencer_on(void) {
40 dprintln("sequencer on"); 42 dprintln("sequencer on");
@@ -65,7 +67,9 @@ void sequencer_set_track_notes(const uint16_t track_notes[SEQUENCER_TRACKS]) {
65 } 67 }
66} 68}
67 69
68bool is_sequencer_track_active(uint8_t track) { return (sequencer_internal_state.active_tracks >> track) & true; } 70bool is_sequencer_track_active(uint8_t track) {
71 return (sequencer_internal_state.active_tracks >> track) & true;
72}
69 73
70void sequencer_set_track_activation(uint8_t track, bool value) { 74void sequencer_set_track_activation(uint8_t track, bool value) {
71 if (value) { 75 if (value) {
@@ -76,7 +80,9 @@ void sequencer_set_track_activation(uint8_t track, bool value) {
76 dprintf("sequencer: track %d is %s\n", track, value ? "active" : "inactive"); 80 dprintf("sequencer: track %d is %s\n", track, value ? "active" : "inactive");
77} 81}
78 82
79void sequencer_toggle_track_activation(uint8_t track) { sequencer_set_track_activation(track, !is_sequencer_track_active(track)); } 83void sequencer_toggle_track_activation(uint8_t track) {
84 sequencer_set_track_activation(track, !is_sequencer_track_active(track));
85}
80 86
81void sequencer_toggle_single_active_track(uint8_t track) { 87void sequencer_toggle_single_active_track(uint8_t track) {
82 if (is_sequencer_track_active(track)) { 88 if (is_sequencer_track_active(track)) {
@@ -86,9 +92,13 @@ void sequencer_toggle_single_active_track(uint8_t track) {
86 } 92 }
87} 93}
88 94
89bool is_sequencer_step_on(uint8_t step) { return step < SEQUENCER_STEPS && (sequencer_config.steps[step] & sequencer_internal_state.active_tracks) > 0; } 95bool is_sequencer_step_on(uint8_t step) {
96 return step < SEQUENCER_STEPS && (sequencer_config.steps[step] & sequencer_internal_state.active_tracks) > 0;
97}
90 98
91bool is_sequencer_step_on_for_track(uint8_t step, uint8_t track) { return step < SEQUENCER_STEPS && (sequencer_config.steps[step] >> track) & true; } 99bool is_sequencer_step_on_for_track(uint8_t step, uint8_t track) {
100 return step < SEQUENCER_STEPS && (sequencer_config.steps[step] >> track) & true;
101}
92 102
93void sequencer_set_step(uint8_t step, bool value) { 103void sequencer_set_step(uint8_t step, bool value) {
94 if (step < SEQUENCER_STEPS) { 104 if (step < SEQUENCER_STEPS) {
@@ -122,7 +132,9 @@ void sequencer_set_all_steps(bool value) {
122 dprintf("sequencer: all steps are %s\n", value ? "on" : "off"); 132 dprintf("sequencer: all steps are %s\n", value ? "on" : "off");
123} 133}
124 134
125uint8_t sequencer_get_tempo(void) { return sequencer_config.tempo; } 135uint8_t sequencer_get_tempo(void) {
136 return sequencer_config.tempo;
137}
126 138
127void sequencer_set_tempo(uint8_t tempo) { 139void sequencer_set_tempo(uint8_t tempo) {
128 if (tempo > 0) { 140 if (tempo > 0) {
@@ -142,9 +154,13 @@ void sequencer_increase_tempo(void) {
142 } 154 }
143} 155}
144 156
145void sequencer_decrease_tempo(void) { sequencer_set_tempo(sequencer_config.tempo - 1); } 157void sequencer_decrease_tempo(void) {
158 sequencer_set_tempo(sequencer_config.tempo - 1);
159}
146 160
147sequencer_resolution_t sequencer_get_resolution(void) { return sequencer_config.resolution; } 161sequencer_resolution_t sequencer_get_resolution(void) {
162 return sequencer_config.resolution;
163}
148 164
149void sequencer_set_resolution(sequencer_resolution_t resolution) { 165void sequencer_set_resolution(sequencer_resolution_t resolution) {
150 if (resolution >= 0 && resolution < SEQUENCER_RESOLUTIONS) { 166 if (resolution >= 0 && resolution < SEQUENCER_RESOLUTIONS) {
@@ -155,11 +171,17 @@ void sequencer_set_resolution(sequencer_resolution_t resolution) {
155 } 171 }
156} 172}
157 173
158void sequencer_increase_resolution(void) { sequencer_set_resolution(sequencer_config.resolution + 1); } 174void sequencer_increase_resolution(void) {
175 sequencer_set_resolution(sequencer_config.resolution + 1);
176}
159 177
160void sequencer_decrease_resolution(void) { sequencer_set_resolution(sequencer_config.resolution - 1); } 178void sequencer_decrease_resolution(void) {
179 sequencer_set_resolution(sequencer_config.resolution - 1);
180}
161 181
162uint8_t sequencer_get_current_step(void) { return sequencer_internal_state.current_step; } 182uint8_t sequencer_get_current_step(void) {
183 return sequencer_internal_state.current_step;
184}
163 185
164void sequencer_phase_attack(void) { 186void sequencer_phase_attack(void) {
165 dprintf("sequencer: step %d\n", sequencer_internal_state.current_step); 187 dprintf("sequencer: step %d\n", sequencer_internal_state.current_step);
@@ -229,9 +251,13 @@ void sequencer_task(void) {
229 } 251 }
230} 252}
231 253
232uint16_t sequencer_get_beat_duration(void) { return get_beat_duration(sequencer_config.tempo); } 254uint16_t sequencer_get_beat_duration(void) {
255 return get_beat_duration(sequencer_config.tempo);
256}
233 257
234uint16_t sequencer_get_step_duration(void) { return get_step_duration(sequencer_config.tempo, sequencer_config.resolution); } 258uint16_t sequencer_get_step_duration(void) {
259 return get_step_duration(sequencer_config.tempo, sequencer_config.resolution);
260}
235 261
236uint16_t get_beat_duration(uint8_t tempo) { 262uint16_t get_beat_duration(uint8_t tempo) {
237 // Don’t crash in the unlikely case where the given tempo is 0 263 // Don’t crash in the unlikely case where the given tempo is 0
diff --git a/quantum/sequencer/sequencer.h b/quantum/sequencer/sequencer.h
index 4017ae764e..a8ea16eece 100644
--- a/quantum/sequencer/sequencer.h
+++ b/quantum/sequencer/sequencer.h
@@ -48,7 +48,7 @@ typedef struct {
48 bool enabled; 48 bool enabled;
49 uint8_t steps[SEQUENCER_STEPS]; 49 uint8_t steps[SEQUENCER_STEPS];
50 uint16_t track_notes[SEQUENCER_TRACKS]; 50 uint16_t track_notes[SEQUENCER_TRACKS];
51 uint8_t tempo; // Is a maximum tempo of 255 reasonable? 51 uint8_t tempo; // Is a maximum tempo of 255 reasonable?
52 sequencer_resolution_t resolution; 52 sequencer_resolution_t resolution;
53} sequencer_config_t; 53} sequencer_config_t;
54 54
@@ -57,9 +57,9 @@ typedef struct {
57 * We use a "phase" state machine to delay some of the events. 57 * We use a "phase" state machine to delay some of the events.
58 */ 58 */
59typedef enum sequencer_phase_t { 59typedef enum sequencer_phase_t {
60 SEQUENCER_PHASE_ATTACK, // t=0ms, send the MIDI note on signal 60 SEQUENCER_PHASE_ATTACK, // t=0ms, send the MIDI note on signal
61 SEQUENCER_PHASE_RELEASE, // t=SEQUENCER_PHASE_RELEASE_TIMEOUT ms, send the MIDI note off signal 61 SEQUENCER_PHASE_RELEASE, // t=SEQUENCER_PHASE_RELEASE_TIMEOUT ms, send the MIDI note off signal
62 SEQUENCER_PHASE_PAUSE // t=step duration ms, loop 62 SEQUENCER_PHASE_PAUSE // t=step duration ms, loop
63} sequencer_phase_t; 63} sequencer_phase_t;
64 64
65typedef struct { 65typedef struct {
diff --git a/quantum/sequencer/tests/midi_mock.c b/quantum/sequencer/tests/midi_mock.c
index 236e16f9d7..5bd945d615 100644
--- a/quantum/sequencer/tests/midi_mock.c
+++ b/quantum/sequencer/tests/midi_mock.c
@@ -19,8 +19,14 @@
19uint16_t last_noteon = 0; 19uint16_t last_noteon = 0;
20uint16_t last_noteoff = 0; 20uint16_t last_noteoff = 0;
21 21
22uint16_t midi_compute_note(uint16_t keycode) { return keycode; } 22uint16_t midi_compute_note(uint16_t keycode) {
23 return keycode;
24}
23 25
24void process_midi_basic_noteon(uint16_t note) { last_noteon = note; } 26void process_midi_basic_noteon(uint16_t note) {
27 last_noteon = note;
28}
25 29
26void process_midi_basic_noteoff(uint16_t note) { last_noteoff = note; } 30void process_midi_basic_noteoff(uint16_t note) {
31 last_noteoff = note;
32}
diff --git a/quantum/sequencer/tests/sequencer_tests.cpp b/quantum/sequencer/tests/sequencer_tests.cpp
index 290605a52a..05e58e4111 100644
--- a/quantum/sequencer/tests/sequencer_tests.cpp
+++ b/quantum/sequencer/tests/sequencer_tests.cpp
@@ -78,7 +78,9 @@ class SequencerTest : public ::testing::Test {
78 sequencer_state_t state_copy; 78 sequencer_state_t state_copy;
79}; 79};
80 80
81TEST_F(SequencerTest, TestOffByDefault) { EXPECT_EQ(is_sequencer_on(), false); } 81TEST_F(SequencerTest, TestOffByDefault) {
82 EXPECT_EQ(is_sequencer_on(), false);
83}
82 84
83TEST_F(SequencerTest, TestOn) { 85TEST_F(SequencerTest, TestOn) {
84 sequencer_config.enabled = false; 86 sequencer_config.enabled = false;