AP_RPM: avoid attach interrupt retry and spam to GCS if PIN = -1

This commit is contained in:
Randy Mackay 2022-04-19 17:14:36 +09:00 committed by Andrew Tridgell
parent 304a40d3b7
commit 0b18622e59
2 changed files with 11 additions and 8 deletions

View File

@ -50,22 +50,24 @@ void AP_RPM_Pin::update(void)
{
if (last_pin != get_pin()) {
// detach from last pin
if (last_pin != (uint8_t)-1 &&
!hal.gpio->detach_interrupt(last_pin)) {
gcs().send_text(MAV_SEVERITY_WARNING, "RPM: Failed to detach from pin %u", last_pin);
// ignore this failure or the user may be stuck
if (interrupt_attached) {
// ignore this failure of the user may be stuck
IGNORE_RETURN(hal.gpio->detach_interrupt(last_pin));
interrupt_attached = false;
}
irq_state[state.instance].dt_count = 0;
irq_state[state.instance].dt_sum = 0;
// attach to new pin
last_pin = get_pin();
if (last_pin) {
if (last_pin > 0) {
hal.gpio->pinMode(last_pin, HAL_GPIO_INPUT);
if (!hal.gpio->attach_interrupt(
if (hal.gpio->attach_interrupt(
last_pin,
FUNCTOR_BIND_MEMBER(&AP_RPM_Pin::irq_handler, void, uint8_t, bool, uint32_t),
AP_HAL::GPIO::INTERRUPT_RISING)) {
gcs().send_text(MAV_SEVERITY_WARNING, "RPM: Failed to attach to pin %u", last_pin);
interrupt_attached = true;
} else {
gcs().send_text(MAV_SEVERITY_WARNING, "RPM: Failed to attach to pin %d", last_pin);
}
}
}

View File

@ -32,7 +32,8 @@ public:
private:
ModeFilterFloat_Size5 signal_quality_filter {3};
uint8_t last_pin = -1;
int8_t last_pin = -1; // last pin number checked vs PIN parameter
bool interrupt_attached; // true if an interrupt has been attached to last_pin
struct IrqState {
uint32_t last_pulse_us;
uint32_t dt_sum;