Program Listing for File TLE5012b.hpp

Return to documentation for file (src/corelib/TLE5012b.hpp)

#ifndef TLE5012B_HPP
#define TLE5012B_HPP

#include <string.h>
#include "tlx5012-pal-gpio.hpp"
#include "tlx5012-pal-spic.hpp"
#include "tle5012b_util.hpp"
#include "tle5012b_reg.hpp"
#include "tle5012b_types.hpp"


namespace tle5012
{

class Tle5012b
{
    public:

        enum slaveNum
        {
            TLE5012B_S0 = 0x0000,
            TLE5012B_S1 = 0x2000,
            TLE5012B_S2 = 0x4000,
            TLE5012B_S3 = 0x6000
        };

        SPICPAL  *sBus;
        GPIOPAL  *en;
        Reg      reg;
        slaveNum mSlave;

        struct safetyWord {
            bool STAT_RES;
            bool STAT_ERR;
            bool STAT_ACC;
            bool STAT_ANG;
            uint8_t RESP;
            uint8_t CRC;

            slaveNum responseSlave(){
                return (RESP == 0x7 ? TLE5012B_S3
                        : (RESP == 0xB ? TLE5012B_S2
                                : (RESP == 0xD ? TLE5012B_S1
                                        : TLE5012B_S0)));
            }

            uint16_t fetch_Safety(uint16_t reg)
            {
                CRC      = (reg & 0x7F);
                RESP     = (reg & 0xF00) >> 8;
                STAT_ANG = (reg & 0x1000) >> 12;
                STAT_ACC = (reg & 0x2000) >> 13;
                STAT_ERR = (reg & 0x4000) >> 14;
                STAT_RES = (reg & 0x8000) >> 15;
                return (reg);
            }
        } safetyWord_t;

        Tle5012b();

        ~Tle5012b();

        errorTypes begin();

        errorTypes begin(uint8_t csPin, slaveNum slave=TLE5012B_S0);

        void end();

        void enableSensor();

        void disableSensor();

        errorTypes readBlockCRC();

        errorTypes readFromSensor(uint16_t command, uint16_t &data, updTypes upd=UPD_low, safetyTypes safe=SAFE_high);

        errorTypes readMoreRegisters(uint16_t command, uint16_t data[], updTypes upd=UPD_low, safetyTypes safe=SAFE_high);

        errorTypes readStatus(uint16_t &data, updTypes upd=UPD_low, safetyTypes safe=SAFE_high);

        errorTypes readActivationStatus(uint16_t &data, updTypes upd=UPD_low, safetyTypes safe=SAFE_high);

        errorTypes readActiveStatus(uint16_t &data);
        errorTypes readIntMode1(uint16_t &data);
        errorTypes readSIL(uint16_t &data);
        errorTypes readIntMode2(uint16_t &data);
        errorTypes readIntMode3(uint16_t &data);
        errorTypes readOffsetX(uint16_t &data);
        errorTypes readOffsetY(uint16_t &data);
        errorTypes readSynch(uint16_t &data);
        errorTypes readIFAB(uint16_t &data);
        errorTypes readIntMode4(uint16_t &data);
        errorTypes readTempCoeff(uint16_t &data);
        errorTypes readTempDMag(uint16_t &data);
        errorTypes readTempRaw(uint16_t &data);
        errorTypes readTempIIFCnt(uint16_t &data);
        errorTypes readTempT25(uint16_t &data);

        errorTypes readRawX(int16_t &data);

        errorTypes readRawY(int16_t &data);

        errorTypes getAngleRange(double &angleRange);

        errorTypes getAngleValue(double &angleValue);
        errorTypes getAngleValue(double &angleValue, int16_t &rawAngleValue, updTypes upd=UPD_low, safetyTypes safe=SAFE_high);

        errorTypes getNumRevolutions(int16_t &numRev, updTypes upd=UPD_low, safetyTypes safe=SAFE_high);

        errorTypes getTemperature(double &temp);
        errorTypes getTemperature(double &temp, int16_t &rawTemp, updTypes upd=UPD_low, safetyTypes safe=SAFE_high);

        errorTypes getAngleSpeed(double &angleSpeed);
        errorTypes getAngleSpeed(double &angleSpeed,int16_t &rawSpeed, updTypes upd=UPD_low, safetyTypes safe=SAFE_high);

        errorTypes writeSlaveNumber(uint16_t dataToWrite);

        errorTypes writeToSensor(uint16_t command, uint16_t dataToWrite, bool changeCRC);

        errorTypes writeTempCoeffUpdate(uint16_t dataToWrite);

        errorTypes writeActivationStatus(uint16_t dataToWrite);
        errorTypes writeIntMode1(uint16_t dataToWrite);
        errorTypes writeSIL(uint16_t dataToWrite);
        errorTypes writeIntMode2(uint16_t dataToWrite);
        errorTypes writeIntMode3(uint16_t dataToWrite);
        errorTypes writeOffsetX(uint16_t dataToWrite);
        errorTypes writeOffsetY(uint16_t dataToWrite);
        errorTypes writeSynch(uint16_t dataToWrite);
        errorTypes writeIFAB(uint16_t dataToWrite);
        errorTypes writeIntMode4(uint16_t dataToWrite);
        errorTypes writeTempCoeff(uint16_t dataToWrite);

        safetyWord safetyStatus;
        uint16_t safetyWord;

        errorTypes resetFirmware();

        errorTypes readRegMap();

        errorTypes writeInterfaceType(Reg::interfaceType_t iface);

        errorTypes setCalibration(Reg::calibrationMode_t calMode);

    protected:

        uint16_t _command[2];
        uint16_t _received[MAX_REGISTER_MEM];
        uint16_t _registers[CRC_NUM_REGISTERS+1];

        errorTypes regularCrcUpdate();

        errorTypes checkSafety(uint16_t safety, uint16_t command, uint16_t* readreg, uint16_t length);

        void resetSafety();

};

}

#endif /* TLE5012B_HPP */