static bool state_machine_filter(enum state_function *state) { switch (*state) { case STATE_FCT_IDLE: if (new_state_fct) { gui_set_selection(GUI_FILTER_ID); gui_text_print(GUI_COMMENT_ID, TEXT_FILTER); } else { if (controller_wheel_right(2)) switch_state(STATE_OUTPUT); else if (controller_wheel_left(2)) switch_state(STATE_INPUT); return false; } break; // FFT case STATE_FCT_FUNCTION1: if (new_state_fct) filter_set_active(0); break; case STATE_FCT_FUNCTION2: if (new_state_fct) filter_set_active(1); break; case STATE_FCT_FUNCTION3: if (new_state_fct) filter_set_active(2); break; case STATE_FCT_ZOOM: break; } if (new_state_fct) gui_text_print(GUI_FILTER_ID, filter_active_get_description()); if (controller_wheel_right(0) || controller_wheel_left(0)) { *state = STATE_FCT_IDLE; controller_reset(); } return true; }
// Key DOWN or wheel right bool controller_navigation_cursor_next(void) { if (controller_state & STATE_WHEEL_DOWN_RELEASED) { CLEAR_RELEASED_STATE(WHEEL_DOWN); return true; } return controller_wheel_right(1); }
static bool state_machine_idle(enum state_function *state) { uint32_t frame_rate_ms; S8 volume; const S8 volume_inc = (TPA6130_VOL_MAX - TPA6130_VOL_MIN) / 20; switch (*state) { case STATE_FCT_IDLE: if (new_state_fct) { gui_set_selection(GUI_NO_SEL); gui_text_print(GUI_COMMENT_ID, TEXT_IDLE); } else { if (controller_wheel_right(1) || controller_wheel_left(1)) switch_state(STATE_SOURCE1); return false; } break; // Frame rate case STATE_FCT_FUNCTION1: frame_rate_ms = gui_get_update_fs(); if (controller_wheel_left(1) && frame_rate_ms < 1000) { if (!frame_rate_ms) frame_rate_ms = 40; else frame_rate_ms = 1000 / ((1000 / frame_rate_ms) - 1); new_state_fct = true; } else if (controller_wheel_right(1)) { if (frame_rate_ms <= 40) frame_rate_ms = 0; else frame_rate_ms = 1000 / ((1000 / frame_rate_ms) + 1); new_state_fct = true; } if (new_state_fct) { gui_change_update_fs(frame_rate_ms); if (frame_rate_ms) { gui_text_printf(GUI_COMMENT_ID, TEXT_FUNC1 "\n%i Frame(s)/s\n\n\n\n" TEXT_WHEEL, (1000 / frame_rate_ms)); } else gui_text_print(GUI_COMMENT_ID, TEXT_FUNC1 "\nMAX Frame(s)/s\n\n\n\n" TEXT_WHEEL); } break; // Volume case STATE_FCT_FUNCTION2: volume = tpa6130_get_volume(); if (volume < TPA6130_VOL_MIN) volume = TPA6130_VOL_MIN; if (controller_wheel_right(1)) { if (volume < TPA6130_VOL_MAX - volume_inc) volume += volume_inc; else volume = TPA6130_VOL_MAX; new_state_fct = true; } else if (controller_wheel_left(1)) { if (volume > TPA6130_VOL_MIN + volume_inc) volume -= volume_inc; else volume = TPA6130_VOL_MIN; new_state_fct = true; } if (new_state_fct) { tpa6130_set_volume(volume); gui_text_printf(GUI_COMMENT_ID, TEXT_FUNC2 "\nVolume %i%%\n\n\n\n" TEXT_WHEEL, ((int) volume * 100) / (TPA6130_VOL_MAX - TPA6130_VOL_MIN)); } break; /* extern U8 tpa6130_get_volume(void); extern void tpa6130_set_volume(U8 volume); */ case STATE_FCT_FUNCTION3: if (new_state_fct) gui_text_print(GUI_COMMENT_ID, TEXT_FUNC_NOT_IMPLEMENTED); else if (controller_wheel_right(1) || controller_wheel_left(1)) { switch_state(STATE_SOURCE1); return false; } break; case STATE_FCT_ZOOM: break; } return true; }
static bool state_machine_signal(enum state_master id, enum state_function *state) { switch (*state) { case STATE_FCT_IDLE: if (id == STATE_INPUT) { if (new_state_fct) { gui_set_selection(GUI_INPUT_ID); gui_text_print(GUI_COMMENT_ID, TEXT_INPUT); } else { if (controller_wheel_right(2)) switch_state(STATE_FILTER); else if (controller_wheel_left(2)) switch_state(STATE_SOURCE2); return false; } } else if (id == STATE_OUTPUT) { if (new_state_fct) { gui_set_selection(GUI_OUTPUT_ID); gui_text_print(GUI_COMMENT_ID, TEXT_OUTPUT); } else { if (controller_wheel_left(2)) switch_state(STATE_FILTER); return false; } } break; // FFT case STATE_FCT_FUNCTION1: if (new_state_fct) { if (id == STATE_INPUT) { input_fft_view = !input_fft_view; if (input_fft_view) gui_text_print(GUI_COMMENT_ID, "Input - " TEXT_FUNC1 "\nFrequency domain\n\n\n\n(Use " TEXT_FUNC1 ")"); else gui_text_print(GUI_COMMENT_ID, "Input - " TEXT_FUNC1 "\nTemporal domain\n\n\n\n(Use " TEXT_FUNC1 ")"); } else if (id == STATE_OUTPUT) { output_fft_view = !output_fft_view; if (output_fft_view) gui_text_print(GUI_COMMENT_ID, "Output - " TEXT_FUNC1 "\nFrequency domain\n\n\n\n(Use " TEXT_FUNC1 ")"); else gui_text_print(GUI_COMMENT_ID, "Output - " TEXT_FUNC1 "\nTemporal domain\n\n\n\n(Use " TEXT_FUNC1 ")"); } } break; case STATE_FCT_FUNCTION2: case STATE_FCT_FUNCTION3: if (new_state_fct) gui_text_print(GUI_COMMENT_ID, TEXT_FUNC_NOT_IMPLEMENTED); break; // Zoom case STATE_FCT_ZOOM: if (new_state_fct) { zoom_view = true; if (id == STATE_INPUT) zoom_view_id = GUI_INPUT_ID; else if (id == STATE_OUTPUT) zoom_view_id = GUI_OUTPUT_ID; // controller_reset(); } break; } if (controller_wheel_right(0) || controller_wheel_left(0)) { *state = STATE_FCT_IDLE; controller_reset(); } return true; }
static bool state_machine_source(int source_id, enum state_function *state) { static dsp16_t volume; static unsigned int frequency; struct signal_source *source = NULL; if (source_id == 1) source = &signal1_generator; else if (source_id == 2) source = &signal2_generator; switch (*state) { case STATE_FCT_IDLE: if (source_id == 1) { if (new_state_fct) { gui_set_selection(GUI_SOURCE1_ID); gui_text_print(GUI_COMMENT_ID, TEXT_SOURCE1); } else { if (controller_wheel_right(2)) switch_state(STATE_SOURCE2); return false; } } else if (source_id == 2) { if (new_state_fct) { gui_set_selection(GUI_SOURCE2_ID); gui_text_print(GUI_COMMENT_ID, TEXT_SOURCE2); } else { if (controller_wheel_left(2)) switch_state(STATE_SOURCE1); else if (controller_wheel_right(2)) switch_state(STATE_INPUT); return false; } } break; // Amplitude case STATE_FCT_FUNCTION1: volume = signal_source_get_volume(source); if (controller_wheel_right(1) && volume < DSP16_Q(1.)) { if (volume < DSP16_Q(1.) - DSP16_Q(1./16)) volume += DSP16_Q(1./16); else volume = DSP16_Q(1.); new_state_fct = true; } else if (controller_wheel_left(1)) { if (volume > DSP16_Q(1./16)) volume -= DSP16_Q(1./16); else volume = 0; new_state_fct = true; } if (new_state_fct) { signal_source_set_volume(source, volume); gui_text_printf(GUI_COMMENT_ID, "Source%i - " TEXT_FUNC1 "\nAmplitude %f\n\n\n\n" TEXT_WHEEL, source_id, volume); } break; // Frequency case STATE_FCT_FUNCTION2: frequency = signal_source_get_freq(source); if (controller_wheel_right(1) && frequency < 10000) { frequency *= 1.1; new_state_fct = true; } else if (controller_wheel_left(1) && frequency > 100) { frequency *= 0.9; new_state_fct = true; } if (new_state_fct) { signal_source_set_freq(source, frequency); gui_text_printf(GUI_COMMENT_ID, "Source%i - " TEXT_FUNC2 "\nFrequency %iHz\n\n\n\n" TEXT_WHEEL, source_id, frequency); } break; case STATE_FCT_FUNCTION3: break; // Zoom case STATE_FCT_ZOOM: if (new_state_fct) { zoom_view = true; if (source_id == 1) zoom_view_id = GUI_SOURCE1_ID; else if (source_id == 2) zoom_view_id = GUI_SOURCE2_ID; controller_reset(); } break; } return true; }
bool controller_config_next_option(void) { return controller_wheel_right(2); }
bool controller_playback_ffw(bool new_track) { return controller_wheel_right(1); }