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