From 292a99306cca49bba73632ec2563f454389b7b4e Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Thu, 29 Mar 2012 23:54:50 +0200 Subject: digital/io-hub: add output_toggle --- digital/io-hub/src/common/output.c | 12 ++++++++++++ digital/io-hub/src/common/output.h | 4 ++++ 2 files changed, 16 insertions(+) (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 d3518e7c..f6b3a705 100644 --- a/digital/io-hub/src/common/output.c +++ b/digital/io-hub/src/common/output.c @@ -60,3 +60,15 @@ output_clear (uint32_t clear) #undef OUTPUT } +/** Toggle state of any number of output. */ +void +output_toggle (uint32_t toggle) +{ +#define OUTPUT(io, init) do { \ + if (toggle & 1ul) IO_TOGGLE_ (io); \ + toggle >>= 1; \ +} while (0); // <- do not copy this code unless you know why! + OUTPUT_LIST +#undef OUTPUT +} + diff --git a/digital/io-hub/src/common/output.h b/digital/io-hub/src/common/output.h index a4b7de18..ab5e617c 100644 --- a/digital/io-hub/src/common/output.h +++ b/digital/io-hub/src/common/output.h @@ -44,6 +44,10 @@ output_set (uint32_t set); void output_clear (uint32_t clear); +/** Toggle state of any number of output. */ +void +output_toggle (uint32_t toggle); + #ifdef HOST /** On host, initialise host part. */ -- cgit v1.2.3