#include <Arduino.h>
#include <SPI.h>

#include "gonk/pin_config.h"

#define PW_LOG_LEVEL PW_LOG_LEVEL_DEBUG
#define PW_LOG_MODULE_NAME "PinConfig"

#include "pw_log/log.h"

namespace gonk::pin_config {

PinConfig::PinConfig() {}

void PinConfig::Init() {
  // Set STATUS LED mode and initial state.
  pinMode(StatusLed, OUTPUT);
  digitalWrite(StatusLed, LOW);

  // Default CS pin to output high.
  pinMode(FlashCS, OUTPUT);
  digitalWrite(FlashCS, HIGH);
}

void PinConfig::InitFpgaPins() {
  // Set FPGA reset pin mode and initial state.
  pinMode(ICE40ResetN, OUTPUT);
  digitalWrite(ICE40ResetN, HIGH);

  // Set FPGA configure done signal pin as an input.
  pinMode(ICE40Done, INPUT);
}

void PinConfig::FpgaHalt() {
  // Set FlashCS to signal the FPGA it should load the bitstream from external
  // flash.
  pinMode(FlashCS, INPUT_FLOATING);

  // Hold in reset for a small amount of time.
  digitalWrite(ICE40ResetN, LOW);
  delay(50);

  // Boot fpga and give it time to reset any internal SPI pin configuration.
  digitalWrite(ICE40ResetN, HIGH);
  delay(10);

  // Finally, hold in reset.
  digitalWrite(ICE40ResetN, LOW);
}

void PinConfig::FpgaEnable() { digitalWrite(ICE40ResetN, HIGH); }

void PinConfig::SPIEnable() {
  // SPI pin definitions
  SPI.setMISO(FlashMISO);
  SPI.setMOSI(FlashMOSI);
  SPI.setSCLK(FlashCLK);
  SPI.begin();

  // Set FlashCS as output with initial state.
  pinMode(FlashCS, OUTPUT);
  digitalWrite(FlashCS, HIGH);
}

} // namespace gonk::pin_config
