diff options
author | Andy Green <andy@openmoko.com> | 2008-11-19 17:11:06 +0000 |
---|---|---|
committer | Andy Green <agreen@pads.home.warmcat.com> | 2008-11-19 17:11:06 +0000 |
commit | d082ca932a9d03105fe26881ee860e7ff7025a9d (patch) | |
tree | 04253fc0920a760167d873d1c850bdbe0863bbb2 /include/linux | |
parent | 4c1c1b07611390857b93f515a284dae2de3115d7 (diff) |
test-touchscreen-median.patch
Signed-off-by: Andy Green <andy@openmoko.com>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/ts_filter.h | 53 | ||||
-rw-r--r-- | include/linux/ts_filter_mean.h | 34 | ||||
-rw-r--r-- | include/linux/ts_filter_median.h | 36 |
3 files changed, 123 insertions, 0 deletions
diff --git a/include/linux/ts_filter.h b/include/linux/ts_filter.h new file mode 100644 index 00000000000..7262bbaf3dd --- /dev/null +++ b/include/linux/ts_filter.h @@ -0,0 +1,53 @@ +#ifndef __TS_FILTER_H__ +#define __TS_FILTER_H__ + +/* + * touchscreen filter + * + * median + * + * (c) 2008 Andy Green <andy@openmoko.com> + */ + +/* max filters you can chain up */ +#define MAX_TS_FILTER_CHAIN 4 +#define MAX_TS_FILTER_COORDS 6 + +struct ts_filter; + +/* operations that a filter can perform + */ +struct ts_filter_api { + struct ts_filter * (*create)(void *config, int count_coords); + void (*destroy)(struct ts_filter *filter); + void (*clear)(struct ts_filter *filter); + int (*process)(struct ts_filter *filter, int *coords); + void (*scale)(struct ts_filter *filter, int *coords); +}; + +/* this is the common part of all filters, the result + * we use this type as an otherwise opaque handle on to + * the actual filter. Therefore you need one of these + * at the start of your actual filter struct + */ + +struct ts_filter { + struct ts_filter *next; /* next in chain */ + struct ts_filter_api *api; /* operations to use for this object */ + int count_coords; + int coords[MAX_TS_FILTER_COORDS]; +}; + +/* + * helper to create a filter chain from array of API pointers and + * array of config ints... leaves pointers to created filters in list + * array and fills in ->next pointers to create the chain + */ + +extern int ts_filter_create_chain(struct ts_filter_api **api, void **config, + struct ts_filter **list, int count_coords); + +/* helper to destroy a whole chain from the list of filter pointers */ + +extern void ts_filter_destroy_chain(struct ts_filter **list); +#endif diff --git a/include/linux/ts_filter_mean.h b/include/linux/ts_filter_mean.h new file mode 100644 index 00000000000..46ff01a4c82 --- /dev/null +++ b/include/linux/ts_filter_mean.h @@ -0,0 +1,34 @@ +#ifndef __TS_FILTER_MEAN_H__ +#define __TS_FILTER_MEAN_H__ + +#include <linux/ts_filter.h> + +/* + * touchscreen filter + * + * mean + * + * (c) 2008 Andy Green <andy@openmoko.com> + */ + +struct ts_filter_mean_configuration { + int bits_filter_length; + int averaging_threshold; + + int extent; +}; + +struct ts_filter_mean { + struct ts_filter tsf; + struct ts_filter_mean_configuration *config; + + int reported[MAX_TS_FILTER_COORDS]; + int lowpass[MAX_TS_FILTER_COORDS]; + int *fifo[MAX_TS_FILTER_COORDS]; + int fhead[MAX_TS_FILTER_COORDS]; + int ftail[MAX_TS_FILTER_COORDS]; +}; + +extern struct ts_filter_api ts_filter_mean_api; + +#endif diff --git a/include/linux/ts_filter_median.h b/include/linux/ts_filter_median.h new file mode 100644 index 00000000000..d81642883f7 --- /dev/null +++ b/include/linux/ts_filter_median.h @@ -0,0 +1,36 @@ +#ifndef __TS_FILTER_MEDIAN_H__ +#define __TS_FILTER_MEDIAN_H__ + +#include <linux/ts_filter.h> + +/* + * touchscreen filter + * + * median + * + * (c) 2008 Andy Green <andy@openmoko.com> + */ + +struct ts_filter_median_configuration { + int extent; + int midpoint; + int decimation_threshold; + int decimation_above; + int decimation_below; +}; + +struct ts_filter_median { + struct ts_filter tsf; + struct ts_filter_median_configuration *config; + + int decimation_count; + int last_issued[MAX_TS_FILTER_COORDS]; + int valid; /* how many samples in the sort buffer are valid */ + int *sort[MAX_TS_FILTER_COORDS]; /* samples taken for median */ + int *fifo[MAX_TS_FILTER_COORDS]; /* samples taken for median */ + int pos; /* where we are in the fifo sample memory */ +}; + +extern struct ts_filter_api ts_filter_median_api; + +#endif |