#include "rp2040port.h"

// --- Hardware Setup ---
void setup_pins(void) {
  // SPI Initialisation. Using SPI0 at 16MHz.
  spi_init(spi0, 16000000);
  gpio_set_function(PIN_MISO, GPIO_FUNC_SPI);
  gpio_set_function(PIN_SCK, GPIO_FUNC_SPI);
  gpio_set_function(PIN_MOSI, GPIO_FUNC_SPI);

  // Chip Select
  gpio_init(PIN_CS);
  gpio_set_dir(PIN_CS, GPIO_OUT);
  gpio_put(PIN_CS, 1);

  // Reset Pin
  gpio_init(PIN_RST);
  gpio_set_dir(PIN_RST, GPIO_OUT);
  gpio_put(PIN_RST, 1);

  // Interrupt Pin
  gpio_init(PIN_INT);
  gpio_set_dir(PIN_INT, GPIO_IN);
  gpio_pull_up(PIN_INT);
}

// --- Platform Interface Implementation ---
void AD5940_CsClr(void) { gpio_put(PIN_CS, 0); }

void AD5940_CsSet(void) { gpio_put(PIN_CS, 1); }

void AD5940_RstClr(void) { gpio_put(PIN_RST, 0); }

void AD5940_RstSet(void) { gpio_put(PIN_RST, 1); }

void AD5940_Delay10us(uint32_t time) { sleep_us(time * 10); }

void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer,
                            unsigned char *pRecvBuff, unsigned long length) {
  spi_write_read_blocking(spi0, pSendBuffer, pRecvBuff, length);
}

uint32_t AD5940_GetMCUIntFlag(void) { return (gpio_get(PIN_INT) == 0); }

uint32_t AD5940_ClrMCUIntFlag(void) { return 1; }

uint32_t AD5940_MCUResourceInit(void *pCfg) { return 0; }

void AD5940_MCUGpioWrite(uint32_t data) { (void)data; }

uint32_t AD5940_MCUGpioRead(uint32_t pin) {
  (void)pin;
  return 0;
}

void AD5940_MCUGpioCtrl(uint32_t pin, BoolFlag enable) {
  (void)pin;
  (void)enable;
}
