

#include "libSSD1306/spiInterface.h"

// already done in HAL
void
ssd1306spiInit (void)
{
}

void
ssd1306commandSPIwrite (uint8_t c)
{
  HAL_GPIO_WritePin (SPI_CD_GPIO_Port, SPI_CD_Pin, GPIO_PIN_RESET);
  uint8_t buffer[1];
  buffer[0] = c;

  HAL_GPIO_WritePin (SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_RESET);

  HAL_SPI_Transmit (&SPI_IF, buffer, 1, 2); // allow 2mS for transfer
  HAL_GPIO_WritePin (SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_SET);
}

void
ssd1306resetDisplay (void)
{

  HAL_GPIO_WritePin (SPI_RESET_GPIO_Port, SPI_RESET_Pin, GPIO_PIN_SET);

  // VDD (3.3V) goes high at start, lets just chill for a ms
  HAL_Delay (1);
  // bring reset low
  HAL_GPIO_WritePin (SPI_RESET_GPIO_Port, SPI_RESET_Pin, GPIO_PIN_RESET);
  // wait 10ms
  HAL_Delay (10);
  // bring out of reset
  HAL_GPIO_WritePin (SPI_RESET_GPIO_Port, SPI_RESET_Pin, GPIO_PIN_SET);
}

void
ssd1306SendDisplay (uint8_t *buffer, uint8_t len)
{
// set data pin
  HAL_GPIO_WritePin (SPI_CD_GPIO_Port, SPI_CD_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin (SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_RESET);

  HAL_SPI_Transmit (&SPI_IF, buffer, len, 100); // allow 100mS for transfer

  HAL_GPIO_WritePin (SPI_CS_GPIO_Port, SPI_CS_Pin, GPIO_PIN_SET);

}

