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