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 */