1/* $OpenBSD: wsmousevar.h,v 1.15 2017/06/18 13:21:48 bru Exp $ */ 2/* $NetBSD: wsmousevar.h,v 1.4 2000/01/08 02:57:24 takemura Exp $ */ 3 4/* 5 * Copyright (c) 1996, 1997 Christopher G. Demetriou. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. All advertising materials mentioning features or use of this software 16 * must display the following acknowledgement: 17 * This product includes software developed by Christopher G. Demetriou 18 * for the NetBSD Project. 19 * 4. The name of the author may not be used to endorse or promote products 20 * derived from this software without specific prior written permission 21 * 22 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 23 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 24 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 25 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 27 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 31 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34/* 35 * Copyright (c) 2015, 2016 Ulf Brosziewski 36 * 37 * Permission to use, copy, modify, and distribute this software for any 38 * purpose with or without fee is hereby granted, provided that the above 39 * copyright notice and this permission notice appear in all copies. 40 * 41 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 42 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 43 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 44 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 45 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 46 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 47 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 48 */ 49 50#ifndef _WSMOUSEVAR_H_ 51#define _WSMOUSEVAR_H_ 52 53#ifdef _KERNEL 54 55/* 56 * WSMOUSE interfaces. 57 */ 58 59/* 60 * Mouse access functions (must be provided by all mice). 61 * 62 * There is a "void *" cookie provided by the mouse driver associated 63 * with these functions, which is passed to them when they are invoked. 64 */ 65struct wsmouse_accessops { 66 int (*enable)(void *); 67 int (*ioctl)(void *v, u_long cmd, caddr_t data, int flag, 68 struct proc *p); 69 void (*disable)(void *); 70}; 71 72/* 73 * Attachment information provided by wsmousedev devices when attaching 74 * wsmouse units. 75 */ 76struct wsmousedev_attach_args { 77 const struct wsmouse_accessops *accessops; /* access ops */ 78 void *accesscookie; /* access cookie */ 79}; 80 81#define wsmousedevcf_mux cf_loc[WSMOUSEDEVCF_MUX] 82 83/* 84 * Autoconfiguration helper functions. 85 */ 86int wsmousedevprint(void *, const char *); 87 88 89/* Process standard mouse input. */ 90#define WSMOUSE_INPUT(sc_wsmousedev, btns, dx, dy, dz, dw) \ 91 do { \ 92 wsmouse_buttons((sc_wsmousedev), (btns)); \ 93 wsmouse_motion((sc_wsmousedev), (dx), (dy), (dz), (dw));\ 94 wsmouse_input_sync(sc_wsmousedev); \ 95 } while (0) 96 97 98/* Process standard touchpad input. */ 99#define WSMOUSE_TOUCH(sc_wsmousedev, btns, x, y, pressure, contacts) \ 100 do { \ 101 wsmouse_buttons((sc_wsmousedev), (btns)); \ 102 wsmouse_position((sc_wsmousedev), (x), (y)); \ 103 wsmouse_touch((sc_wsmousedev), (pressure), (contacts)); \ 104 wsmouse_input_sync(sc_wsmousedev); \ 105 } while (0) 106 107 108/* 109 * Drivers for touchpads that don't report pressure values can pass 110 * WSMOUSE_DEFAULT_PRESSURE to wsmouse_touch or wsmouse_mtstate. 111 * 112 * A pressure value of 0 signals that a touch has been released (coordinates 113 * will be ignored). Based on its pressure argument, wsmouse_touch will 114 * normalize the contact count (drivers for touch devices that don't 115 * recognize multiple contacts can always pass 0 as contact count to 116 * wsmouse_touch). 117 */ 118/* Use a synaptics-compatible value. */ 119#define WSMOUSE_DEFAULT_PRESSURE 45 120 121 122struct device; 123 124/* 125 * Type codes for wsmouse_set. REL_X/Y, MT_REL_X/Y, and TOUCH_WIDTH 126 * cannot be reported by other functions. Please note that REL_X/Y 127 * values are deltas to be applied to the absolute coordinates and 128 * don't represent "pure" relative motion. 129 */ 130enum wsmouseval { 131 WSMOUSE_REL_X, 132 WSMOUSE_ABS_X, 133 WSMOUSE_REL_Y, 134 WSMOUSE_ABS_Y, 135 WSMOUSE_PRESSURE, 136 WSMOUSE_CONTACTS, 137 WSMOUSE_TOUCH_WIDTH, 138 WSMOUSE_MT_REL_X, 139 WSMOUSE_MT_ABS_X, 140 WSMOUSE_MT_REL_Y, 141 WSMOUSE_MT_ABS_Y, 142 WSMOUSE_MT_PRESSURE 143}; 144 145#define WSMOUSE_IS_MT_CODE(code) \ 146 ((code) >= WSMOUSE_MT_REL_X && (code) <= WSMOUSE_MT_PRESSURE) 147 148struct mtpoint { 149 int x; 150 int y; 151 int pressure; 152 int slot; /* An output field, set by wsmouse_mtframe. */ 153}; 154 155/* Report button state. */ 156void wsmouse_buttons(struct device *, u_int); 157 158/* Report motion deltas (dx, dy, dz, dw). */ 159void wsmouse_motion(struct device *, int, int, int, int); 160 161/* Report absolute coordinates (x, y). */ 162void wsmouse_position(struct device *, int, int); 163 164/* Report (single-)touch input (pressure, contacts). */ 165void wsmouse_touch(struct device *, int, int); 166 167/* Report slot-based multitouch input (slot, x, y, pressure). */ 168void wsmouse_mtstate(struct device *, int, int, int, int); 169 170/* Report multitouch input (mtpoints, size). */ 171void wsmouse_mtframe(struct device *, struct mtpoint *, int); 172 173/* Report a single value (type, value, aux). */ 174void wsmouse_set(struct device *, enum wsmouseval, int, int); 175 176/* Assign or look up a slot number for a tracking ID (id). */ 177int wsmouse_id_to_slot(struct device *, int); 178 179 180/* Synchronize (generate wscons events) */ 181void wsmouse_input_sync(struct device *); 182 183 184/* Initialize MT structures (num_slots, tracking). */ 185int wsmouse_mt_init(struct device *, int, int); 186 187#define WSMOUSE_MT_SLOTS_MAX 10 188#define WSMOUSE_MT_INIT_TRACKING 1 189 190/* Switch between compatibility mode and native mode. */ 191int wsmouse_set_mode(struct device *, int); 192 193/* Read/Set parameter values. */ 194int wsmouse_get_params(struct device *, struct wsmouse_param *, u_int); 195int wsmouse_set_params(struct device *, const struct wsmouse_param *, u_int); 196 197 198enum wsmousehw_type { 199 WSMOUSEHW_RAW, 200 WSMOUSEHW_MOUSE, 201 WSMOUSEHW_TOUCHPAD, 202 WSMOUSEHW_CLICKPAD, 203 WSMOUSEHW_TPANEL, 204}; 205 206/* 207 * wsmousehw.flags 208 */ 209/* Invert Y-coordinates */ 210#define WSMOUSEHW_LR_DOWN (1 << 0) 211/* Allocate the buffers for wsmouse_mtframe(). */ 212#define WSMOUSEHW_MT_TRACKING (1 << 1) 213 214 215/* 216 * The more or less minimal hardware description for the default 217 * configuration. 218 * 219 * Drivers that report coordinates with a downward orientation 220 * must set the flag WSMOUSEHW_LR_DOWN. Drivers for MT hardware 221 * must provide the number of slots. If they use wsmouse_mtframe(), 222 * WSMOUSEHW_MT_TRACKING must be set. 223 * 224 * The resolution values are optional. 225 */ 226struct wsmousehw { 227 int type; /* WSMOUSE_TYPE_*, cf. wsconsio.h */ 228 enum wsmousehw_type hw_type; 229 int x_min; 230 int x_max; 231 int y_min; 232 int y_max; 233 int h_res; 234 int v_res; 235 236 int flags; 237 int mt_slots; 238 239 int contacts_max; /* inclusive (not needed for MT touchpads) */ 240}; 241 242struct wsmousehw *wsmouse_get_hw(struct device*); 243 244/* Configure the input context. */ 245int wsmouse_configure(struct device *, struct wsmouse_param *, u_int); 246 247#endif /* _KERNEL */ 248 249#endif /* _WSMOUSEVAR_H_ */ 250