예제 #1
0
파일: demo.c 프로젝트: kerichsen/asf
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;
}
예제 #2
0
// 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);
}
예제 #3
0
파일: demo.c 프로젝트: kerichsen/asf
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;
}
예제 #4
0
파일: demo.c 프로젝트: kerichsen/asf
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;
}
예제 #5
0
파일: demo.c 프로젝트: kerichsen/asf
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;
}
예제 #6
0
bool controller_config_next_option(void)
{
  return controller_wheel_right(2);
}
예제 #7
0
bool controller_playback_ffw(bool new_track)
{
  return controller_wheel_right(1);
}