Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.2:Test
input-utils
input-utils-absset.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File input-utils-absset.patch of Package input-utils
--- Makefile +++ Makefile @@ -57,3 +57,6 @@ acceltest: acceltest.c $(CC) $(CFLAGS) $(CPPFLAGS) -lm $^ -o $@ + +absset: absset.c + $(CC) $(CFLAGS) $(CPPFLAGS) $^ -o $@ --- absset.c +++ absset.c @@ -0,0 +1,180 @@ +/* + * absset.c + * Sets Absolute limits/values + * Copyright 2009 Dan Streetman <ddstreet@ieee.org> + */ + +/* + * 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 2 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include <fcntl.h> +#include <linux/input.h> +#include <unistd.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +#include <getopt.h> +#include <errno.h> + +char *progname; + +void print_usage() +{ + printf("Usage: %s [param...] <axis> <device>\n", progname); + printf("Modifies the parameters of an absolute-value axis.\n"); + printf("\n"); + printf("Params:\n"); + printf(" -v --value=VALUE Set the current value.\n"); + printf(" -m --min=MIN Set the minimum value.\n"); + printf(" -M --max=MAX Set the maximum value.\n"); + printf(" -f --fuzz=FUZZ Set the fuzz value.\n"); + printf(" -F --flat=FLAT Set the flat value.\n"); + printf("\n"); + printf("Axis setting:\n"); + printf(" -a --axis=N Change the values of axis number N.\n"); + printf(" -x Change the X axis values, same as '-a 0'.\n"); + printf(" -y Change the Y axis values, same as '-a 1'.\n"); + printf(" -z Change the Z axis values, same as '-a 2'.\n"); +} + +int set_axis(char *arg, int *axisSet) +{ + if (*axisSet) { + fprintf(stderr, "Cannot set more than 1 axis\n\n"); + print_usage(); + exit(1); + } + + *axisSet = 1; + + return strtol(arg, NULL, 0); +} + +int main(int argc, char** argv) +{ + int fd = 0; + char *device_file_name; + int retval = 0; + + int opt; + char *shortopts = "hv:m:M:f:F:a:xyz"; + struct option longopts[] = { + { "value", 1, NULL, 'v' }, + { "min", 1, NULL, 'm' }, + { "max", 1, NULL, 'M' }, + { "fuzz", 1, NULL, 'f' }, + { "flat", 1, NULL, 'F' }, + { "axis", 1, NULL, 'a' }, + { 0, 0, 0, 0 } + }; + + __s32 value=0, min=0, max=0, fuzz=0, flat=0, axis=0; + int valueSet=0, minSet=0, maxSet=0, fuzzSet=0, flatSet=0, axisSet=0; + struct input_absinfo *ia = NULL; + + progname = argv[0]; + + while ((opt = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1) { + switch (opt) { + case 'v': value = strtol(optarg, NULL, 0); valueSet = 1; break; + case 'm': min = strtol(optarg, NULL, 0); minSet = 1; break; + case 'M': max = strtol(optarg, NULL, 0); maxSet = 1; break; + case 'f': fuzz = strtol(optarg, NULL, 0); fuzzSet = 1; break; + case 'F': flat = strtol(optarg, NULL, 0); flatSet = 1; break; + case 'a': axis = set_axis(optarg, &axisSet); break; + case 'x': axis = set_axis("0", &axisSet); break; + case 'y': axis = set_axis("1", &axisSet); break; + case 'z': axis = set_axis("2", &axisSet); break; + case 'h': /* fall through */ + default: + print_usage(); + exit(1); + } + } + + if (optind >= argc) { + fprintf(stderr, "No device node specified.\n\n"); + print_usage(); + exit(1); + } + + device_file_name = argv[optind]; + + if (!valueSet && !minSet && !maxSet && !fuzzSet && !flatSet && !axisSet) { + fprintf(stderr, "No param specified. You must specify at least one param.\n\n"); + print_usage(); + exit(1); + } + + if (!axisSet) { + fprintf(stderr, "No axis specified.\n\n"); + print_usage(); + exit(1); + } + + /* Open device */ + fd = open(device_file_name, O_RDWR); + if (fd == -1) { + retval = -errno; + fprintf(stderr, "Error opening device %s : %s\n", device_file_name, strerror(-retval)); + goto end; + } + + if (!(ia = malloc(sizeof(*ia)))) { + fprintf(stderr, "Out of memory!\n"); + retval = -ENOMEM; + goto end; + } + + if (!valueSet || !minSet || !maxSet || !fuzzSet || !flatSet || !axisSet) { + if (ioctl(fd, EVIOCGABS(axis), ia) == -1) { + retval = -errno; + fprintf(stderr, "Error getting current axis %d values : %s\n", axis, strerror(-retval)); + goto end; + } + } + + if (valueSet) + ia->value = value; + if (minSet) + ia->minimum = min; + if (maxSet) + ia->maximum = max; + if (fuzzSet) + ia->fuzz = fuzz; + if (flatSet) + ia->flat = flat; + if (ioctl(fd, EVIOCSABS(axis), ia) == -1) { + fprintf(stderr, "Error setting axis %d values : %s\n", axis, strerror(errno)); + retval = -1; + } else { + char *axisstr = ""; + switch (axis) { + case 0: axisstr = " (X)"; break; + case 1: axisstr = " (Y)"; break; + case 2: axisstr = " (Z)"; break; + } + printf("Set axis %d%s parameters:\n\tvalue: %d\n\tminimum: %d\n\tmaximum: %d\n\tfuzz: %d\n\tflat: %d\n", + axis, axisstr, ia->value, ia->minimum, ia->maximum, ia->fuzz, ia->flat); + } + +end: + if (fd) + close(fd); + if (ia) + free(ia); + exit(retval); +}
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor