File: h3600-raw.c

package info (click to toggle)
tslib 1.0-11
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 688 kB
  • sloc: ansic: 8,739; xml: 570; makefile: 189; sh: 25
file content (60 lines) | stat: -rw-r--r-- 1,296 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

#include "config.h"
#include "tslib-private.h"

struct h3600_ts_event { /* Used in the Compaq IPAQ */
	unsigned short pressure;
	unsigned short x;
	unsigned short y;
	unsigned short pad;
};

static int h3600_read(struct tslib_module_info *inf, struct ts_sample *samp, int nr)
{
	struct tsdev *ts = inf->dev;
	struct h3600_ts_event *h3600_evt;
	int ret;
	int total = 0;
	h3600_evt = alloca(sizeof(*h3600_evt) * nr);
	ret = read(ts->fd, h3600_evt, sizeof(*h3600_evt) * nr);
	if(ret > 0) {
		int nr = ret / sizeof(*h3600_evt);
		while(ret >= (int)sizeof(*h3600_evt)) {
			samp->x = h3600_evt->x;
			samp->y = h3600_evt->y;
			samp->pressure = h3600_evt->pressure;
#ifdef DEBUG
        fprintf(stderr,"RAW---------------------------> %d %d %d\n",samp->x,samp->y,samp->pressure);
#endif /*DEBUG*/
			gettimeofday(&samp->tv,NULL);
			samp++;
			h3600_evt++;
			ret -= sizeof(*h3600_evt);
		}
	} else {
		return -1;
	}

	ret = nr;
	return ret;
}

static const struct tslib_ops h3600_ops =
{
	.read	= h3600_read,
};

TSAPI struct tslib_module_info *mod_init(struct tsdev *dev, const char *params)
{
	struct tslib_module_info *m;

	m = malloc(sizeof(struct tslib_module_info));
	if (m == NULL)
		return NULL;

	m->ops = &h3600_ops;
	return m;
}