Vendorize uClock #10
4
clock.h
4
clock.h
@ -13,7 +13,7 @@
|
|||||||
#define CLOCK_H
|
#define CLOCK_H
|
||||||
|
|
||||||
#include <NeoHWSerial.h>
|
#include <NeoHWSerial.h>
|
||||||
#include <uClock.h>
|
#include "uClock.h"
|
||||||
|
|
||||||
#include "peripherials.h"
|
#include "peripherials.h"
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ class Clock {
|
|||||||
// MIDI events.
|
// MIDI events.
|
||||||
uClock.setOnClockStart(sendMIDIStart);
|
uClock.setOnClockStart(sendMIDIStart);
|
||||||
uClock.setOnClockStop(sendMIDIStop);
|
uClock.setOnClockStop(sendMIDIStop);
|
||||||
// uClock.setOnSync24(sendMIDIClock);
|
uClock.setOnSync24(sendMIDIClock);
|
||||||
// uClock.setOnSync48(sendPulseOut);
|
// uClock.setOnSync48(sendPulseOut);
|
||||||
|
|
||||||
uClock.start();
|
uClock.start();
|
||||||
|
|||||||
@ -26,7 +26,7 @@
|
|||||||
* DEALINGS IN THE SOFTWARE.
|
* DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
#include "uClock.h"
|
#include "uClock.h"
|
||||||
#include "platforms/avr.h"
|
#include "uClock/platforms/avr.h"
|
||||||
|
|
||||||
//
|
//
|
||||||
// Platform specific timer setup/control
|
// Platform specific timer setup/control
|
||||||
@ -72,6 +72,7 @@ uClockClass::uClockClass()
|
|||||||
resetCounters();
|
resetCounters();
|
||||||
|
|
||||||
onOutputPPQNCallback = nullptr;
|
onOutputPPQNCallback = nullptr;
|
||||||
|
onSync24Callback = nullptr;
|
||||||
onClockStartCallback = nullptr;
|
onClockStartCallback = nullptr;
|
||||||
onClockStopCallback = nullptr;
|
onClockStopCallback = nullptr;
|
||||||
// initialize reference data
|
// initialize reference data
|
||||||
@ -96,6 +97,7 @@ uint32_t uClockClass::bpmToMicroSeconds(float bpm)
|
|||||||
void uClockClass::calculateReferencedata()
|
void uClockClass::calculateReferencedata()
|
||||||
{
|
{
|
||||||
mod_clock_ref = output_ppqn / input_ppqn;
|
mod_clock_ref = output_ppqn / input_ppqn;
|
||||||
|
mod_sync24_ref = output_ppqn / PPQN_24;
|
||||||
}
|
}
|
||||||
|
|
||||||
void uClockClass::setOutputPPQN(PPQNResolution resolution)
|
void uClockClass::setOutputPPQN(PPQNResolution resolution)
|
||||||
@ -191,13 +193,7 @@ float uClockClass::getTempo()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// for software timer implementation(fallback for no board support)
|
// for software timer implementation(fallback for no board support)
|
||||||
void uClockClass::run()
|
void uClockClass::run() {}
|
||||||
{
|
|
||||||
#if !defined(UCLOCK_PLATFORM_FOUND)
|
|
||||||
// call software timer implementation of software
|
|
||||||
softwareTimerHandler(micros());
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
float inline uClockClass::freqToBpm(uint32_t freq)
|
float inline uClockClass::freqToBpm(uint32_t freq)
|
||||||
{
|
{
|
||||||
@ -243,6 +239,10 @@ void uClockClass::resetCounters()
|
|||||||
tick = 0;
|
tick = 0;
|
||||||
int_clock_tick = 0;
|
int_clock_tick = 0;
|
||||||
mod_clock_counter = 0;
|
mod_clock_counter = 0;
|
||||||
|
|
||||||
|
mod_sync24_counter = 0;
|
||||||
|
sync24_tick = 0;
|
||||||
|
|
||||||
ext_clock_tick = 0;
|
ext_clock_tick = 0;
|
||||||
ext_clock_us = 0;
|
ext_clock_us = 0;
|
||||||
ext_interval_idx = 0;
|
ext_interval_idx = 0;
|
||||||
@ -328,6 +328,17 @@ void uClockClass::handleTimerInt()
|
|||||||
}
|
}
|
||||||
++mod_clock_counter;
|
++mod_clock_counter;
|
||||||
|
|
||||||
|
// Sync24 callback
|
||||||
|
if (onSync24Callback) {
|
||||||
|
if (mod_sync24_counter == mod_sync24_ref)
|
||||||
|
mod_sync24_counter = 0;
|
||||||
|
if (mod_sync24_counter == 0) {
|
||||||
|
onSync24Callback(sync24_tick);
|
||||||
|
++sync24_tick;
|
||||||
|
}
|
||||||
|
++mod_sync24_counter;
|
||||||
|
}
|
||||||
|
|
||||||
// main PPQNCallback
|
// main PPQNCallback
|
||||||
if (onOutputPPQNCallback) {
|
if (onOutputPPQNCallback) {
|
||||||
onOutputPPQNCallback(tick);
|
onOutputPPQNCallback(tick);
|
||||||
@ -80,6 +80,10 @@ class uClockClass {
|
|||||||
onOutputPPQNCallback = callback;
|
onOutputPPQNCallback = callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setOnSync24(void (*callback)(uint32_t tick)) {
|
||||||
|
onSync24Callback = callback;
|
||||||
|
}
|
||||||
|
|
||||||
void setOnClockStart(void (*callback)()) {
|
void setOnClockStart(void (*callback)()) {
|
||||||
onClockStartCallback = callback;
|
onClockStartCallback = callback;
|
||||||
}
|
}
|
||||||
@ -132,6 +136,7 @@ class uClockClass {
|
|||||||
void calculateReferencedata();
|
void calculateReferencedata();
|
||||||
|
|
||||||
void (*onOutputPPQNCallback)(uint32_t tick);
|
void (*onOutputPPQNCallback)(uint32_t tick);
|
||||||
|
void (*onSync24Callback)(uint32_t tick);
|
||||||
void (*onClockStartCallback)();
|
void (*onClockStartCallback)();
|
||||||
void (*onClockStopCallback)();
|
void (*onClockStopCallback)();
|
||||||
|
|
||||||
@ -144,6 +149,10 @@ class uClockClass {
|
|||||||
uint8_t mod_clock_counter;
|
uint8_t mod_clock_counter;
|
||||||
uint16_t mod_clock_ref;
|
uint16_t mod_clock_ref;
|
||||||
|
|
||||||
|
uint8_t mod_sync24_counter;
|
||||||
|
uint16_t mod_sync24_ref;
|
||||||
|
uint32_t sync24_tick;
|
||||||
|
|
||||||
// external clock control
|
// external clock control
|
||||||
volatile uint32_t ext_clock_us;
|
volatile uint32_t ext_clock_us;
|
||||||
volatile uint32_t ext_clock_tick;
|
volatile uint32_t ext_clock_tick;
|
||||||
Reference in New Issue
Block a user