/*
* stm32_halDisplay.cpp
*
* Created on: 1 Nov 2020
* Author: mike
*/
#include "main.h"
#include "libOLED/stm32_halDisplay.H"
stm32_halDisplay_t::stm32_halDisplay_t (int const width, int const height,
int const ramwidth, uint8_t *const data,
SPI_HandleTypeDef *const spiInterface,
GPIO_TypeDef *const CD_GPIO,
uint16_t CD_GPIO_Pin,
GPIO_TypeDef *const RESET_GPIO,
uint16_t RESET_GPIO_Pin,
GPIO_TypeDef *const NSS_GPIO,
uint16_t NSS_GPIO_Pin) :
display_t (width, height, ramwidth, data), m_spiInterface (spiInterface), m_CD_GPIO (
CD_GPIO), m_CD_GPIO_Pin (CD_GPIO_Pin), m_RESET_GPIO (RESET_GPIO), m_RESET_GPIO_Pin (
RESET_GPIO_Pin), m_NSS_GPIO (NSS_GPIO), m_NSS_GPIO_Pin (NSS_GPIO_Pin)
{
}
void
stm32_halDisplay_t::oledSetCD (uint8_t cd)
{
HAL_GPIO_WritePin (m_CD_GPIO, m_CD_GPIO_Pin, cd ? GPIO_PIN_SET : GPIO_PIN_RESET);
}
void
stm32_halDisplay_t::oledReset (void)
{
HAL_GPIO_WritePin (m_RESET_GPIO, m_RESET_GPIO_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 (m_RESET_GPIO, m_RESET_GPIO_Pin, GPIO_PIN_RESET);
// wait 10ms
HAL_Delay (10);
// bring out of reset
HAL_GPIO_WritePin (m_RESET_GPIO, m_RESET_GPIO_Pin, GPIO_PIN_SET);
}
void
stm32_halDisplay_t::oledWrite (uint8_t c)
{
uint8_t buffer[1];
buffer[0] = c;
HAL_GPIO_WritePin (m_NSS_GPIO, m_NSS_GPIO_Pin, GPIO_PIN_RESET);
HAL_SPI_Transmit (m_spiInterface, buffer, 1, 2); // allow 2mS for transfer
HAL_GPIO_WritePin (m_NSS_GPIO, m_NSS_GPIO_Pin, GPIO_PIN_SET);
}
void
stm32_halDisplay_t::oledWrite (uint8_t *buffer, uint8_t len)
{
HAL_GPIO_WritePin (m_NSS_GPIO, m_NSS_GPIO_Pin, GPIO_PIN_RESET);
HAL_SPI_Transmit (m_spiInterface, buffer, len, 100); // allow 100mS for transfer
HAL_GPIO_WritePin (m_NSS_GPIO, m_NSS_GPIO_Pin, GPIO_PIN_SET);
}