AdiSense1000_V21 MBED API

Fork of AdiSense1000 by PoC_Team

Committer:
danodonovan
Date:
Mon Jan 22 17:40:50 2018 +0000
Revision:
24:5a2272a25ff1
Updating example to adisense1000 v1.0.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
danodonovan 24:5a2272a25ff1 1 /*!
danodonovan 24:5a2272a25ff1 2 ******************************************************************************
danodonovan 24:5a2272a25ff1 3 * @file: adi_sense_lut_data_types.h
danodonovan 24:5a2272a25ff1 4 * @brief: Look-Up Table data-type definitions for ADI Sense API.
danodonovan 24:5a2272a25ff1 5 *-----------------------------------------------------------------------------
danodonovan 24:5a2272a25ff1 6 */
danodonovan 24:5a2272a25ff1 7
danodonovan 24:5a2272a25ff1 8 /*
danodonovan 24:5a2272a25ff1 9 Copyright 2017 (c) Analog Devices, Inc.
danodonovan 24:5a2272a25ff1 10
danodonovan 24:5a2272a25ff1 11 All rights reserved.
danodonovan 24:5a2272a25ff1 12
danodonovan 24:5a2272a25ff1 13 Redistribution and use in source and binary forms, with or without
danodonovan 24:5a2272a25ff1 14 modification, are permitted provided that the following conditions are met:
danodonovan 24:5a2272a25ff1 15 - Redistributions of source code must retain the above copyright
danodonovan 24:5a2272a25ff1 16 notice, this list of conditions and the following disclaimer.
danodonovan 24:5a2272a25ff1 17 - Redistributions in binary form must reproduce the above copyright
danodonovan 24:5a2272a25ff1 18 notice, this list of conditions and the following disclaimer in
danodonovan 24:5a2272a25ff1 19 the documentation and/or other materials provided with the
danodonovan 24:5a2272a25ff1 20 distribution.
danodonovan 24:5a2272a25ff1 21 - Neither the name of Analog Devices, Inc. nor the names of its
danodonovan 24:5a2272a25ff1 22 contributors may be used to endorse or promote products derived
danodonovan 24:5a2272a25ff1 23 from this software without specific prior written permission.
danodonovan 24:5a2272a25ff1 24 - The use of this software may or may not infringe the patent rights
danodonovan 24:5a2272a25ff1 25 of one or more patent holders. This license does not release you
danodonovan 24:5a2272a25ff1 26 from the requirement that you obtain separate licenses from these
danodonovan 24:5a2272a25ff1 27 patent holders to use this software.
danodonovan 24:5a2272a25ff1 28 - Use of the software either in source or binary form, must be run
danodonovan 24:5a2272a25ff1 29 on or directly connected to an Analog Devices Inc. component.
danodonovan 24:5a2272a25ff1 30
danodonovan 24:5a2272a25ff1 31 THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
danodonovan 24:5a2272a25ff1 32 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
danodonovan 24:5a2272a25ff1 33 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
danodonovan 24:5a2272a25ff1 34 IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
danodonovan 24:5a2272a25ff1 35 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
danodonovan 24:5a2272a25ff1 36 LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
danodonovan 24:5a2272a25ff1 37 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
danodonovan 24:5a2272a25ff1 38 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
danodonovan 24:5a2272a25ff1 39 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
danodonovan 24:5a2272a25ff1 40 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
danodonovan 24:5a2272a25ff1 41 */
danodonovan 24:5a2272a25ff1 42
danodonovan 24:5a2272a25ff1 43 #ifndef __ADI_SENSE_1000_LUT_DATA_H__
danodonovan 24:5a2272a25ff1 44 #define __ADI_SENSE_1000_LUT_DATA_H__
danodonovan 24:5a2272a25ff1 45
danodonovan 24:5a2272a25ff1 46 #include "adi_sense_types.h"
danodonovan 24:5a2272a25ff1 47 #include "adi_sense_1000_sensor_types.h"
danodonovan 24:5a2272a25ff1 48
danodonovan 24:5a2272a25ff1 49 /*! @addtogroup ADI_Sense_1000_Api ADI Sense 1000 Host Library API
danodonovan 24:5a2272a25ff1 50 * @{
danodonovan 24:5a2272a25ff1 51 */
danodonovan 24:5a2272a25ff1 52
danodonovan 24:5a2272a25ff1 53 #ifdef __cplusplus
danodonovan 24:5a2272a25ff1 54 extern "C" {
danodonovan 24:5a2272a25ff1 55 #endif
danodonovan 24:5a2272a25ff1 56
danodonovan 24:5a2272a25ff1 57 /*! LUT data validation signature */
danodonovan 24:5a2272a25ff1 58 #define ADI_SENSE_LUT_SIGNATURE 0x4C555473
danodonovan 24:5a2272a25ff1 59
danodonovan 24:5a2272a25ff1 60 /*! LUT data CRC-16-CCITT seed value */
danodonovan 24:5a2272a25ff1 61 #define ADI_SENSE_LUT_CRC_SEED 0x4153
danodonovan 24:5a2272a25ff1 62
danodonovan 24:5a2272a25ff1 63 /*! LUT maximum allowed size */
danodonovan 24:5a2272a25ff1 64 #define ADI_SENSE_LUT_MAX_SIZE 12288U
danodonovan 24:5a2272a25ff1 65
danodonovan 24:5a2272a25ff1 66 /*! Linearisation look-up table / co-efficient list geometry */
danodonovan 24:5a2272a25ff1 67 typedef enum {
danodonovan 24:5a2272a25ff1 68 ADI_SENSE_1000_LUT_GEOMETRY_RESERVED = 0x00,
danodonovan 24:5a2272a25ff1 69 /**< reserved - for internal use only */
danodonovan 24:5a2272a25ff1 70 ADI_SENSE_1000_LUT_GEOMETRY_COEFFS = 0x01,
danodonovan 24:5a2272a25ff1 71 /**< 1-dimensional equation coefficient list */
danodonovan 24:5a2272a25ff1 72 ADI_SENSE_1000_LUT_GEOMETRY_NES_1D = 0x02,
danodonovan 24:5a2272a25ff1 73 /**< 1-dimensional not-equally-spaced look-up table */
danodonovan 24:5a2272a25ff1 74 ADI_SENSE_1000_LUT_GEOMETRY_NES_2D = 0x03,
danodonovan 24:5a2272a25ff1 75 /**< 2-dimensional not-equally-spaced look-up table */
danodonovan 24:5a2272a25ff1 76 ADI_SENSE_1000_LUT_GEOMETRY_ES_1D = 0x04,
danodonovan 24:5a2272a25ff1 77 /**< 1-dimensional equally-spaced look-up table */
danodonovan 24:5a2272a25ff1 78 ADI_SENSE_1000_LUT_GEOMETRY_ES_2D = 0x05,
danodonovan 24:5a2272a25ff1 79 /**< 2-dimensional equally-spaced look-up table */
danodonovan 24:5a2272a25ff1 80 } ADI_SENSE_1000_LUT_GEOMETRY;
danodonovan 24:5a2272a25ff1 81
danodonovan 24:5a2272a25ff1 82 /*! Linearisation equation type */
danodonovan 24:5a2272a25ff1 83 typedef enum {
danodonovan 24:5a2272a25ff1 84 ADI_SENSE_1000_LUT_EQUATION_POLYN,
danodonovan 24:5a2272a25ff1 85 /**< Polynomial equation, typically used for Thermocouple and RTD
danodonovan 24:5a2272a25ff1 86 * linearisation */
danodonovan 24:5a2272a25ff1 87 ADI_SENSE_1000_LUT_EQUATION_POLYNEXP,
danodonovan 24:5a2272a25ff1 88 /**< Polynomial + exponential equation, typically used for Thermocouple
danodonovan 24:5a2272a25ff1 89 * inverse linearisation */
danodonovan 24:5a2272a25ff1 90 ADI_SENSE_1000_LUT_EQUATION_QUADRATIC,
danodonovan 24:5a2272a25ff1 91 /**< Quadratic linearisation equation, typically used for RTD
danodonovan 24:5a2272a25ff1 92 * linearisation */
danodonovan 24:5a2272a25ff1 93 ADI_SENSE_1000_LUT_EQUATION_STEINHART,
danodonovan 24:5a2272a25ff1 94 /**< Steinhart-Hart equation, typically used for Thermistor
danodonovan 24:5a2272a25ff1 95 * linearisation */
danodonovan 24:5a2272a25ff1 96 ADI_SENSE_1000_LUT_EQUATION_LOGARITHMIC,
danodonovan 24:5a2272a25ff1 97 /**< Beta-based logarithmic equation, typically used for Thermistor
danodonovan 24:5a2272a25ff1 98 * linearisation */
danodonovan 24:5a2272a25ff1 99 ADI_SENSE_1000_LUT_EQUATION_EXPONENTIAL,
danodonovan 24:5a2272a25ff1 100 /**< Exponential equation */
danodonovan 24:5a2272a25ff1 101 ADI_SENSE_1000_LUT_EQUATION_BIVARIATE_POLYN,
danodonovan 24:5a2272a25ff1 102 /**< Bi-variate polynomial equation, typically used for bridge pressure
danodonovan 24:5a2272a25ff1 103 * sensor linearisation
danodonovan 24:5a2272a25ff1 104 * @note 2nd-degree is the maximum currently supported
danodonovan 24:5a2272a25ff1 105 */
danodonovan 24:5a2272a25ff1 106 ADI_SENSE_1000_LUT_EQUATION_COUNT,
danodonovan 24:5a2272a25ff1 107 /**< Enum count value - for internal use only */
danodonovan 24:5a2272a25ff1 108 ADI_SENSE_1000_LUT_EQUATION_LUT,
danodonovan 24:5a2272a25ff1 109 /**< Hard-coded Look-Up Table - for internal use only */
danodonovan 24:5a2272a25ff1 110 } ADI_SENSE_1000_LUT_EQUATION;
danodonovan 24:5a2272a25ff1 111
danodonovan 24:5a2272a25ff1 112 typedef enum {
danodonovan 24:5a2272a25ff1 113 ADI_SENSE_1000_LUT_TC_DIRECTION_FORWARD,
danodonovan 24:5a2272a25ff1 114 /**< Thermocouple forward (mV to Celsius) linearisation
danodonovan 24:5a2272a25ff1 115 * Use this value by default for non-thermocouple sensors */
danodonovan 24:5a2272a25ff1 116 ADI_SENSE_1000_LUT_TC_DIRECTION_BACKWARD,
danodonovan 24:5a2272a25ff1 117 /**< Thermocouple inverse (Celsius to mV) linearisation */
danodonovan 24:5a2272a25ff1 118 ADI_SENSE_1000_LUT_TC_DIRECTION_COUNT,
danodonovan 24:5a2272a25ff1 119 /**< Enum count value - for internal use only */
danodonovan 24:5a2272a25ff1 120 } ADI_SENSE_1000_LUT_TC_DIRECTION;
danodonovan 24:5a2272a25ff1 121
danodonovan 24:5a2272a25ff1 122 /*! Linearisation data vector format */
danodonovan 24:5a2272a25ff1 123 typedef enum {
danodonovan 24:5a2272a25ff1 124 ADI_SENSE_1000_LUT_DATA_TYPE_RESERVED = 0,
danodonovan 24:5a2272a25ff1 125 /**< Reserved - for internal use only */
danodonovan 24:5a2272a25ff1 126 ADI_SENSE_1000_LUT_DATA_TYPE_FLOAT32 = 1,
danodonovan 24:5a2272a25ff1 127 /**< Single-precision 32-bit floating-point */
danodonovan 24:5a2272a25ff1 128 ADI_SENSE_1000_LUT_DATA_TYPE_FLOAT64 = 2,
danodonovan 24:5a2272a25ff1 129 /**< Double-precision 64-bit floating-point */
danodonovan 24:5a2272a25ff1 130 } ADI_SENSE_1000_LUT_DATA_TYPE;
danodonovan 24:5a2272a25ff1 131
danodonovan 24:5a2272a25ff1 132 /*! Struct for a list of coefficients to be used in an equation */
danodonovan 24:5a2272a25ff1 133 typedef struct __attribute__((packed, aligned(4))){
danodonovan 24:5a2272a25ff1 134 uint32_t nCoeffs;
danodonovan 24:5a2272a25ff1 135 /**< number of coefficients */
danodonovan 24:5a2272a25ff1 136 float32_t rangeMin;
danodonovan 24:5a2272a25ff1 137 /**< look-up table range - minimum */
danodonovan 24:5a2272a25ff1 138 float32_t rangeMax;
danodonovan 24:5a2272a25ff1 139 /**< look-up table range - maximum */
danodonovan 24:5a2272a25ff1 140 float64_t coeffs[];
danodonovan 24:5a2272a25ff1 141 /**< C99 flexible array: sorted by ascending exponent in polynomials */
danodonovan 24:5a2272a25ff1 142 } ADI_SENSE_1000_LUT_COEFF_LIST;
danodonovan 24:5a2272a25ff1 143
danodonovan 24:5a2272a25ff1 144 /*! Struct for a 1-dimensional equally-spaced look-up table */
danodonovan 24:5a2272a25ff1 145 typedef struct __attribute__((packed, aligned(4))){
danodonovan 24:5a2272a25ff1 146 uint32_t nElements;
danodonovan 24:5a2272a25ff1 147 /**< number of elements. */
danodonovan 24:5a2272a25ff1 148 float32_t initInputValue;
danodonovan 24:5a2272a25ff1 149 /**< initial input value, corresponding to first table element */
danodonovan 24:5a2272a25ff1 150 float32_t inputValueIncrement;
danodonovan 24:5a2272a25ff1 151 /**< interval between successive input values */
danodonovan 24:5a2272a25ff1 152 float32_t lut[];
danodonovan 24:5a2272a25ff1 153 /**< C99 flexible array */
danodonovan 24:5a2272a25ff1 154 } ADI_SENSE_1000_LUT_1D_ES;
danodonovan 24:5a2272a25ff1 155
danodonovan 24:5a2272a25ff1 156 /*! Struct for a 1-dimensional not-equally-spaced look-up table */
danodonovan 24:5a2272a25ff1 157 typedef struct __attribute__((packed, aligned(4))){
danodonovan 24:5a2272a25ff1 158 uint32_t nElements;
danodonovan 24:5a2272a25ff1 159 /**< number of elements of each array. */
danodonovan 24:5a2272a25ff1 160 float32_t lut[];
danodonovan 24:5a2272a25ff1 161 /**< C99 flexible array, first X's array then Y's array*/
danodonovan 24:5a2272a25ff1 162 } ADI_SENSE_1000_LUT_1D_NES;
danodonovan 24:5a2272a25ff1 163
danodonovan 24:5a2272a25ff1 164 /*! Struct for a 2-dimensional equally-spaced look-up table */
danodonovan 24:5a2272a25ff1 165 typedef struct __attribute__((packed, aligned(4))){
danodonovan 24:5a2272a25ff1 166 uint16_t nElementsX;
danodonovan 24:5a2272a25ff1 167 /**< number of elements for input X. */
danodonovan 24:5a2272a25ff1 168 uint16_t nElementsY;
danodonovan 24:5a2272a25ff1 169 /**< number of elements for input Y. */
danodonovan 24:5a2272a25ff1 170 float32_t initInputValueX;
danodonovan 24:5a2272a25ff1 171 /**< initial X input value */
danodonovan 24:5a2272a25ff1 172 float32_t inputValueIncrementX;
danodonovan 24:5a2272a25ff1 173 /**< interval between successive X input values */
danodonovan 24:5a2272a25ff1 174 float32_t initInputValueY;
danodonovan 24:5a2272a25ff1 175 /**< initial Y input value */
danodonovan 24:5a2272a25ff1 176 float32_t inputValueIncrementY;
danodonovan 24:5a2272a25ff1 177 /**< interval between successive Y input values */
danodonovan 24:5a2272a25ff1 178 float32_t lut[];
danodonovan 24:5a2272a25ff1 179 /**< C99 flexible array, Z matrix[y][x] */
danodonovan 24:5a2272a25ff1 180 } ADI_SENSE_1000_LUT_2D_ES;
danodonovan 24:5a2272a25ff1 181
danodonovan 24:5a2272a25ff1 182 /*! Struct for a 2-dimensional not-equally-spaced look-up table */
danodonovan 24:5a2272a25ff1 183 typedef struct __attribute__((packed, aligned(4))){
danodonovan 24:5a2272a25ff1 184 uint16_t nElementsX;
danodonovan 24:5a2272a25ff1 185 /**< number of elements in array X. */
danodonovan 24:5a2272a25ff1 186 uint16_t nElementsY;
danodonovan 24:5a2272a25ff1 187 /**< number of elements in array Y. */
danodonovan 24:5a2272a25ff1 188 float32_t lut[];
danodonovan 24:5a2272a25ff1 189 /**< C99 flexible array, Order: X's array, Y's array, Z matrix[y][x] */
danodonovan 24:5a2272a25ff1 190 } ADI_SENSE_1000_LUT_2D_NES;
danodonovan 24:5a2272a25ff1 191
danodonovan 24:5a2272a25ff1 192 /*! Struct for a 2-dimensional list of coefficients to be used in a
danodonovan 24:5a2272a25ff1 193 * bi-variate polynomial equation */
danodonovan 24:5a2272a25ff1 194 typedef struct __attribute__((packed, aligned(4))){
danodonovan 24:5a2272a25ff1 195 uint32_t maxDegree;
danodonovan 24:5a2272a25ff1 196 /**< number of coefficients */
danodonovan 24:5a2272a25ff1 197 float32_t rangeMinX;
danodonovan 24:5a2272a25ff1 198 /**< look-up table range - minimum X input value */
danodonovan 24:5a2272a25ff1 199 float32_t rangeMaxX;
danodonovan 24:5a2272a25ff1 200 /**< look-up table range - maximum X input value */
danodonovan 24:5a2272a25ff1 201 float32_t rangeMinY;
danodonovan 24:5a2272a25ff1 202 /**< look-up table range - minimum Y input value */
danodonovan 24:5a2272a25ff1 203 float32_t rangeMaxY;
danodonovan 24:5a2272a25ff1 204 /**< look-up table range - maximum Y input value */
danodonovan 24:5a2272a25ff1 205 float64_t coeffs[];
danodonovan 24:5a2272a25ff1 206 /**< C99 flexible array: sorted by ascending X degree then sorted by
danodonovan 24:5a2272a25ff1 207 * ascending Y exponent */
danodonovan 24:5a2272a25ff1 208 } ADI_SENSE_1000_LUT_2D_POLYN_COEFF_LIST;
danodonovan 24:5a2272a25ff1 209
danodonovan 24:5a2272a25ff1 210 /*! Macro to calculate the number of elements in
danodonovan 24:5a2272a25ff1 211 * a @ref ADI_SENSE_1000_LUT_COEFF_LIST table */
danodonovan 24:5a2272a25ff1 212 #define ADI_SENSE_1000_LUT_COEFF_LIST_NELEMENTS(_t) \
danodonovan 24:5a2272a25ff1 213 ((_t).nCoeffs)
danodonovan 24:5a2272a25ff1 214
danodonovan 24:5a2272a25ff1 215 /*! Macro to calculate the number of elements in
danodonovan 24:5a2272a25ff1 216 * a @ref ADI_SENSE_1000_LUT_1D_ES table */
danodonovan 24:5a2272a25ff1 217 #define ADI_SENSE_1000_LUT_1D_ES_NELEMENTS(_t) \
danodonovan 24:5a2272a25ff1 218 ((_t).nElements)
danodonovan 24:5a2272a25ff1 219
danodonovan 24:5a2272a25ff1 220 /*! Macro to calculate the number of elements in
danodonovan 24:5a2272a25ff1 221 * a @ref ADI_SENSE_1000_LUT_1D_NES table */
danodonovan 24:5a2272a25ff1 222 #define ADI_SENSE_1000_LUT_1D_NES_NELEMENTS(_t) \
danodonovan 24:5a2272a25ff1 223 ((_t).nElements * 2)
danodonovan 24:5a2272a25ff1 224
danodonovan 24:5a2272a25ff1 225 /*! Macro to calculate the number of elements in
danodonovan 24:5a2272a25ff1 226 * a @ref ADI_SENSE_1000_LUT_2D_ES table */
danodonovan 24:5a2272a25ff1 227 #define ADI_SENSE_1000_LUT_2D_ES_NELEMENTS(_t) \
danodonovan 24:5a2272a25ff1 228 ((_t).nElementsX * (_t).nElementsX)
danodonovan 24:5a2272a25ff1 229
danodonovan 24:5a2272a25ff1 230 /*! Macro to calculate the number of elements in
danodonovan 24:5a2272a25ff1 231 * a @ref ADI_SENSE_1000_LUT_2D_NES table */
danodonovan 24:5a2272a25ff1 232 #define ADI_SENSE_1000_LUT_2D_NES_NELEMENTS(_t) \
danodonovan 24:5a2272a25ff1 233 ((_t).nElementsX + (_t).nElementsY + ((_t).nElementsX * (_t).nElementsY))
danodonovan 24:5a2272a25ff1 234
danodonovan 24:5a2272a25ff1 235 /*! Macro to calculate the number of elements in
danodonovan 24:5a2272a25ff1 236 * a @ref ADI_SENSE_1000_LUT_2D_POLYN_COEFF_LIST table */
danodonovan 24:5a2272a25ff1 237 #define ADI_SENSE_1000_LUT_2D_POLYN_COEFF_LIST_NELEMENTS(_t) \
danodonovan 24:5a2272a25ff1 238 (((_t).maxDegree + 1) * ((_t).maxDegree + 2) / 2)
danodonovan 24:5a2272a25ff1 239
danodonovan 24:5a2272a25ff1 240 /*! Macro to calculate the storage size in bytes of
danodonovan 24:5a2272a25ff1 241 * a @ref ADI_SENSE_1000_LUT_COEFF_LIST table */
danodonovan 24:5a2272a25ff1 242 #define ADI_SENSE_1000_LUT_COEFF_LIST_SIZE(_t) \
danodonovan 24:5a2272a25ff1 243 (sizeof(_t) + (sizeof(float64_t) * ADI_SENSE_1000_LUT_COEFF_LIST_NELEMENTS(_t)))
danodonovan 24:5a2272a25ff1 244
danodonovan 24:5a2272a25ff1 245 /*! Macro to calculate the storage size in bytes of
danodonovan 24:5a2272a25ff1 246 * a @ref ADI_SENSE_1000_LUT_1D_ES table */
danodonovan 24:5a2272a25ff1 247 #define ADI_SENSE_1000_LUT_1D_ES_SIZE(_t) \
danodonovan 24:5a2272a25ff1 248 (sizeof(_t) + (sizeof(float32_t) * ADI_SENSE_1000_LUT_1D_ES_NELEMENTS(_t)))
danodonovan 24:5a2272a25ff1 249
danodonovan 24:5a2272a25ff1 250 /*! Macro to calculate the storage size in bytes of
danodonovan 24:5a2272a25ff1 251 * a @ref ADI_SENSE_1000_LUT_1D_NES table */
danodonovan 24:5a2272a25ff1 252 #define ADI_SENSE_1000_LUT_1D_NES_SIZE(_t) \
danodonovan 24:5a2272a25ff1 253 (sizeof(_t) + (sizeof(float32_t) * ADI_SENSE_1000_LUT_1D_NES_NELEMENTS(_t)))
danodonovan 24:5a2272a25ff1 254
danodonovan 24:5a2272a25ff1 255 /*! Macro to calculate the storage size in bytes of
danodonovan 24:5a2272a25ff1 256 * a @ref ADI_SENSE_1000_LUT_2D_ES table */
danodonovan 24:5a2272a25ff1 257 #define ADI_SENSE_1000_LUT_2D_ES_SIZE(_t) \
danodonovan 24:5a2272a25ff1 258 (sizeof(_t) + (sizeof(float32_t) * ADI_SENSE_1000_LUT_2D_ES_NELEMENTS(_t)))
danodonovan 24:5a2272a25ff1 259
danodonovan 24:5a2272a25ff1 260 /*! Macro to calculate the storage size in bytes of
danodonovan 24:5a2272a25ff1 261 * a @ref ADI_SENSE_1000_LUT_2D_NES table */
danodonovan 24:5a2272a25ff1 262 #define ADI_SENSE_1000_LUT_2D_NES_SIZE(_t) \
danodonovan 24:5a2272a25ff1 263 (sizeof(_t) + (sizeof(float32_t) * ADI_SENSE_1000_LUT_2D_NES_NELEMENTS(_t)))
danodonovan 24:5a2272a25ff1 264
danodonovan 24:5a2272a25ff1 265 /*! Macro to calculate the storage size in bytes of
danodonovan 24:5a2272a25ff1 266 * a @ref ADI_SENSE_1000_LUT_2D_POLYN_COEFF_LIST table */
danodonovan 24:5a2272a25ff1 267 #define ADI_SENSE_1000_LUT_2D_POLYN_COEFF_LIST_SIZE(_t) \
danodonovan 24:5a2272a25ff1 268 (sizeof(_t) + (sizeof(float64_t) * ADI_SENSE_1000_LUT_2D_POLYN_COEFF_LIST_NELEMENTS(_t)))
danodonovan 24:5a2272a25ff1 269
danodonovan 24:5a2272a25ff1 270 /*! Look-Up Table descriptor */
danodonovan 24:5a2272a25ff1 271 typedef union __attribute__((packed, aligned(4))) {
danodonovan 24:5a2272a25ff1 272 struct {
danodonovan 24:5a2272a25ff1 273 ADI_SENSE_1000_LUT_GEOMETRY geometry : 6;
danodonovan 24:5a2272a25ff1 274 /**< Table geometry */
danodonovan 24:5a2272a25ff1 275 ADI_SENSE_1000_LUT_EQUATION equation : 6;
danodonovan 24:5a2272a25ff1 276 /**< Equation type */
danodonovan 24:5a2272a25ff1 277 ADI_SENSE_1000_LUT_TC_DIRECTION dir : 4;
danodonovan 24:5a2272a25ff1 278 /**< Thermocouple linearisation direction */
danodonovan 24:5a2272a25ff1 279 ADI_SENSE_1000_ADC_SENSOR_TYPE sensor : 12;
danodonovan 24:5a2272a25ff1 280 /**< Sensor Type ID */
danodonovan 24:5a2272a25ff1 281 ADI_SENSE_1000_LUT_DATA_TYPE dataType : 4;
danodonovan 24:5a2272a25ff1 282 /**< Table vector data type */
danodonovan 24:5a2272a25ff1 283 uint16_t length;
danodonovan 24:5a2272a25ff1 284 /**< Length in bytes of table data section
danodonovan 24:5a2272a25ff1 285 * (excluding this header) */
danodonovan 24:5a2272a25ff1 286 uint16_t crc16;
danodonovan 24:5a2272a25ff1 287 /**< CRC-16-CCITT of the data */
danodonovan 24:5a2272a25ff1 288 };
danodonovan 24:5a2272a25ff1 289 uint64_t value64;
danodonovan 24:5a2272a25ff1 290 } ADI_SENSE_1000_LUT_DESCRIPTOR;
danodonovan 24:5a2272a25ff1 291
danodonovan 24:5a2272a25ff1 292 /*! Look-Up Table geometry-specific data structures */
danodonovan 24:5a2272a25ff1 293 typedef union {
danodonovan 24:5a2272a25ff1 294 ADI_SENSE_1000_LUT_COEFF_LIST coeffList;
danodonovan 24:5a2272a25ff1 295 /**< Data format for tables with ADI_SENSE_1000_LUT_GEOMETRY_COEFFS geometry
danodonovan 24:5a2272a25ff1 296 * except where equation is ADI_SENSE_1000_LUT_EQUATION_BIVARIATE_POLYN */
danodonovan 24:5a2272a25ff1 297 ADI_SENSE_1000_LUT_1D_ES lut1dEs;
danodonovan 24:5a2272a25ff1 298 /**< Data format for tables with ADI_SENSE_1000_LUT_GEOMETRY_ES_1D geometry */
danodonovan 24:5a2272a25ff1 299 ADI_SENSE_1000_LUT_1D_NES lut1dNes;
danodonovan 24:5a2272a25ff1 300 /**< Data format for tables with ADI_SENSE_1000_LUT_GEOMETRY_NES_1D geometry */
danodonovan 24:5a2272a25ff1 301 ADI_SENSE_1000_LUT_2D_ES lut2dEs;
danodonovan 24:5a2272a25ff1 302 /**< Data format for tables with ADI_SENSE_1000_LUT_GEOMETRY_ES_2D geometry */
danodonovan 24:5a2272a25ff1 303 ADI_SENSE_1000_LUT_2D_NES lut2dNes;
danodonovan 24:5a2272a25ff1 304 /**< Data format for tables with ADI_SENSE_1000_LUT_GEOMETRY_NES_2D geometry */
danodonovan 24:5a2272a25ff1 305 ADI_SENSE_1000_LUT_2D_POLYN_COEFF_LIST coeffList2d;
danodonovan 24:5a2272a25ff1 306 /**< Data format for tables with ADI_SENSE_1000_LUT_GEOMETRY_COEFFS geometry
danodonovan 24:5a2272a25ff1 307 * and ADI_SENSE_1000_LUT_EQUATION_BIVARIATE_POLYN equation */
danodonovan 24:5a2272a25ff1 308 } ADI_SENSE_1000_LUT_TABLE_DATA;
danodonovan 24:5a2272a25ff1 309
danodonovan 24:5a2272a25ff1 310 /*! Look-Up Table structure */
danodonovan 24:5a2272a25ff1 311 typedef struct __attribute__((packed, aligned(4))) {
danodonovan 24:5a2272a25ff1 312 ADI_SENSE_1000_LUT_DESCRIPTOR descriptor;
danodonovan 24:5a2272a25ff1 313 /**< Look-Up Table descriptor */
danodonovan 24:5a2272a25ff1 314 ADI_SENSE_1000_LUT_TABLE_DATA data;
danodonovan 24:5a2272a25ff1 315 /**< Look-Up Table data */
danodonovan 24:5a2272a25ff1 316 } ADI_SENSE_1000_LUT_TABLE;
danodonovan 24:5a2272a25ff1 317
danodonovan 24:5a2272a25ff1 318 /*! LUT data format versions */
danodonovan 24:5a2272a25ff1 319 typedef struct __attribute__((packed, aligned(4))) {
danodonovan 24:5a2272a25ff1 320 uint8_t major; /*!< Major version number */
danodonovan 24:5a2272a25ff1 321 uint8_t minor; /*!< Minor version number */
danodonovan 24:5a2272a25ff1 322 } ADI_SENSE_1000_LUT_VERSION;
danodonovan 24:5a2272a25ff1 323
danodonovan 24:5a2272a25ff1 324 /*! LUT data header structure */
danodonovan 24:5a2272a25ff1 325 typedef struct __attribute__((packed, aligned(4))) {
danodonovan 24:5a2272a25ff1 326 uint32_t signature;
danodonovan 24:5a2272a25ff1 327 /**< Hard-coded signature value (@ref ADI_SENSE_LUT_SIGNATURE) */
danodonovan 24:5a2272a25ff1 328 ADI_SENSE_1000_LUT_VERSION version;
danodonovan 24:5a2272a25ff1 329 /**< LUT data format version (@ref ADI_SENSE_LUT_VERSION) */
danodonovan 24:5a2272a25ff1 330 uint16_t numTables;
danodonovan 24:5a2272a25ff1 331 /**< Total number of tables */
danodonovan 24:5a2272a25ff1 332 uint32_t totalLength;
danodonovan 24:5a2272a25ff1 333 /**< Total length (in bytes) of all table descriptors and data
danodonovan 24:5a2272a25ff1 334 * (excluding this header)
danodonovan 24:5a2272a25ff1 335 * This, plus the header length, must not exceed ADI_SENSE_LUT_MAX_SIZE
danodonovan 24:5a2272a25ff1 336 */
danodonovan 24:5a2272a25ff1 337 } ADI_SENSE_1000_LUT_HEADER;
danodonovan 24:5a2272a25ff1 338
danodonovan 24:5a2272a25ff1 339 /*! LUT data top-level structure */
danodonovan 24:5a2272a25ff1 340 typedef struct __attribute__((packed, aligned(4))) {
danodonovan 24:5a2272a25ff1 341 ADI_SENSE_1000_LUT_HEADER header;
danodonovan 24:5a2272a25ff1 342 /*!< LUT data top-level header structure */
danodonovan 24:5a2272a25ff1 343 ADI_SENSE_1000_LUT_TABLE tables[];
danodonovan 24:5a2272a25ff1 344 /*!< Variable-length array of one-or-more look-up table structures */
danodonovan 24:5a2272a25ff1 345 } ADI_SENSE_1000_LUT;
danodonovan 24:5a2272a25ff1 346
danodonovan 24:5a2272a25ff1 347 /*! Alternative top-level structure for raw LUT data representation
danodonovan 24:5a2272a25ff1 348 *
danodonovan 24:5a2272a25ff1 349 * @note This is intended to be used for encapsulating the storage of static
danodonovan 24:5a2272a25ff1 350 * LUT data declarations in C files. The rawTableData can be cast
danodonovan 24:5a2272a25ff1 351 * to the ADI_SENSE_LUT type for further parsing/processing.
danodonovan 24:5a2272a25ff1 352 */
danodonovan 24:5a2272a25ff1 353 typedef struct __attribute__((packed, aligned(4))) {
danodonovan 24:5a2272a25ff1 354 ADI_SENSE_1000_LUT_HEADER header;
danodonovan 24:5a2272a25ff1 355 /*!< LUT data top-level header structure */
danodonovan 24:5a2272a25ff1 356 uint8_t rawTableData[];
danodonovan 24:5a2272a25ff1 357 /*!< Variable-length byte array of look-up tables in raw binary format */
danodonovan 24:5a2272a25ff1 358 } ADI_SENSE_1000_LUT_RAW;
danodonovan 24:5a2272a25ff1 359
danodonovan 24:5a2272a25ff1 360 #ifdef __cplusplus
danodonovan 24:5a2272a25ff1 361 }
danodonovan 24:5a2272a25ff1 362 #endif
danodonovan 24:5a2272a25ff1 363
danodonovan 24:5a2272a25ff1 364 /*!
danodonovan 24:5a2272a25ff1 365 * @}
danodonovan 24:5a2272a25ff1 366 */
danodonovan 24:5a2272a25ff1 367
danodonovan 24:5a2272a25ff1 368 #endif /* __ADI_SENSE_1000_LUT_DATA_H__ */
danodonovan 24:5a2272a25ff1 369