#include "Matrix.h"

Matrix::Matrix(uint8_t* columns, uint8_t num_columns, bool inverted) {
  this->active_pin = 255; // sentinel value, highest possible 8-bit number
  this->inverted = inverted;

  for (uint8_t i = 0; i < num_columns; i++) {
    pinMode(columns[i], OUTPUT);
    _disable(columns[i]);
  }
}

void Matrix::Activate(uint8_t pin) {
  if (pin == active_pin) return;

  if (active_pin != 255) {
    _disable(active_pin);
  }

  _enable(pin);
  active_pin = pin;
}

void Matrix::_enable(uint8_t pin) {
  if (inverted) digitalWrite(pin, LOW);
  else digitalWrite(pin, HIGH);
}

void Matrix::_disable(uint8_t pin) {
  if (inverted) digitalWrite(pin, HIGH);
  else digitalWrite(pin, LOW);
}