#include "sys.h"

void init() {
  square0->output_address = pdmout0;
  square0->high_val = 0x6fff;
  square0->low_val = 0x0000;
  square0->flags = SQUARE_FLAG_ENABLE_msk;
  // will set the period later
}

int strlen(const char* str) {
  int i = 0;
  while(str[i] != '\0') {
    i++;
  }
  return i;
}

void log(const char* stuff) {
  uart_writen(uart0, stuff, strlen(stuff));
}

int main() {
  init();

  led0->output = 42;

  while(1) {
    uint8_t c = uart_read(uart0);
    uint16_t period = 0;
    if (c == 'c') {
      led0->output = 1;
      period = 1493;  // C4, 262.63 Hz, maybe
      log("C4\r\n");
    } else if (c == 'd') {
      period = 1330;  // D4, 293.66 Hz, maybe
      log("D4\r\n");
      led0->output = 2;
    } else if (c == 'e') {
      period = 1185;  // E4, 329.63 Hz, maybe
      log("E4\r\n");
      led0->output = 4;
    } else if (c == 'f') {
      period = 1119;  // F4, 349.23 Hz, maybe
      log("F4\r\n");
      led0->output = 8;
    } else if (c == 'g') {
      period = 996;  //  G4, 392.00 Hz, maybe
      log("G4\r\n");
      led0->output = 16;
    } else if (c == 'a') {
      period = 887;  //  A4, 440.00 Hz, maybe
      log("A4\r\n");
      led0->output = 32;
    } else if (c == 'b') {
      period = 791;  //  B4, 493.88 Hz, maybe
      log("B4\r\n");
      led0->output = 64;
    } else {
      led0->output = 37;
    }

    square0->period = period;
  }
}
