From 22e1d3cfca4eb607cad413aa8c81e3653d2f0c9e Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Sat, 27 Oct 2012 21:49:38 +0200 Subject: digital/io-hub: add short transient output toggle --- digital/io-hub/src/common/output.c | 28 ++++++++++++++++++++++++++++ digital/io-hub/src/common/output.h | 9 +++++++++ digital/io-hub/src/common/output.host.c | 8 ++++---- 3 files changed, 41 insertions(+), 4 deletions(-) (limited to 'digital/io-hub/src/common') 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); +} + diff --git a/digital/io-hub/src/common/output.h b/digital/io-hub/src/common/output.h index ab5e617c..3b508be2 100644 --- a/digital/io-hub/src/common/output.h +++ b/digital/io-hub/src/common/output.h @@ -48,6 +48,15 @@ output_clear (uint32_t clear); void output_toggle (uint32_t toggle); +/** Toggle state of any number of output, then toggle again after a number of + * update. */ +void +output_toggle_transient (uint32_t toggle, uint16_t duration); + +/** Update internal state, used for transient toggles. */ +void +output_update (void); + #ifdef HOST /** On host, initialise host part. */ diff --git a/digital/io-hub/src/common/output.host.c b/digital/io-hub/src/common/output.host.c index 5c2d7080..a90bb2e3 100644 --- a/digital/io-hub/src/common/output.host.c +++ b/digital/io-hub/src/common/output.host.c @@ -28,8 +28,8 @@ #include "modules/host/host.h" #include "modules/host/mex.h" -/** Output context. */ -struct output_t +/** Host output context. */ +struct output_host_t { /** Previous sent state. */ uint32_t previous; @@ -38,8 +38,8 @@ struct output_t }; /** Global context. */ -struct output_t output_global; -#define ctx output_global +static struct output_host_t output_host_global; +#define ctx output_host_global void output_host_init (void) -- cgit v1.2.3