// // 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_PLAY = 1, R_COL_STOP = 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;