// Copyright 2016 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 ACER12_RPT_ID_TOUCH 1
#define ACER12_RPT_ID_STYLUS 7

#define ACER12_FINGER_ID_TSWITCH_MASK 0x01
#define ACER12_FINGER_ID_CONTACT_MASK 0xfc
#define acer12_finger_id_tswitch(b) (b & ACER12_FINGER_ID_TSWITCH_MASK)
#define acer12_finger_id_contact(b) ((b & ACER12_FINGER_ID_CONTACT_MASK) >> 2)

#define ACER12_X_MAX 3024
#define ACER12_Y_MAX 2064

typedef struct acer12_finger {
    uint8_t finger_id;
    uint8_t width;
    uint8_t height;
    // Both X and Y are repeated twice in every report.
    uint16_t x, xx;
    uint16_t y, yy;
} __attribute__((packed)) acer12_finger_t;

typedef struct acer12_touch {
    uint8_t rpt_id;
    acer12_finger_t fingers[5];
    uint32_t scan_time;
    uint8_t contact_count;  // will be zero for reports for fingers 6-10
} __attribute__((packed)) acer12_touch_t;

#define ACER12_STYLUS_STATUS_INRANGE 0x01
#define ACER12_STYLUS_STATUS_TSWITCH 0x02
#define ACER12_STYLUS_STATUS_BARREL  0x04
#define ACER12_STYLUS_STATUS_INVERT  0x08
#define ACER12_STYLUS_STATUS_ERASER  0x10
#define acer12_stylus_status_inrange(b) (b & ACER12_STYLUS_STATUS_INRANGE)
#define acer12_stylus_status_tswitch(b) (b & ACER12_STYLUS_STATUS_TSWITCH)
#define acer12_stylus_status_barrel(b)  (b & ACER12_STYLUS_STATUS_BARREL)
#define acer12_stylus_status_invert(b)  (b & ACER12_STYLUS_STATUS_INVERT)
#define acer12_stylus_status_eraser(b)  (b & ACER12_STYLUS_STATUS_ERASER)

#define ACER12_STYLUS_X_MAX 4032
#define ACER12_STYLUS_Y_MAX 2752

typedef struct acer12_stylus {
    uint8_t rpt_id;
    uint8_t status;
    uint16_t x;
    uint16_t y;
    uint16_t pressure;
} __attribute__((packed)) acer12_stylus_t;

const uint8_t* get_acer12_touch_report_desc(size_t* len);
bool is_acer12_touch_report_desc(const uint8_t* data, size_t len);
zx_status_t setup_acer12_touch(int fd);

__END_CDECLS
