Ted Grosch / Mbed 2 deprecated Nucleo_TOF_I2C

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers OPT3101Calibration.h Source File

OPT3101Calibration.h

Go to the documentation of this file.
00001 /*!
00002 * \file OPT3101Calibration.h
00003 * \author  Karthik Rajagopal <krthik@ti.com>
00004 * \version 0.9.1
00005 *
00006 * \section COPYRIGHT
00007 * TEXAS INSTRUMENTS TEXT FILE LICENSE
00008 * Copyright (c) 2018 Texas Instruments Incorporated
00009 * All rights reserved not granted herein.
00010 * Limited License.
00011 * Texas Instruments Incorporated grants a world-wide, royalty-free, non-exclusive license under copyrights and patents it now or hereafter owns or controls to make, have made, use, import, offer to sell and sell ("Utilize") this software subject to the terms herein.  With respect to the foregoing patent license, such license is granted  solely to the extent that any such patent is necessary to Utilize the software alone.  The patent license shall not apply to any combinations which include this software, other than combinations with devices manufactured by or for TI ("TI Devices").  No hardware patent is licensed hereunder.
00012 * Redistributions must preserve existing copyright notices and reproduce this license (including the above copyright notice and the disclaimer and (if applicable) source code license limitations below) in the documentation and/or other materials provided with the distribution
00013 * Redistribution and use in binary form, without modification, are permitted provided that the following conditions are met:
00014 * * No reverse engineering, decompilation, or disassembly of this software is permitted with respect to any software provided in binary form.
00015 * * any redistribution and use are licensed by TI for use only with TI Devices.
00016 * * Nothing shall obligate TI to provide you with source code for the software licensed and provided to you in object code.
00017 * If software source code is provided to you, modification and redistribution of the source code are permitted provided that the following conditions are met:
00018 * * any redistribution and use of the source code, including any resulting derivative works, are licensed by TI for use only with TI Devices.
00019 * * any redistribution and use of any object code compiled from the source code and any resulting derivative works, are licensed by TI for use only with TI Devices.
00020 * Neither the name of Texas Instruments Incorporated nor the names of its suppliers may be used to endorse or promote products derived from this software without specific prior written permission.
00021 * DISCLAIMER.
00022 * THIS SOFTWARE IS PROVIDED BY TI AND TI'S LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL TI AND TI'S LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00023 *
00024 * \section DESCRIPTION
00025 * This file contains the OPT3101::calibrationC class declaration
00026 */
00027 
00028 #ifndef OPT3101CALIBRATION_H_
00029 #define OPT3101CALIBRATION_H_
00030 
00031 #include <cmath>
00032 #include "OPT3101DesignCoefficients.h "
00033 #include "OPT3101frameData.h "
00034 #include "OPT3101PhaseOffset.h "
00035 #include "environmentControl.h "
00036 
00037 #ifdef OPT3101_USE_STREAMLIB
00038 #include <fstream>
00039 #include <iostream>
00040 #include <istream>
00041 #include <string>
00042 #endif
00043 
00044 /** \brief environmentalController class instance declaration
00045 This global variable declaration to be available across files which controls the environmental parameters. The instance is of class environmentalController
00046 */
00047 extern environmentalController envController;
00048 
00049 namespace OPT3101 {
00050     /**
00051     OPT3101 systems require various calibrations for accurate measurement. During the calibration process there are several coefficients which needs to be measured and analyzed. 
00052     Although the calibration settings can be stored as register settings, they would not be very meaning full to understand and analyze. 
00053     This class acts as an intermediate translator to measure, store and calibration values. The class also invokes methods to convert the calibration coefficients to register settings to load to the device. 
00054     There are several members of this class where more than 1 instances of those members are required. The class only contain pointers for these coefficient classes. 
00055     The constructor definition of this class is generated by OPT3101 configurator tool. The file generated by the tool can be directly imported to this project for a complete operation SDK. 
00056     */
00057     class calibrationC {
00058         public:
00059             crosstalkC internalCrosstalk[1]; ///< Pointer to analyze and store internal crosstalk class OPT3101::crosstalkC
00060             crosstalkC illumCrosstalk[3][2]; ///< Pointer to analyze and store illumination crosstalk class OPT3101::crosstalkC
00061             phaseOffsetC phaseOffset[3][2]; ///< Pointer to analyze and store phase offset class OPT3101::phaseOffsetC
00062             crosstalkTempCoffC illumCrosstalkTempCoff[3][2]; ///< Pointer to analyze and store crosstalk temperature coefficients OPT3101::crosstalkTempCoffC
00063             phaseTempCoffC phaseTempCoff[3][2]; ///< Pointer to analyze and store phase temperature coefficients OPT3101::phaseTempCoffC
00064             phaseAmbientCoffC phaseAmbientCoff[1]; ///< Pointer to analyze and store phase ambient coefficients OPT3101::phaseAmbientCoffC
00065             uint8_t registerAddressList[64]; ///< List of OPT3101::registers address which needs to be stored as calibration for the system.
00066             uint8_t registerAddressListSize; ///< Number of OPT3101::registers address that need to be stores as calibration for the system 
00067             bool EEPROM_connected; ///< Flag to specify if EEPROM is connected to the OPT3101 device 
00068             bool extTempSensor_connected; ///< Flag to specify if external temperature sensor is connected to the OPT3101 device
00069             uint8_t recordLength; ///< Specifies the length of records to be stored for calibration configurations. This is set be OPT3101 configurator tool. 
00070             /*!
00071             * \brief Dummy function for documentation
00072             * This function is to just document the functionality of the constructor
00073             * \returns Nothing;
00074             */
00075             calibrationC(bool dummyFlag);
00076             /*!
00077             * \brief Constructor for class OPT3101::calibrationC
00078             *  Constructor definition for which comes from the OPT3101 configurator tool. Allocates memory for all the calibration coefficient classes. 
00079             *  Since the actual allocation depends on the configuration of the system, this is generated by the configurator tool.
00080             */
00081             calibrationC();
00082             /*!
00083             * \brief Finds common crosstalk scale coff to be applied 
00084             * OPT3101 system could consist of multiple TX configuration operating together, switching between each other configurations. In such cases more than 1 illum crosstalk compensation registers needs to be applied however OPT3101 has only one common scale which this method computes
00085             * \param[in,out] illumXtalk; illumXtalk is pointer to OPT3101::crosstalkC class which contains the list of crosstalk instances for which the common coefficient needs to be calculated. 
00086             * \param[in] txActiveList;
00087             * \param[in] registerSetActiveList;
00088             * \returns Nothing;
00089             */
00090             void findCommonCrosstalkScale(crosstalkC *illumXtalk, bool *txActiveList,bool *registerSetActiveList);
00091             /*!
00092             * \brief Calculates crosstalk temp coefficient registers from floating point precision coefficients
00093             * OPT3101 system could consist of multiple TX configuration operating together, switching between each other configurations. In such cases more than 1 illum crosstalk temperature compensation registers needs to be applied.
00094             * OPT3101 has only one common scale which this method computes along with the registers that need to be written to compensate these effects. 
00095             * \param[in,out] illumXtalkCoff; illumXtalkCoff is pointer to OPT3101::crosstalkTempCoffC class which contains the list of crosstalk temp coefficients for which the register values needs to be calculated.
00096             * \param[in] txActiveList;
00097             * \param[in] registerSetActiveList;
00098             * \param[in] illumXtalk; illumXtalk is pointer to OPT3101::crosstalkTempCoffC class which contains the list of crosstalk instances for which the common coefficient needs to be calculated. This is mainly required to scale the crosstalk values with magnitude
00099             * \returns Nothing;
00100             */
00101             void findCrosstalkTempRegisterValues(crosstalkTempCoffC *illumXtalkCoff, bool *txActiveList,bool *registerSetActiveList, crosstalkC *illumXtalk);
00102             /*!
00103             * \brief calculates the phase temp coff register values from the floating point coff 
00104             * OPT3101 system could consist of multiple TX configuration operating together, switching between each other configurations. In such cases more than 1 phase temperature compensation registers needs to be applied.
00105             * OPT3101 has only one common scale which this method computes along with the registers that need to be written to compensate these effects.
00106             * \param[in,out] phaseTempCoff; phaseTempCoff is pointer to OPT3101::phaseTempCoffC class which contains the list of phase temp coefficients for which the register values needs to be calculated.
00107             * \param[in] txActiveList;
00108             * \param[in] registerSetActiveList;
00109             * \param[in] freqCount; freqCount is frequency count register read from OPT3101::registers::freq_count_read_reg. This is used to scale the coefficients accordingly
00110             * \returns Nothing;
00111             */
00112             void findPhaseTempRegisterValues(phaseTempCoffC* phaseTempCoff, bool *txActiveList,bool *registerSetActiveList, uint16_t freqCount);
00113             /*!
00114             * \brief reports members of the instance
00115             *  Print the members of the class instance on screen
00116             * \returns Nothing;
00117             */
00118             void report();
00119     };
00120 }
00121 
00122 #endif /* OPT3101CALIBRATION_H_ */
00123