| summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/config.c')
| -rw-r--r-- | src/config.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/config.c b/src/config.c index d4288ef..e84737a 100644 --- a/src/config.c +++ b/src/config.c @@ -1,5 +1,6 @@ #include <errno.h> #include <string.h> +#include <stdlib.h> #include "error.h" #include "pervasive.h" @@ -136,6 +137,7 @@ static int parse_axis_configuration_line errno = prev_errno; conf->axis[axis].enabled = 1; + conf->axis[axis].previous_value = 0; return 0; } @@ -314,7 +316,7 @@ int relabsd_config_parse int relabsd_config_filter ( - const struct relabsd_config * const conf, + struct relabsd_config * const conf, enum relabsd_axis const axis, int * const value ) @@ -324,6 +326,13 @@ int relabsd_config_filter return 0; } + if (abs(*value - conf->axis[axis].previous_value) <= conf->axis[axis].fuzz) + { + conf->axis[axis].previous_value = *value; + + return -1; + } + if (*value < conf->axis[axis].min) { *value = conf->axis[axis].min; @@ -332,8 +341,19 @@ int relabsd_config_filter { *value = conf->axis[axis].max; } + else if (abs(*value) <= conf->axis[axis].flat) + { + *value = 0; + + /* + * As long as the 'fuzz' test is done prior the 'flat' one, moving around + * in the 'flat' zone won't trigger useless '0' value events. + */ + } + + /* TODO: handle conf->axis[axis].resolution */ - /* TODO: handle the other properties. */ + conf->axis[axis].previous_value = *value; return 1; } |


