PicoWaveTracker/SharedState.h
2026-02-19 11:10:09 +01:00

90 lines
2.1 KiB
C

#ifndef SHARED_STATE_H
#define SHARED_STATE_H
#include "TrackerTypes.h"
#include "MelodyStrategy.h"
#include "config.h"
// Global state variables defined in main .ino
extern Step sequence[NUM_TRACKS][NUM_STEPS];
extern Step nextSequence[NUM_TRACKS][NUM_STEPS];
extern volatile bool sequenceChangeScheduled;
extern volatile bool needsPanic;
extern UIState currentState;
// Menus
enum MenuItemID {
MENU_ID_GROUP_MAIN,
MENU_ID_MELODY,
MENU_ID_SCALE,
MENU_ID_TEMPO,
MENU_ID_SONG_MODE,
MENU_ID_GROUP_TRACK,
MENU_ID_TRACK_SELECT,
MENU_ID_MUTE,
MENU_ID_FLAVOUR,
MENU_ID_MUTATION,
MENU_ID_THEME_1,
MENU_ID_THEME_2,
MENU_ID_THEME_3,
MENU_ID_THEME_4,
MENU_ID_THEME_5,
MENU_ID_THEME_6,
MENU_ID_THEME_7,
MENU_ID_GROUP_SETUP,
MENU_ID_CHANNEL,
MENU_ID_RESET
};
struct MenuItem {
const char* label;
MenuItemID id;
bool isGroup;
bool expanded;
int indentLevel;
};
extern MenuItem menuItems[];
extern const int menuItemsCount;
bool isItemVisible(int index);
extern int menuSelection;
extern volatile bool trackMute[NUM_TRACKS];
extern int randomizeTrack;
extern volatile int playbackStep;
extern volatile int midiChannels[NUM_TRACKS];
extern int scaleNotes[12];
extern int numScaleNotes;
extern int melodySeeds[NUM_TRACKS];
extern volatile int queuedTheme;
extern volatile int currentThemeIndex;
extern const uint32_t EEPROM_MAGIC;
extern MelodyStrategy* strategies[];
extern const int numStrategies;
extern int currentStrategyIndices[NUM_TRACKS];
extern volatile PlayMode playMode;
extern volatile bool mutationEnabled;
extern volatile bool songModeEnabled;
extern volatile int songRepeatsRemaining;
extern volatile int nextSongRepeats;
extern volatile bool songModeNeedsNext;
extern volatile bool isPlaying;
extern volatile int tempo;
extern volatile unsigned long lastClockTime;
extern volatile int clockCount;
// Input state
extern volatile int encoderDelta;
extern bool lastButtonState;
extern unsigned long lastDebounceTime;
extern bool buttonActive;
extern bool buttonConsumed;
extern unsigned long buttonPressTime;
#endif