From: Keith Packard Date: Wed, 4 Jul 2018 23:08:31 +0000 (-0700) Subject: altos: Fetch current quadrature status at startup time X-Git-Tag: 1.8.6~1^2~7 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=323a79e6ed3dfdd2afadfc2a464bb0610380b03b 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 --- 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