foxBMS - Unit Tests  1.5.0
The foxBMS Unit Tests API Documentation
database_cfg.h
Go to the documentation of this file.
1 /**
2  *
3  * @copyright © 2010 - 2023, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V.
4  * All rights reserved.
5  *
6  * SPDX-License-Identifier: BSD-3-Clause
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright notice, this
12  * list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright notice,
15  * this list of conditions and the following disclaimer in the documentation
16  * and/or other materials provided with the distribution.
17  *
18  * 3. Neither the name of the copyright holder nor the names of its
19  * contributors may be used to endorse or promote products derived from
20  * this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  *
33  * We kindly request you to use one or more of the following phrases to refer to
34  * foxBMS in your hardware, software, documentation or advertising materials:
35  *
36  * - ″This product uses parts of foxBMS®″
37  * - ″This product includes parts of foxBMS®″
38  * - ″This product is derived from foxBMS®″
39  *
40  */
41 
42 /**
43  * @file database_cfg.h
44  * @author foxBMS Team
45  * @date 2015-08-18 (date of creation)
46  * @updated 2023-02-03 (date of last update)
47  * @version v1.5.0
48  * @ingroup ENGINE_CONFIGURATION
49  * @prefix DATA
50  *
51  * @brief Database configuration header
52  *
53  * @details Provides interfaces to database configuration
54  *
55  */
56 
57 #ifndef FOXBMS__DATABASE_CFG_H_
58 #define FOXBMS__DATABASE_CFG_H_
59 
60 /*========== Includes =======================================================*/
61 
62 #include "battery_system_cfg.h"
63 
64 #include "mcu.h"
65 
66 #include <math.h>
67 #include <stdbool.h>
68 #include <stdint.h>
69 
70 /*========== Macros and Definitions =========================================*/
71 /** configuration struct of database channel (data block) */
72 typedef struct {
73  void *pDatabaseEntry; /*!< pointer to the database entry */
74  uint32_t dataLength; /*!< length of the entry */
75 } DATA_BASE_s;
76 
77 /** data block identification numbers */
78 typedef enum {
112  DATA_BLOCK_ID_MAX, /**< DO NOT CHANGE, MUST BE THE LAST ENTRY */
114 
116  (int16_t)DATA_BLOCK_ID_MAX < UINT8_MAX,
117  "Maximum number of database entries exceeds UINT8_MAX; adapted length "
118  "checking in DATA_Initialize and DATA_IterateOverDatabaseEntries");
119 
120 /** data block header */
121 typedef struct {
122  DATA_BLOCK_ID_e uniqueId; /*!< uniqueId of database entry */
123  uint32_t timestamp; /*!< timestamp of last database update */
124  uint32_t previousTimestamp; /*!< timestamp of previous database update */
126 
127 /** data block struct of cell voltage */
128 typedef struct {
129  /* This struct needs to be at the beginning of every database entry. During
130  * the initialization of a database struct, uniqueId must be set to the
131  * respective database entry representation in enum DATA_BLOCK_ID_e. */
132  DATA_BLOCK_HEADER_s header; /*!< Data block header */
133  uint8_t state; /*!< for future use */
134  int32_t packVoltage_mV[BS_NR_OF_STRINGS]; /*!< uint: mV */
135  int16_t cellVoltage_mV[BS_NR_OF_STRINGS][BS_NR_OF_CELL_BLOCKS_PER_STRING]; /*!< unit: mV */
136  uint64_t
137  invalidCellVoltage[BS_NR_OF_STRINGS]
138  [BS_NR_OF_MODULES_PER_STRING]; /*!< bitmask if voltages are valid. 0->valid, 1->invalid */
139  uint16_t nrValidCellVoltages[BS_NR_OF_STRINGS]; /*!< number of valid voltages */
140  uint32_t moduleVoltage_mV[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]; /*!< unit: mV */
141  bool validModuleVoltage[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]; /*!< 0 -> if PEC okay; 1 -> PEC error */
143 
144 /** data block struct of cell temperatures */
145 typedef struct {
146  /* This struct needs to be at the beginning of every database entry. During
147  * the initialization of a database struct, uniqueId must be set to the
148  * respective database entry representation in enum DATA_BLOCK_ID_e. */
149  DATA_BLOCK_HEADER_s header; /*!< Data block header */
150  uint8_t state; /*!< for future use */
151  int16_t cellTemperature_ddegC[BS_NR_OF_STRINGS][BS_NR_OF_TEMP_SENSORS_PER_STRING]; /*!< unit: deci &deg;C */
152  uint16_t invalidCellTemperature
153  [BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]; /*!< bitmask if temperatures are valid. 0->valid, 1->invalid */
154  uint16_t nrValidTemperatures[BS_NR_OF_STRINGS]; /*!< number of valid temperatures in each string */
156 
157 /** data block struct of minimum and maximum values */
158 typedef struct {
159  /* This struct needs to be at the beginning of every database entry. During
160  * the initialization of a database struct, uniqueId must be set to the
161  * respective database entry representation in enum DATA_BLOCK_ID_e. */
162  DATA_BLOCK_HEADER_s header; /*!< Data block header */
163 
164  int16_t averageCellVoltage_mV[BS_NR_OF_STRINGS]; /*!< average cell voltages, unit: mV */
165  int16_t minimumCellVoltage_mV[BS_NR_OF_STRINGS]; /*!< minimum cell voltages, unit: mV */
166  int16_t previousMinimumCellVoltage_mV[BS_NR_OF_STRINGS]; /*!< previous minimum cell voltages, unit: mV */
167  int16_t maximumCellVoltage_mV[BS_NR_OF_STRINGS]; /*!< maximum cell voltages, unit: mV */
168  int16_t previousMaximumCellVoltage_mV[BS_NR_OF_STRINGS]; /*!< previous maximum cell voltages, unit: mV */
169  uint16_t nrModuleMinimumCellVoltage[BS_NR_OF_STRINGS]; /*!< number of the module with minimum cell voltage */
170  uint16_t nrCellMinimumCellVoltage[BS_NR_OF_STRINGS]; /*!< number of the cell with minimum cell voltage */
171  uint16_t nrModuleMaximumCellVoltage[BS_NR_OF_STRINGS]; /*!< number of the module with maximum cell voltage */
172  uint16_t nrCellMaximumCellVoltage[BS_NR_OF_STRINGS]; /*!< number of the cell with maximum cell voltage */
173  uint16_t validMeasuredCellVoltages[BS_NR_OF_STRINGS]; /*!< number of valid measured cell voltages */
174  float_t averageTemperature_ddegC[BS_NR_OF_STRINGS]; /*!< unit: deci &deg;C */
175  int16_t minimumTemperature_ddegC[BS_NR_OF_STRINGS]; /*!< unit: deci &deg;C */
176  uint16_t nrModuleMinimumTemperature[BS_NR_OF_STRINGS]; /*!< number of the module with minimum temperature */
177  uint16_t nrSensorMinimumTemperature[BS_NR_OF_STRINGS]; /*!< number of the sensor with minimum temperature */
178  int16_t maximumTemperature_ddegC[BS_NR_OF_STRINGS]; /*!< unit: deci &deg;C */
179  uint16_t nrModuleMaximumTemperature[BS_NR_OF_STRINGS]; /*!< number of the module with maximum temperature */
180  uint16_t nrSensorMaximumTemperature[BS_NR_OF_STRINGS]; /*!< number of the sensor with maximum temperature */
181  uint16_t validMeasuredCellTemperatures[BS_NR_OF_STRINGS]; /*!< number of valid measured cell temperatures */
182  uint8_t state; /*!< state of the min max module */
184 
185 /** data block struct of pack measurement values */
186 typedef struct {
187  /* This struct needs to be at the beginning of every database entry. During
188  * the initialization of a database struct, uniqueId must be set to the
189  * respective database entry representation in enum DATA_BLOCK_ID_e. */
190  DATA_BLOCK_HEADER_s header; /*!< Data block header */
191 
192  int32_t packCurrent_mA; /*!< current in the whole battery pack, unit: mA */
193  uint8_t invalidPackCurrent; /*!< bitmask if current is valid. 0->valid, 1->invalid */
194  int32_t batteryVoltage_mV; /*!< voltage between negative and positive battery pole, unit: mV */
195  uint8_t invalidBatteryVoltage; /*!< bitmask if voltage is valid. 0->valid, 1->invalid */
196  int32_t
197  highVoltageBusVoltage_mV; /*!< voltage between negative battery pole and after positive main contactor, unit: mV */
198  uint8_t invalidHvBusVoltage; /*!< bitmask if voltage is valid. 0->valid, 1->invalid */
199  int32_t packPower_W; /*!< power provided by respectively supplied to the battery pack, unit: W */
200  uint8_t invalidPackPower; /*!< bitmask if power is valid. 0->valid, 1->invalid */
201  int32_t stringVoltage_mV[BS_NR_OF_STRINGS]; /*!< voltage of each string, unit: mV */
202  uint8_t invalidStringVoltage[BS_NR_OF_STRINGS]; /*!< bitmask if voltages are valid. 0->valid, 1->invalid */
203  int32_t stringCurrent_mA[BS_NR_OF_STRINGS]; /*!< current in each string, unit: mA */
204  uint8_t invalidStringCurrent[BS_NR_OF_STRINGS]; /*!< bitmask if currents are valid. 0->valid, 1->invalid */
205  int32_t stringPower_W[BS_NR_OF_STRINGS]; /*!< power of each string, unit: W */
206  uint8_t invalidStringPower[BS_NR_OF_STRINGS]; /*!< bitmask if power values are valid. 0->valid, 1->invalid */
208 
209 /** data block struct of current measurement */
210 typedef struct {
211  /* This struct needs to be at the beginning of every database entry. During
212  * the initialization of a database struct, uniqueId must be set to the
213  * respective database entry representation in enum DATA_BLOCK_ID_e. */
214  DATA_BLOCK_HEADER_s header; /*!< Data block header */
215  int32_t current_mA[BS_NR_OF_STRINGS]; /*!< unit: mA */
216  uint8_t invalidCurrentMeasurement[BS_NR_OF_STRINGS]; /*!< 0: measurement valid, 1: measurement invalid */
217  uint8_t newCurrent; /*!< 0: measurement valid, 1: measurement invalid */
218  uint32_t previousTimestampCurrent[BS_NR_OF_STRINGS]; /*!< timestamp of current measurement */
219  uint32_t timestampCurrent[BS_NR_OF_STRINGS]; /*!< timestamp of current measurement */
220  int32_t sensorTemperature_ddegC[BS_NR_OF_STRINGS]; /*!< unit: 0.1&deg;C */
221  uint8_t invalidSensorTemperatureMeasurement[BS_NR_OF_STRINGS]; /*!< 0: measurement valid, 1: measurement invalid */
222  int32_t power_W[BS_NR_OF_STRINGS]; /*!< unit: W */
223  uint8_t invalidPowerMeasurement[BS_NR_OF_STRINGS]; /*!< 0: measurement valid, 1: measurement invalid */
224  uint8_t newPower; /*!< counter that indicates a new power measurement */
225  uint32_t previousTimestampPower[BS_NR_OF_STRINGS]; /*!< previous timestamp of power measurement */
226  uint32_t timestampPower[BS_NR_OF_STRINGS]; /*!< timestamp of power measurement */
227  int32_t currentCounter_As[BS_NR_OF_STRINGS]; /*!< unit: A.s */
228  uint8_t invalidCurrentCountingMeasurement[BS_NR_OF_STRINGS]; /*!< 0: measurement valid, 1: measurement invalid */
229  uint32_t previousTimestampCurrentCounting[BS_NR_OF_STRINGS]; /*!< previous timestamp of CC measurement */
230  uint32_t timestampCurrentCounting[BS_NR_OF_STRINGS]; /*!< timestamp of CC measurement */
231  int32_t energyCounter_Wh[BS_NR_OF_STRINGS]; /*!< unit: Wh */
232  uint8_t invalidEnergyCountingMeasurement[BS_NR_OF_STRINGS]; /*!< 0: measurement valid, 1: measurement invalid */
233  uint32_t previousTimestampEnergyCounting[BS_NR_OF_STRINGS]; /*!< previous timestamp of EC measurement */
234  uint32_t timestampEnergyCounting[BS_NR_OF_STRINGS]; /*!< timestamp of EC measurement */
235  uint8_t invalidHighVoltageMeasurement
236  [BS_NR_OF_STRINGS][BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]; /*!< 0: measurement valid, 1: measurement invalid */
237  int32_t highVoltage_mV[BS_NR_OF_STRINGS][BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]; /*!< unit: mV */
238  uint32_t previousTimestampHighVoltage
240  [BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]; /*!< previous timestamp of high voltage measurement */
241  uint32_t timestampHighVoltage[BS_NR_OF_STRINGS]
242  [BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]; /*!< timestamp of high voltage measurement */
244 
245 /** data structure declaration of DATA_BLOCK_BALANCING_CONTROL */
246 typedef struct {
247  /* This struct needs to be at the beginning of every database entry. During
248  * the initialization of a database struct, uniqueId must be set to the
249  * respective database entry representation in enum DATA_BLOCK_ID_e. */
250  DATA_BLOCK_HEADER_s header; /*!< Data block header */
251  uint8_t enableBalancing; /*!< Switch for enabling/disabling balancing */
252  uint8_t threshold_mV; /*!< balancing threshold in mV */
253  uint8_t request; /*!< balancing request per CAN */
254  uint8_t balancingState[BS_NR_OF_STRINGS]
255  [BS_NR_OF_CELL_BLOCKS_PER_STRING]; /*!< 0: no balancing, 1: balancing active */
256  uint32_t deltaCharge_mAs[BS_NR_OF_STRINGS]
257  [BS_NR_OF_CELL_BLOCKS_PER_STRING]; /*!< Difference in Depth-of-Discharge in mAs */
258  uint16_t nrBalancedCells[BS_NR_OF_STRINGS];
260 
261 /** data structure declaration of DATA_BLOCK_USER_IO_CONTROL */
262 typedef struct {
263  /* This struct needs to be at the beginning of every database entry. During
264  * the initialization of a database struct, uniqueId must be set to the
265  * respective database entry representation in enum DATA_BLOCK_ID_e. */
266  DATA_BLOCK_HEADER_s header; /*!< Data block header */
267  uint8_t state; /*!< for future use */
268  uint32_t eepromReadAddressToUse; /*!< address to read from for slave EEPROM */
269  uint32_t eepromReadAddressLastUsed; /*!< last address used to read from slave EEPROM */
270  uint32_t eepromWriteAddressToUse; /*!< address to write to for slave EEPROM */
271  uint32_t eepromWriteAddressLastUsed; /*!< last address used to write to for slave EEPROM */
272  uint8_t ioValueOut[BS_NR_OF_MODULES_PER_STRING]; /*!< data to be written to the port expander */
273  uint8_t ioValueIn[BS_NR_OF_MODULES_PER_STRING]; /*!< data read from to the port expander */
274  uint8_t eepromValueWrite[BS_NR_OF_MODULES_PER_STRING]; /*!< data to be written to the slave EEPROM */
275  uint8_t eepromValueRead[BS_NR_OF_MODULES_PER_STRING]; /*!< data read from to the slave EEPROM */
276  uint8_t
277  externalTemperatureSensor[BS_NR_OF_MODULES_PER_STRING]; /*!< temperature from the external sensor on slave */
279 
280 /** data block struct of cell balancing feedback */
281 typedef struct {
282  /* This struct needs to be at the beginning of every database entry. During
283  * the initialization of a database struct, uniqueId must be set to the
284  * respective database entry representation in enum DATA_BLOCK_ID_e. */
285  DATA_BLOCK_HEADER_s header; /*!< Data block header */
286  uint8_t state; /*!< for future use */
287  uint16_t value[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]; /*!< unit: mV (optocoupler output) */
289 
290 /** data block struct of user multiplexer values */
291 typedef struct {
292  /* This struct needs to be at the beginning of every database entry. During
293  * the initialization of a database struct, uniqueId must be set to the
294  * respective database entry representation in enum DATA_BLOCK_ID_e. */
295  DATA_BLOCK_HEADER_s header; /*!< Data block header */
296  uint8_t state; /*!< for future use */
297  uint16_t value[BS_NR_OF_STRINGS][8u * 2u * BS_NR_OF_MODULES_PER_STRING]; /*!< unit: mV (mux voltage input) */
299 
300 /** data block struct of cell open wire */
301 typedef struct {
302  /* This struct needs to be at the beginning of every database entry. During
303  * the initialization of a database struct, uniqueId must be set to the
304  * respective database entry representation in enum DATA_BLOCK_ID_e. */
305  DATA_BLOCK_HEADER_s header; /*!< Data block header */
306  uint8_t state; /*!< for future use */
307  uint16_t nrOpenWires[BS_NR_OF_STRINGS]; /*!< number of open wires */
308  uint8_t openWire[BS_NR_OF_STRINGS]
310  BS_NR_OF_CELL_BLOCKS_PER_MODULE]; /*!< 1 -> open wire, 0 -> everything ok */
312 
313 /** data block struct of GPIO voltage */
314 typedef struct {
315  /* This struct needs to be at the beginning of every database entry. During
316  * the initialization of a database struct, uniqueId must be set to the
317  * respective database entry representation in enum DATA_BLOCK_ID_e. */
318  DATA_BLOCK_HEADER_s header; /*!< Data block header */
319  uint8_t state; /*!< for future use */
320  int16_t gpioVoltages_mV[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_GPIOS_PER_MODULE]; /*!< unit: mV */
321  int16_t gpaVoltages_mV[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING * BS_NR_OF_GPAS_PER_MODULE]; /*!< unit: mV */
322  uint16_t
323  invalidGpioVoltages[BS_NR_OF_STRINGS]
324  [BS_NR_OF_MODULES_PER_STRING]; /*!< bitmask if voltages are valid. 0->valid, 1->invalid */
326 
327 /** data block struct of error flags */
328 typedef struct {
329  /* This struct needs to be at the beginning of every database entry. During
330  * the initialization of a database struct, uniqueId must be set to the
331  * respective database entry representation in enum DATA_BLOCK_ID_e. */
332  DATA_BLOCK_HEADER_s header; /*!< Data block header */
333  bool afeCommunicationCrcError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
334  bool afeSlaveMultiplexerError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
335  bool afeCommunicationSpiError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
336  bool afeConfigurationError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
337  bool afeCellVoltageInvalidError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
338  bool afeCellTemperatureInvalidError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
339  bool baseCellVoltageMeasurementTimeoutError; /*!< false -> no error, true -> error */
340  bool redundancy0CellVoltageMeasurementTimeoutError; /*!< false -> no error, true -> error */
341  bool baseCellTemperatureMeasurementTimeoutError; /*!< false -> no error, true -> error */
342  bool redundancy0CellTemperatureMeasurementTimeoutError; /*!< false -> no error, true -> error */
343  bool currentMeasurementTimeoutError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
344  bool currentMeasurementInvalidError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
345  bool currentSensorVoltage1TimeoutError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
346  bool currentSensorVoltage2TimeoutError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
347  bool currentSensorVoltage3TimeoutError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
348  bool currentSensorPowerTimeoutError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
349  bool currentSensorCoulombCounterTimeoutError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
350  bool currentSensorEnergyCounterTimeoutError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
351  bool powerMeasurementInvalidError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
352  bool mainFuseError; /*!< false -> fuse ok, true -> fuse tripped */
353  bool stringFuseError[BS_NR_OF_STRINGS]; /*!< false -> fuse ok, true -> fuse tripped */
354  bool openWireDetectedError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
355  bool stateRequestTimingViolationError; /*!< false -> no error, true -> error */
356  bool canRxQueueFullError; /*!< false -> no error, true -> error */
357  bool coinCellLowVoltageError; /*!< false -> no error, true -> error */
358  bool plausibilityCheckPackVoltageError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
359  bool plausibilityCheckCellVoltageError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
360  bool plausibilityCheckCellVoltageSpreadError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
361  bool plausibilityCheckCellTemperatureError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
362  bool plausibilityCheckCellTemperatureSpreadError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
363  bool currentSensorNotRespondingError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
364  bool contactorInNegativePathOfStringFeedbackError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
365  bool contactorInPositivePathOfStringFeedbackError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
366  bool prechargeContactorFeedbackError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
367  bool interlockOpenedError; /*!< false -> no error, true -> error */
368  bool insulationMeasurementInvalidError; /*!< false -> no error, true -> error */
369  bool criticalLowInsulationResistanceError; /*!< false -> no critical resistance , true -> critical low resistance */
370  bool warnableLowInsulationResistanceError; /*!< false -> no warnable resistance, true -> warnable low resistance */
371  bool
372  insulationGroundFaultDetectedError; /*!< false -> no insulation fault between HV and chassis detected, true -> insulation fault detected */
373  bool prechargeAbortedDueToVoltage[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
374  bool prechargeAbortedDueToCurrent[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
375  bool deepDischargeDetectedError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
376  bool currentOnOpenStringDetectedError[BS_NR_OF_STRINGS]; /*!< false -> no error, true -> error */
377  bool mcuDieTemperatureViolationError; /*!< false -> no error, true -> error */
378  bool mcuSbcFinError; /*!< false -> no error, true -> error: short-circuit to RSTB */
379  bool mcuSbcRstbError; /*!< false -> no error, true -> error: RSTB not working */
380  bool pexI2cCommunicationError; /*!< the I2C port expander does not work as expected */
381  bool i2cRtcError; /*!< problem in I2C communication with RTC */
382  bool framReadCrcError; /*!< false if read CRC matches with CRC of read data, true otherwise */
383  bool rtcClockIntegrityError; /*!< RTC time integrity not guaranteed, because oscillator has stopped */
384  bool rtcBatteryLowError; /*!< RTC battery voltage is low */
385  bool taskEngineTimingViolationError; /*!< timing violation in engine task */
386  bool task1msTimingViolationError; /*!< timing violation in 1ms task */
387  bool task10msTimingViolationError; /*!< timing violation in 10ms task */
388  bool task100msTimingViolationError; /*!< timing violation in 100ms task */
389  bool task100msAlgoTimingViolationError; /*!< timing violation in 100ms algorithm task */
390  bool alertFlagSetError; /*!< true: ALERT situation detected, false: everything okay */
392 
393 /** data block struct of contactor feedback */
394 typedef struct {
395  /* This struct needs to be at the beginning of every database entry. During
396  * the initialization of a database struct, uniqueId must be set to the
397  * respective database entry representation in enum DATA_BLOCK_ID_e. */
398  DATA_BLOCK_HEADER_s header; /*!< Data block header */
399  uint32_t contactorFeedback; /*!< feedback of all contactors, without interlock */
401 
402 /** data block struct of interlock feedback */
403 typedef struct {
404  /* This struct needs to be at the beginning of every database entry. During
405  * the initialization of a database struct, uniqueId must be set to the
406  * respective database entry representation in enum DATA_BLOCK_ID_e. */
407  DATA_BLOCK_HEADER_s header; /*!< Data block header */
408  uint8_t interlockFeedback_IL_STATE; /*!< feedback of interlock, connected to pin */
409  float_t interlockVoltageFeedback_IL_HS_VS_mV; /*!< voltage feedback of interlock, connected to ADC input 2 */
410  float_t interlockVoltageFeedback_IL_LS_VS_mV; /*!< voltage feedback of interlock, connected to ADC input 3 */
411  float_t interlockCurrentFeedback_IL_HS_CS_mA; /*!< current feedback of interlock, connected to ADC input 4 */
412  float_t interlockCurrentFeedback_IL_LS_CS_mA; /*!< current feedback of interlock, connected to ADC input 5 */
414 
415 /** data block struct of sof limits */
416 typedef struct {
417  /* This struct needs to be at the beginning of every database entry. During
418  * the initialization of a database struct, uniqueId must be set to the
419  * respective database entry representation in enum DATA_BLOCK_ID_e. */
420  DATA_BLOCK_HEADER_s header; /*!< Data block header */
421  float_t recommendedContinuousPackChargeCurrent_mA; /*!< recommended continuous operating pack charge current */
422  float_t
423  recommendedContinuousPackDischargeCurrent_mA; /*!< recommended continuous operating pack discharge current */
424  float_t recommendedPeakPackChargeCurrent_mA; /*!< recommended peak operating pack charge current */
425  float_t recommendedPeakPackDischargeCurrent_mA; /*!< recommended peak operating pack discharge current */
426  float_t recommendedContinuousChargeCurrent_mA
427  [BS_NR_OF_STRINGS]; /*!< recommended continuous operating charge current */
428  float_t recommendedContinuousDischargeCurrent_mA
429  [BS_NR_OF_STRINGS]; /*!< recommended continuous operating discharge current */
430  float_t recommendedPeakChargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< recommended peak operating charge current */
431  float_t recommendedPeakDischargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< recommended peak operating discharge current */
433 
434 /** data block struct of system state */
435 typedef struct {
436  /* This struct needs to be at the beginning of every database entry. During
437  * the initialization of a database struct, uniqueId must be set to the
438  * respective database entry representation in enum DATA_BLOCK_ID_e. */
439  DATA_BLOCK_HEADER_s header; /*!< Data block header */
440  int32_t bmsCanState; /*!< system state for CAN messages (e.g., standby, normal) */
442 
443 /** data block struct of the maximum safe limits */
444 typedef struct {
445  /* This struct needs to be at the beginning of every database entry. During
446  * the initialization of a database struct, uniqueId must be set to the
447  * respective database entry representation in enum DATA_BLOCK_ID_e. */
448  DATA_BLOCK_HEADER_s header; /*!< Data block header */
449  uint8_t packChargeOvercurrent; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
450  uint8_t packDischargeOvercurrent; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
451  uint8_t overVoltage[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
452  uint8_t underVoltage[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
453  uint8_t overtemperatureCharge[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
454  uint8_t overtemperatureDischarge[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
455  uint8_t undertemperatureCharge[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
456  uint8_t undertemperatureDischarge[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
457  uint8_t cellChargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
458  uint8_t stringChargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
459  uint8_t cellDischargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
460  uint8_t stringDischargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
461  uint8_t pcbOvertemperature[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
462  uint8_t pcbUndertemperature[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
464 
465 /** data block struct of the recommended safety limit */
466 typedef struct {
467  /* This struct needs to be at the beginning of every database entry. During
468  * the initialization of a database struct, uniqueId must be set to the
469  * respective database entry representation in enum DATA_BLOCK_ID_e. */
470  DATA_BLOCK_HEADER_s header; /*!< Data block header */
471  uint8_t overVoltage[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
472  uint8_t underVoltage[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
473  uint8_t overtemperatureCharge[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
474  uint8_t overtemperatureDischarge[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
475  uint8_t undertemperatureCharge[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
476  uint8_t undertemperatureDischarge[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
477  uint8_t cellChargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
478  uint8_t stringChargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
479  uint8_t cellDischargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
480  uint8_t stringDischargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
481  uint8_t pcbOvertemperature[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
482  uint8_t pcbUndertemperature[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
484 
485 /** data block struct of the maximum operating limit */
486 typedef struct {
487  /* This struct needs to be at the beginning of every database entry. During
488  * the initialization of a database struct, uniqueId must be set to the
489  * respective database entry representation in enum DATA_BLOCK_ID_e. */
490  DATA_BLOCK_HEADER_s header; /*!< Data block header */
491  uint8_t overVoltage[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
492  uint8_t underVoltage[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
493  uint8_t overtemperatureCharge[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
494  uint8_t overtemperatureDischarge[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
495  uint8_t undertemperatureCharge[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
496  uint8_t undertemperatureDischarge[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
497  uint8_t cellChargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
498  uint8_t stringChargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
499  uint8_t cellDischargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
500  uint8_t stringDischargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
501  uint8_t pcbOvertemperature[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
502  uint8_t pcbUndertemperature[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
504 
505 /** data block struct of sox */
506 typedef struct {
507  /* This struct needs to be at the beginning of every database entry. During
508  * the initialization of a database struct, uniqueId must be set to the
509  * respective database entry representation in enum DATA_BLOCK_ID_e. */
510  DATA_BLOCK_HEADER_s header; /*!< Data block header */
511  float_t averageSoc_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= averageSoc <= 100.0 */
512  float_t minimumSoc_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= minSoc <= 100.0 */
513  float_t maximumSoc_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= maxSoc <= 100.0 */
514  float_t averageSoe_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= averageSoe <= 100.0 */
515  float_t minimumSoe_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= minimumSoe <= 100.0 */
516  float_t maximumSoe_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= maximumSoe <= 100.0 */
517  float_t averageSoh_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= averageSoh <= 100.0 */
518  float_t minimumSoh_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= minimumSoh <= 100.0 */
519  float_t maximumSoh_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= maximumSoh <= 100.0 */
520  uint32_t maximumSoe_Wh[BS_NR_OF_STRINGS]; /*!< maximum string energy in Wh */
521  uint32_t averageSoe_Wh[BS_NR_OF_STRINGS]; /*!< average string energy in Wh */
522  uint32_t minimumSoe_Wh[BS_NR_OF_STRINGS]; /*!< minimum string energy in Wh */
524 
525 /** data block struct of can state request */
526 typedef struct {
527  /* This struct needs to be at the beginning of every database entry. During
528  * the initialization of a database struct, uniqueId must be set to the
529  * respective database entry representation in enum DATA_BLOCK_ID_e. */
530  DATA_BLOCK_HEADER_s header; /*!< Data block header */
531  uint8_t stateRequestViaCan; /*!< state request */
532  uint8_t previousStateRequestViaCan; /*!< previous state request */
533  uint8_t stateRequestViaCanPending; /*!< pending state request */
534  uint8_t stateCounter; /*!< counts state updates */
536 
537 /** data block struct of the moving average algorithm */
538 typedef struct {
539  /* This struct needs to be at the beginning of every database entry. During
540  * the initialization of a database struct, uniqueId must be set to the
541  * respective database entry representation in enum DATA_BLOCK_ID_e. */
542  DATA_BLOCK_HEADER_s header; /*!< Data block header */
543  float_t movingAverageCurrent1sInterval_mA; /*!< current moving average over the last 1s */
544  float_t movingAverageCurrent5sInterval_mA; /*!< current moving average over the last 5s */
545  float_t movingAverageCurrent10sInterval_mA; /*!< current moving average over the last 10s */
546  float_t movingAverageCurrent30sInterval_mA; /*!< current moving average over the last 30s */
547  float_t movingAverageCurrent60sInterval_mA; /*!< current moving average over the last 60s */
548  float_t movingAverageCurrentConfigurableInterval_mA; /*!< current moving average over the last configured time */
549  float_t movingAveragePower1sInterval_mA; /*!< power moving average over the last 1s */
550  float_t movingAveragePower5sInterval_mA; /*!< power moving average over the last 5s */
551  float_t movingAveragePower10sInterval_mA; /*!< power moving average over the last 10s */
552  float_t movingAveragePower30sInterval_mA; /*!< power moving average over the last 30s */
553  float_t movingAveragePower60sInterval_mA; /*!< power moving average over the last 60s */
554  float_t movingAveragePowerConfigurableInterval_mA; /*!< power moving average over the last configured time */
556 
557 /** data block struct of insulation monitoring device measurement */
558 typedef struct {
559  /* This struct needs to be at the beginning of every database entry. During
560  * the initialization of a database struct, uniqueId must be set to the
561  * respective database entry representation in enum DATA_BLOCK_ID_e. */
562  DATA_BLOCK_HEADER_s header; /*!< Data block header */
563  bool isImdRunning; /*!< true -> Insulation resistance measurement active, false -> not active */
564  bool isInsulationMeasurementValid; /*!< true -> resistance value valid, false -> resistance unreliable */
565  uint32_t insulationResistance_kOhm; /*!< insulation resistance measured in kOhm */
566  bool
567  areDeviceFlagsValid; /*!< true -> flags below this database entry valid, false -> flags unreliable e.g. if device error detected */
568  bool
569  dfIsCriticalResistanceDetected; /*!< device status flag: false -> resistance value okay, true -> resistance value too low/error */
570  bool dfIsWarnableResistanceDetected; /*!< true: warning threshold violated, false: no warning active */
571  bool dfIsChassisFaultDetected; /*!< true: short between HV potential and chassis detected, false: no error */
572  bool dfIsChassisShortToHvPlus; /*!< true: bias/tendency to the location of the insulation fault to HV plus */
573  bool dfIsChassisShortToHvMinus; /*!< true: bias/tendency to the location of the insulation fault to HV minus */
574  bool dfIsDeviceErrorDetected; /*!< true: device error detected, false: no error detected */
575  bool dfIsMeasurementUpToDate; /*!< true: measurement up to-date, false: outdated */
577 
578 /** data block struct for the I2C humidity/temperature sensor */
579 typedef struct {
580  /* This struct needs to be at the beginning of every database entry. During
581  * the initialization of a database struct, uniqueId must be set to the
582  * respective database entry representation in enum DATA_BLOCK_ID_e. */
583  DATA_BLOCK_HEADER_s header; /*!< Data block header */
585  uint8_t humidity_perc;
587 
588 /** data block struct of internal ADC voltage measurement */
589 typedef struct {
590  /* This struct needs to be at the beginning of every database entry. During
591  * the initialization of a database struct, uniqueId must be set to the
592  * respective database entry representation in enum DATA_BLOCK_ID_e. */
593  DATA_BLOCK_HEADER_s header; /*!< Data block header */
594  float_t adc1ConvertedVoltages_mV[MCU_ADC1_MAX_NR_CHANNELS]; /*!< voltages measured by the internal ADC ADC1 */
596 
597 /** data block struct for the database built-in self-test */
598 typedef struct {
599  /* This struct needs to be at the beginning of every database entry. During
600  * the initialization of a database struct, uniqueId must be set to the
601  * respective database entry representation in enum DATA_BLOCK_ID_e. */
602  DATA_BLOCK_HEADER_s header; /*!< Data block header */
603  uint8_t member1; /*!< first member of self-test struct */
604  uint8_t member2; /*!< second member of self-test struct */
606 
607 /** array for the database */
609 
610 /*========== Extern Constant and Variable Declarations ======================*/
611 
612 /*========== Extern Function Prototypes =====================================*/
613 
614 /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/
615 #ifdef UNITY_UNIT_TEST
616 #endif
617 
618 #endif /* FOXBMS__DATABASE_CFG_H_ */
Configuration of the battery system (e.g., number of battery modules, battery cells,...
#define BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR
number of high voltage inputs measured by current sensors (like IVT-MOD)
#define BS_NR_OF_CELL_BLOCKS_PER_MODULE
number of cells per module
#define BS_NR_OF_STRINGS
Number of parallel strings in the battery pack.
#define BS_NR_OF_GPIOS_PER_MODULE
Defines the number of GPIOs.
#define BS_NR_OF_CELL_BLOCKS_PER_STRING
#define BS_NR_OF_MODULES_PER_STRING
number of modules in a string
#define BS_NR_OF_TEMP_SENSORS_PER_STRING
#define BS_NR_OF_GPAS_PER_MODULE
Defines the number of GPA inputs.
DATA_BLOCK_ID_e
Definition: database_cfg.h:78
@ DATA_BLOCK_ID_CELL_VOLTAGE_REDUNDANCY0
Definition: database_cfg.h:102
@ DATA_BLOCK_ID_OPEN_WIRE_REDUNDANCY0
Definition: database_cfg.h:106
@ DATA_BLOCK_ID_INTERLOCK_FEEDBACK
Definition: database_cfg.h:91
@ DATA_BLOCK_ID_BALANCING_CONTROL
Definition: database_cfg.h:83
@ DATA_BLOCK_ID_MIN_MAX
Definition: database_cfg.h:81
@ DATA_BLOCK_ID_ALL_GPIO_VOLTAGES_REDUNDANCY0
Definition: database_cfg.h:105
@ DATA_BLOCK_ID_USER_MUX
Definition: database_cfg.h:86
@ DATA_BLOCK_ID_SOX
Definition: database_cfg.h:97
@ DATA_BLOCK_ID_DUMMY_FOR_SELF_TEST
Definition: database_cfg.h:111
@ DATA_BLOCK_ID_ERROR_STATE
Definition: database_cfg.h:89
@ DATA_BLOCK_ID_RSL_FLAG
Definition: database_cfg.h:95
@ DATA_BLOCK_ID_INSULATION_MONITORING
Definition: database_cfg.h:107
@ DATA_BLOCK_ID_SYSTEM_STATE
Definition: database_cfg.h:93
@ DATA_BLOCK_ID_STATE_REQUEST
Definition: database_cfg.h:98
@ DATA_BLOCK_ID_CELL_VOLTAGE
Definition: database_cfg.h:79
@ DATA_BLOCK_ID_MOVING_AVERAGE
Definition: database_cfg.h:99
@ DATA_BLOCK_ID_CELL_TEMPERATURE_REDUNDANCY0
Definition: database_cfg.h:103
@ DATA_BLOCK_ID_CELL_TEMPERATURE_BASE
Definition: database_cfg.h:101
@ DATA_BLOCK_ID_CURRENT_SENSOR
Definition: database_cfg.h:82
@ DATA_BLOCK_ID_MAX
Definition: database_cfg.h:112
@ DATA_BLOCK_ID_OPEN_WIRE_BASE
Definition: database_cfg.h:87
@ DATA_BLOCK_ID_SLAVE_CONTROL
Definition: database_cfg.h:84
@ DATA_BLOCK_ID_CONTACTOR_FEEDBACK
Definition: database_cfg.h:90
@ DATA_BLOCK_ID_SOF
Definition: database_cfg.h:92
@ DATA_BLOCK_ID_ADC_VOLTAGE
Definition: database_cfg.h:110
@ DATA_BLOCK_ID_CELL_VOLTAGE_BASE
Definition: database_cfg.h:100
@ DATA_BLOCK_ID_MSL_FLAG
Definition: database_cfg.h:94
@ DATA_BLOCK_ID_HTSEN
Definition: database_cfg.h:109
@ DATA_BLOCK_ID_ALL_GPIO_VOLTAGES_BASE
Definition: database_cfg.h:88
@ DATA_BLOCK_ID_PACK_VALUES
Definition: database_cfg.h:108
@ DATA_BLOCK_ID_BALANCING_FEEDBACK_BASE
Definition: database_cfg.h:85
@ DATA_BLOCK_ID_MOL_FLAG
Definition: database_cfg.h:96
@ DATA_BLOCK_ID_BALANCING_FEEDBACK_REDUNDANCY0
Definition: database_cfg.h:104
@ DATA_BLOCK_ID_CELL_TEMPERATURE
Definition: database_cfg.h:80
DATA_BASE_s data_database[DATA_BLOCK_ID_MAX]
channel configuration of database (data blocks)
Definition: database_cfg.c:179
FAS_STATIC_ASSERT((int16_t) DATA_BLOCK_ID_MAX< UINT8_MAX, "Maximum number of database entries exceeds UINT8_MAX; adapted length " "checking in DATA_Initialize and DATA_IterateOverDatabaseEntries")
Headers for the driver for the MCU module.
#define MCU_ADC1_MAX_NR_CHANNELS
maximum number of channels measured by the ADC1
Definition: mcu.h:75
uint32_t dataLength
Definition: database_cfg.h:74
void * pDatabaseEntry
Definition: database_cfg.h:73
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:593
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:318
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:250
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:285
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:149
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:132
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:398
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:214
bool baseCellTemperatureMeasurementTimeoutError
Definition: database_cfg.h:341
bool redundancy0CellTemperatureMeasurementTimeoutError
Definition: database_cfg.h:342
bool redundancy0CellVoltageMeasurementTimeoutError
Definition: database_cfg.h:340
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:332
bool baseCellVoltageMeasurementTimeoutError
Definition: database_cfg.h:339
uint32_t previousTimestamp
Definition: database_cfg.h:124
DATA_BLOCK_ID_e uniqueId
Definition: database_cfg.h:122
int16_t temperature_ddegC
Definition: database_cfg.h:584
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:583
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:407
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:162
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:490
float_t movingAverageCurrentConfigurableInterval_mA
Definition: database_cfg.h:548
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:542
float_t movingAverageCurrent30sInterval_mA
Definition: database_cfg.h:546
float_t movingAverageCurrent10sInterval_mA
Definition: database_cfg.h:545
float_t movingAveragePowerConfigurableInterval_mA
Definition: database_cfg.h:554
float_t movingAverageCurrent60sInterval_mA
Definition: database_cfg.h:547
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:448
uint8_t packDischargeOvercurrent
Definition: database_cfg.h:450
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:305
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:190
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:470
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:266
float_t recommendedPeakPackChargeCurrent_mA
Definition: database_cfg.h:424
float_t recommendedContinuousPackChargeCurrent_mA
Definition: database_cfg.h:421
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:420
float_t recommendedContinuousPackDischargeCurrent_mA
Definition: database_cfg.h:423
float_t recommendedPeakPackDischargeCurrent_mA
Definition: database_cfg.h:425
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:510
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:530
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:439
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:295