1// Copyright 2018 The Fuchsia Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include <hid/ft3x27.h> 6#include <zircon/errors.h> 7#include <string.h> 8 9static const uint8_t ft3x27_touch_report_desc[] = { 10 0x05, 0x0D, // Usage Page (Digitizer) 11 0x09, 0x04, // Usage (Touch Screen) 12 0xA1, 0x01, // Collection (Application) 13 0x85, 0x01, // Report ID (1) 14 0x09, 0x22, // Usage (Finger) 15 0xA1, 0x02, // Collection (Logical) 16 0x09, 0x42, // Usage (Tip Switch) 17 0x15, 0x00, // Logical Minimum (0) 18 0x25, 0x01, // Logical Maximum (1) 19 0x75, 0x01, // Report Size (1) 20 0x95, 0x01, // Report Count (1) 21 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 22 0x75, 0x01, // Report Size (1) 23 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 24 0x75, 0x06, // Report Size (6) 25 0x09, 0x51, // Usage (0x51) 26 0x25, 0x3F, // Logical Maximum (63) 27 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 28 0x95, 0x01, // Report Count (1) 29 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 30 0xA4, // Push 31 0x26, 0x58, 0x02, // Logical Maximum (600) 32 0x75, 0x10, // Report Size (16) 33 0x09, 0x30, // Usage (X) 34 0x95, 0x01, // Report Count (1) 35 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 36 0x26, 0x00, 0x04, // Logical Maximum (1024) 37 0x09, 0x31, // Usage (Y) 38 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 39 0xB4, // Pop 40 0xC0, // End Collection 41 0x05, 0x0D, // Usage Page (Digitizer) 42 0x09, 0x22, // Usage (Finger) 43 0xA1, 0x02, // Collection (Logical) 44 0x09, 0x42, // Usage (Tip Switch) 45 0x15, 0x00, // Logical Minimum (0) 46 0x25, 0x01, // Logical Maximum (1) 47 0x75, 0x01, // Report Size (1) 48 0x95, 0x01, // Report Count (1) 49 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 50 0x75, 0x01, // Report Size (1) 51 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 52 0x75, 0x06, // Report Size (6) 53 0x09, 0x51, // Usage (0x51) 54 0x25, 0x3F, // Logical Maximum (63) 55 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 56 0x95, 0x01, // Report Count (1) 57 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 58 0xA4, // Push 59 0x26, 0x58, 0x02, // Logical Maximum (600) 60 0x75, 0x10, // Report Size (16) 61 0x09, 0x30, // Usage (X) 62 0x95, 0x01, // Report Count (1) 63 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 64 0x26, 0x00, 0x04, // Logical Maximum (1024) 65 0x09, 0x31, // Usage (Y) 66 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 67 0xB4, // Pop 68 0xC0, // End Collection 69 0x05, 0x0D, // Usage Page (Digitizer) 70 0x09, 0x22, // Usage (Finger) 71 0xA1, 0x02, // Collection (Logical) 72 0x09, 0x42, // Usage (Tip Switch) 73 0x15, 0x00, // Logical Minimum (0) 74 0x25, 0x01, // Logical Maximum (1) 75 0x75, 0x01, // Report Size (1) 76 0x95, 0x01, // Report Count (1) 77 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 78 0x75, 0x01, // Report Size (1) 79 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 80 0x75, 0x06, // Report Size (6) 81 0x09, 0x51, // Usage (0x51) 82 0x25, 0x3F, // Logical Maximum (63) 83 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 84 0x95, 0x01, // Report Count (1) 85 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 86 0xA4, // Push 87 0x26, 0x58, 0x02, // Logical Maximum (600) 88 0x75, 0x10, // Report Size (16) 89 0x09, 0x30, // Usage (X) 90 0x95, 0x01, // Report Count (1) 91 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 92 0x26, 0x00, 0x04, // Logical Maximum (1024) 93 0x09, 0x31, // Usage (Y) 94 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 95 0xB4, // Pop 96 0xC0, // End Collection 97 0x05, 0x0D, // Usage Page (Digitizer) 98 0x09, 0x22, // Usage (Finger) 99 0xA1, 0x02, // Collection (Logical) 100 0x09, 0x42, // Usage (Tip Switch) 101 0x15, 0x00, // Logical Minimum (0) 102 0x25, 0x01, // Logical Maximum (1) 103 0x75, 0x01, // Report Size (1) 104 0x95, 0x01, // Report Count (1) 105 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 106 0x75, 0x01, // Report Size (1) 107 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 108 0x75, 0x06, // Report Size (6) 109 0x09, 0x51, // Usage (0x51) 110 0x25, 0x3F, // Logical Maximum (63) 111 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 112 0x95, 0x01, // Report Count (1) 113 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 114 0xA4, // Push 115 0x26, 0x58, 0x02, // Logical Maximum (600) 116 0x75, 0x10, // Report Size (16) 117 0x09, 0x30, // Usage (X) 118 0x95, 0x01, // Report Count (1) 119 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 120 0x26, 0x00, 0x04, // Logical Maximum (1024) 121 0x09, 0x31, // Usage (Y) 122 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 123 0xB4, // Pop 124 0xC0, // End Collection 125 0x05, 0x0D, // Usage Page (Digitizer) 126 0x09, 0x22, // Usage (Finger) 127 0xA1, 0x02, // Collection (Logical) 128 0x09, 0x42, // Usage (Tip Switch) 129 0x15, 0x00, // Logical Minimum (0) 130 0x25, 0x01, // Logical Maximum (1) 131 0x75, 0x01, // Report Size (1) 132 0x95, 0x01, // Report Count (1) 133 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 134 0x75, 0x01, // Report Size (1) 135 0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 136 0x75, 0x06, // Report Size (6) 137 0x09, 0x51, // Usage (0x51) 138 0x25, 0x3F, // Logical Maximum (63) 139 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 140 0x95, 0x01, // Report Count (1) 141 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 142 0xA4, // Push 143 0x26, 0x58, 0x02, // Logical Maximum (600) 144 0x75, 0x10, // Report Size (16) 145 0x09, 0x30, // Usage (X) 146 0x95, 0x01, // Report Count (1) 147 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 148 0x26, 0x00, 0x04, // Logical Maximum (1024) 149 0x09, 0x31, // Usage (Y) 150 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 151 0xB4, // Pop 152 0xC0, // End Collection 153 0x05, 0x0D, // Usage Page (Digitizer) 154 0x09, 0x54, // Usage (0x54) 155 0x25, 0x05, // Logical Maximum (5) 156 0x95, 0x01, // Report Count (1) 157 0x75, 0x08, // Report Size (8) 158 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 159 0xC0, // End Collection 160}; 161 162bool is_ft3x27_touch_report_desc(const uint8_t* data, size_t len) { 163 if (!data) 164 return false; 165 166 if (len != sizeof(ft3x27_touch_report_desc)) 167 return false; 168 169 return (memcmp(data, ft3x27_touch_report_desc, len) == 0); 170} 171 172zx_status_t setup_ft3x27_touch(int fd) { 173 if (fd < 0) 174 return ZX_ERR_INVALID_ARGS; 175 176 return ZX_OK; 177} 178 179size_t get_ft3x27_report_desc(const uint8_t** buf) { 180 *buf = ft3x27_touch_report_desc; 181 return sizeof(ft3x27_touch_report_desc); 182}