summaryrefslogtreecommitdiffstats
path: root/binding/config_iiodevices.c
diff options
context:
space:
mode:
authorClément Bénier <clement.benier@iot.bzh>2018-06-07 12:43:27 +0200
committercle©mentbeénier <clement.benier@iot.bzh>2018-06-21 14:23:37 +0200
commited02e81650ab383f11622c42bb1bfdd125e511f1 (patch)
treefe422bbf48c2af77efa68ca2969921018b6470a9 /binding/config_iiodevices.c
parent4bea2d73a5de0f8ec83c61edc37653718d34f31b (diff)
binding iiodevices: handles 3 iiodevices
handle accel, magn et anglvel iiodevices args key indicates the desired coordinates at subcription frequency can be also specified at subscription Example for subscription: - iiodevices subscribe { "event": "accel", "uid": "1", "args": "xyz", "frequency": "0.1" } - iiodevices subscribe { "event": "magn", "uid": "1", "args": "xz", "frequency": "0.1" } Change-Id: I7f300f56b5d69506434f31fbb6e552c7afdf7489 Signed-off-by: Clément Bénier <clement.benier@iot.bzh> Signed-off-by: clement benier <clement.benier@iot.bzh>
Diffstat (limited to 'binding/config_iiodevices.c')
-rw-r--r--binding/config_iiodevices.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/binding/config_iiodevices.c b/binding/config_iiodevices.c
new file mode 100644
index 0000000..d8f9d9e
--- /dev/null
+++ b/binding/config_iiodevices.c
@@ -0,0 +1,51 @@
+#include "config_iiodevices.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define AFB_BINDING_VERSION 2
+#include <afb/afb-binding.h>
+
+void set_channel_name(char *name, enum iio_elements iioelts)
+{
+ switch(iioelts) {
+ case X:
+ strcat(name, "_x"); break;
+ case Y:
+ strcat(name, "_y"); break;
+ case Z:
+ strcat(name, "_z"); break;
+ default:
+ AFB_WARNING("cannot set channel name, no matching iio_elements found: %d", iioelts);
+ }
+}
+
+enum iio_elements treat_iio_elts(const char *iioelts_string)
+{
+ enum iio_elements iioelts = 0;
+ if(!iioelts_string || !strcasecmp(iioelts_string, ""))
+ iioelts = X | Y | Z;
+ else {
+ if(strchr(iioelts_string, 'x') || strchr(iioelts_string, 'X'))
+ iioelts = iioelts | X;
+ if(strchr(iioelts_string, 'y') || strchr(iioelts_string, 'Y'))
+ iioelts = iioelts | Y;
+ if(strchr(iioelts_string, 'z') || strchr(iioelts_string, 'Z'))
+ iioelts = iioelts | Z;
+ }
+ AFB_INFO("ENUMERATION::: %s %d", iioelts_string, iioelts);
+ return iioelts;
+}
+
+int get_iio_nb(enum iio_elements iioelts)
+{
+ int nb_iioelts = 0;
+ int tmp_mask = 1;
+ while(tmp_mask <= iioelts) { //the number of channels is the number of elements
+ if((iioelts & tmp_mask) == tmp_mask)
+ nb_iioelts++;
+ tmp_mask = tmp_mask << 1;
+ }
+ return nb_iioelts;
+}