detachInterupt() from the inside of the interupt function?

bufLen must also be declared volatile as well as i.

You could also do this

detachInterrupt(digitalPinToInterrupt(en));

Pete