summaryrefslogtreecommitdiff
path: root/digital/io-hub/src/common/output.c
diff options
context:
space:
mode:
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);
+}
+