@@ -74,9 +74,8 @@ typedef void (*voidFuncPtrArg)(void*);
74
74
typedef struct {
75
75
voidFuncPtr fn ;
76
76
void * arg ;
77
- bool functional ;
78
77
} InterruptHandle_t ;
79
- static InterruptHandle_t __pinInterruptHandlers [GPIO_PIN_COUNT ] = {0 , };
78
+ static InterruptHandle_t __pinInterruptHandlers [GPIO_PIN_COUNT ] = { { 0 , 0 }, };
80
79
81
80
#include "driver/rtc_io.h"
82
81
@@ -239,9 +238,7 @@ static void IRAM_ATTR __onPinInterrupt()
239
238
}
240
239
}
241
240
242
- extern void cleanupFunctional (void * arg );
243
-
244
- extern void __attachInterruptFunctionalArg (uint8_t pin , voidFuncPtrArg userFunc , void * arg , int intr_type , bool functional )
241
+ extern void __attachInterruptArg (uint8_t pin , voidFuncPtrArg userFunc , void * arg , int intr_type )
245
242
{
246
243
static bool interrupt_initialized = false;
247
244
@@ -250,14 +247,8 @@ extern void __attachInterruptFunctionalArg(uint8_t pin, voidFuncPtrArg userFunc,
250
247
esp_intr_alloc (ETS_GPIO_INTR_SOURCE , (int )ESP_INTR_FLAG_IRAM , __onPinInterrupt , NULL , & gpio_intr_handle );
251
248
}
252
249
253
- // if new attach without detach remove old info
254
- if (__pinInterruptHandlers [pin ].functional && __pinInterruptHandlers [pin ].arg )
255
- {
256
- cleanupFunctional (__pinInterruptHandlers [pin ].arg );
257
- }
258
250
__pinInterruptHandlers [pin ].fn = (voidFuncPtr )userFunc ;
259
251
__pinInterruptHandlers [pin ].arg = arg ;
260
- __pinInterruptHandlers [pin ].functional = functional ;
261
252
262
253
esp_intr_disable (gpio_intr_handle );
263
254
if (esp_intr_get_cpu (gpio_intr_handle )) { //APP_CPU
@@ -269,36 +260,31 @@ extern void __attachInterruptFunctionalArg(uint8_t pin, voidFuncPtrArg userFunc,
269
260
esp_intr_enable (gpio_intr_handle );
270
261
}
271
262
272
- extern void __attachInterruptArg (uint8_t pin , voidFuncPtrArg userFunc , void * arg , int intr_type )
273
- {
274
- __attachInterruptFunctionalArg (pin , userFunc , arg , intr_type , false);
275
- }
276
-
277
263
extern void __attachInterrupt (uint8_t pin , voidFuncPtr userFunc , int intr_type ) {
278
- __attachInterruptFunctionalArg (pin , (voidFuncPtrArg )userFunc , NULL , intr_type , false );
264
+ __attachInterruptArg (pin , (voidFuncPtrArg )userFunc , NULL , intr_type );
279
265
}
280
266
281
267
extern void __detachInterrupt (uint8_t pin )
282
268
{
283
269
esp_intr_disable (gpio_intr_handle );
284
- if (__pinInterruptHandlers [pin ].functional && __pinInterruptHandlers [pin ].arg )
285
- {
286
- cleanupFunctional (__pinInterruptHandlers [pin ].arg );
287
- }
288
270
__pinInterruptHandlers [pin ].fn = NULL ;
289
271
__pinInterruptHandlers [pin ].arg = NULL ;
290
- __pinInterruptHandlers [pin ].functional = false;
291
272
292
273
GPIO .pin [pin ].int_ena = 0 ;
293
274
GPIO .pin [pin ].int_type = 0 ;
294
275
esp_intr_enable (gpio_intr_handle );
295
276
}
296
277
278
+ extern void * __detachInterruptArg (uint8_t pin ) {
279
+ void * arg = (pin < GPIO_PIN_COUNT ) ? __pinInterruptHandlers [pin ].arg : NULL ;
280
+ __detachInterrupt (pin );
281
+ return arg ;
282
+ }
297
283
298
284
extern void pinMode (uint8_t pin , uint8_t mode ) __attribute__ ((weak , alias ("__pinMode" )));
299
285
extern void digitalWrite (uint8_t pin , uint8_t val ) __attribute__ ((weak , alias ("__digitalWrite" )));
300
286
extern int digitalRead (uint8_t pin ) __attribute__ ((weak , alias ("__digitalRead" )));
301
287
extern void attachInterrupt (uint8_t pin , voidFuncPtr handler , int mode ) __attribute__ ((weak , alias ("__attachInterrupt" )));
288
+ extern void detachInterrupt (uint8_t pin ) __attribute__((weak , alias ("__detachInterrupt" )));
302
289
extern void attachInterruptArg (uint8_t pin , voidFuncPtrArg handler , void * arg , int mode ) __attribute__ ((weak , alias ("__attachInterruptArg" )));
303
- extern void detachInterrupt (uint8_t pin ) __attribute__ ((weak , alias ("__detachInterrupt" )));
304
-
290
+ extern void * detachInterruptArg (uint8_t pin ) __attribute__((weak , alias ("__detachInterruptArg" )));
0 commit comments