From 64c8ca514c55562cc832ffa6315238b44ba37a83 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 3 Aug 2018 09:57:57 +1000 Subject: [PATCH] HAL_ChibiOS: fixed attach_interrupt check we can't have two handlers on the same pad --- libraries/AP_HAL_ChibiOS/GPIO.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/libraries/AP_HAL_ChibiOS/GPIO.cpp b/libraries/AP_HAL_ChibiOS/GPIO.cpp index c42cc91634..26a2693233 100644 --- a/libraries/AP_HAL_ChibiOS/GPIO.cpp +++ b/libraries/AP_HAL_ChibiOS/GPIO.cpp @@ -135,10 +135,21 @@ bool GPIO::_attach_interrupt(ioline_t line, AP_HAL::Proc p, uint8_t mode) return false; } break; + } + if (p) { + osalSysLock(); + palevent_t *pep = pal_lld_get_line_event(line); + if (pep->cb) { + // the pad is already being used for a callback + osalSysUnlock(); + return false; + } + osalSysUnlock(); } + palDisableLineEvent(line); palEnableLineEvent(line, chmode); - palSetLineCallback(line, pal_interrupt_cb, (void*)p); + palSetLineCallback(line, p?pal_interrupt_cb:nullptr, (void*)p); return true; }