fixed InterruptBridge (I think I've done this before though...)
git-svn-id: https://robotics.mvla.net/svn/frc971/2013/trunk/src@4175 f308d9b7-e957-4cde-b6ac-9a88185e7312
diff --git a/aos/crio/shared_libs/interrupt_notifier-tmpl.h b/aos/crio/shared_libs/interrupt_notifier-tmpl.h
index 78e7ca8..819e552 100644
--- a/aos/crio/shared_libs/interrupt_notifier-tmpl.h
+++ b/aos/crio/shared_libs/interrupt_notifier-tmpl.h
@@ -6,9 +6,9 @@
template<typename T>
InterruptNotifier<T>::InterruptNotifier(
- typename InterruptBridge<T>::Handler handler,
- InterruptableSensorBase *sensor, T *param, int priority)
- : InterruptBridge<T>(handler, param, priority), sensor_(sensor) {
+ Handler handler,
+ InterruptableSensorBase *sensor, T *param)
+ : handler_(handler), param_(param), sensor_(sensor) {
sensor_->RequestInterrupts(StaticNotify, this);
}
@@ -19,7 +19,6 @@
template<typename T>
void InterruptNotifier<T>::Start() {
- this->StartTask();
sensor_->EnableInterrupts();
}
@@ -28,20 +27,17 @@
sensor_->DisableInterrupts();
}
-// WARNING: This IS called from an ISR. Don't use floating point. Look in
-// interrupt_bridge-tmpl.h for details.
template<typename T>
void InterruptNotifier<T>::StaticNotify(uint32_t, void *self_in) {
- ASM_COMMENT("beginning of InterruptNotifier::StaticNotify");
- if (!intContext()) { // if we're not in an actual ISR
- logMsg(const_cast<char *>("WPILib is not calling callbacks"
- " in actual ISRs any more!!\n"),
+ if (intContext()) { // if we are in an actual ISR
+ logMsg(const_cast<char *>("WPILib is calling callbacks"
+ " in actual ISRs now!!\n"),
0, 0, 0, 0, 0, 0);
+ return;
}
InterruptNotifier<T> *const self =
static_cast<InterruptNotifier<T> *>(self_in);
- self->Notify();
- ASM_COMMENT("end of InterruptNotifier::StaticNotify");
+ self->handler_(self->param_);
}
} // namespace crio