blob: e0a9840bf8665d72abc4432ffaca388b9d267a46 [file] [log] [blame]
// Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "touch_noise_filter/single_frame_tap_filter.h"
#include <base/basictypes.h>
#include <cstddef>
#include <cstdio>
namespace touch_noise_filter {
namespace {
double kMaxTapDuration = 0.1;
} // namespace {}
void SingleFrameTapFilter::FilterFinger(Finger* finger) {
Finger* prev_finger = &prev_fingers_[finger->slot_];
Log("got finger at %f in slot %d", finger->timestamp_,
finger->slot_);
bool arrived = prev_finger->tracking_id_ == -1 && finger->tracking_id_ > 0;
bool departing = prev_finger->tracking_id_ >= 0 && finger->tracking_id_ == -1;
if ((prev_arrived_ & (1ULL << finger->slot_)) && departing &&
(finger->timestamp_ - prev_finger->timestamp_ < kMaxTapDuration)) {
finger->cancelled_ = true;
TouchNoiseFilterLog("CANCEL AT %f, %d\n",
finger->timestamp_, finger->slot_);
}
// Store previous info
*prev_finger = *finger;
if (arrived)
prev_arrived_ |= 1ULL << finger->slot_;
else
prev_arrived_ &= ~(1ULL << finger->slot_);
}
} // namespace touch_noise_filter