5
5
*
6
6
* Author: Balazs Kelemen
7
7
8
- * Copyright: 2012 Balazs Kelemen
8
+ * Copyright: 2017 Balazs Kelemen
9
9
* Copying permission statement:
10
10
This file is part of PciManager.
11
11
26
26
27
27
#include " Arduino.h"
28
28
#include " PciManager.h"
29
-
29
+ // #include <avr/io.h>
30
+ // #include <avr/interrupt.h>
30
31
31
32
/* *
32
33
* Add listener to the chain.
@@ -82,14 +83,16 @@ void PciManagerClass::remove(PciListener* listener) {
82
83
void PciManagerClass::registerListener (byte pin, PciListener* listener) {
83
84
// -- PCINT vector will be 0, 1 or 2 depending on the pin.
84
85
// -- digitalPinToPCICRbit(pin) will calculate which one it is.
86
+ #if defined(digitalPinToPCICRbit)
85
87
listener->pciVector = digitalPinToPCICRbit (pin);
86
88
listener->pciPin = pin;
87
89
88
90
volatile uint8_t * pcicr = digitalPinToPCICR (pin);
89
91
*pcicr |= (1 << listener->pciVector );
90
92
volatile uint8_t * pcmsk = digitalPinToPCMSK (pin);
91
93
*pcmsk |= (1 << digitalPinToPCMSKbit (pin));
92
-
94
+ #endif
95
+
93
96
this ->add (listener);
94
97
}
95
98
@@ -117,6 +120,7 @@ void PciManagerClass::removeListener(PciListener* listenerToRemove) {
117
120
118
121
if (!hasMoreListenersOnSamePin) {
119
122
// -- Remove mask if no other uses this pin.
123
+ #if defined(digitalPinToPCICRbit)
120
124
volatile uint8_t * pcmsk = digitalPinToPCMSK (listenerToRemove->pciPin );
121
125
*pcmsk &= ~(1 << digitalPinToPCMSKbit (listenerToRemove->pciPin ));
122
126
@@ -125,6 +129,7 @@ void PciManagerClass::removeListener(PciListener* listenerToRemove) {
125
129
volatile uint8_t * pcicr = digitalPinToPCICR (listenerToRemove->pciPin );
126
130
*pcicr &= ~(1 << listenerToRemove->pciVector );
127
131
}
132
+ #endif
128
133
}
129
134
}
130
135
@@ -145,16 +150,21 @@ void PciManagerClass::callListeners(byte pciVectorId) {
145
150
/* *
146
151
* Global interrupt handling implementations.
147
152
*/
153
+ #if defined(PCINT0_vect)
148
154
ISR (PCINT0_vect){
149
155
PciManager.callListeners (0 );
150
156
}
157
+ #endif
158
+ #if defined(PCINT1_vect)
151
159
ISR (PCINT1_vect){
152
160
PciManager.callListeners (1 );
153
161
}
162
+ #endif
163
+ #if defined(PCINT2_vect)
154
164
ISR (PCINT2_vect){
155
165
PciManager.callListeners (2 );
156
166
}
157
-
167
+ # endif
158
168
159
169
/* *
160
170
* Create a singleton from this manager class.
0 commit comments