/* * Process accelerometer data */ static void accel_data_handler(AccelData *data, uint32_t num_samples) { // Average the data uint32_t avg_x = 0; uint32_t avg_y = 0; uint32_t avg_z = 0; AccelData *dx = data; for (uint32_t i = 0; i < num_samples; i++, dx++) { // If vibe went off then discount everything - we're only loosing a 2.5 second set of samples, better than an // unwanted spike if (dx->did_vibrate) { return; } avg_x += scale_accel(dx->x); avg_y += scale_accel(dx->y); avg_z += scale_accel(dx->z); } avg_x /= num_samples; avg_y /= num_samples; avg_z /= num_samples; // Work out deviations uint16_t biggest = 0; AccelData *d = data; for (uint32_t i = 0; i < num_samples; i++, d++) { do_axis(d->x, &biggest, avg_x); do_axis(d->y, &biggest, avg_y); do_axis(d->z, &biggest, avg_z); } store_sample(biggest); }
//================================================================================================= void eve::thr::profiler::stop(void) { clock_cycle_end__ = __rdtsc(); ::QueryPerformanceCounter(&time_end_); int64_t elapsed = 0; elapsed = time_end_.QuadPart - time_start_.QuadPart; elapsed *= 1000000LL; elapsed /= frequency_.QuadPart; time_elapsed_ = elapsed; clock_cycle_num_ = clock_cycle_end__ - clock_cycle_start__; store_sample(); }