Skip to content
Permalink
Browse files

move scene_state to main.c

  • Loading branch information
samdoshi committed Apr 1, 2017
1 parent a4a46f0 commit 8c50edede7a2f647a98cb4af6afb93e37f5151a9
Showing with 657 additions and 593 deletions.
  1. +35 −25 module/edit_mode.c
  2. +8 −6 module/flash.c
  3. +2 −0 module/fudge.h
  4. +1 −1 module/live_mode.c
  5. +20 −17 module/main.c
  6. +55 −51 module/pattern_mode.c
  7. +2 −2 module/preset_r_mode.c
  8. +33 −22 module/usb_disk_mode.c
  9. +4 −3 simulator/tt.c
  10. +11 −11 src/ops/controlflow.c
  11. +2 −3 src/ops/delay.c
  12. +132 −143 src/ops/patterns.c
  13. +3 −2 src/ops/stack.c
  14. +228 −0 src/state.c
  15. +47 −4 src/state.h
  16. +31 −227 src/teletype.c
  17. +6 −36 src/teletype.h
  18. +37 −40 tests/process_tests.c
@@ -28,23 +28,26 @@ void set_edit_mode() {
status = E_OK;
error_msg[0] = 0;
line_no = 0;
line_editor_set_command(&le, tele_get_script_c(script, line_no));
line_editor_set_command(
&le, ss_get_script_command(&scene_state, script, line_no));
}

