Program Listing for File hss-shield-bts5001x.cpp

Return to documentation for file (src/corelib/hss-shield-bts5001x.cpp)

#include "hss-shield-bts5001x.hpp"

using namespace hss;

Bts5001xShield::Bts5001xShield(Hss * hsw1, GPIOPAL * led2, GPIOPAL * led3, ADCPAL * pushButton, ADCPAL * vBat)
:
hss1(hsw1),
led2(led2),
led3(led3),
pushButton(pushButton),
vBat(vBat)
{

}

Bts5001xShield::~Bts5001xShield()
{

}

Error_t Bts5001xShield::init()
{
    Error_t err = OK;

    HSS_ASSERT_NULLPTR(hss1);
    err = hss1->init();
    HSS_ASSERT_RET(err);

    if(nullptr != led2)
    {
        err = led2->init();
        HSS_ASSERT_RET(err);
    }

    if(nullptr != led3)
    {
        err = led3->init();
        HSS_ASSERT_RET(err);
    }

    if(nullptr != pushButton)
    {
        err = pushButton->init();
        HSS_ASSERT_RET(err);
    }

    if(nullptr != vBat)
    {
        err = vBat->init();
        HSS_ASSERT_RET(err);
    }

    filterVbat = new ExponentialFilter(0.0, 0.4);

    return OK;
}

Error_t Bts5001xShield::deinit()
{
    Error_t err= OK;

    HSS_ASSERT_NULLPTR(hss1);
    err = hss1->deinit();
    HSS_ASSERT_RET(err);

    if(nullptr != led2)
    {
        err = led2->deinit();
        HSS_ASSERT_RET(err);
    }

    if(nullptr != led3)
    {
        err = led3->deinit();
        HSS_ASSERT_RET(err);
    }

    if(nullptr != pushButton)
    {
        err = pushButton->deinit();
        HSS_ASSERT_RET(err);
    }

    if(nullptr != vBat)
    {
        err = vBat->deinit();
        HSS_ASSERT_RET(err);
    }

    return OK;
}

Error_t Bts5001xShield::switchHxOn(uint8_t x)
{
    (void)x;
    Error_t err= OK;

    err = hss1->enable();
    HSS_ASSERT_RET(err);

    if (nullptr != led2)
    {
        err = led2->enable();
        HSS_ASSERT_RET(err);
    }

    return err;
}

Error_t Bts5001xShield::switchHxOff(uint8_t x)
{
    (void)x;
    Error_t err= OK;

    err = hss1->disable();
    HSS_ASSERT_RET(err);

    if (nullptr != led2)
    {
        err = led2->disable();
        HSS_ASSERT_RET(err);
    }

    return err;
}


float Bts5001xShield::readIsx(uint8_t x)
{
    (void)x;
    float isVal;

    isVal = hss1->readIs(rSense);

    return isVal;
}

DiagStatus_t Bts5001xShield::readDiagx(uint8_t x)
{
    (void)x;
    DiagStatus_t diagStatus = NORMAL;
    float currentOn = 0.0;

    if(hss1->getSwitchStatus() == POWER_ON)
    {
        currentOn = hss1->readIs(rSense);
        diagStatus = hss1->diagRead(currentOn);
    }

    return diagStatus;
}


float Bts5001xShield::readVss()
{
    uint16_t adcResult = 0;
    float voltage = 0.0;

    adcResult = vBat->ADCRead();
    voltage = adcResult * ((float)5/(float)1024);   // Vmax/1024 LSB = Resolution of the ADC,
    voltage = (voltage - vBatOffset);
    voltage = voltage * ((float)57/(float)10);      // 57/10 = Reverse Voltage divider to get the supply voltage

    filterVbat->input(voltage);

    return filterVbat->output();
}

bool Bts5001xShield::analogReadButton()
{
    uint16_t result = 0;

    result = pushButton->ADCRead();
    if(result < 20){
        return true;
    }
    else{
        return false;
    }
}

void Bts5001xShield::setVoltageOffset(float offset)
{
    vBatOffset = offset;
}