| summaryrefslogtreecommitdiff |
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2015-09-02 15:55:11 +0200 |
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2015-09-02 15:55:11 +0200 |
| commit | 26b95c0953b8024d487897bf2aaaf1a8836f23a7 (patch) | |
| tree | b6370c9eb56ab664f3ab1680dcca586b922f1ea6 /src/axis.c | |
| parent | 60b7a25bf38dce957c937ff602c1c812faff8b0f (diff) | |
relabsd is no longer limited to 6DOF devices.
Diffstat (limited to 'src/axis.c')
| -rw-r--r-- | src/axis.c | 163 |
1 files changed, 161 insertions, 2 deletions
@@ -3,13 +3,14 @@ #include "pervasive.h" #include "axis.h" +#include "error.h" /* * Implementation note: _IS_PREFIX, as its name implies, is checking for a * prefix, not an equal value. This could cause issues if there were axes * with name prefixed by another axis name. */ -enum relabsd_axis relabsd_axis_name_to_enum (const char * const name) +enum relabsd_axis relabsd_axis_from_name (const char * const name) { if (_IS_PREFIX("X", name)) { @@ -35,11 +36,19 @@ enum relabsd_axis relabsd_axis_name_to_enum (const char * const name) { return RELABSD_RZ; } + else if (_IS_PREFIX("WL", name)) + { + return RELABSD_WHEEL; + } + else if (_IS_PREFIX("MC", name)) + { + return RELABSD_MISC; + } return RELABSD_UNKNOWN; } -char * relabsd_axis_enum_to_name (enum relabsd_axis const e) +char * relabsd_axis_to_name (enum relabsd_axis const e) { switch (e) { @@ -61,6 +70,12 @@ char * relabsd_axis_enum_to_name (enum relabsd_axis const e) case RELABSD_RZ: return "RZ"; + case RELABSD_WHEEL: + return "WL"; + + case RELABSD_MISC: + return "MC"; + case RELABSD_UNKNOWN: return "??"; } @@ -98,6 +113,150 @@ enum relabsd_axis relabsd_axis_convert_evdev_rel *abs_code = ABS_RZ; return RELABSD_RZ; + case REL_WHEEL: + *abs_code = ABS_WHEEL; + return RELABSD_WHEEL; + + case REL_MISC: + *abs_code = ABS_MISC; + return RELABSD_MISC; + + default: + return RELABSD_UNKNOWN; + } +} + +unsigned int relabsd_axis_to_rel (enum relabsd_axis const e) +{ + switch (e) + { + case RELABSD_X: + return REL_X; + + case RELABSD_Y: + return REL_Y; + + case RELABSD_Z: + return REL_Z; + + case RELABSD_RX: + return REL_RX; + + case RELABSD_RY: + return REL_RY; + + case RELABSD_RZ: + return REL_RZ; + + case RELABSD_WHEEL: + return REL_WHEEL; + + case RELABSD_MISC: + return REL_MISC; + + case RELABSD_UNKNOWN: + _S_PROG_ERROR("relabsd_axis_to_rel(RELABSD_UNKNOWN) is forbidden."); + return REL_MAX; + } +} + +unsigned int relabsd_axis_to_abs (enum relabsd_axis const e) +{ + switch (e) + { + case RELABSD_X: + return ABS_X; + + case RELABSD_Y: + return ABS_Y; + + case RELABSD_Z: + return ABS_Z; + + case RELABSD_RX: + return ABS_RX; + + case RELABSD_RY: + return ABS_RY; + + case RELABSD_RZ: + return ABS_RZ; + + case RELABSD_WHEEL: + return ABS_WHEEL; + + case RELABSD_MISC: + return ABS_MISC; + + case RELABSD_UNKNOWN: + _S_PROG_ERROR("relabsd_axis_to_abs(RELABSD_UNKNOWN) is forbidden."); + return ABS_MAX; + } +} + +/* + * Returns the relabsd_axis equivalent of a EV_REL/EV_ABS code. + */ +enum relabsd_axis relabsd_axis_from_rel (unsigned int const rel) +{ + switch (rel) + { + case REL_X: + return RELABSD_X; + + case REL_Y: + return RELABSD_Y; + + case REL_Z: + return RELABSD_Z; + + case REL_RX: + return RELABSD_RX; + + case REL_RY: + return RELABSD_RY; + + case REL_RZ: + return RELABSD_RZ; + + case REL_WHEEL: + return RELABSD_WHEEL; + + case REL_MISC: + return RELABSD_MISC; + + default: + return RELABSD_UNKNOWN; + } +} +enum relabsd_axis relabsd_axis_from_abs (unsigned int const abs) +{ + switch (abs) + { + case ABS_X: + return RELABSD_X; + + case ABS_Y: + return RELABSD_Y; + + case ABS_Z: + return RELABSD_Z; + + case ABS_RX: + return RELABSD_RX; + + case ABS_RY: + return RELABSD_RY; + + case ABS_RZ: + return RELABSD_RZ; + + case ABS_WHEEL: + return RELABSD_WHEEL; + + case ABS_MISC: + return RELABSD_MISC; + default: return RELABSD_UNKNOWN; } |