void process_edit_keys(uint8_t k, uint8_t m, bool is_held_key) {
if (match_no_mod(m, k, HID_DOWN)) {
if (line_no < (SCRIPT_MAX_COMMANDS - 1) &&
line_no < tele_get_script_l(script)) {
line_no < ss_get_script_len(&scene_state, script)) {
line_no++;
line_editor_set_command(&le, tele_get_script_c(script, line_no));
line_editor_set_command(
&le, ss_get_script_command(&scene_state, script, line_no));
r_edit_dirty |= R_LIST;
r_edit_dirty |= R_INPUT;
}
}
else if (match_no_mod(m, k, HID_UP)) {
if (line_no) {
line_no--;
line_editor_set_command(&le, tele_get_script_c(script, line_no));
line_editor_set_command(
&le, ss_get_script_command(&scene_state, script, line_no));
r_edit_dirty |= R_LIST;
r_edit_dirty |= R_INPUT;
}
@@ -56,9 +59,10 @@ void process_edit_keys(uint8_t k, uint8_t m, bool is_held_key) {
script--;
else
script = 9;
if (line_no > tele_get_script_l(script))
line_no = tele_get_script_l(script);
line_editor_set_command(&le, tele_get_script_c(script, line_no));
if (line_no > ss_get_script_len(&scene_state, script))
line_no = ss_get_script_len(&scene_state, script);
line_editor_set_command(
&le, ss_get_script_command(&scene_state, script, line_no));
r_edit_dirty |= R_LIST;
r_edit_dirty |= R_INPUT;
}
@@ -67,19 +71,21 @@ void process_edit_keys(uint8_t k, uint8_t m, bool is_held_key) {
error_msg[0] = 0;
script++;
if (script == 10) script = 0;
if (line_no > tele_get_script_l(script))
line_no = tele_get_script_l(script);
line_editor_set_command(&le, tele_get_script_c(script, line_no));
if (line_no > ss_get_script_len(&scene_state, script))
line_no = ss_get_script_len(&scene_state, script);
line_editor_set_command(
&le, ss_get_script_command(&scene_state, script, line_no));
r_edit_dirty |= R_LIST;
r_edit_dirty |= R_INPUT;
}
else if (match_alt(m, k, HID_X)) { // override line editors cut
line_editor_set_copy_buffer(line_editor_get(&le));
delete_script_command(script, line_no);
if (line_no > tele_get_script_l(script)) {
line_no = tele_get_script_l(script);
ss_delete_script_command(&scene_state, script, line_no);
if (line_no > ss_get_script_len(&scene_state, script)) {
line_no = ss_get_script_len(&scene_state, script);
}
line_editor_set_command(&le, tele_get_script_c(script, line_no));
line_editor_set_command(
&le, ss_get_script_command(&scene_state, script, line_no));

r_edit_dirty |= R_LIST;
r_edit_dirty |= R_INPUT;
@@ -98,16 +104,18 @@ void process_edit_keys(uint8_t k, uint8_t m, bool is_held_key) {
return; // quit, screen_refresh_edit will display the error message

if (command.length == 0) { // blank line, delete the command
delete_script_command(script, line_no);
if (line_no > tele_get_script_l(script)) {
line_no = tele_get_script_l(script);
ss_delete_script_command(&scene_state, script, line_no);
if (line_no > ss_get_script_len(&scene_state, script)) {
line_no = ss_get_script_len(&scene_state, script);
}
}
else {
overwrite_script_command(script, line_no, &command);
ss_overwrite_script_command(&scene_state, script, line_no,
&command);
if (line_no < SCRIPT_MAX_COMMANDS - 1) { line_no++; }
}
line_editor_set_command(&le, tele_get_script_c(script, line_no));
line_editor_set_command(
&le, ss_get_script_command(&scene_state, script, line_no));
r_edit_dirty |= R_LIST;
r_edit_dirty |= R_INPUT;
}
@@ -125,11 +133,12 @@ void process_edit_keys(uint8_t k, uint8_t m, bool is_held_key) {
return; // quit, screen_refresh_edit will display the error message

if (command.length > 0) {
insert_script_command(script, line_no, &command);
ss_insert_script_command(&scene_state, script, line_no, &command);
if (line_no < (SCRIPT_MAX_COMMANDS - 1)) { line_no++; }
}

line_editor_set_command(&le, tele_get_script_c(script, line_no));
line_editor_set_command(
&le, ss_get_script_command(&scene_state, script, line_no));
r_edit_dirty |= R_LIST;
r_edit_dirty |= R_INPUT;
}
@@ -143,9 +152,9 @@ void process_edit_keys(uint8_t k, uint8_t m, bool is_held_key) {
void screen_refresh_edit() {
if (r_edit_dirty & R_INPUT) {
char prefix = script + '1';
if (script == 8)
if (script == METRO_SCRIPT)
prefix = 'M';
else if (script == 9)
else if (script == INIT_SCRIPT)
prefix = 'I';

line_editor_draw(&le, prefix, &line[7]);
@@ -179,9 +188,10 @@ void screen_refresh_edit() {
for (int i = 0; i < 6; i++) {
uint8_t a = line_no == i;
region_fill(&line[i], a);
if (tele_get_script_l(script) > i) {
if (ss_get_script_len(&scene_state, script) > i) {
char s[32];
print_command(tele_get_script_c(script, i), s);
print_command(ss_get_script_command(&scene_state, script, i),
s);
region_string(&line[i], s, 2, 0, 0xf, a, 0);
}
}
@@ -33,18 +33,20 @@ void flash_unfresh(void) {
}

void flash_write(uint8_t preset_no) {
flashc_memcpy((void*)&f.s[preset_no].script, tele_script_ptr(),
tele_script_size(), true);
flashc_memcpy((void*)&f.s[preset_no].patterns, tele_patterns_ptr(),
tele_patterns_size(), true);
flashc_memcpy((void*)&f.s[preset_no].script, ss_script_ptr(&scene_state),
ss_script_size(), true);
flashc_memcpy((void*)&f.s[preset_no].patterns,
ss_patterns_ptr(&scene_state), ss_patterns_size(), true);
flashc_memcpy((void*)&f.s[preset_no].text, &scene_text, sizeof(scene_text),
true);
flashc_memset8((void*)&(f.scene), preset_no, 1, true);
}

void flash_read(uint8_t preset_no) {
memcpy(tele_script_ptr(), &f.s[preset_no].script, tele_script_size());
memcpy(tele_patterns_ptr(), &f.s[preset_no].patterns, tele_patterns_size());
memcpy(ss_script_ptr(&scene_state), &f.s[preset_no].script,
ss_script_size());
memcpy(ss_patterns_ptr(&scene_state), &f.s[preset_no].patterns,
ss_patterns_size());
memcpy(&scene_text, &f.s[preset_no].text, sizeof(scene_text));
flashc_memset8((void*)&(f.scene), preset_no, 1, true);
}
@@ -8,6 +8,8 @@

// Temporary header, while we transistion modes out of main.c

extern scene_state_t scene_state;

#define R_PRESET (1 << 0)
#define R_INPUT (1 << 1)
#define R_MESSAGE (1 << 2)
@@ -82,7 +82,7 @@ void process_live_keys(uint8_t k, uint8_t m, bool is_held_key) {
}
memcpy(&history[HISTORY_SIZE - 1], &command, sizeof(command));

output = run_command(&command);
output = run_command(&scene_state, &command);
}
line_editor_set(&le, "");
}
@@ -50,6 +50,9 @@
////////////////////////////////////////////////////////////////////////////////
// globals

scene_state_t scene_state;


// defined in fudge.h
uint8_t preset_select;

@@ -190,7 +193,7 @@ static void cvTimer_callback(void* o) {
}

static void clockTimer_callback(void* o) {
tele_tick(RATE_CLOCK);
tele_tick(&scene_state, RATE_CLOCK);
}

static void refreshTimer_callback(void* o) {
@@ -228,9 +231,9 @@ static void hidTimer_callback(void* o) {
}

static void metroTimer_callback(void* o) {
if (tele_get_script_l(METRO_SCRIPT)) {
if (ss_get_script_len(&scene_state, METRO_SCRIPT)) {
activity |= A_METRO;
run_script(METRO_SCRIPT);
run_script(&scene_state, METRO_SCRIPT);
}
else
activity &= ~A_METRO;
@@ -260,14 +263,14 @@ static void handler_Front(s32 data) {
static void handler_PollADC(s32 data) {
adc_convert(&adc);

tele_set_in(adc[0] << 2);
ss_set_in(&scene_state, adc[0] << 2);

if (mode == M_PATTERN)
process_pattern_knob(adc[1], mod_key);
else if (mode == M_PRESET_R)
process_preset_r_knob(adc[1], mod_key);
else
tele_set_param(adc[1] << 2);
ss_set_param(&scene_state, adc[1] << 2);
}

static void handler_SaveFlash(s32 data) {
@@ -279,7 +282,7 @@ static void handler_KeyTimer(s32 data) {
if (front_timer == 1) {
flash_read(preset_select);

run_script(INIT_SCRIPT);
run_script(&scene_state, INIT_SCRIPT);

set_mode(last_mode);

@@ -342,7 +345,7 @@ static void handler_HidPacket(s32 data) {}


static void handler_Trigger(s32 data) {
if (mutes[data]) { run_script(data); }
if (mutes[data]) { run_script(&scene_state, data); }
}


@@ -488,7 +491,7 @@ bool process_global_keys(uint8_t key, uint8_t mod_key, bool is_held_key) {
}
else if (mod_META) {
if (!is_held_key) {
clear_delays();
clear_delays(&scene_state);
for (int i = 0; i < 4; i++) { aout[i].step = 1; }
}
}
@@ -522,11 +525,11 @@ bool process_global_keys(uint8_t key, uint8_t mod_key, bool is_held_key) {
return true;
}
else if (n == 'M') {
run_script(METRO_SCRIPT);
run_script(&scene_state, METRO_SCRIPT);
return true;
}
else if (n == 'I') {
run_script(INIT_SCRIPT);
run_script(&scene_state, INIT_SCRIPT);
return true;
}
}
@@ -560,7 +563,7 @@ void tele_metro(int16_t m, int16_t m_act, uint8_t m_reset) {

if (m_act && !metro_act) {
metro_act = 1;
if (tele_get_script_l(METRO_SCRIPT)) activity |= A_METRO;
if (ss_get_script_len(&scene_state, METRO_SCRIPT)) activity |= A_METRO;
timer_add(&metroTimer, metro_time, &metroTimer_callback, NULL);
}
else if (!m_act && metro_act) {
@@ -658,10 +661,10 @@ int8_t script_caller;
void tele_script(uint8_t a) {
if (!script_caller) {
script_caller = a;
run_script(a - 1);
run_script(&scene_state, a - 1);
}
else if (a != script_caller) {
run_script(a - 1);
run_script(&scene_state, a - 1);
}

script_caller = 0;
@@ -709,15 +712,15 @@ int main(void) {
print_dbg("\r\nflash size: ");
print_dbg_ulong(sizeof(f));

tele_init();
ss_init(&scene_state);

if (flash_is_fresh()) {
print_dbg("\r\n:::: first run, clearing flash");
flash_unfresh();
}
else {
preset_select = f.scene;
tele_set_scene(preset_select);
ss_set_scene(&scene_state, preset_select);
flash_read(preset_select);
// load from flash at startup
}
@@ -745,7 +748,7 @@ int main(void) {
metro_time = 1000;
timer_add(&metroTimer, metro_time, &metroTimer_callback, NULL);

clear_delays();
clear_delays(&scene_state);

aout[0].slew = 1;
aout[1].slew = 1;
@@ -759,7 +762,7 @@ int main(void) {
activity = 0;
set_mode(f.mode);

run_script(INIT_SCRIPT);
run_script(&scene_state, INIT_SCRIPT);

while (true) { check_events(); }
}

0 comments on commit 8c50ede

Please sign in to comment.