diff options
author | Clément Bénier <clement.benier@iot.bzh> | 2018-06-07 12:43:27 +0200 |
---|---|---|
committer | cle©mentbeénier <clement.benier@iot.bzh> | 2018-06-21 14:23:37 +0200 |
commit | ed02e81650ab383f11622c42bb1bfdd125e511f1 (patch) | |
tree | fe422bbf48c2af77efa68ca2969921018b6470a9 /binding/config_iiodevices.c | |
parent | 4bea2d73a5de0f8ec83c61edc37653718d34f31b (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.c | 51 |
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; +} |