// Copyright 2016 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.

#ifndef TOUCH_KEYBOARD_STATEMACHINE_STATEMACHINE_H_
#define TOUCH_KEYBOARD_STATEMACHINE_STATEMACHINE_H_

#include <linux/input.h>
#include <map>
#include <stdio.h>
#include <vector>

#include "touch_keyboard/statemachine/slot.h"

namespace mtstatemachine {

constexpr int kNumSlots = 10;

// The information reported by a state machine for a single finger
struct MtFinger {
  int x, y;
  int p;
  int touch_major;
};

class MtStateMachine {
 /* Multi-touch State Machine
  *
  * This class implements a multitouch state machine and  interprets the
  * individual touch kernel events in a manageable way.  To use a state machine
  * instantiate a new MtStateMachine object at the beginning of your program
  * and then continually call AddEvent() to pass the new touch kernel events
  * for processing.  AddEvent() will return 'true' at the end of an entire
  * frame (SYN event) and then the snapshot map you passed will be populated
  * and ready for use.  The snapshot is a mapping from tracking IDs to finger
  * data at the time of the SYN event.
  */
 public:
  MtStateMachine(): slot_(0) {}

  // Consume an input event and update the internal state.  If this was a SYN
  // (which means it's the end of a full update) populate out_snapshot with
  // the current state and return true.  Otherwise leave out_snapshot unchanged
  // and return false to indicate there is still more events on the way.
  bool AddEvent(struct input_event const &ev,
                std::map<int, struct MtFinger> *out_snapshot);

  int slot_;
  Slot slots_[kNumSlots];

 private:
  // Populate out_snapshot with the current state of the MtStateMachine.
  void FillSnapshot(std::map<int, struct MtFinger> *out_snapshot);
};

}  // namespace mtstatemachine

#endif  // TOUCH_KEYBOARD_STATEMACHINE_STATEMACHINE_H_
