aboutsummaryrefslogtreecommitdiffstats
path: root/src/globals.c
blob: cbf0c639b9cb9184fa2f7199a845b8e777748f8e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
//
// Globals.
//

static int step_counter = 0;
int trig_selection_loc = 0;
int param_selection_loc = 0;
int channel_selection_loc = 0;
int pattern_selection_loc = 0;
int right_col_selection_loc = 0;
int play_status = 0;
int current_pattern = 0;
int next_pattern = 0;
int current_bank = 0;
u32 last_trig_loc = 0;
u32 last_channel_loc = 0;
u32 last_pattern_loc = 0;
u32 last_right_col_loc = 0;
u32 last_step_counter = 0;
bool clear_screen = true;

//
// Color indexes.
//

#define COL_BG    0
#define COL_FG    1
#define COL_ACC_0 2
#define COL_ACC_1 3
#define COL_ACC_2 4
#define COL_OFF   5

#define CHAN_W 19
#define CHAN_H 8
#define CHAN_START_X 30
#define CHAN_START_Y 95
#define CHAN_OFFSET_Y 15

#define TRIG_W 15
#define TRIG_H 22
#define TRIG_START_X 59
#define TRIG_START_Y 95
#define TRIG_OFFSET_X (TRIG_W + 3)
#define TRIG_OFFSET_Y (TRIG_H + 8)

#define PIANO_W 170
#define PIANO_H 20
#define PIANO_START_X 30
#define PIANO_START_Y 67
#define PIANO_NOTE_W 2

#define PARAMS_W 170
#define PARAMS_H 64
#define PARAMS_START_X 30
#define PARAMS_START_Y 1

#define R_SIDEBAR_X ((TRIG_START_X) + (TRIG_OFFSET_X) * 8 + 4)
#define L_SIDEBAR_X ((CHAN_START_X) - 26)

#define PAT_START_X (L_SIDEBAR_X + 4)
#define PAT_START_Y 18
#define PAT_W 14
#define PAT_H 10
#define PAT_OFFSET_Y 17

#define R_COL_W 24
#define BPM_START_X (R_SIDEBAR_X)
#define BPM_START_Y (TRIG_START_Y + TRIG_H + 8)
#define BPM_H 22

#define PLAY_START_X (R_SIDEBAR_X)
#define PLAY_START_Y (TRIG_START_Y + 12)
#define STOP_START_X (R_SIDEBAR_X + 14)
#define STOP_START_Y (TRIG_START_Y + 12)
#define PLAY_STOP_W (10)
#define PLAY_STOP_H (10)

#define BANK_START_X (R_SIDEBAR_X + 5)
#define BANK_START_Y (PAT_START_Y)

#define SEQ_N_CHANNELS 4

enum RIGHT_COL_LOC {
    R_COL_BPM    = 0,
    R_COL_STOP   = 1,
    R_COL_PLAY   = 2,
    R_COL_BANK_D = 3,
    R_COL_BANK_C = 4,
    R_COL_BANK_B = 5,
    R_COL_BANK_A = 6,
};

// Input handling works using a FSM. The input handler is switched to whichever
// function controls each section. For example, channel selection or trigger
// selection.
typedef void (*InputHandler)(void);

InputHandler input_handler;

void handle_trigger_selection(void);
void handle_channel_selection(void);
void handle_pattern_selection(void);
void handle_param_selection_sq1(void);
void handle_param_selection_sq2(void);
void handle_param_selection_wave(void);
void handle_param_selection_noise(void);
void handle_right_col_selection(void);
void handle_param_selection_ch1(void);
void handle_param_selection_ch2(void);
void handle_param_selection_ch3(void);
void handle_param_selection_ch4(void);

typedef enum Scene {
    SCENE_SEQUENCER = 0,
    SCENE_SETTINGS,
} Scene;

static Scene scene = SCENE_SEQUENCER;
static Scene next_scene = SCENE_SEQUENCER;