From 7db9d8d76ff61c4802ac15559dcea6fa54ff567a Mon Sep 17 00:00:00 2001 From: Henrik Rydberg Date: Fri, 6 Aug 2010 21:11:17 +0200 Subject: initial bzr repo at rev 27 --- include/grail-bits.h | 65 ++++++++++++++++++++++++++++++ include/grail-touch.h | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++ include/grail-types.h | 56 ++++++++++++++++++++++++++ include/grail.h | 94 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 322 insertions(+) create mode 100644 include/grail-bits.h create mode 100644 include/grail-touch.h create mode 100644 include/grail-types.h create mode 100644 include/grail.h (limited to 'include') diff --git a/include/grail-bits.h b/include/grail-bits.h new file mode 100644 index 0000000..ca04c3f --- /dev/null +++ b/include/grail-bits.h @@ -0,0 +1,65 @@ +/***************************************************************************** + * + * grail - Gesture Recognition And Instantiation Library + * + * Copyright (C) 2010 Canonical Ltd. + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + * + * Authors: + * Henrik Rydberg + * + ****************************************************************************/ + +#ifndef _GRAIL_BITS_H +#define _GRAIL_BITS_H + +typedef unsigned char grail_mask_t; + +static inline void grail_mask_set(grail_mask_t *mask, int i) +{ + mask[i >> 3] |= (1 << (i & 7)); +} + +static inline void grail_mask_clear(grail_mask_t *mask, int i) +{ + mask[i >> 3] &= ~(1 << (i & 7)); +} + +static inline void grail_mask_modify(grail_mask_t *mask, int i, int v) +{ + if (v) + grail_mask_set(mask, i); + else + grail_mask_clear(mask, i); +} + +static inline int grail_mask_get(const grail_mask_t *mask, int i) +{ + return (mask[i >> 3] >> (i & 7)) & 1; +} + +void grail_mask_set_mask(grail_mask_t *a, const grail_mask_t *b, int bytes); +void grail_mask_clear_mask(grail_mask_t *a, const grail_mask_t *b, int bytes); + +int grail_mask_count(const grail_mask_t *mask, int bytes); +int grail_mask_get_first(const grail_mask_t *mask, int bytes); +int grail_mask_get_next(int i, const grail_mask_t *mask, int bytes); + +#define grail_mask_foreach(i, mask, bytes) \ + for (i = grail_mask_get_first(mask, bytes); \ + i >= 0; \ + i = grail_mask_get_next(i, mask, bytes)) + +#endif diff --git a/include/grail-touch.h b/include/grail-touch.h new file mode 100644 index 0000000..5c2fab0 --- /dev/null +++ b/include/grail-touch.h @@ -0,0 +1,107 @@ +/***************************************************************************** + * + * grail - Gesture Recognition And Instantiation Library + * + * Copyright (C) 2010 Canonical Ltd. + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + * + * Authors: + * Henrik Rydberg + * + ****************************************************************************/ + +#ifndef _GRAIL_TOUCH_H +#define _GRAIL_TOUCH_H + +#include +#include + +#define DIM_TOUCH 32 +#define DIM_TOUCH_BYTES ((DIM_TOUCH + 7) >> 3) + +typedef int touch_prop_t; +typedef __u64 touch_time_t; + +enum touch_prop_list { + TP_POS_X, + TP_POS_Y, + TP_TOUCH_MAJOR, + TP_TOUCH_MINOR, + TP_WIDTH_MAJOR, + TP_WIDTH_MINOR, + TP_ORIENTATION, + TP_PRESSURE, + DIM_TOUCH_PROP +}; + +#define DIM_TOUCH_PROP_BYTES ((DIM_TOUCH_PROP + 7) >> 3) + +struct touch { + int active; + int slot; + touch_prop_t prop[DIM_TOUCH_PROP]; +}; + +struct touch_frame { + int nactive; + int ncreate, nmodify, ndestroy; + touch_time_t time; + grail_mask_t touches[DIM_TOUCH_BYTES]; + struct touch *active[DIM_TOUCH]; + struct touch touch[DIM_TOUCH]; +}; + +struct touch_dev_caps { + grail_mask_t mask[DIM_TOUCH_PROP_BYTES]; + struct input_absinfo info[DIM_TOUCH_PROP]; +}; + +struct touch_dev { + void (*event)(struct touch_dev *dev, const struct input_event *ev); + void (*create)(struct touch_dev *dev, int slot, + const grail_mask_t *mask, const touch_prop_t *prop); + void (*modify)(struct touch_dev *dev, int slot, + const grail_mask_t *mask, const touch_prop_t *prop); + void (*destroy)(struct touch_dev *dev, int slot); + void (*sync)(struct touch_dev *dev, const struct input_event *syn); + struct touch_dev_caps caps; + struct touch_dev_impl *impl; + void *priv; +}; + +struct touch_engine { + void (*event)(struct touch_engine *engine, + const struct input_event *ev); + void (*sync)(struct touch_engine *engine, + const struct input_event *syn); + struct touch_frame frame; + void *priv; +}; + +int touch_dev_open(struct touch_dev *dev, int fd); +int touch_dev_idle(struct touch_dev *dev, int fd, int ms); +int touch_dev_pull(struct touch_dev *dev, int fd); +void touch_dev_close(struct touch_dev *dev, int fd); + +void touch_engine_init(struct touch_engine *engine, + void (*event)(struct touch_engine *engine, + const struct input_event *ev), + void (*sync)(struct touch_engine *engine, + const struct input_event *ev), + void *priv); +void touch_engine_attach(struct touch_engine *engine, struct touch_dev *dev); +void touch_engine_detach(struct touch_engine *engine, struct touch_dev *dev); + +#endif diff --git a/include/grail-types.h b/include/grail-types.h new file mode 100644 index 0000000..7de3d9a --- /dev/null +++ b/include/grail-types.h @@ -0,0 +1,56 @@ +/***************************************************************************** + * + * grail - Gesture Recognition And Instantiation Library + * + * Copyright (C) 2010 Canonical Ltd. + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + * + * Authors: + * Henrik Rydberg + * + ****************************************************************************/ + +#ifndef _GRAIL_TYPES_H +#define _GRAIL_TYPES_H + +#define GRAIL_TYPE_POINTER 0 /* reserved */ + +#define GRAIL_TYPE_PAN 1 /* two-finger pan/scroll */ +#define GRAIL_TYPE_PINCH 2 /* two-finger pinch-to-zoom */ +#define GRAIL_TYPE_ROTATE 3 /* two-finger rotation */ +#define GRAIL_TYPE_COMBO2 4 /* two-finger combo */ + +#define GRAIL_TYPE_SWIPE 5 /* three-finger pan */ +#define GRAIL_TYPE_SCALE 6 /* three-finger pinch */ +#define GRAIL_TYPE_TURN 7 /* three-finger rotate */ +#define GRAIL_TYPE_COMBO3 8 /* three-finger combo */ + +#define GRAIL_TYPE_BRUSH 9 /* four-finger pan */ +#define GRAIL_TYPE_PICK 10 /* four-finger pinch */ +#define GRAIL_TYPE_WHIRL 11 /* four-finger rotate */ +#define GRAIL_TYPE_COMBO4 12 /* four-finger combo */ + +#define GRAIL_TYPE_HAND 13 /* five-finger pan */ +#define GRAIL_TYPE_GRAB 14 /* five-finger pinch */ +#define GRAIL_TYPE_REVOLVE 15 /* five-finger rotate */ +#define GRAIL_TYPE_COMBO5 16 /* five-finger combo */ + +#define GRAIL_TYPE_TAP1 17 /* single one-finger tap */ +#define GRAIL_TYPE_TAP2 18 /* single two-finger tap */ +#define GRAIL_TYPE_TAP3 19 /* single three-finger tap */ +#define GRAIL_TYPE_TAP4 20 /* single four-finger tap */ +#define GRAIL_TYPE_TAP5 21 /* single five-finger tap */ + +#endif diff --git a/include/grail.h b/include/grail.h new file mode 100644 index 0000000..0fa4473 --- /dev/null +++ b/include/grail.h @@ -0,0 +1,94 @@ +/***************************************************************************** + * + * grail - Gesture Recognition And Instantiation Library + * + * Copyright (C) 2010 Canonical Ltd. + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + * + * Authors: + * Henrik Rydberg + * + ****************************************************************************/ + +#ifndef _GRAIL_H +#define _GRAIL_H + +#include +#include +#include + +#define DIM_GRAIL_TYPE 64 +#define DIM_GRAIL_TYPE_BYTES ((DIM_GRAIL_TYPE + 7) >> 3) + +#define DIM_GRAIL_PROP 16 +#define DIM_GRAIL_PROP_BYTES ((DIM_GRAIL_PROP + 7) >> 3) + +#define GRAIL_STATUS_BEGIN 0 +#define GRAIL_STATUS_UPDATE 1 +#define GRAIL_STATUS_END 2 + +typedef float grail_prop_t; +typedef __u64 grail_time_t; + +struct grail_coord { + float x, y; +}; + +struct grail_client_id { + int client; + int root, event, child; +}; + +struct grail_client_info { + struct grail_client_id id; + grail_mask_t mask[DIM_GRAIL_TYPE_BYTES]; +}; + +struct grail_event { + int type; + int id; + int status; + int ntouch; + int nprop; + struct grail_coord pos; + struct grail_client_id client_id; + grail_time_t time; + grail_prop_t prop[DIM_GRAIL_PROP]; +}; + +struct grail { + int (*get_clients)(struct grail *ge, + struct grail_client_info *client, int max_clients, + const struct grail_coord *coords, int num_coords, + const grail_mask_t *types, int type_bytes); + void (*event)(struct grail *ge, + const struct input_event *ev); + void (*gesture)(struct grail *ge, + const struct grail_event *ev); + struct grail_impl *impl; + struct gesture_inserter *gin; + struct gesture_recognizer *gru; + void *priv; +}; + +int grail_open(struct grail *ge, int fd); +int grail_idle(struct grail *ge, int fd, int ms); +int grail_pull(struct grail *ge, int fd); +void grail_close(struct grail *ge, int fd); + +void grail_get_units(struct grail_coord *min, struct grail_coord *max, + const struct grail *ge); + +#endif -- cgit v1.2.3