/*
 * DisplayBusParallel.cpp
 */

#include "DisplayBusParallel.h"
#include "stm32f1xx_hal.h"
#include "main.h"
DisplayBusParallel::DisplayBusParallel() {
	// TODO Auto-generated constructor stub

}

void DisplayBusParallel::config() {

}

void DisplayBusParallel::init() {
	DisplayBusParallel::csHigh();
	DisplayBusParallel::eHigh();
	DisplayBusParallel::rsHigh();
	DisplayBusParallel::rwHigh();
	DisplayBusParallel::resLow();
	HAL_Delay(100);
	DisplayBusParallel::resHigh();
	HAL_Delay(100);
}


void DisplayBusParallel::csHigh(void)
{
	HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET);
}

void DisplayBusParallel::csLow(void)
{
	HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET);
}

void DisplayBusParallel::rsHigh(void)
{
	HAL_GPIO_WritePin(RS_GPIO_Port, RS_Pin, GPIO_PIN_SET);
}

void DisplayBusParallel::rsLow(void)
{
	HAL_GPIO_WritePin(RS_GPIO_Port, RS_Pin, GPIO_PIN_RESET);
}

void DisplayBusParallel::eHigh(void)
{
	HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_SET);
}

void DisplayBusParallel::eLow(void)
{
	HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_RESET);
}

void DisplayBusParallel::rwHigh(void)
{
	HAL_GPIO_WritePin(RW_GPIO_Port, RW_Pin, GPIO_PIN_SET);
}

void DisplayBusParallel::rwLow(void)
{
	HAL_GPIO_WritePin(RW_GPIO_Port, RW_Pin, GPIO_PIN_RESET);
}

void DisplayBusParallel::resHigh(void)
{
	HAL_GPIO_WritePin(RES_GPIO_Port, RES_Pin, GPIO_PIN_SET);
}

void DisplayBusParallel::resLow(void)
{
	HAL_GPIO_WritePin(RES_GPIO_Port, RES_Pin, GPIO_PIN_RESET);
}

void DisplayBusParallel::ledOn(void)
{
	HAL_GPIO_WritePin(BLED_GPIO_Port, BLED_Pin, GPIO_PIN_SET);
}

void DisplayBusParallel::ledOff(void)
{
	HAL_GPIO_WritePin(BLED_GPIO_Port, BLED_Pin, GPIO_PIN_RESET);
}

void DisplayBusParallel::write(uint8_t data) {

	DisplayBusParallel::csLow(); // When CS1B=“L” and CS2=“H”,then the chip select becomes active
	DisplayBusParallel::rwLow(); // Read/write select signal.
	DisplayBusParallel::eHigh(); // Operation (data read/write) enable signal.

	HAL_GPIO_WritePin(D0_GPIO_Port, D0_Pin,GPIO_PinState(0x01&(data>>0)));
	HAL_GPIO_WritePin(D1_GPIO_Port, D1_Pin,GPIO_PinState(0x01&(data>>1)));
	HAL_GPIO_WritePin(D2_GPIO_Port, D2_Pin,GPIO_PinState(0x01&(data>>2)));
	HAL_GPIO_WritePin(D3_GPIO_Port, D3_Pin,GPIO_PinState(0x01&(data>>3)));
	HAL_GPIO_WritePin(D4_GPIO_Port, D4_Pin,GPIO_PinState(0x01&(data>>4)));
	HAL_GPIO_WritePin(D5_GPIO_Port, D5_Pin,GPIO_PinState(0x01&(data>>5)));
	HAL_GPIO_WritePin(D6_GPIO_Port, D6_Pin,GPIO_PinState(0x01&(data>>6)));
	HAL_GPIO_WritePin(D7_GPIO_Port, D7_Pin,GPIO_PinState(0x01&(data>>7)));

//	HAL_Delay(1);
	DisplayBusParallel::eLow();	// let the LCD-Read the Data
//	HAL_Delay(1);
	DisplayBusParallel::eHigh(); // Operation (data read/write) enable signal.
//	DisplayBusParallel::rwHigh(); // Read/write select signal.
//	DisplayBusParallel::csHigh(); // When CS1B=“L” and CS2=“H”,then the chip select becomes active
}

void DisplayBusParallel::writeCommand(uint8_t command) {
	DisplayBusParallel::rsLow();	// select Command/Status Register
//	HAL_Delay(1);
	DisplayBusParallel::write(command);
}

void DisplayBusParallel::writeData(uint8_t data) {
	DisplayBusParallel::rsHigh();	// select Data Register
//	HAL_Delay(1);
	DisplayBusParallel::write(data);
}

