AdiSense1000_V21 MBED API

Fork of AdiSense1000 by PoC_Team

Committer:
kevin1990
Date:
Mon Nov 27 12:46:37 2017 +0000
Revision:
11:7215312d26fb
v1.0 Release

Who changed what in which revision?

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