// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#pragma once

#include <zircon/compiler.h>
#include <zircon/types.h>
#include <stdbool.h>
#include <stdint.h>

__BEGIN_CDECLS

#define SAMSUNG_RPT_ID_TOUCH 1
#define SAMSUNG_RPT_ID_MOUSE 4

#define SAMSUNG_FINGER_ID_TSWITCH_MASK 0x01
#define SAMSUNG_FINGER_ID_CONTACT_MASK 0x7f
#define samsung_finger_id_tswitch(b) (b & SAMSUNG_FINGER_ID_TSWITCH_MASK)
#define samsung_finger_id_contact(b) ((b >> 1) & SAMSUNG_FINGER_ID_CONTACT_MASK)

#define SAMSUNG_X_MAX 32767
#define SAMSUNG_Y_MAX 32767

typedef struct samsung_finger {
  uint8_t finger_id;
  uint8_t width;
  uint8_t height;
  uint16_t x;
  uint16_t y;
} __attribute__((packed)) samsung_finger_t;

typedef struct samsung_touch {
  uint8_t rpt_id;
  samsung_finger_t fingers[10];
  uint16_t scan_time;
  uint8_t contact_count;
} __attribute__((packed)) samsung_touch_t;

bool is_samsung_touch_report_desc(const uint8_t* data, size_t len);
zx_status_t setup_samsung_touch(int fd);

__END_CDECLS
