- if (wait_clear) {
- wait_clear = 0;
- ao_exti_set_mode(AO_QUADRATURE_PORT, AO_QUADRATURE_A, AO_EXTI_MODE_RISING);
- } else {
- wait_clear = 1;
- ao_exti_set_mode(AO_QUADRATURE_PORT, AO_QUADRATURE_A, AO_EXTI_MODE_FALLING);
- if (ao_gpio_get(AO_QUADRATURE_PORT, AO_QUADRATURE_B, AO_QUADRATURE_B_PIN))
- ao_quadrature_count++;
- else
- ao_quadrature_count--;
- ao_wakeup(&ao_quadrature_count);
+ uint8_t q;
+#if AO_QUADRATURE_COUNT > 0
+ ao_quadrature_update(0);
+#endif
+#if AO_QUADRATURE_COUNT > 1
+ ao_quadrature_update(1);
+#endif
+
+ for (q = 0; q < AO_QUADRATURE_COUNT; q++) {
+ switch (ao_quadrature_state[q]) {
+ case STATE(0, 1, 0, 0):
+ ao_quadrature_count[q]++;
+ break;
+ case STATE(1, 0, 0, 0):
+ ao_quadrature_count[q]--;
+ break;
+ default:
+ continue;
+ }
+ ao_quadrature_queue(q);
+ ao_wakeup(&ao_quadrature_count[q]);