| // 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 |