Module: xenomai-3
Branch: next
Commit: 6ff16413e32afd5b0eafda40cff07f09f7af37a7
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=6ff16413e32afd5b0eafda40cff07f09f7af37a7
Author: Philippe Gerum r...@xenomai.org
Date: Thu Oct 30 14:34:15 2014 +0100
pipe-test
---
lib/alchemy/testsuite/pipe-1.c | 101
1 file changed, 101 insertions(+)
diff --git a/lib/alchemy/testsuite/pipe-1.c b/lib/alchemy/testsuite/pipe-1.c
new file mode 100644
index 000..3b9b183
--- /dev/null
+++ b/lib/alchemy/testsuite/pipe-1.c
@@ -0,0 +1,101 @@
+#include stdio.h
+#include stdlib.h
+#include fcntl.h
+#include copperplate/traceobj.h
+#include alchemy/task.h
+#include alchemy/pipe.h
+
+static struct traceobj trobj;
+
+static RT_TASK t_real;
+
+static RT_PIPE pipe;
+
+static pthread_t t_reg;
+
+static int minor;
+
+struct pipe_message {
+ int value;
+};
+
+static void realtime_task(void *arg)
+{
+ struct pipe_message m;
+ int ret, seq;
+
+ traceobj_enter(trobj);
+
+ ret = rt_pipe_bind(pipe, pipe, TM_INFINITE);
+ traceobj_assert(trobj, ret == 0);
+
+ while (seq 16) {
+ ret = rt_pipe_read(pipe, m, sizeof(m), TM_INFINITE);
+ traceobj_assert(trobj, ret == sizeof(m));
+ traceobj_assert(trobj, m.value == seq);
+ ret = rt_pipe_write(pipe, m, sizeof(m), P_NORMAL);
+ traceobj_assert(trobj, ret == sizeof(m));
+ seq = m.value++;
+ }
+
+ pthread_cancel(t_reg);
+
+ traceobj_exit(trobj);
+}
+
+static void *regular_thread(void *arg)
+{
+ struct pipe_message m;
+ int fd, seq = 0;
+ ssize_t ret;
+ char *rtp;
+
+ asprintf(rtp, /dev/rtp%d, minor);
+
+ fd = open(rtp, O_RDWR);
+ free(rtp);
+ traceobj_assert(trobj, fd = 0);
+
+ for (;;) {
+ printf(sending message #%d\n, seq);
+ m.value = seq++;
+ ret = write(fd, m, sizeof(m));
+ traceobj_assert(trobj, ret == sizeof(m));
+ ret = read(fd, m, sizeof(m));
+ traceobj_assert(trobj, ret == sizeof(m));
+ printf(read %d vs %d\n, m.value, seq);
+ traceobj_assert(trobj, m.value == seq);
+ }
+
+ return NULL;
+}
+
+int main(int argc, char *const argv[])
+{
+ int ret;
+
+ traceobj_init(trobj, argv[0], 0);
+
+ ret = rt_pipe_create(pipe, pipe, P_MINOR_AUTO, 0);
+ traceobj_assert(trobj, ret = 0);
+
+ ret = rt_pipe_delete(pipe);
+ traceobj_assert(trobj, ret == 0);
+
+ ret = rt_task_create(t_real, realtime, 0, 10, 0);
+ traceobj_assert(trobj, ret == 0);
+
+ ret = rt_task_start(t_real, realtime_task, NULL);
+ traceobj_assert(trobj, ret == 0);
+
+ ret = rt_pipe_create(pipe, pipe, P_MINOR_AUTO, 16384);
+ traceobj_assert(trobj, ret = 0);
+ minor = ret;
+
+ ret = pthread_create(t_reg, NULL, regular_thread, NULL);
+ traceobj_assert(trobj, ret == 0);
+
+ traceobj_join(trobj);
+
+ exit(0);
+}
___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai-git