Reorganization of library structure to better match Arduino spec (#20)
Note, this will also require to you "uninstall and reinstall" the Arduino library due to the library file location changes. Reviewed-on: https://git.pinkduck.xyz/awonak/libGravity/pulls/20
This commit is contained in:
@ -17,7 +17,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "gravity.h"
|
#include <libGravity.h>
|
||||||
|
|
||||||
// Firmware state variables.
|
// Firmware state variables.
|
||||||
struct Channel {
|
struct Channel {
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
* @file Gravity.ino
|
* @file Gravity.ino
|
||||||
* @author Adam Wonak (https://github.com/awonak/)
|
* @author Adam Wonak (https://github.com/awonak/)
|
||||||
* @brief Alt firmware version of Gravity by Sitka Instruments.
|
* @brief Alt firmware version of Gravity by Sitka Instruments.
|
||||||
* @version v2.0.1 - June 2025 awonak - Full rewrite
|
* @version v2.0.0 - June 2025 awonak - Full rewrite
|
||||||
* @version v1.0 - August 2023 Oleksiy H - Initial release
|
* @version v1.0 - August 2023 Oleksiy H - Initial release
|
||||||
* @date 2025-07-04
|
* @date 2025-07-04
|
||||||
*
|
*
|
||||||
@ -46,7 +46,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <gravity.h>
|
#include <libGravity.h>
|
||||||
|
|
||||||
#include "app_state.h"
|
#include "app_state.h"
|
||||||
#include "channel.h"
|
#include "channel.h"
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
#ifndef APP_STATE_H
|
#ifndef APP_STATE_H
|
||||||
#define APP_STATE_H
|
#define APP_STATE_H
|
||||||
|
|
||||||
#include <gravity.h>
|
#include <libGravity.h>
|
||||||
|
|
||||||
#include "channel.h"
|
#include "channel.h"
|
||||||
|
|
||||||
|
|||||||
@ -13,7 +13,7 @@
|
|||||||
#define CHANNEL_H
|
#define CHANNEL_H
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <gravity.h>
|
#include <libGravity.h>
|
||||||
|
|
||||||
#include "euclidean.h"
|
#include "euclidean.h"
|
||||||
|
|
||||||
|
|||||||
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
// Define the constants for the current firmware.
|
// Define the constants for the current firmware.
|
||||||
const char StateManager::SKETCH_NAME[] = "ALT GRAVITY";
|
const char StateManager::SKETCH_NAME[] = "ALT GRAVITY";
|
||||||
const char StateManager::SEMANTIC_VERSION[] = "V2.0.0BETA2";
|
const char StateManager::SEMANTIC_VERSION[] = "V2.0.0BETA2"; // NOTE: This should match the version in the library.properties file.
|
||||||
|
|
||||||
// Number of available save slots.
|
// Number of available save slots.
|
||||||
const byte StateManager::MAX_SAVE_SLOTS = 10;
|
const byte StateManager::MAX_SAVE_SLOTS = 10;
|
||||||
|
|||||||
@ -13,7 +13,7 @@
|
|||||||
#define SAVE_STATE_H
|
#define SAVE_STATE_H
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <gravity.h>
|
#include <libGravity.h>
|
||||||
|
|
||||||
// Forward-declare AppState to avoid circular dependencies.
|
// Forward-declare AppState to avoid circular dependencies.
|
||||||
struct AppState;
|
struct AppState;
|
||||||
|
|||||||
10
library.properties
Normal file
10
library.properties
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
name=libGravity
|
||||||
|
version=2.0.0beta2
|
||||||
|
author=Adam Wonak
|
||||||
|
maintainer=awonak <github.com/awonak>
|
||||||
|
sentence=Hardware abstraction library for Sitka Instruments Gravity eurorack module
|
||||||
|
category=Other
|
||||||
|
license=MIT
|
||||||
|
url=https://github.com/awonak/libGravity
|
||||||
|
architectures=avr
|
||||||
|
depends=uClock,RotaryEncoder,U8g2
|
||||||
@ -15,7 +15,7 @@
|
|||||||
#include <NeoHWSerial.h>
|
#include <NeoHWSerial.h>
|
||||||
|
|
||||||
#include "peripherials.h"
|
#include "peripherials.h"
|
||||||
#include "uClock.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_CLOCK 0xF8
|
||||||
@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @file gravity.cpp
|
* @file libGravity.cpp
|
||||||
* @author Adam Wonak (https://github.com/awonak)
|
* @author Adam Wonak (https://github.com/awonak)
|
||||||
* @brief Library for building custom scripts for the Sitka Instruments Gravity module.
|
* @brief Library for building custom scripts for the Sitka Instruments Gravity module.
|
||||||
* @version 0.1
|
* @version 0.1
|
||||||
@ -9,7 +9,7 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "gravity.h"
|
#include "libGravity.h"
|
||||||
|
|
||||||
// Initialize the static pointer for the EncoderDir class to null. We want to
|
// Initialize the static pointer for the EncoderDir class to null. We want to
|
||||||
// have a static pointer to decouple the ISR from the global gravity object.
|
// have a static pointer to decouple the ISR from the global gravity object.
|
||||||
@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* @file gravity.h
|
* @file libGravity.h
|
||||||
* @author Adam Wonak (https://github.com/awonak)
|
* @author Adam Wonak (https://github.com/awonak)
|
||||||
* @brief Library for building custom scripts for the Sitka Instruments Gravity module.
|
* @brief Library for building custom scripts for the Sitka Instruments Gravity module.
|
||||||
* @version 0.1
|
* @version 0.1
|
||||||
@ -32,7 +32,7 @@
|
|||||||
* DEALINGS IN THE SOFTWARE.
|
* DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
#include "uClock.h"
|
#include "uClock.h"
|
||||||
#include "uClock/platforms/avr.h"
|
#include "platforms/avr.h"
|
||||||
|
|
||||||
//
|
//
|
||||||
// Platform specific timer setup/control
|
// Platform specific timer setup/control
|
||||||
180
uClock/uClock.h
180
uClock/uClock.h
@ -1,180 +0,0 @@
|
|||||||
/*!
|
|
||||||
* @file uClock.h
|
|
||||||
* Project BPM clock generator for Arduino
|
|
||||||
* @brief A Library to implement BPM clock tick calls using hardware interruption. Supported and tested on AVR boards(ATmega168/328, ATmega16u4/32u4 and ATmega2560) and ARM boards(RPI2040, Teensy, Seedstudio XIAO M0 and ESP32)
|
|
||||||
* @version 2.2.1
|
|
||||||
* @author Romulo Silva
|
|
||||||
* @date 10/06/2017
|
|
||||||
* @license MIT - (c) 2024 - Romulo Silva - contact@midilab.co
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
* DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __U_CLOCK_H__
|
|
||||||
#define __U_CLOCK_H__
|
|
||||||
|
|
||||||
#include <Arduino.h>
|
|
||||||
#include <inttypes.h>
|
|
||||||
|
|
||||||
namespace umodular { namespace clock {
|
|
||||||
|
|
||||||
#define MIN_BPM 1
|
|
||||||
#define MAX_BPM 400
|
|
||||||
|
|
||||||
#define PHASE_FACTOR 16
|
|
||||||
#define PLL_X 220
|
|
||||||
|
|
||||||
#define SECS_PER_MIN (60UL)
|
|
||||||
#define SECS_PER_HOUR (3600UL)
|
|
||||||
#define SECS_PER_DAY (SECS_PER_HOUR * 24L)
|
|
||||||
|
|
||||||
class uClockClass {
|
|
||||||
|
|
||||||
public:
|
|
||||||
enum ClockMode {
|
|
||||||
INTERNAL_CLOCK = 0,
|
|
||||||
EXTERNAL_CLOCK
|
|
||||||
};
|
|
||||||
|
|
||||||
enum ClockState {
|
|
||||||
PAUSED = 0,
|
|
||||||
STARTING,
|
|
||||||
STARTED
|
|
||||||
};
|
|
||||||
|
|
||||||
enum PPQNResolution {
|
|
||||||
PPQN_1 = 1,
|
|
||||||
PPQN_2 = 2,
|
|
||||||
PPQN_4 = 4,
|
|
||||||
PPQN_8 = 8,
|
|
||||||
PPQN_12 = 12,
|
|
||||||
PPQN_24 = 24,
|
|
||||||
PPQN_48 = 48,
|
|
||||||
PPQN_96 = 96,
|
|
||||||
PPQN_384 = 384,
|
|
||||||
PPQN_480 = 480,
|
|
||||||
PPQN_960 = 960
|
|
||||||
};
|
|
||||||
|
|
||||||
ClockState clock_state;
|
|
||||||
|
|
||||||
uClockClass();
|
|
||||||
|
|
||||||
void setOnOutputPPQN(void (*callback)(uint32_t tick)) {
|
|
||||||
onOutputPPQNCallback = callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setOnSync24(void (*callback)(uint32_t tick)) {
|
|
||||||
onSync24Callback = callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setOnClockStart(void (*callback)()) {
|
|
||||||
onClockStartCallback = callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setOnClockStop(void (*callback)()) {
|
|
||||||
onClockStopCallback = callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
void init();
|
|
||||||
void setOutputPPQN(PPQNResolution resolution);
|
|
||||||
void setInputPPQN(PPQNResolution resolution);
|
|
||||||
|
|
||||||
void handleTimerInt();
|
|
||||||
void handleExternalClock();
|
|
||||||
void resetCounters();
|
|
||||||
|
|
||||||
// external class control
|
|
||||||
void start();
|
|
||||||
void stop();
|
|
||||||
void pause();
|
|
||||||
void setTempo(float bpm);
|
|
||||||
float getTempo();
|
|
||||||
|
|
||||||
// for software timer implementation(fallback for no board support)
|
|
||||||
void run();
|
|
||||||
|
|
||||||
// external timming control
|
|
||||||
void setClockMode(ClockMode tempo_mode);
|
|
||||||
ClockMode getClockMode();
|
|
||||||
void clockMe();
|
|
||||||
// for smooth slave tempo calculate display you should raise the
|
|
||||||
// buffer_size of ext_interval_buffer in between 64 to 128. 254 max size.
|
|
||||||
// note: this doesn't impact on sync time, only display time getTempo()
|
|
||||||
// if you dont want to use it, it is default set it to 1 for memory save
|
|
||||||
void setExtIntervalBuffer(uint8_t buffer_size);
|
|
||||||
|
|
||||||
// elapsed time support
|
|
||||||
uint8_t getNumberOfSeconds(uint32_t time);
|
|
||||||
uint8_t getNumberOfMinutes(uint32_t time);
|
|
||||||
uint8_t getNumberOfHours(uint32_t time);
|
|
||||||
uint8_t getNumberOfDays(uint32_t time);
|
|
||||||
uint32_t getNowTimer();
|
|
||||||
uint32_t getPlayTime();
|
|
||||||
|
|
||||||
uint32_t bpmToMicroSeconds(float bpm);
|
|
||||||
|
|
||||||
private:
|
|
||||||
float inline freqToBpm(uint32_t freq);
|
|
||||||
float inline constrainBpm(float bpm);
|
|
||||||
void calculateReferencedata();
|
|
||||||
|
|
||||||
void (*onOutputPPQNCallback)(uint32_t tick);
|
|
||||||
void (*onSync24Callback)(uint32_t tick);
|
|
||||||
void (*onClockStartCallback)();
|
|
||||||
void (*onClockStopCallback)();
|
|
||||||
|
|
||||||
// clock input/output control
|
|
||||||
PPQNResolution output_ppqn = PPQN_96;
|
|
||||||
PPQNResolution input_ppqn = PPQN_24;
|
|
||||||
// output and internal counters, ticks and references
|
|
||||||
uint32_t tick;
|
|
||||||
uint32_t int_clock_tick;
|
|
||||||
uint8_t mod_clock_counter;
|
|
||||||
uint16_t mod_clock_ref;
|
|
||||||
|
|
||||||
uint8_t mod_sync24_counter;
|
|
||||||
uint16_t mod_sync24_ref;
|
|
||||||
uint32_t sync24_tick;
|
|
||||||
|
|
||||||
// external clock control
|
|
||||||
volatile uint32_t ext_clock_us;
|
|
||||||
volatile uint32_t ext_clock_tick;
|
|
||||||
volatile uint32_t ext_interval;
|
|
||||||
uint32_t last_interval;
|
|
||||||
uint32_t sync_interval;
|
|
||||||
|
|
||||||
float tempo;
|
|
||||||
uint32_t start_timer;
|
|
||||||
ClockMode clock_mode;
|
|
||||||
|
|
||||||
volatile uint32_t * ext_interval_buffer = nullptr;
|
|
||||||
uint8_t ext_interval_buffer_size;
|
|
||||||
uint16_t ext_interval_idx;
|
|
||||||
};
|
|
||||||
|
|
||||||
} } // end namespace umodular::clock
|
|
||||||
|
|
||||||
extern umodular::clock::uClockClass uClock;
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
extern volatile uint32_t _millis;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* __U_CLOCK_H__ */
|
|
||||||
Reference in New Issue
Block a user