Program Listing for File gpio-mtb.cpp

Return to documentation for file (src/framework/mtb/pal/gpio-mtb.cpp)

#include "gpio-mtb.hpp"

#if (TLE5012_FRAMEWORK == TLE5012_FRMWK_MTB)

using namespace tle5012;

GPIOMtb::GPIOMtb(mtb_gpio_t pin, mtb_gpio_config_t config, VLogic_t logic)
    : pin(pin), config(config), logic(logic)
{
}

GPIOMtb::GPIOMtb() : pin(MTB_GPIO_1), config(INPUT_HIGH_IMPEDANCE), logic(POSITIVE)
{
}

GPIOMtb::~GPIOMtb()
{
    disable();
    deinit();
}

inline GPIOMtb::Error_t GPIOMtb::init()
{
    GPIOMtb::Error_t err = GPIOMtb::OK;
    if (MTB_SUCCESS != mtb_gpio_init(pin, config))
        err = GPIOMtb::INTF_ERROR;

    return err;
}

inline GPIOMtb::Error_t GPIOMtb::deinit()
{
    GPIOMtb::Error_t err = GPIOMtb::OK;
    if (MTB_SUCCESS != mtb_gpio_deinit(pin))
        err = GPIOMtb::INTF_ERROR;

    return err;
}

inline GPIOMtb::VLevel_t GPIOMtb::read()
{
    return (VLevel_t)mtb_gpio_input_get(pin);
}

inline GPIOMtb::Error_t GPIOMtb::write(VLevel_t level)
{
    GPIOMtb::Error_t err = GPIOMtb::OK;

    if (GPIO_LOW == level)
    {
        if (MTB_SUCCESS != mtb_gpio_output_low(pin))
            err = GPIOMtb::INTF_ERROR;
    }
    else if (GPIO_HIGH == level)
    {
        if (MTB_SUCCESS != mtb_gpio_output_high(pin))
            err = GPIOMtb::INTF_ERROR;
    }

    return err;
}

inline GPIOMtb::Error_t GPIOMtb::enable()
{
    GPIOMtb::Error_t err = GPIOMtb::OK;

    if (this->logic == POSITIVE)
    {
        if (MTB_SUCCESS != mtb_gpio_output_high(pin))
            err = GPIOMtb::INTF_ERROR;
    }
    else if (this->logic == NEGATIVE)
    {
        if (MTB_SUCCESS != mtb_gpio_output_low(pin))
            err = GPIOMtb::INTF_ERROR;
    }
    return err;
}

inline GPIOMtb::Error_t GPIOMtb::disable()
{
    GPIOMtb::Error_t err = GPIOMtb::OK;

    if (this->logic == POSITIVE)
    {
        if (MTB_SUCCESS != mtb_gpio_output_low(pin))
            err = GPIOMtb::INTF_ERROR;
    }
    else if (this->logic == NEGATIVE)
    {
        if (MTB_SUCCESS != mtb_gpio_output_high(pin))
            err = GPIOMtb::INTF_ERROR;
    }
    return err;
}

#endif