diff options
author | Keith Packard <keithp@keithp.com> | 2018-07-04 16:08:31 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2018-07-04 16:08:31 -0700 |
commit | 323a79e6ed3dfdd2afadfc2a464bb0610380b03b (patch) | |
tree | c33ab404d764989b10294508d867413e59fccf74 | |
parent | ad9d6677231ccbfa09a528387f306f5364f9d608 (diff) |
altos: Fetch current quadrature status at startup time
This avoids having the state appear to change the first time we look
at the device.
Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r-- | src/drivers/ao_quadrature.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/drivers/ao_quadrature.c b/src/drivers/ao_quadrature.c index 59e84518..250e035f 100644 --- a/src/drivers/ao_quadrature.c +++ b/src/drivers/ao_quadrature.c @@ -111,7 +111,8 @@ static const struct { }; static void -_ao_quadrature_set(uint8_t q, uint8_t new) { +_ao_quadrature_set(uint8_t q, uint8_t new) +{ uint8_t old; ao_arch_block_interrupts(); @@ -136,6 +137,14 @@ ao_quadrature_isr(void) #endif } +static void +_ao_quadrature_start_one(uint8_t q, uint8_t new) +{ + ao_arch_block_interrupts(); + ao_quadrature_state[q] = new; + ao_arch_release_interrupts(); +} + int32_t ao_quadrature_poll(uint8_t q) { @@ -204,9 +213,10 @@ static const struct ao_cmds ao_quadrature_cmds[] = { { 0, NULL } }; -#define init(q) do { \ - ao_enable_input(port(q), bita(q), 0); \ - ao_enable_input(port(q), bitb(q), 0); \ +#define init(q) do { \ + ao_enable_input(port(q), bita(q), 0); \ + ao_enable_input(port(q), bitb(q), 0); \ + _ao_quadrature_start_one(q, _ao_quadrature_get(q)); \ } while (0) void |