コード例 #1
0
ファイル: debugcmds.c プロジェクト: N7QWT/klipper
void
command_start_group(uint32_t *args)
{
    sched_del_timer(&group_timer);
    group_timer.func = group_end_event;
    group_timer.waketime = args[0];
    sched_add_timer(&group_timer);
}
コード例 #2
0
ファイル: main.c プロジェクト: texane/dibal
static void light_tracker_stop(light_tracker_state_t* lts)
{
  if (lts->is_done)
    return ;

  move_stop();

  if (lts->timer != NULL)
    {
      sched_del_timer(lts->timer);
      lts->timer = NULL;
    }

  lts->is_done = 1;
}
コード例 #3
0
ファイル: main.c プロジェクト: texane/dibal
static void object_avoider_stop(object_avoider_state_t* oas)
{
  if (oas->is_done)
    return ;

  move_stop();

  if (oas->timer != NULL)
    {
      sched_del_timer(oas->timer);
      oas->timer = NULL;
    }

  oas->is_done = 1;
}
コード例 #4
0
ファイル: stepper.c プロジェクト: KevinOConnor/klipper
// Stop all moves for a given stepper (used in end stop homing).  IRQs
// must be off.
void
stepper_stop(struct stepper *s)
{
    sched_del_timer(&s->time);
    s->next_step_time = 0;
    s->position = -stepper_get_position(s);
    s->count = 0;
    s->flags = (s->flags & SF_INVERT_STEP) | SF_NEED_RESET;
    gpio_out_write(s->dir_pin, 0);
    gpio_out_write(s->step_pin, s->flags & SF_INVERT_STEP);
    while (s->first) {
        struct stepper_move *next = s->first->next;
        move_free(s->first);
        s->first = next;
    }
}
コード例 #5
0
ファイル: debugcmds.c プロジェクト: N7QWT/klipper
void
command_end_group(uint32_t *args)
{
    sched_del_timer(&group_timer);
}
コード例 #6
0
ファイル: main.c プロジェクト: texane/dibal
static void light_tracker_next(light_tracker_state_t* lts)
{
  switch (lts->state)
    {
    case LIGHT_TRACKER_STATE_INIT:
      {
	lts->state = LIGHT_TRACKER_STATE_SENSE;

	/* fallthru */
      }

    case LIGHT_TRACKER_STATE_SENSE:
      {
	void (*rotate)(void);
	unsigned short cur_level;
	unsigned short cur_delta;

	cur_level = adc_read(LIGHT_ADC_CHANNEL);

	if (cur_level >= ADC_QUANTIZE_5_10(2.35))
	  if (cur_level <= ADC_QUANTIZE_5_10(2.65))
	    {
	      /* found, we are done */

	      lts->state = LIGHT_TRACKER_STATE_DONE;

	      break;
	    }

	if (cur_level >= ADC_QUANTIZE_5_10(2.5))
	  {
	    cur_delta = cur_level - ADC_QUANTIZE_5_10(2.5);
	    rotate = move_rotate_left;
	  }
	else
	  {
	    cur_delta = ADC_QUANTIZE_5_10(2.5) - cur_level;
	    rotate = move_rotate_right;
	  }

	if (lts->prev_delta < cur_delta)
	  {
	    /* diverging, we are done */

	    lts->state = LIGHT_TRACKER_STATE_DONE;

	    break;
	  }

	lts->prev_delta = cur_delta;
	lts->rem_delta = cur_delta;

	rotate();

	lts->timer = sched_add_timer(0, on_light_tracker_timer, 0);

	lts->state = LIGHT_TRACKER_STATE_ROTATE;

	break;
      }

    case LIGHT_TRACKER_STATE_ROTATE:
      {
	unsigned int tmp;

	if (!lts->rem_delta)
	  {
	    /* rotation done */

	    move_stop();

	    sched_del_timer(lts->timer);
	    lts->timer = NULL;

	    lts->state = LIGHT_TRACKER_STATE_SENSE;

	    break;
	  }

	tmp = delta_to_freq(lts->rem_delta);
	if (tmp > SCHED_MAX_FREQ)
	  tmp = SCHED_MAX_FREQ;

	sched_set_timer_freq(lts->timer, tmp);

	tmp = freq_to_delta(tmp);
	if (tmp > lts->rem_delta)
	  tmp = lts->rem_delta;

	lts->rem_delta -= tmp;

	lts->state = LIGHT_TRACKER_STATE_WAIT;
	is_rotation_done = 0;
	sched_enable_timer(lts->timer);

	break;
      }

    case LIGHT_TRACKER_STATE_WAIT:
      {
	/* wait for the rotation to finish */

	if (!is_rotation_done)
	  break;

	sched_disable_timer(lts->timer);

	lts->state = LIGHT_TRACKER_STATE_ROTATE;

	break;
      }

    case LIGHT_TRACKER_STATE_DONE:
    default:
      {
	light_tracker_stop(lts);

	break;
      }
    }
}