/**** Includes ****/
#include "../utils/utils.h"
#include "mcu/mcu_hal.h"
#include "dout.h"

using namespace bsp;

/**** Private definitions ****/
/**** Private constants ****/
/**** Private variables ****/
/**** Private function declarations ****/

/**** Public function definitions ****/
bsp::DigitalOut::DigitalOut(uint8_t gpio_ch, uint8_t inverted)
{
	this->gpio_ch = gpio_ch;
	this->invert = inverted;
	this->write(DOUT_HIZ);
}

bsp::DigitalOut::~DigitalOut(void)
{
	this->write(DOUT_HIZ);
}

void bsp::DigitalOut::write(int8_t level)
{
	if(level > 0)
	{
		this->last_set = DOUT_HIGH;
		if(this->invert) mcu::gpio_write(this->gpio_ch, mcu::LEVEL_LOW);
		else mcu::gpio_write(this->gpio_ch, mcu::LEVEL_HIGH);
	}
	else if(level == 0)
	{
		this->last_set = DOUT_LOW;
		if(this->invert) mcu::gpio_write(this->gpio_ch, mcu::LEVEL_HIGH);
		else mcu::gpio_write(this->gpio_ch, mcu::LEVEL_LOW);
	}
	else
	{
		this->last_set = DOUT_HIZ;
		mcu::gpio_write(this->gpio_ch, mcu::LEVEL_HIZ);
	}
}

int8_t bsp::DigitalOut::get_set_level(void)
{
	return this->last_set;
}

/**** Private function definitions ****/
