void Interrupt::reattach()
{
  if (!callback_ptr_)
  {
    return;
  }
  if (!callback_ptr_->getFunctor())
  {
    return;
  }
  if (mode_ptr_ == &interrupt::mode_low)
  {
    resetIsr();
    detachInterrupt(digitalPinToInterrupt(pin_));
    enablePullup();
    attachInterrupt(digitalPinToInterrupt(pin_),
                    isr_,
                    LOW);
  }
  else if (mode_ptr_ == &interrupt::mode_change)
  {
    resetIsr();
    detachInterrupt(digitalPinToInterrupt(pin_));
    enablePullup();
    attachInterrupt(digitalPinToInterrupt(pin_),
                    isr_,
                    CHANGE);
  }
  else if (mode_ptr_ == &interrupt::mode_rising)
  {
    resetIsr();
    detachInterrupt(digitalPinToInterrupt(pin_));
    enablePullup();
    attachInterrupt(digitalPinToInterrupt(pin_),
                    isr_,
                    RISING);
  }
  else if (mode_ptr_ == &interrupt::mode_falling)
  {
    resetIsr();
    detachInterrupt(digitalPinToInterrupt(pin_));
    enablePullup();
    attachInterrupt(digitalPinToInterrupt(pin_),
                    isr_,
                    FALLING);
  }
}
void main(void) {
    initSquareWear();
    setModeOutput(pinC7);
    setModeInput(pinB4);
    enablePullup(pinB4);    // enable internal pullup
    while(1) {
        if (getValue(pinB4)==0) {
            latC7 = 1;
        } else {
            latC7 = 0;
        }
    }
}