Пример #1
0
static int
handle_event(struct measurements *m, const struct input_event *ev)
{
	if (ev->type == EV_SYN) {
		const int idle_reset = 3000000; /* us */
		uint64_t last_us = m->us;

		m->us = tv2us(&ev->time);

		/* reset after pause */
		if (last_us + idle_reset < m->us) {
			m->max_frequency = 0.0;
			m->distance = 0;
		} else {
			double freq = get_frequency(last_us, m->us);
			push_frequency(m, freq);
			m->max_frequency = max(freq, m->max_frequency);
			return print_current_values(m);
		}

		return 0;
	} else if (ev->type != EV_REL)
		return 0;

	switch(ev->code) {
		case REL_X:
			m->distance += ev->value;
			break;
	}

	return 0;
}
Пример #2
0
unsigned long
medtv(struct timeval *tvarr, size_t tvsize)
{
   struct timeval med;

   if (tvsize == 0)
      return 0;
   else if (tvsize == 1)
      med = tvarr[tvsize - 1];
   else if (tvsize % 2 == 1)
      med = tvarr[(tvsize - 1) / 2];
   else {
      timeradd(&tvarr[(tvsize - 1) / 2], &tvarr[(tvsize - 1) / 2 + 1], &med);
               return tv2us(&med) / 2;
   }

   return tv2us(&med);
}
Пример #3
0
unsigned long
stddevtv(struct timeval *tvarr, size_t tvsize, unsigned long avg)
{
   unsigned long long diffsum;
   size_t i;

   if (tvsize <= 1)
      return 0;

   /* get the squared sum of differences from the mean */
   for (i = 0, diffsum = 0; i < tvsize; ++i) {
      const unsigned long long diff = labs(tv2us(&tvarr[i]) - avg);

      diffsum += diff * diff;
   }

   return (unsigned long)lround(sqrt(((double)diffsum) / tvsize));
}
Пример #4
0
unsigned long
avgtv(struct timeval *tvarr, size_t tvsize)
{
   struct timeval sum, nsum;
   size_t i;

   if (tvsize == 0)
      return 0;

   timerclear(&sum);
   for (i = 0; i < tvsize; ++i) {
      /* don't assume multiple arguments to timer*() can point to same mem. */
      timeradd(&sum, &tvarr[i], &nsum);
      sum = nsum;
   }

   return tv2us(&sum) / tvsize;
}