dol: initial dol commit
[jump.git] / dol / examples / example6 / src / filter.c
diff --git a/dol/examples/example6/src/filter.c b/dol/examples/example6/src/filter.c
new file mode 100644 (file)
index 0000000..2715647
--- /dev/null
@@ -0,0 +1,32 @@
+#include <stdio.h>
+#include <math.h>
+#include "filter.h"
+
+/**
+ * Write zero to feedback output.
+ */
+void filter_init(DOLProcess *p)
+{
+  p->local->zero = 0.0;
+  p->local->factor = 0.5;
+  p->local->firstiteration = 1;
+}
+
+/**
+ * Filter.
+ */
+int filter_fire(DOLProcess *p)
+{
+  if (p->local->firstiteration) {
+      DOL_write((void*)PORT_OUTB, &(p->local->zero), sizeof(float), p);
+      p->local->firstiteration = 0;
+  }
+
+  DOL_read((void*)PORT_INA, &(p->local->inA), sizeof(float), p);
+  DOL_read((void*)PORT_INB, &(p->local->inB), sizeof(float), p);
+  p->local->out = p->local->inA + p->local->factor * p->local->inB;
+  DOL_write((void*)PORT_OUTA, &(p->local->out), sizeof(float), p);
+  DOL_write((void*)PORT_OUTB, &(p->local->out), sizeof(float), p);
+
+  return 0;
+}