Program Listing for File TLx493D.hpp
↰ Return to documentation for file (src/TLx493D.hpp)
#ifndef TLX493D_HPP
#define TLX493D_HPP
#ifdef __AVR__
#include <stdbool.h>
#include <stdint.h>
#else
#include <cstdbool>
#include <cstdint>
#endif
#include "types.hpp"
#include "BoardSupportUsingKit2Go.hpp"
#include "IICUsingTwoWire.hpp"
#include "SPIUsingSPIClass.hpp"
#include "TLx493DBase.hpp"
#include "tlx493d_types.h"
#include "tlx493d.h"
#include "CommunicationInterface.h"
#include "Logger.h"
namespace ifx {
namespace tlx493d {
template<typename BoardSupport, TLx493D_SupportedSensorType_t sensorType>
class TLx493D<BoardSupport, TwoWireWrapper, sensorType> : public TLx493DBase {
public:
using BoardSupportType = BoardSupport;
using BusWrapperType = TwoWireWrapper;
using BusType = typename BusWrapperType::BusType;
explicit TLx493D(BusType &busObj, TLx493D_IICAddressType_t iicAdr = TLx493D_IIC_ADDR_A0_e) : busWrapper(busObj), iicAddress(iicAdr) {
}
~TLx493D() {
}
bool init(bool enablePower = true, bool enableSelect = false, bool enableExtendedAdress = false, bool executeInit = true) {
if( ! tlx493d_init(&sensor, sensorType) ) {
logError("tlx493d_init failed !");
return false;
}
if( ! initBoardSupport(&sensor, bsc) ) {
logError("initBoardSupport failed !");
return false;
}
bsc.init(enablePower, enableSelect, enableExtendedAdress);
if( ! initCommunication(&sensor, busWrapper, iicAddress, executeInit) ) {
logError("initCommunication failed !");
return false;
}
if( ! setDefaultConfig() ) {
logError("setDefaultConfig failed !");
return false;
}
return true;
}
bool begin(bool enablePower = true, bool enableSelect = false, bool enableExtendedAdress = false, bool executeInit = true) {
return init(enablePower, enableSelect, enableExtendedAdress, executeInit);
}
bool deinit(bool executeDeinit = false) {
deinitCommunication(&sensor, executeDeinit);
bsc.deinit();
return tlx493d_deinit(&sensor);
}
bool end(bool executeDeinit = false) {
return deinit(executeDeinit);
}
void setPowerPin(uint8_t pinNumber, uint8_t pinDriveDirection, uint8_t pinTristateDirection,
uint8_t pinEnableValue, uint8_t pinDisableValue,
uint32_t delayAfterEnable = 0, uint32_t delayAfterDisable = 0) {
bsc.setPowerPin(pinNumber, pinDriveDirection, pinTristateDirection, pinEnableValue, pinDisableValue, delayAfterEnable, delayAfterDisable);
}
void unsetPowerPin() {
bsc.unsetPowerPin();
}
void setSelectPin(uint8_t pinNumber, uint8_t pinDriveDirection, uint8_t pinTristateDirection,
uint8_t pinEnableValue, uint8_t pinDisableValue,
uint32_t delayAfterEnable = 0, uint32_t delayAfterDisable = 0) {
bsc.setSelectPin(pinNumber, pinDriveDirection, pinTristateDirection, pinEnableValue, pinDisableValue, delayAfterEnable, delayAfterDisable);
}
void unsetSelectPin() {
bsc.unsetSelectPin();
}
void setAddressPin(uint8_t pinNumber, uint8_t pinDriveDirection, uint8_t pinTristateDirection,
uint8_t pinEnableValue, uint8_t pinDisableValue,
uint32_t delayAfterEnable = 0, uint32_t delayAfterDisable = 0) {
bsc.setAddressPin(pinNumber, pinDriveDirection, pinTristateDirection, pinEnableValue, pinDisableValue, delayAfterEnable, delayAfterDisable);
}
void unsetAddressPin() {
bsc.unsetAdressPin();
}
void enablePower() {
bsc.enablePower(true);
}
void disablePower() {
bsc.enablePower(false);
}
void reset(bool executeInit = false) {
sensor.functions->setResetValues(&sensor);
bsc.reset();
if( executeInit ) {
busWrapper.init();
}
setDefaultConfig();
}
void enableSelect() {
bsc.enableSelect(true);
}
void disableSelect() {
bsc.enableSelect(false);
}
void enableAddress() {
bsc.enableAddress(true);
}
void disableAddress() {
bsc.enableAddress(false);
}
private:
explicit TLx493D(BusType &bus);
BoardSupportType bsc;
BusWrapperType busWrapper;
TLx493D_IICAddressType_t iicAddress;
};
template<typename BoardSupport, TLx493D_SupportedSensorType_t sensorType>
class TLx493D<BoardSupport, SPIClassWrapper, sensorType> : public TLx493DBase {
public:
using BoardSupportType = BoardSupport;
using BusWrapperType = SPIClassWrapper;
using BusType = typename BusWrapperType::BusType;
explicit TLx493D(BusType &busObj) : bsc(), busWrapper(busObj) {
}
~TLx493D() {
}
void init(bool enablePower = false, bool enableSelect = true) {
(void) tlx493d_init(&sensor, sensorType);
(void) initBoardSupport(&sensor, bsc);
bsc.init(enablePower, enableSelect, false);
initCommunication(&sensor, busWrapper, true);
setDefaultConfig();
}
void begin(bool enablePower = false, bool enableSelect = true) {
init(enablePower, enableSelect);
}
void deinit() {
deinitCommunication(&sensor, false);
bsc.deinit();
(void) tlx493d_deinit(&sensor);
}
void end() {
deinit();
}
void setPowerPin(uint8_t pinNumber, uint8_t pinDriveDirection, uint8_t pinTristateDirection,
uint8_t pinEnableValue, uint8_t pinDisableValue,
uint32_t delayAfterEnable = 0, uint32_t delayAfterDisable = 0) {
bsc.setPowerPin(pinNumber, pinDriveDirection, pinTristateDirection, pinEnableValue, pinDisableValue, delayAfterEnable, delayAfterDisable);
}
void unsetPowerPin() {
bsc.unsetPowerPin();
}
void setSelectPin(uint8_t pinNumber, uint8_t pinDriveDirection, uint8_t pinTristateDirection,
uint8_t pinEnableValue, uint8_t pinDisableValue,
uint32_t delayAfterEnable = 0, uint32_t delayAfterDisable = 0) {
bsc.setSelectPin(pinNumber, pinDriveDirection, pinTristateDirection, pinEnableValue, pinDisableValue, delayAfterEnable, delayAfterDisable);
}
void unsetSelectPin() {
bsc.unsetSelectPin();
}
void enablePower() {
bsc.enablePower(true);
}
void disablePower() {
bsc.enablePower(false);
}
void reset() {
(void) tlx493d_softwareReset(&sensor);
}
void enableSelect() {
bsc.enableSelect(true);
}
void disableSelect() {
bsc.enableSelect(false);
}
private:
BoardSupportType bsc;
BusWrapperType busWrapper;
};
}
}
#endif // TLX493D_HPP