void interruptHandler(); int setInterrupt(int pin, int edge, char *callback); char *perl_callback; PerlInterpreter *mine; void interruptHandler(){ PERL_SET_CONTEXT(mine); dSP; PUSHMARK(SP); PUTBACK; call_pv(perl_callback, G_DISCARD|G_NOARGS); FREETMPS; LEAVE; } int setInterrupt(int pin, int edge, char *callback){ perl_callback = callback; int interrupt = wiringPiISR(pin, edge, &interruptHandler); return interrupt; } # XS int setInterrupt(pin, edge, callback) int pin int edge char *callback void interruptHandler()