18 #if CONFIG_HAL_BOARD == HAL_BOARD_PX4 || CONFIG_HAL_BOARD == HAL_BOARD_VRBRAIN 20 #include <board_config.h> 42 if (
irq_state[instance].last_gpio_a != 0) {
43 stm32_gpiosetevent(
irq_state[instance].last_gpio_a,
false,
false,
false,
nullptr);
49 if (
irq_state[instance].last_gpio_a != 0) {
60 if (
irq_state[instance].last_gpio_b != 0) {
61 stm32_gpiosetevent(
irq_state[instance].last_gpio_b,
false,
false,
false,
nullptr);
67 if (
irq_state[instance].last_gpio_b != 0) {
74 irqstate_t istate = irqsave();
117 #ifdef GPIO_GPIO0_INPUT 118 switch (pin_number) {
120 return GPIO_GPIO0_INPUT;
122 return GPIO_GPIO1_INPUT;
124 return GPIO_GPIO2_INPUT;
126 return GPIO_GPIO3_INPUT;
128 return GPIO_GPIO4_INPUT;
130 return GPIO_GPIO5_INPUT;
156 return (uint8_t)pin_a << 1 | (uint8_t)pin_b;
165 uint8_t step_forward = phase < 3 ? phase+1 : 0;
166 uint8_t step_back = phase > 0 ? phase-1 : 3;
167 if (phase_after == step_forward) {
170 }
else if (phase_after == step_back) {
188 bool pin_a_high = stm32_gpioread(
irq_state[instance].last_gpio_a);
189 bool pin_b_high = stm32_gpioread(
irq_state[instance].last_gpio_b);
198 #endif // CONFIG_HAL_BOARD static uint32_t get_gpio(uint8_t pin_number)
#define WHEELENCODER_MAX_INSTANCES
AP_WheelEncoder_Quadrature(AP_WheelEncoder &frontend, uint8_t instance, AP_WheelEncoder::WheelEncoder_State &state)
static int irq_handler0_pina(int irq, void *context)
static int irq_handler1_pinb(int irq, void *context)
static struct IrqState irq_state[WHEELENCODER_MAX_INSTANCES]
static int irq_handler0_pinb(int irq, void *context)
const AP_HAL::HAL & hal
-*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-
static void irq_handler(uint8_t instance, bool pin_a)
static uint8_t pin_ab_to_phase(bool pin_a, bool pin_b)
static int irq_handler1_pina(int irq, void *context)
static void update_phase_and_error_count(bool pin_a_now, bool pin_b_now, uint8_t &phase, int32_t &distance_count, uint32_t &total_count, uint32_t &error_count)
AP_WheelEncoder::WheelEncoder_State & _state