summaryrefslogtreecommitdiff
path: root/src/drivers
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2018-07-04 16:08:31 -0700
committerKeith Packard <keithp@keithp.com>2018-07-04 16:08:31 -0700
commit323a79e6ed3dfdd2afadfc2a464bb0610380b03b (patch)
treec33ab404d764989b10294508d867413e59fccf74 /src/drivers
parentad9d6677231ccbfa09a528387f306f5364f9d608 (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>
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/ao_quadrature.c18
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