add additional external ppqn
This commit is contained in:
@ -266,6 +266,12 @@ void DisplayMainPage() {
|
||||
case Clock::SOURCE_EXTERNAL_PPQN_4:
|
||||
subText = F("4 PPQN");
|
||||
break;
|
||||
case Clock::SOURCE_EXTERNAL_PPQN_2:
|
||||
subText = F("2 PPQN");
|
||||
break;
|
||||
case Clock::SOURCE_EXTERNAL_PPQN_1:
|
||||
subText = F("1 PPQN");
|
||||
break;
|
||||
case Clock::SOURCE_EXTERNAL_MIDI:
|
||||
subText = F("MIDI");
|
||||
break;
|
||||
|
||||
@ -285,6 +285,12 @@ void DisplayMainPage() {
|
||||
case Clock::SOURCE_EXTERNAL_PPQN_4:
|
||||
subText = F("4 PPQN");
|
||||
break;
|
||||
case Clock::SOURCE_EXTERNAL_PPQN_2:
|
||||
subText = F("2 PPQN");
|
||||
break;
|
||||
case Clock::SOURCE_EXTERNAL_PPQN_1:
|
||||
subText = F("1 PPQN");
|
||||
break;
|
||||
case Clock::SOURCE_EXTERNAL_MIDI:
|
||||
subText = F("MIDI");
|
||||
break;
|
||||
|
||||
65
src/clock.h
65
src/clock.h
@ -17,7 +17,8 @@
|
||||
#include "peripherials.h"
|
||||
#include "uClock/uClock.h"
|
||||
|
||||
// MIDI clock, start, stop, and continue byte definitions - based on MIDI 1.0 Standards.
|
||||
// MIDI clock, start, stop, and continue byte definitions - based on MIDI 1.0
|
||||
// Standards.
|
||||
#define MIDI_CLOCK 0xF8
|
||||
#define MIDI_START 0xFA
|
||||
#define MIDI_STOP 0xFC
|
||||
@ -35,6 +36,8 @@ class Clock {
|
||||
SOURCE_INTERNAL,
|
||||
SOURCE_EXTERNAL_PPQN_24,
|
||||
SOURCE_EXTERNAL_PPQN_4,
|
||||
SOURCE_EXTERNAL_PPQN_2,
|
||||
SOURCE_EXTERNAL_PPQN_1,
|
||||
SOURCE_EXTERNAL_MIDI,
|
||||
SOURCE_LAST,
|
||||
};
|
||||
@ -64,7 +67,8 @@ class Clock {
|
||||
uClock.start();
|
||||
}
|
||||
|
||||
// Handle external clock tick and call user callback when receiving clock trigger (PPQN_4, PPQN_24, or MIDI).
|
||||
// Handle external clock tick and call user callback when receiving clock
|
||||
// trigger (PPQN_4, PPQN_24, or MIDI).
|
||||
void AttachExtHandler(void (*callback)()) {
|
||||
extUserCallback = callback;
|
||||
attachInterrupt(digitalPinToInterrupt(EXT_PIN), callback, RISING);
|
||||
@ -79,7 +83,8 @@ class Clock {
|
||||
void SetSource(Source source) {
|
||||
bool was_playing = !IsPaused();
|
||||
uClock.stop();
|
||||
// If we are changing the source from MIDI, disable the serial interrupt handler.
|
||||
// If we are changing the source from MIDI, disable the serial interrupt
|
||||
// handler.
|
||||
if (source_ == SOURCE_EXTERNAL_MIDI) {
|
||||
NeoSerial.attachInterrupt(serialEventNoop);
|
||||
}
|
||||
@ -96,6 +101,14 @@ class Clock {
|
||||
uClock.setClockMode(uClock.EXTERNAL_CLOCK);
|
||||
uClock.setInputPPQN(uClock.PPQN_4);
|
||||
break;
|
||||
case SOURCE_EXTERNAL_PPQN_2:
|
||||
uClock.setClockMode(uClock.EXTERNAL_CLOCK);
|
||||
uClock.setInputPPQN(uClock.PPQN_2);
|
||||
break;
|
||||
case SOURCE_EXTERNAL_PPQN_1:
|
||||
uClock.setClockMode(uClock.EXTERNAL_CLOCK);
|
||||
uClock.setInputPPQN(uClock.PPQN_1);
|
||||
break;
|
||||
case SOURCE_EXTERNAL_MIDI:
|
||||
uClock.setClockMode(uClock.EXTERNAL_CLOCK);
|
||||
uClock.setInputPPQN(uClock.PPQN_24);
|
||||
@ -107,7 +120,8 @@ class Clock {
|
||||
}
|
||||
}
|
||||
|
||||
// Return true if the current selected source is externl (PPQN_4, PPQN_24, or MIDI).
|
||||
// Return true if the current selected source is externl (PPQN_4, PPQN_24, or
|
||||
// MIDI).
|
||||
bool ExternalSource() {
|
||||
return uClock.getClockMode() == uClock.EXTERNAL_CLOCK;
|
||||
}
|
||||
@ -118,39 +132,26 @@ class Clock {
|
||||
}
|
||||
|
||||
// Returns the current BPM tempo.
|
||||
int Tempo() {
|
||||
return uClock.getTempo();
|
||||
}
|
||||
int Tempo() { return uClock.getTempo(); }
|
||||
|
||||
// Set the clock tempo to a int between 1 and 400.
|
||||
void SetTempo(int tempo) {
|
||||
return uClock.setTempo(tempo);
|
||||
}
|
||||
void SetTempo(int tempo) { return uClock.setTempo(tempo); }
|
||||
|
||||
// Record an external clock tick received to process external/internal syncronization.
|
||||
void Tick() {
|
||||
uClock.clockMe();
|
||||
}
|
||||
// Record an external clock tick received to process external/internal
|
||||
// syncronization.
|
||||
void Tick() { uClock.clockMe(); }
|
||||
|
||||
// Start the internal clock.
|
||||
void Start() {
|
||||
uClock.start();
|
||||
}
|
||||
void Start() { uClock.start(); }
|
||||
|
||||
// Stop internal clock clock.
|
||||
void Stop() {
|
||||
uClock.stop();
|
||||
}
|
||||
void Stop() { uClock.stop(); }
|
||||
|
||||
// Reset all clock counters to 0.
|
||||
void Reset() {
|
||||
uClock.resetCounters();
|
||||
}
|
||||
void Reset() { uClock.resetCounters(); }
|
||||
|
||||
// Returns true if the clock is not running.
|
||||
bool IsPaused() {
|
||||
return uClock.clock_state == uClock.PAUSED;
|
||||
}
|
||||
bool IsPaused() { return uClock.clock_state == uClock.PAUSED; }
|
||||
|
||||
private:
|
||||
Source source_ = SOURCE_INTERNAL;
|
||||
@ -175,17 +176,11 @@ class Clock {
|
||||
}
|
||||
}
|
||||
|
||||
static void sendMIDIStart() {
|
||||
NeoSerial.write(MIDI_START);
|
||||
}
|
||||
static void sendMIDIStart() { NeoSerial.write(MIDI_START); }
|
||||
|
||||
static void sendMIDIStop() {
|
||||
NeoSerial.write(MIDI_STOP);
|
||||
}
|
||||
static void sendMIDIStop() { NeoSerial.write(MIDI_STOP); }
|
||||
|
||||
static void sendMIDIClock(uint32_t tick) {
|
||||
NeoSerial.write(MIDI_CLOCK);
|
||||
}
|
||||
static void sendMIDIClock(uint32_t tick) { NeoSerial.write(MIDI_CLOCK); }
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user