summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/axis.c')
-rw-r--r--src/axis.c99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/axis.c b/src/axis.c
new file mode 100644
index 0000000..1ba09f0
--- /dev/null
+++ b/src/axis.c
@@ -0,0 +1,99 @@
+#include <libevdev/libevdev.h>
+
+#include "pervasive.h"
+
+#include "axis.h"
+
+enum relabsd_axis relabsd_axis_name_to_enum (char * const name)
+{
+ if (_IS_PREFIX("X", name))
+ {
+ return RELABSD_X;
+ }
+ else if (_IS_PREFIX("Y", name))
+ {
+ return RELABSD_Y;
+ }
+ else if (_IS_PREFIX("Z", name))
+ {
+ return RELABSD_Z;
+ }
+ else if (_IS_PREFIX("RX", name))
+ {
+ return RELABSD_RX;
+ }
+ else if (_IS_PREFIX("RY", name))
+ {
+ return RELABSD_RY;
+ }
+ else if (_IS_PREFIX("RZ", name))
+ {
+ return RELABSD_RZ;
+ }
+
+ return RELABSD_UNKNOWN;
+}
+
+char * relabsd_axis_enum_to_name (enum relabsd_axis const e)
+{
+ switch (e)
+ {
+ case RELABSD_X:
+ return "X";
+
+ case RELABSD_Y:
+ return "Y";
+
+ case RELABSD_Z:
+ return "Z";
+
+ case RELABSD_RX:
+ return "RX";
+
+ case RELABSD_RY:
+ return "RY";
+
+ case RELABSD_RZ:
+ return "RZ";
+
+ case RELABSD_UNKNOWN:
+ return "??";
+ }
+}
+
+enum relabsd_axis relabsd_axis_convert_evdev_rel
+(
+ unsigned int const rel_code,
+ unsigned int * const abs_code
+)
+{
+ switch (rel_code)
+ {
+ case REL_X:
+ *abs_code = ABS_X;
+ return RELABSD_X;
+
+ case REL_Y:
+ *abs_code = ABS_Y;
+ return RELABSD_Y;
+
+ case REL_Z:
+ *abs_code = ABS_Z;
+ return RELABSD_Z;
+
+ case REL_RX:
+ *abs_code = ABS_RX;
+ return RELABSD_RX;
+
+ case REL_RY:
+ *abs_code = ABS_RY;
+ return RELABSD_RY;
+
+ case REL_RZ:
+ *abs_code = ABS_RZ;
+ return RELABSD_RZ;
+
+ default:
+ return RELABSD_UNKNOWN;
+ }
+}