#include "PrintController.h"

#include <cstdio>

PrintController::PrintController(object_id_t setObjectId)
    : SystemObject(setObjectId) {}

ReturnValue_t PrintController::initialize() {
  ReturnValue_t result = SystemObject::initialize();
  if (result != returnvalue::OK) {
    return result;
  }

  XGpioPs_Config config;
  config.DeviceId = 4; // chosen by fair dice throw
  config.BaseAddr = XPS_GPIO_BASEADDR;
  s32 returncode = XGpioPs_CfgInitialize(&gpio, &config, XPS_GPIO_BASEADDR);
  if (returncode != 0) {
    return returnvalue::FAILED;
  }
  XGpioPs_SetDirection(&gpio, 0, (1 << 7));
  XGpioPs_SetOutputEnable(&gpio, 0, (1 << 7));
  XGpioPs_WritePin(&gpio, 7, 1);
  return returnvalue::OK;
}

ReturnValue_t PrintController::performOperation(uint8_t operationCode) {
  printf("running\n");
  static int pinvalue = 1;
  pinvalue = pinvalue ^ 1;
  XGpioPs_WritePin(&gpio, 7, pinvalue);
  return returnvalue::OK;
}