summaryrefslogtreecommitdiff
path: root/digital/io-hub/src/common/output.c
diff options
context:
space:
mode:
authorNicolas Schodet2012-10-27 21:49:38 +0200
committerNicolas Schodet2012-10-27 21:49:38 +0200
commit22e1d3cfca4eb607cad413aa8c81e3653d2f0c9e (patch)
tree9a1fc99415436b70a8cdcee337aa030741b6d293 /digital/io-hub/src/common/output.c
parentf7ed8a4662073039a6c9cdb6bbe09417d6203773 (diff)
digital/io-hub: add short transient output toggle
Diffstat (limited to 'digital/io-hub/src/common/output.c')
-rw-r--r--digital/io-hub/src/common/output.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/digital/io-hub/src/common/output.c b/digital/io-hub/src/common/output.c
index 4f3dbf3b..2e2c604b 100644
--- a/digital/io-hub/src/common/output.c
+++ b/digital/io-hub/src/common/output.c
@@ -27,6 +27,19 @@
#include "simu.host.h"
+/** Output context. */
+struct output_t
+{
+ /** If not zero, toggle outputs after this number of update. */
+ uint16_t transient_duration;
+ /** Mask for transient toggle. */
+ uint32_t transient_mask;
+};
+
+/** Global context. */
+static struct output_t output_global;
+#define ctx output_global
+
void
output_init (void)
{
@@ -71,3 +84,18 @@ output_toggle (uint32_t toggle)
#undef OUTPUT
}
+void
+output_toggle_transient (uint32_t toggle, uint16_t duration)
+{
+ output_toggle (toggle);
+ ctx.transient_mask = toggle;
+ ctx.transient_duration = duration;
+}
+
+void
+output_update (void)
+{
+ if (ctx.transient_duration && !--ctx.transient_duration)
+ output_toggle (ctx.transient_mask);
+}
+