From fd6a511934ca2799a5887243e777a13bc9873f58 Mon Sep 17 00:00:00 2001 From: Anton Tetov <anton@tetov.se> Date: Thu, 3 Mar 2022 14:16:22 +0100 Subject: [PATCH] upload of basic example --- c_example/Makefile | 14 ++++++ c_example/test_jr3_comedi.c | 85 +++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100755 c_example/Makefile create mode 100755 c_example/test_jr3_comedi.c diff --git a/c_example/Makefile b/c_example/Makefile new file mode 100755 index 0000000..d899451 --- /dev/null +++ b/c_example/Makefile @@ -0,0 +1,14 @@ +LIBS=-lcomedi -lm +BINS=test_jr3_comedi.c + +all: $(BINS) + +clean: + \rm -rf *.o $(BINS) + +%: %.c + $(CC) -o $@ $(CFLAGS) $^ $(LIBS) + +%.o: %.c + $(CC) -c -o $@ $(CFLAGS) $< + diff --git a/c_example/test_jr3_comedi.c b/c_example/test_jr3_comedi.c new file mode 100755 index 0000000..5174ee0 --- /dev/null +++ b/c_example/test_jr3_comedi.c @@ -0,0 +1,85 @@ +// ./test_JR3_comedi /dev/comedi1 0 +// see /etc/comedi.conf for device, subdevices and channel +// Example +// configure /dev/comedi1 jr3_pci +// ain 100 /dev/comedi1 0:0 +// (port 0:1-6 filter 0 fx..mz(order OK?)) +// port 0:7-12 filter 1 fx..mz(??) +// Available: port 0 & 1, but not yet 3 & 4 of receiver card +// + + +#define CF_JR3 "/dev/comedi1" +#define JR3_PORT 0 +#define NBR_CHAN 6 +#define _POSIX_C_SOURCE 199309 +#include <time.h> +#include <comedilib.h> +#include <stdlib.h> +#include <stdio.h> + +typedef struct { + float a[NBR_CHAN]; +} jr3_data_t; + +typedef struct { + double min; + double max; + double delta; + double maxdata; +} info_t; + +int main(int argc, char *argv[]) +{ + comedi_t *cf_jr3; + int subdev; + if (argc>1){ + cf_jr3 = comedi_open(argv[1]); + subdev = atoi(argv[2]); + } + else{ + cf_jr3 = comedi_open(CF_JR3); + subdev = JR3_PORT; + } + if (cf_jr3) { + int n, chan; + comedi_range *range; + lsampl_t maxdata; + info_t info[NBR_CHAN]; + jr3_data_t jr3data; // [fx,fy,fz,mx,my,mx] ???? + + for (chan = 0 ; chan < NBR_CHAN ; chan++) { + range = comedi_get_range(cf_jr3, subdev, chan, 0); + maxdata = comedi_get_maxdata(cf_jr3, subdev, chan); + info[chan].min = range->min; + info[chan].max = range->max; + info[chan].maxdata = maxdata; + info[chan].delta = (range->max - range->min) / maxdata; + printf("channel maxdata min max delta %d %d %f %f %f \n", chan, maxdata, range->min, range->max, info[chan].delta); + } + while (1) { + struct timespec delay; + lsampl_t data; + + delay.tv_sec = 0; + delay.tv_nsec = 500000000; + for (chan = 0 ; chan < NBR_CHAN ; chan++) { + int err = comedi_data_read(cf_jr3, subdev, chan, 0, 0, &data); + if (err < 0) { + printf("comedi_data_read error: err=%d subdev=%d %d %d\n", + err, subdev, chan, data); + } else { + jr3data.a[chan] = info[chan].min + (double)data * info[chan].delta; + } + } + for (chan = 0 ; chan < NBR_CHAN ; chan++) { + printf(" %f ", 1000.0*jr3data.a[chan]); + } + printf("\n"); + nanosleep(&delay, 0); + } + } + else{ + printf("Failed to open device!\n"); + } +} -- GitLab