ts_read - Man Page
read tslib touch samples
Synopsis
#include <tslib.h> int ts_read(struct tsdev *dev, struct ts_sample *samp, int nr); int ts_read_raw(struct tsdev *dev, struct ts_sample *samp, int nr); int ts_read_mt(struct tsdev *dev, struct ts_sample_mt **samp, int slots, int nr); int ts_read_raw_mt(struct tsdev *dev, struct ts_sample_mt **samp, int slots, int nr);
Description
ts_read() reads nr input samples with tslib's filters applied. struct ts_sample is define as follows:
struct ts_sample { int x; int y; unsigned int pressure; struct timeval tv; };
ts_read_mt() reads nr * slots input samples with tslib's filters applied. struct ts_sample_mt is defined as follows:
struct ts_sample_mt { /* most recent ABS_MT_* event codes. * see linux/input.h for descriptions */ int x; int y; unsigned int pressure; int slot; int tracking_id; int tool_type; int tool_x; int tool_y; unsigned int touch_major; unsigned int width_major; unsigned int touch_minor; unsigned int width_minor; int orientation; int distance; int blob_id; struct timeval tv; /* BTN_TOUCH state */ short pen_down; /* the TSLIB_MT_VALID bit is set in valid if this sample * contains new data; * valid is set to 0 otherwise */ short valid; };
The user has to provide the amount of memory described in nr and slots to hold them.
ts_read_raw() and ts_read_raw_mt() do the same thing without tslib's filters applied.
Return Value
The number of actually read samples is returned. Especially when opened in non-blocking mode, see ts_setup() , that can be less than requested in the call. On failure, a negative error number is returned.
Example
The following program continuously reads tslib multitouch input samples and prints slot and position values to stdout as the touch screen is touched.
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <tslib.h> #define READ_SAMPLES 1 #define MAX_SLOTS 5 int main(int argc, char **argv) { struct tsdev *ts; struct ts_sample_mt **samp_mt = NULL; int i, j; int ret; ts = ts_setup(NULL, 0); if (!ts) return -1; samp_mt = malloc(READ_SAMPLES * sizeof(struct ts_sample_mt **)); if (!samp_mt) return -1; for (i = 0; i < READ_SAMPLES; i++) { samp_mt[i] = calloc(MAX_SLOTS, sizeof(struct ts_sample_mt)); if (!samp_mt[i]) return -1; } while(1) { ret = ts_read_mt(ts, samp_mt, MAX_SLOTS, READ_SAMPLES); for (i = 0; i < ret; i++) { printf("sample nr %d0, i); for (j = 0; i < MAX_SLOTS; j++) { if (!(samp_mt[i][j].valid & TSLIB_MT_VALID)) continue; printf("slot %d: X:%d Y: %d0, samp_mt[i][j].slot, samp_mt[i][j].x, samp_mt[i][j].y); } } } }
See Also
ts_setup(3), ts_config(3), ts_open(3), ts_close(3), ts.conf(5)
Referenced By
ts_close(3), ts_config(3), ts_error_fn(3), ts_fd(3), ts_get_eventpath(3), ts_libversion(3), ts_open(3), ts_print_ascii_logo(3), ts_setup(3), ts_test_mt(1).
The man pages ts_read_mt(3), ts_read_raw(3) and ts_read_raw_mt(3) are aliases of ts_read(3).