diff options
author | Martin Pieuchot <mpi@cvs.openbsd.org> | 2013-05-31 19:32:32 +0000 |
---|---|---|
committer | Martin Pieuchot <mpi@cvs.openbsd.org> | 2013-05-31 19:32:32 +0000 |
commit | b46c5d7d550bda4bacce4b3e4d80eda23fdfa640 (patch) | |
tree | 585a72e36b7fd81c5ed60feefc63d46961ef0244 /sys | |
parent | 2058f00a51c8fedce60b662f2c502abd2f2d4d6c (diff) |
Rename tpms(4), the driver for Apple USB touchpads, to utpms(4) and move
it to dev/usb because it could be used on intel based mac laptops.
Discussed with jcs@, ok deraadt@
Diffstat (limited to 'sys')
-rw-r--r-- | sys/arch/macppc/conf/GENERIC | 6 | ||||
-rw-r--r-- | sys/arch/macppc/conf/files.macppc | 6 | ||||
-rw-r--r-- | sys/dev/usb/files.usb | 7 | ||||
-rw-r--r-- | sys/dev/usb/utpms.c (renamed from sys/arch/macppc/dev/tpms.c) | 327 |
4 files changed, 148 insertions, 198 deletions
diff --git a/sys/arch/macppc/conf/GENERIC b/sys/arch/macppc/conf/GENERIC index 186f8bee098..1d305e97e74 100644 --- a/sys/arch/macppc/conf/GENERIC +++ b/sys/arch/macppc/conf/GENERIC @@ -1,4 +1,4 @@ -# $OpenBSD: GENERIC,v 1.217 2013/03/15 09:10:52 ratchov Exp $g +# $OpenBSD: GENERIC,v 1.218 2013/05/31 19:32:30 mpi Exp $g # # For further information on compiling OpenBSD kernels, see the config(8) # man page. @@ -243,8 +243,8 @@ midi* at umidi? ulpt* at uhub? # USB Printers umass* at uhub? # USB Mass Storage devices uhidev* at uhub? # Human Interface Devices -tpms* at uhidev? # Apple touchpad mouse -wsmouse* at tpms? mux 0 +utpms* at uhidev? # Apple touchpad mouse +wsmouse* at utpms? mux 0 ums* at uhidev? # USB mouse wsmouse* at ums? mux 0 uts* at uhub? # USB touchscreen diff --git a/sys/arch/macppc/conf/files.macppc b/sys/arch/macppc/conf/files.macppc index f0b80a5f1d3..9af66a523d0 100644 --- a/sys/arch/macppc/conf/files.macppc +++ b/sys/arch/macppc/conf/files.macppc @@ -1,4 +1,4 @@ -# $OpenBSD: files.macppc,v 1.69 2013/04/21 14:44:16 sebastia Exp $ +# $OpenBSD: files.macppc,v 1.70 2013/05/31 19:32:30 mpi Exp $ # # macppc-specific configuration info @@ -307,10 +307,6 @@ file dev/ic/hme.c attach hme at pci with hme_pci file dev/pci/if_hme_pci.c hme_pci -device tpms: hid, wsmousedev -attach tpms at uhidbus -file arch/macppc/dev/tpms.c tpms - # Apple Sudden Motion Sensor device asms attach asms at i2c diff --git a/sys/dev/usb/files.usb b/sys/dev/usb/files.usb index 79f47430d39..e9f8bebc65d 100644 --- a/sys/dev/usb/files.usb +++ b/sys/dev/usb/files.usb @@ -1,4 +1,4 @@ -# $OpenBSD: files.usb,v 1.104 2013/04/29 13:38:35 mpi Exp $ +# $OpenBSD: files.usb,v 1.105 2013/05/31 19:32:30 mpi Exp $ # $NetBSD: files.usb,v 1.16 2000/02/14 20:29:54 augustss Exp $ # # Config file and device description for machine-independent USB code. @@ -103,6 +103,11 @@ device uhts: wsmousedev attach uhts at uhidbus file dev/usb/uhts.c uhts +# Apple USB Touchpad +device utpms: hid, wsmousedev +attach utpms at uhidbus +file dev/usb/utpms.c utpms + # Cypress microcontroller based serial adpaters device ucycom: hid, ucombus attach ucycom at uhidbus diff --git a/sys/arch/macppc/dev/tpms.c b/sys/dev/usb/utpms.c index ce9e1abe07f..4d4bca511d5 100644 --- a/sys/arch/macppc/dev/tpms.c +++ b/sys/dev/usb/utpms.c @@ -1,40 +1,36 @@ -/* $OpenBSD: tpms.c,v 1.16 2012/02/24 06:19:00 guenther Exp $ */ +/* $OpenBSD: utpms.c,v 1.1 2013/05/31 19:32:30 mpi Exp $ */ /* * Copyright (c) 2005, Johan Wallén * All rights reserved. * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the copyright holder may not be used to endorse or + * promote products derived from this software without specific + * prior written permission. * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * 3. The name of the copyright holder may not be used to endorse or - * promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. */ /* - * The tpms driver provides support for the trackpad on new (post + * The utpms driver provides support for the trackpad on new (post * February 2005) Apple PowerBooks and iBooks that are not standard * USB HID mice. */ @@ -57,10 +53,10 @@ * 15 inch PowerBooks, only the 16 first sensors in the X-direction * are used. In the X-direction, the sensors correspond to byte * positions - * + * * 2, 7, 12, 17, 22, 27, 32, 37, 4, 9, 14, 19, 24, 29, 34, 39, 42, * 47, 52, 57, 62, 67, 72, 77, 44 and 49; - * + * * in the Y direction, the sensors correspond to byte positions * * 1, 6, 11, 16, 21, 26, 31, 36, 3, 8, 13, 18, 23, 28, 33 and 38. @@ -90,7 +86,7 @@ * compute a new virtual position as a weighted average of the previous * virtual position and the new raw position. The weights are * controlled by the raw change and a noise parameter. The position - * is reported as a relative position. + * is reported as a relative position. */ /* @@ -124,19 +120,15 @@ #include <dev/wscons/wsconsio.h> #include <dev/wscons/wsmousevar.h> -/* - * Magic numbers. - */ - /* The amount of data transferred by the USB device. */ -#define TPMS_DATA_LEN 81 +#define UTPMS_DATA_LEN 81 /* The maximum number of sensors. */ -#define TPMS_X_SENSORS 26 -#define TPMS_Y_SENSORS 16 -#define TPMS_SENSORS (TPMS_X_SENSORS + TPMS_Y_SENSORS) +#define UTPMS_X_SENSORS 26 +#define UTPMS_Y_SENSORS 16 +#define UTPMS_SENSORS (UTPMS_X_SENSORS + UTPMS_Y_SENSORS) -/* +/* * Parameters for supported devices. For generality, these parameters * can be different for each device. The meanings of the parameters * are as follows. @@ -145,22 +137,22 @@ * to know some of the device parameters. * * noise: Amount of noise in the computed position. This controls - * how large a change must be to get reported, and how + * how large a change must be to get reported, and how * large enough changes are smoothed. A good value can * probably only be found experimentally, but something around * 16 seems suitable. * * product: The product ID of the trackpad. * - * - * threshold: Accumulated changes less than this are ignored. A good + * + * threshold: Accumulated changes less than this are ignored. A good * value could be determined experimentally, but 5 is a * reasonable guess. * * vendor: The vendor ID. Currently USB_VENDOR_APPLE for all devices. * * x_factor: Factor used in computations with X-coordinates. If the - * x-resolution of the display is x, this should be + * x-resolution of the display is x, this should be * (x + 1) / (x_sensors - 1). Other values work fine, but * then the aspect ratio is not necessarily kept. * @@ -171,7 +163,7 @@ * y_sensors: The number of sensors in the Y-direction. */ -struct tpms_dev { +struct utpms_dev { int type; /* Type of the trackpad. */ #define FOUNTAIN 0x00 #define GEYSER1 0x01 @@ -186,12 +178,10 @@ struct tpms_dev { uint16_t vendor; /* The vendor ID. */ }; -/* Devices supported by this driver. */ -static struct tpms_dev tpms_devices[] = -{ -#define POWERBOOK_TOUCHPAD(ttype, prod, x_fact, x_sens, y_fact) \ +static struct utpms_dev utpms_devices[] = { +#define UTPMS_TOUCHPAD(ttype, prod, x_fact, x_sens, y_fact) \ { \ - .type = (ttype), \ + .type = (ttype), \ .vendor = USB_VENDOR_APPLE, \ .product = (prod), \ .noise = 16, \ @@ -202,39 +192,31 @@ static struct tpms_dev tpms_devices[] = .y_sensors = 16 \ } /* 12 inch PowerBooks */ - POWERBOOK_TOUCHPAD(FOUNTAIN, 0x030a, 69, 16, 52), /* XXX Not tested. */ + UTPMS_TOUCHPAD(FOUNTAIN, 0x030a, 69, 16, 52), /* 12 and 14 inch iBook G4 */ - POWERBOOK_TOUCHPAD(GEYSER1, 0x030b, 69, 16, 52), + UTPMS_TOUCHPAD(GEYSER1, 0x030b, 69, 16, 52), /* 15 inch PowerBooks */ - POWERBOOK_TOUCHPAD(FOUNTAIN, 0x020e, 85, 16, 57), /* XXX Not tested. */ - POWERBOOK_TOUCHPAD(FOUNTAIN, 0x020f, 85, 16, 57), - POWERBOOK_TOUCHPAD(GEYSER2, 0x0214, 90, 15, 107), - POWERBOOK_TOUCHPAD(GEYSER2, 0x0215, 90, 15, 107), - POWERBOOK_TOUCHPAD(GEYSER2, 0x0216, 90, 15, 107), + UTPMS_TOUCHPAD(FOUNTAIN, 0x020e, 85, 16, 57), + UTPMS_TOUCHPAD(FOUNTAIN, 0x020f, 85, 16, 57), + UTPMS_TOUCHPAD(GEYSER2, 0x0214, 90, 15, 107), + UTPMS_TOUCHPAD(GEYSER2, 0x0215, 90, 15, 107), + UTPMS_TOUCHPAD(GEYSER2, 0x0216, 90, 15, 107), /* 17 inch PowerBooks */ - POWERBOOK_TOUCHPAD(FOUNTAIN, 0x020d, 71, 26, 68) /* XXX Not tested. */ -#undef POWERBOOK_TOUCHPAD + UTPMS_TOUCHPAD(FOUNTAIN, 0x020d, 71, 26, 68), +#undef UTPMS_TOUCHPAD }; -/* The number of supported devices. */ -#define TPMS_NUM_DEVICES (sizeof(tpms_devices) / sizeof(tpms_devices[0])) - -/* - * Types and prototypes. - */ - -/* Device data. */ -struct tpms_softc { +struct utpms_softc { struct uhidev sc_hdev; /* USB parent (got the struct device). */ int sc_type; /* Type of the trackpad */ int sc_datalen; - int sc_acc[TPMS_SENSORS]; /* Accumulated sensor values. */ - unsigned char sc_prev[TPMS_SENSORS]; /* Previous sample. */ - unsigned char sc_sample[TPMS_SENSORS]; /* Current sample. */ + int sc_acc[UTPMS_SENSORS]; /* Accumulated sensor values. */ + unsigned char sc_prev[UTPMS_SENSORS]; /* Previous sample. */ + unsigned char sc_sample[UTPMS_SENSORS]; /* Current sample. */ struct device *sc_wsmousedev; /* WSMouse device. */ int sc_noise; /* Amount of noise. */ int sc_threshold; /* Threshold value. */ - int sc_x; /* Virtual position in horizontal + int sc_x; /* Virtual position in horizontal * direction (wsmouse position). */ int sc_x_factor; /* X-coordinate factor. */ int sc_x_raw; /* X-position of finger on trackpad. */ @@ -246,53 +228,42 @@ struct tpms_softc { int sc_y_sensors; /* Number of Y-sensors. */ uint32_t sc_buttons; /* Button state. */ uint32_t sc_status; /* Status flags. */ -#define TPMS_ENABLED 1 /* Is the device enabled? */ -#define TPMS_DYING 2 /* Is the device dying? */ -#define TPMS_VALID 4 /* Is the previous sample valid? */ +#define UTPMS_ENABLED 1 /* Is the device enabled? */ +#define UTPMS_DYING 2 /* Is the device dying? */ +#define UTPMS_VALID 4 /* Is the previous sample valid? */ }; -void tpms_intr(struct uhidev *, void *, unsigned int); -int tpms_enable(void *); -void tpms_disable(void *); -int tpms_ioctl(void *, unsigned long, caddr_t, int, struct proc *); -void reorder_sample(struct tpms_softc*, unsigned char *, unsigned char *); -int compute_delta(struct tpms_softc *, int *, int *, int *, uint32_t *); -int detect_pos(int *, int, int, int, int *, int *); -int smooth_pos(int, int, int); - -/* Access methods for wsmouse. */ -const struct wsmouse_accessops tpms_accessops = { - tpms_enable, - tpms_ioctl, - tpms_disable, +void utpms_intr(struct uhidev *, void *, unsigned int); +int utpms_enable(void *); +void utpms_disable(void *); +int utpms_ioctl(void *, unsigned long, caddr_t, int, struct proc *); +void reorder_sample(struct utpms_softc*, unsigned char *, unsigned char *); +int compute_delta(struct utpms_softc *, int *, int *, int *, uint32_t *); +int detect_pos(int *, int, int, int, int *, int *); +int smooth_pos(int, int, int); + +const struct wsmouse_accessops utpms_accessops = { + utpms_enable, + utpms_ioctl, + utpms_disable, }; -/* This take cares also of the basic device registration. */ -int tpms_match(struct device *, void *, void *); -void tpms_attach(struct device *, struct device *, void *); -int tpms_detach(struct device *, int); -int tpms_activate(struct device *, int); - -struct cfdriver tpms_cd = { - NULL, "tpms", DV_DULL -}; - -const struct cfattach tpms_ca = { - sizeof(struct tpms_softc), - tpms_match, - tpms_attach, - tpms_detach, - tpms_activate, -}; +int utpms_match(struct device *, void *, void *); +void utpms_attach(struct device *, struct device *, void *); +int utpms_detach(struct device *, int); +int utpms_activate(struct device *, int); -/* - * Basic driver. - */ +struct cfdriver utpms_cd = { + NULL, "utpms", DV_DULL +}; -/* Try to match the device at some uhidev. */ +const struct cfattach utpms_ca = { + sizeof(struct utpms_softc), utpms_match, utpms_attach, utpms_detach, + utpms_activate, +}; int -tpms_match(struct device *parent, void *match, void *aux) +utpms_match(struct device *parent, void *match, void *aux) { struct usb_attach_arg *uaa = aux; struct uhidev_attach_arg *uha = (struct uhidev_attach_arg *)uaa; @@ -300,16 +271,16 @@ tpms_match(struct device *parent, void *match, void *aux) int i; uint16_t vendor, product; - /* + /* * We just check if the vendor and product IDs have the magic numbers - * we expect. + * we expect. */ if ((udd = usbd_get_device_descriptor(uha->parent->sc_udev)) != NULL) { vendor = UGETW(udd->idVendor); product = UGETW(udd->idProduct); - for (i = 0; i < TPMS_NUM_DEVICES; i++) { - if (vendor == tpms_devices[i].vendor && - product == tpms_devices[i].product) + for (i = 0; i < nitems(utpms_devices); i++) { + if (vendor == utpms_devices[i].vendor && + product == utpms_devices[i].product) return (UMATCH_IFACECLASS); } } @@ -317,29 +288,26 @@ tpms_match(struct device *parent, void *match, void *aux) return (UMATCH_NONE); } - -/* Attach the device. */ - void -tpms_attach(struct device *parent, struct device *self, void *aux) +utpms_attach(struct device *parent, struct device *self, void *aux) { - struct tpms_softc *sc = (struct tpms_softc *)self; + struct utpms_softc *sc = (struct utpms_softc *)self; struct usb_attach_arg *uaa = aux; struct uhidev_attach_arg *uha = (struct uhidev_attach_arg *)uaa; struct wsmousedev_attach_args a; - struct tpms_dev *pd; + struct utpms_dev *pd; usb_device_descriptor_t *udd; int i; uint16_t vendor, product; - sc->sc_datalen = TPMS_DATA_LEN; + sc->sc_datalen = UTPMS_DATA_LEN; /* Fill in device-specific parameters. */ if ((udd = usbd_get_device_descriptor(uha->parent->sc_udev)) != NULL) { product = UGETW(udd->idProduct); vendor = UGETW(udd->idVendor); - for (i = 0; i < TPMS_NUM_DEVICES; i++) { - pd = &tpms_devices[i]; + for (i = 0; i < nitems(utpms_devices); i++) { + pd = &utpms_devices[i]; if (product == pd->product && vendor == pd->vendor) { switch (pd->type) { case FOUNTAIN: @@ -352,7 +320,7 @@ tpms_attach(struct device *parent, struct device *self, void *aux) sc->sc_type = GEYSER2; sc->sc_datalen = 64; sc->sc_y_sensors = 9; - printf(": Geyser 2"); + printf(": Geyser 2"); break; } printf(" Trackpad\n"); @@ -366,96 +334,86 @@ tpms_attach(struct device *parent, struct device *self, void *aux) } } } - if (sc->sc_x_sensors <= 0 || sc->sc_x_sensors > TPMS_X_SENSORS || - sc->sc_y_sensors <= 0 || sc->sc_y_sensors > TPMS_Y_SENSORS) { - printf(": unexpected sensors configuration (%d:%d)\n", + if (sc->sc_x_sensors <= 0 || sc->sc_x_sensors > UTPMS_X_SENSORS || + sc->sc_y_sensors <= 0 || sc->sc_y_sensors > UTPMS_Y_SENSORS) { + printf(": unexpected sensors configuration (d:d)\n", sc->sc_x_sensors, sc->sc_y_sensors); return; } - sc->sc_hdev.sc_intr = tpms_intr; + sc->sc_hdev.sc_intr = utpms_intr; sc->sc_hdev.sc_parent = uha->parent; sc->sc_hdev.sc_report_id = uha->reportid; sc->sc_status = 0; - a.accessops = &tpms_accessops; + a.accessops = &utpms_accessops; a.accesscookie = sc; sc->sc_wsmousedev = config_found(self, &a, wsmousedevprint); } -/* Detach the device. */ - int -tpms_detach(struct device *self, int flags) +utpms_detach(struct device *self, int flags) { - struct tpms_softc *sc = (struct tpms_softc *)self; - int ret; + struct utpms_softc *sc = (struct utpms_softc *)self; + int ret = 0; /* The wsmouse driver does all the work. */ - ret = 0; if (sc->sc_wsmousedev != NULL) ret = config_detach(sc->sc_wsmousedev, flags); return (ret); } -/* Activate the device. */ - int -tpms_activate(struct device *self, int act) +utpms_activate(struct device *self, int act) { - struct tpms_softc *sc = (struct tpms_softc *)self; + struct utpms_softc *sc = (struct utpms_softc *)self; int ret; if (act == DVACT_DEACTIVATE) { ret = 0; if (sc->sc_wsmousedev != NULL) ret = config_deactivate(sc->sc_wsmousedev); - sc->sc_status |= TPMS_DYING; + sc->sc_status |= UTPMS_DYING; return (ret); } return (EOPNOTSUPP); } - -/* Enable the device. */ - int -tpms_enable(void *v) +utpms_enable(void *v) { - struct tpms_softc *sc = v; + struct utpms_softc *sc = v; /* Check that we are not detaching or already enabled. */ - if (sc->sc_status & TPMS_DYING) + if (sc->sc_status & UTPMS_DYING) return (EIO); - if (sc->sc_status & TPMS_ENABLED) + if (sc->sc_status & UTPMS_ENABLED) return (EBUSY); - sc->sc_status |= TPMS_ENABLED; - sc->sc_status &= ~TPMS_VALID; + sc->sc_status |= UTPMS_ENABLED; + sc->sc_status &= ~UTPMS_VALID; sc->sc_buttons = 0; bzero(sc->sc_sample, sizeof(sc->sc_sample)); return (uhidev_open(&sc->sc_hdev)); } -/* Disable the device. */ - void -tpms_disable(void *v) +utpms_disable(void *v) { - struct tpms_softc *sc = v; + struct utpms_softc *sc = v; - if (!(sc->sc_status & TPMS_ENABLED)) + if (!(sc->sc_status & UTPMS_ENABLED)) return; - sc->sc_status &= ~TPMS_ENABLED; + sc->sc_status &= ~UTPMS_ENABLED; uhidev_close(&sc->sc_hdev); } int -tpms_ioctl(void *v, unsigned long cmd, caddr_t data, int flag, struct proc *p) +utpms_ioctl(void *v, unsigned long cmd, caddr_t data, int flag, struct proc *p) { switch (cmd) { case WSMOUSEIO_GTYPE: @@ -466,16 +424,10 @@ tpms_ioctl(void *v, unsigned long cmd, caddr_t data, int flag, struct proc *p) return (-1); } -/* - * Interrupts & pointer movement. - */ - -/* Handle interrupts. */ - void -tpms_intr(struct uhidev *addr, void *ibuf, unsigned int len) +utpms_intr(struct uhidev *addr, void *ibuf, unsigned int len) { - struct tpms_softc *sc = (struct tpms_softc *)addr; + struct utpms_softc *sc = (struct utpms_softc *)addr; unsigned char *data; int dx, dy, dz, i, s; uint32_t buttons; @@ -492,8 +444,8 @@ tpms_intr(struct uhidev *addr, void *ibuf, unsigned int len) reorder_sample(sc, sc->sc_sample, data); /* Is this the first sample? */ - if (!(sc->sc_status & TPMS_VALID)) { - sc->sc_status |= TPMS_VALID; + if (!(sc->sc_status & UTPMS_VALID)) { + sc->sc_status |= UTPMS_VALID; sc->sc_x = sc->sc_y = -1; sc->sc_x_raw = sc->sc_y_raw = -1; memcpy(sc->sc_prev, sc->sc_sample, sizeof(sc->sc_prev)); @@ -501,7 +453,7 @@ tpms_intr(struct uhidev *addr, void *ibuf, unsigned int len) return; } /* Accumulate the sensor change while keeping it nonnegative. */ - for (i = 0; i < TPMS_SENSORS; i++) { + for (i = 0; i < UTPMS_SENSORS; i++) { sc->sc_acc[i] += (signed char)(sc->sc_sample[i] - sc->sc_prev[i]); @@ -526,28 +478,27 @@ tpms_intr(struct uhidev *addr, void *ibuf, unsigned int len) sc->sc_buttons = buttons; } -/* +/* * Reorder the sensor values so that all the X-sensors are before the * Y-sensors in the natural order. Note that this might have to be - * rewritten if TPMS_X_SENSORS or TPMS_Y_SENSORS change. + * rewritten if UTPMS_X_SENSORS or UTPMS_Y_SENSORS change. */ - -void -reorder_sample(struct tpms_softc *sc, unsigned char *to, unsigned char *from) +void +reorder_sample(struct utpms_softc *sc, unsigned char *to, unsigned char *from) { int i; if (sc->sc_type == GEYSER2) { int j; - bzero(to, TPMS_SENSORS); + bzero(to, UTPMS_SENSORS); for (i = 0, j = 19; i < 20; i += 2, j += 3) { to[i] = from[j]; to[i + 1] = from[j + 1]; } for (i = 0, j = 1; i < 9; i += 2, j += 3) { - to[TPMS_X_SENSORS + i] = from[j]; - to[TPMS_X_SENSORS + i + 1] = from[j + 1]; + to[UTPMS_X_SENSORS + i] = from[j]; + to[UTPMS_X_SENSORS + i + 1] = from[j + 1]; } } else { for (i = 0; i < 8; i++) { @@ -556,9 +507,10 @@ reorder_sample(struct tpms_softc *sc, unsigned char *to, unsigned char *from) to[i + 8] = from[5 * i + 4]; to[i + 16] = from[5 * i + 42]; #if 0 - /* - * XXX This seems to introduce random ventical jumps, so - * we ignore these sensors until we figure out their meaning. + /* + * XXX This seems to introduce random ventical jumps, + * so we ignore these sensors until we figure out + * their meaning. */ if (i < 2) to[i + 24] = from[5 * i + 44]; @@ -576,19 +528,18 @@ reorder_sample(struct tpms_softc *sc, unsigned char *to, unsigned char *from) * history. Note that dx, dy, dz and buttons are modified only if * corresponding pressure is detected and should thus be initialised * before the call. Return 0 on error. + * + * XXX Could we report something useful in dz? */ - -/* XXX Could we report something useful in dz? */ - int -compute_delta(struct tpms_softc *sc, int *dx, int *dy, int *dz, +compute_delta(struct utpms_softc *sc, int *dx, int *dy, int *dz, uint32_t * buttons) { int x_det, y_det, x_raw, y_raw, x_fingers, y_fingers, fingers, x, y; x_det = detect_pos(sc->sc_acc, sc->sc_x_sensors, sc->sc_threshold, sc->sc_x_factor, &x_raw, &x_fingers); - y_det = detect_pos(sc->sc_acc + TPMS_X_SENSORS, sc->sc_y_sensors, + y_det = detect_pos(sc->sc_acc + UTPMS_X_SENSORS, sc->sc_y_sensors, sc->sc_threshold, sc->sc_y_factor, &y_raw, &y_fingers); fingers = max(x_fingers, y_fingers); @@ -605,9 +556,9 @@ compute_delta(struct tpms_softc *sc, int *dx, int *dy, int *dz, if (sc->sc_x_raw >= 0) { sc->sc_x_raw = (3 * sc->sc_x_raw + x_raw) / 4; sc->sc_y_raw = (3 * sc->sc_y_raw + y_raw) / 4; - /* + /* * Compute virtual position and change if we - * already have a decent position. + * already have a decent position. */ if (sc->sc_x >= 0) { x = smooth_pos(sc->sc_x, sc->sc_x_raw, @@ -646,7 +597,6 @@ compute_delta(struct tpms_softc *sc, int *dx, int *dy, int *dz, * Compute the new smoothed position from the previous smoothed position * and the raw position. */ - int smooth_pos(int pos_old, int pos_raw, int noise) { @@ -673,7 +623,6 @@ smooth_pos(int pos_old, int pos_raw, int noise) * is returned in fingers_ret. The position returned in pos_ret * is in [0, (n_sensors - 1) * factor - 1]. */ - int detect_pos(int *sensors, int n_sensors, int threshold, int fact, int *pos_ret, int *fingers_ret) @@ -682,7 +631,7 @@ detect_pos(int *sensors, int n_sensors, int threshold, int fact, /* * Compute the number of fingers, total pressure, and weighted - * position of the fingers. + * position of the fingers. */ *fingers_ret = 0; w = s = 0; |