summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2015-09-02 15:55:11 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2015-09-02 15:55:11 +0200
commit26b95c0953b8024d487897bf2aaaf1a8836f23a7 (patch)
treeb6370c9eb56ab664f3ab1680dcca586b922f1ea6 /src/axis.c
parent60b7a25bf38dce957c937ff602c1c812faff8b0f (diff)
relabsd is no longer limited to 6DOF devices.
Diffstat (limited to 'src/axis.c')
-rw-r--r--src/axis.c163
1 files changed, 161 insertions, 2 deletions
diff --git a/src/axis.c b/src/axis.c
index d883f42..34340f7 100644
--- a/src/axis.c
+++ b/src/axis.c
@@ -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;
}