#include <xgpiops.h>
#include <stdint.h>

/************************************************************/
/* GPIO SETUP AND USAGE                                     */
/************************************************************/

XGpioPs gpio;
void gpio_setup() {
  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);
  //printf("Configured XGPIO");
  XGpioPs_SetDirection(&gpio, 0, (1 << 7));
  XGpioPs_SetOutputEnable(&gpio, 0, (1 << 7));
  XGpioPs_WritePin(&gpio, 7, 1);
  //printf("Blinking is initialized");
  XGpioPs_WritePin(&gpio, 7, 0);
  //printf("Value written once");
}


void gpio_write_pin(uint32_t pin, uint32_t data) {
    XGpioPs_WritePin(&gpio, pin, data);
}

uint32_t gpio_read_pin(uint32_t pin) {
  return XGpioPs_ReadPin(&gpio, pin);
}

void gpio_toggle_pin(uint32_t pin) {
  static int pinvalue = 1;
  pinvalue = pinvalue ^ 1;
  XGpioPs_WritePin(&gpio, pin, pinvalue);
}