diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2010-10-19 13:37:46 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2010-10-22 11:02:48 +1000 |
commit | 675f4a8525d29ebad783351e17be785b2f32b2e8 (patch) | |
tree | 4a1aba9abeb869d0eedb1bbaf01f14c59bf778a0 /include/inpututils.h | |
parent | fc48a8f9f5f66e591b3e39211d44ce68267303f8 (diff) |
Abstract valuator masks through a set of APIs.
This commit introduces an abstraction API for handling masked valuators. The
intent is that drivers just allocate a mask, set the data and pass the mask
to the server. The actual storage type of the mask is hidden from the
drivers.
The new calls for drivers are:
valuator_mask_new() /* to allocate a valuator mask */
valuator_mask_zero() /* to reset a mask to zero */
valuator_mask_set() /* to set a valuator value */
The new interface to the server is
xf86PostMotionEventM()
xf86PostButtonEventM()
xf86PostKeyboardEventM()
xf86PostProximityEventM()
all taking a mask instead of the valuator array.
The ValuatorMask is currently defined for MAX_VALUATORS fixed size due to
memory allocation restrictions in SIGIO handlers.
For easier review, a lot of the code still uses separate valuator arrays.
This will be fixed in a later patch.
This patch was initially written by Chase Douglas.
Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
Diffstat (limited to 'include/inpututils.h')
-rw-r--r-- | include/inpututils.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/include/inpututils.h b/include/inpututils.h new file mode 100644 index 000000000..56bb75d07 --- /dev/null +++ b/include/inpututils.h @@ -0,0 +1,49 @@ +/* + * Copyright © 2010 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#ifdef HAVE_DIX_CONFIG_H +#include "dix-config.h" +#endif + +#ifndef INPUTUTILS_H +#define INPUTUTILS_H + +#include "input.h" + +struct _ValuatorMask { + int8_t last_bit; /* highest bit set in mask */ + uint8_t mask[(MAX_VALUATORS + 7)/8]; + int valuators[MAX_VALUATORS]; /* valuator data */ +}; + +/* server-internal */ +extern _X_HIDDEN int valuator_mask_size(const ValuatorMask *mask); +extern _X_HIDDEN int valuator_mask_isset(const ValuatorMask *mask, int bit); +extern _X_HIDDEN void valuator_mask_unset(ValuatorMask *mask, int bit); +extern _X_HIDDEN int* valuator_mask_copy_valuators(const ValuatorMask *mask, int *valuators_in); +extern _X_HIDDEN int valuator_mask_num_valuators(const ValuatorMask *mask); +extern _X_HIDDEN void valuator_mask_copy(ValuatorMask *dest, const ValuatorMask *src); +extern _X_HIDDEN int valuator_mask_get(const ValuatorMask *mask, int valnum); + +#endif |