Update clock.h to support uClock v2.2.1 and implement external PPQN 4 (#3)
Reviewed-on: https://git.pinkduck.xyz/adam/libGravity/pulls/3 Co-authored-by: Adam Wonak <adam.wonak@gmail.com> Co-committed-by: Adam Wonak <adam.wonak@gmail.com>
This commit is contained in:
@ -111,3 +111,4 @@ void UpdateDisplay() {
|
|||||||
gravity.display.display();
|
gravity.display.display();
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
26
clock.h
26
clock.h
@ -22,6 +22,8 @@ enum Source {
|
|||||||
SOURCE_INTERNAL,
|
SOURCE_INTERNAL,
|
||||||
SOURCE_EXTERNAL_PPQN_24,
|
SOURCE_EXTERNAL_PPQN_24,
|
||||||
SOURCE_EXTERNAL_PPQN_4,
|
SOURCE_EXTERNAL_PPQN_4,
|
||||||
|
// SOURCE_MIDI,
|
||||||
|
SOURCE_LAST,
|
||||||
};
|
};
|
||||||
|
|
||||||
class Clock {
|
class Clock {
|
||||||
@ -29,8 +31,8 @@ class Clock {
|
|||||||
void Init() {
|
void Init() {
|
||||||
// Initialize the clock library
|
// Initialize the clock library
|
||||||
uClock.init();
|
uClock.init();
|
||||||
uClock.setMode(uClock.INTERNAL_CLOCK);
|
uClock.setClockMode(uClock.INTERNAL_CLOCK);
|
||||||
uClock.setPPQN(uClock.PPQN_96);
|
uClock.setOutputPPQN(uClock.PPQN_96);
|
||||||
uClock.setTempo(DEFAULT_TEMPO);
|
uClock.setTempo(DEFAULT_TEMPO);
|
||||||
uClock.start();
|
uClock.start();
|
||||||
}
|
}
|
||||||
@ -42,30 +44,34 @@ class Clock {
|
|||||||
|
|
||||||
// Internal PPQN96 callback for all clock timer operations.
|
// Internal PPQN96 callback for all clock timer operations.
|
||||||
void AttachIntHandler(void (*callback)(uint32_t)) {
|
void AttachIntHandler(void (*callback)(uint32_t)) {
|
||||||
uClock.setOnPPQN(callback);
|
uClock.setOnOutputPPQN(callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the source of the clock mode.
|
// Set the source of the clock mode.
|
||||||
void SetSource(Source source) {
|
void SetSource(Source source) {
|
||||||
|
uClock.stop();
|
||||||
switch (source) {
|
switch (source) {
|
||||||
case SOURCE_INTERNAL:
|
case SOURCE_INTERNAL:
|
||||||
uClock.setMode(uClock.INTERNAL_CLOCK);
|
uClock.setClockMode(uClock.INTERNAL_CLOCK);
|
||||||
break;
|
break;
|
||||||
case SOURCE_EXTERNAL_PPQN_24:
|
case SOURCE_EXTERNAL_PPQN_24:
|
||||||
uClock.setMode(uClock.EXTERNAL_CLOCK);
|
uClock.setClockMode(uClock.EXTERNAL_CLOCK);
|
||||||
|
uClock.setInputPPQN(uClock.PPQN_24);
|
||||||
|
break;
|
||||||
case SOURCE_EXTERNAL_PPQN_4:
|
case SOURCE_EXTERNAL_PPQN_4:
|
||||||
uClock.setMode(uClock.EXTERNAL_CLOCK);
|
uClock.setClockMode(uClock.EXTERNAL_CLOCK);
|
||||||
default:
|
uClock.setInputPPQN(uClock.PPQN_4);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
uClock.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ExternalSource() {
|
bool ExternalSource() {
|
||||||
return uClock.getMode() == uClock.EXTERNAL_CLOCK;
|
return uClock.getClockMode() == uClock.EXTERNAL_CLOCK;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InternalSource() {
|
bool InternalSource() {
|
||||||
return uClock.getMode() == uClock.INTERNAL_CLOCK;
|
return uClock.getClockMode() == uClock.INTERNAL_CLOCK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Tempo() {
|
int Tempo() {
|
||||||
@ -85,7 +91,7 @@ class Clock {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool IsPaused() {
|
bool IsPaused() {
|
||||||
return uClock.state == uClock.PAUSED;
|
return uClock.clock_state == uClock.PAUSED;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -33,6 +33,7 @@ struct AppState {
|
|||||||
bool refresh_screen = true;
|
bool refresh_screen = true;
|
||||||
byte selected_param = 0;
|
byte selected_param = 0;
|
||||||
byte selected_channel = 0; // 0=tempo, 1-6=output channel
|
byte selected_channel = 0; // 0=tempo, 1-6=output channel
|
||||||
|
Source selected_source = SOURCE_INTERNAL;
|
||||||
Channel channel[OUTPUT_COUNT];
|
Channel channel[OUTPUT_COUNT];
|
||||||
};
|
};
|
||||||
AppState app;
|
AppState app;
|
||||||
@ -155,12 +156,14 @@ void HandleRotate(Direction dir, int val) {
|
|||||||
app.refresh_screen = true;
|
app.refresh_screen = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
if (gravity.clock.ExternalSource()) {
|
if (static_cast<Source>(app.selected_source) == 0 && val < 0) {
|
||||||
gravity.clock.SetSource(SOURCE_INTERNAL);
|
app.selected_source = static_cast<Source>(SOURCE_LAST - 1);
|
||||||
} else {
|
} else {
|
||||||
gravity.clock.SetSource(SOURCE_EXTERNAL_PPQN_24);
|
app.selected_source = static_cast<Source>((app.selected_source + val) % SOURCE_LAST);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gravity.clock.SetSource(app.selected_source);
|
||||||
app.refresh_screen = true;
|
app.refresh_screen = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -261,7 +264,23 @@ void DisplayMainPage() {
|
|||||||
|
|
||||||
gravity.display.setCursor(10, 10);
|
gravity.display.setCursor(10, 10);
|
||||||
gravity.display.print(F("Source: "));
|
gravity.display.print(F("Source: "));
|
||||||
gravity.display.print((gravity.clock.InternalSource()) ? F("INT") : F("EXT"));
|
switch (app.selected_source)
|
||||||
|
{
|
||||||
|
case SOURCE_INTERNAL:
|
||||||
|
gravity.display.print(F("INT"));
|
||||||
|
break;
|
||||||
|
case SOURCE_EXTERNAL_PPQN_24:
|
||||||
|
gravity.display.print(F("EXT 24 PPQN"));
|
||||||
|
break;
|
||||||
|
case SOURCE_EXTERNAL_PPQN_4:
|
||||||
|
gravity.display.print(F("EXT 4 PPQN"));
|
||||||
|
break;
|
||||||
|
// case SOURCE_EXTERNAL_MIDI:
|
||||||
|
// gravity.display.print(F("EXT MIDI"));
|
||||||
|
// break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DisplayChannelPage() {
|
void DisplayChannelPage() {
|
||||||
|
|||||||
Reference in New Issue
Block a user