Mbed FW update

Committer:
Vkadaba
Date:
Tue Mar 31 04:50:37 2020 +0000
Revision:
61:0f16a2e3b58b
Parent:
50:d84305e5e1c0
removed crc support for LUT

Who changed what in which revision?

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