foxBMS  1.4.0
The foxBMS Battery Management System API Documentation
database_cfg.h
Go to the documentation of this file.
1 /**
2  *
3  * @copyright © 2010 - 2022, 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 2022-07-28 (date of last update)
47  * @version v1.4.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 #include "general.h"
62 
63 #include "battery_system_cfg.h"
64 
65 #include "mcu.h"
66 
67 /*========== Macros and Definitions =========================================*/
68 /** configuration struct of database channel (data block) */
69 typedef struct {
70  void *pDatabaseEntry; /*!< pointer to the database entry */
71  uint32_t dataLength; /*!< length of the entry */
72 } DATA_BASE_s;
73 
74 /** data block identification numbers */
75 typedef enum {
109  DATA_BLOCK_ID_MAX, /**< DO NOT CHANGE, MUST BE THE LAST ENTRY */
111 
113  (int16_t)DATA_BLOCK_ID_MAX < UINT8_MAX,
114  "Maximum number of database entries exceeds UINT8_MAX; adapted length "
115  "checking in DATA_Initialize and DATA_IterateOverDatabaseEntries");
116 
117 /** data block header */
118 typedef struct {
119  DATA_BLOCK_ID_e uniqueId; /*!< uniqueId of database entry */
120  uint32_t timestamp; /*!< timestamp of last database update */
121  uint32_t previousTimestamp; /*!< timestamp of previous database update */
123 
124 /** data block struct of cell voltage */
125 typedef struct {
126  /* This struct needs to be at the beginning of every database entry. During
127  * the initialization of a database struct, uniqueId must be set to the
128  * respective database entry representation in enum DATA_BLOCK_ID_e. */
129  DATA_BLOCK_HEADER_s header; /*!< Data block header */
130  uint8_t state; /*!< for future use */
131  int32_t packVoltage_mV[BS_NR_OF_STRINGS]; /*!< uint: mV */
132  int16_t cellVoltage_mV[BS_NR_OF_STRINGS][BS_NR_OF_CELL_BLOCKS_PER_STRING]; /*!< unit: mV */
133  uint64_t
134  invalidCellVoltage[BS_NR_OF_STRINGS]
135  [BS_NR_OF_MODULES_PER_STRING]; /*!< bitmask if voltages are valid. 0->valid, 1->invalid */
136  uint16_t nrValidCellVoltages[BS_NR_OF_STRINGS]; /*!< number of valid voltages */
137  uint32_t moduleVoltage_mV[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]; /*!< unit: mV */
138  bool validModuleVoltage[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]; /*!< 0 -> if PEC okay; 1 -> PEC error */
140 
141 /** data block struct of cell temperatures */
142 typedef struct {
143  /* This struct needs to be at the beginning of every database entry. During
144  * the initialization of a database struct, uniqueId must be set to the
145  * respective database entry representation in enum DATA_BLOCK_ID_e. */
146  DATA_BLOCK_HEADER_s header; /*!< Data block header */
147  uint8_t state; /*!< for future use */
148  int16_t cellTemperature_ddegC[BS_NR_OF_STRINGS][BS_NR_OF_TEMP_SENSORS_PER_STRING]; /*!< unit: deci &deg;C */
149  uint16_t invalidCellTemperature
150  [BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]; /*!< bitmask if temperatures are valid. 0->valid, 1->invalid */
151  uint16_t nrValidTemperatures[BS_NR_OF_STRINGS]; /*!< number of valid temperatures in each string */
153 
154 /** data block struct of minimum and maximum values */
155 typedef struct {
156  /* This struct needs to be at the beginning of every database entry. During
157  * the initialization of a database struct, uniqueId must be set to the
158  * respective database entry representation in enum DATA_BLOCK_ID_e. */
159  DATA_BLOCK_HEADER_s header; /*!< Data block header */
160 
161  int16_t averageCellVoltage_mV[BS_NR_OF_STRINGS]; /*!< average cell voltages, unit: mV */
162  int16_t minimumCellVoltage_mV[BS_NR_OF_STRINGS]; /*!< minimum cell voltages, unit: mV */
163  int16_t previousMinimumCellVoltage_mV[BS_NR_OF_STRINGS]; /*!< previous minimum cell voltages, unit: mV */
164  int16_t maximumCellVoltage_mV[BS_NR_OF_STRINGS]; /*!< maximum cell voltages, unit: mV */
165  int16_t previousMaximumCellVoltage_mV[BS_NR_OF_STRINGS]; /*!< previous maximum cell voltages, unit: mV */
166  uint16_t nrModuleMinimumCellVoltage[BS_NR_OF_STRINGS]; /*!< number of the module with minimum cell voltage */
167  uint16_t nrCellMinimumCellVoltage[BS_NR_OF_STRINGS]; /*!< number of the cell with minimum cell voltage */
168  uint16_t nrModuleMaximumCellVoltage[BS_NR_OF_STRINGS]; /*!< number of the module with maximum cell voltage */
169  uint16_t nrCellMaximumCellVoltage[BS_NR_OF_STRINGS]; /*!< number of the cell with maximum cell voltage */
170  uint16_t validMeasuredCellVoltages[BS_NR_OF_STRINGS]; /*!< number of valid measured cell voltages */
171  float averageTemperature_ddegC[BS_NR_OF_STRINGS]; /*!< unit: deci &deg;C */
172  int16_t minimumTemperature_ddegC[BS_NR_OF_STRINGS]; /*!< unit: deci &deg;C */
173  uint16_t nrModuleMinimumTemperature[BS_NR_OF_STRINGS]; /*!< number of the module with minimum temperature */
174  uint16_t nrSensorMinimumTemperature[BS_NR_OF_STRINGS]; /*!< number of the sensor with minimum temperature */
175  int16_t maximumTemperature_ddegC[BS_NR_OF_STRINGS]; /*!< unit: deci &deg;C */
176  uint16_t nrModuleMaximumTemperature[BS_NR_OF_STRINGS]; /*!< number of the module with maximum temperature */
177  uint16_t nrSensorMaximumTemperature[BS_NR_OF_STRINGS]; /*!< number of the sensor with maximum temperature */
178  uint16_t validMeasuredCellTemperatures[BS_NR_OF_STRINGS]; /*!< number of valid measured cell temperatures */
179  uint8_t state; /*!< state of the min max module */
181 
182 /** data block struct of pack measurement values */
183 typedef struct {
184  /* This struct needs to be at the beginning of every database entry. During
185  * the initialization of a database struct, uniqueId must be set to the
186  * respective database entry representation in enum DATA_BLOCK_ID_e. */
187  DATA_BLOCK_HEADER_s header; /*!< Data block header */
188 
189  int32_t packCurrent_mA; /*!< current in the whole battery pack, unit: mA */
190  uint8_t invalidPackCurrent; /*!< bitmask if current is valid. 0->valid, 1->invalid */
191  int32_t batteryVoltage_mV; /*!< voltage between negative and positive battery pole, unit: mV */
192  uint8_t invalidBatteryVoltage; /*!< bitmask if voltage is valid. 0->valid, 1->invalid */
193  int32_t
194  highVoltageBusVoltage_mV; /*!< voltage between negative battery pole and after positive main contactor, unit: mV */
195  uint8_t invalidHvBusVoltage; /*!< bitmask if voltage is valid. 0->valid, 1->invalid */
196  int32_t packPower_W; /*!< power provided by respectively supplied to the battery pack, unit: W */
197  uint8_t invalidPackPower; /*!< bitmask if power is valid. 0->valid, 1->invalid */
198  int32_t stringVoltage_mV[BS_NR_OF_STRINGS]; /*!< voltage of each string, unit: mV */
199  uint8_t invalidStringVoltage[BS_NR_OF_STRINGS]; /*!< bitmask if voltages are valid. 0->valid, 1->invalid */
200  int32_t stringCurrent_mA[BS_NR_OF_STRINGS]; /*!< current in each string, unit: mA */
201  uint8_t invalidStringCurrent[BS_NR_OF_STRINGS]; /*!< bitmask if currents are valid. 0->valid, 1->invalid */
202  int32_t stringPower_W[BS_NR_OF_STRINGS]; /*!< power of each string, unit: W */
203  uint8_t invalidStringPower[BS_NR_OF_STRINGS]; /*!< bitmask if power values are valid. 0->valid, 1->invalid */
205 
206 /** data block struct of current measurement */
207 typedef struct {
208  /* This struct needs to be at the beginning of every database entry. During
209  * the initialization of a database struct, uniqueId must be set to the
210  * respective database entry representation in enum DATA_BLOCK_ID_e. */
211  DATA_BLOCK_HEADER_s header; /*!< Data block header */
212  int32_t current_mA[BS_NR_OF_STRINGS]; /*!< unit: mA */
213  uint8_t invalidCurrentMeasurement[BS_NR_OF_STRINGS]; /*!< 0: measurement valid, 1: measurement invalid */
214  uint8_t newCurrent; /*!< 0: measurement valid, 1: measurement invalid */
215  uint32_t previousTimestampCurrent[BS_NR_OF_STRINGS]; /*!< timestamp of current measurement */
216  uint32_t timestampCurrent[BS_NR_OF_STRINGS]; /*!< timestamp of current measurement */
217  int32_t sensorTemperature_ddegC[BS_NR_OF_STRINGS]; /*!< unit: 0.1&deg;C */
218  uint8_t invalidSensorTemperatureMeasurement[BS_NR_OF_STRINGS]; /*!< 0: measurement valid, 1: measurement invalid */
219  int32_t power_W[BS_NR_OF_STRINGS]; /*!< unit: W */
220  uint8_t invalidPowerMeasurement[BS_NR_OF_STRINGS]; /*!< 0: measurement valid, 1: measurement invalid */
221  uint8_t newPower; /*!< counter that indicates a new power measurement */
222  uint32_t previousTimestampPower[BS_NR_OF_STRINGS]; /*!< previous timestamp of power measurement */
223  uint32_t timestampPower[BS_NR_OF_STRINGS]; /*!< timestamp of power measurement */
224  int32_t currentCounter_As[BS_NR_OF_STRINGS]; /*!< unit: A.s */
225  uint8_t invalidCurrentCountingMeasurement[BS_NR_OF_STRINGS]; /*!< 0: measurement valid, 1: measurement invalid */
226  uint32_t previousTimestampCurrentCounting[BS_NR_OF_STRINGS]; /*!< previous timestamp of CC measurement */
227  uint32_t timestampCurrentCounting[BS_NR_OF_STRINGS]; /*!< timestamp of CC measurement */
228  int32_t energyCounter_Wh[BS_NR_OF_STRINGS]; /*!< unit: Wh */
229  uint8_t invalidEnergyCountingMeasurement[BS_NR_OF_STRINGS]; /*!< 0: measurement valid, 1: measurement invalid */
230  uint32_t previousTimestampEnergyCounting[BS_NR_OF_STRINGS]; /*!< previous timestamp of EC measurement */
231  uint32_t timestampEnergyCounting[BS_NR_OF_STRINGS]; /*!< timestamp of EC measurement */
232  uint8_t invalidHighVoltageMeasurement
233  [BS_NR_OF_STRINGS][BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]; /*!< 0: measurement valid, 1: measurement invalid */
234  int32_t highVoltage_mV[BS_NR_OF_STRINGS][BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]; /*!< unit: mV */
235  uint32_t previousTimestampHighVoltage
237  [BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]; /*!< previous timestamp of high voltage measurement */
238  uint32_t timestampHighVoltage[BS_NR_OF_STRINGS]
239  [BS_NR_OF_VOLTAGES_FROM_CURRENT_SENSOR]; /*!< timestamp of high voltage measurement */
241 
242 /** data structure declaration of DATA_BLOCK_BALANCING_CONTROL */
243 typedef struct {
244  /* This struct needs to be at the beginning of every database entry. During
245  * the initialization of a database struct, uniqueId must be set to the
246  * respective database entry representation in enum DATA_BLOCK_ID_e. */
247  DATA_BLOCK_HEADER_s header; /*!< Data block header */
248  uint8_t enableBalancing; /*!< Switch for enabling/disabling balancing */
249  uint8_t threshold_mV; /*!< balancing threshold in mV */
250  uint8_t request; /*!< balancing request per CAN */
251  uint8_t balancingState[BS_NR_OF_STRINGS]
252  [BS_NR_OF_CELL_BLOCKS_PER_STRING]; /*!< 0: no balancing, 1: balancing active */
253  uint32_t deltaCharge_mAs[BS_NR_OF_STRINGS]
254  [BS_NR_OF_CELL_BLOCKS_PER_STRING]; /*!< Difference in Depth-of-Discharge in mAs */
255  uint16_t nrBalancedCells[BS_NR_OF_STRINGS];
257 
258 /** data structure declaration of DATA_BLOCK_USER_IO_CONTROL */
259 typedef struct {
260  /* This struct needs to be at the beginning of every database entry. During
261  * the initialization of a database struct, uniqueId must be set to the
262  * respective database entry representation in enum DATA_BLOCK_ID_e. */
263  DATA_BLOCK_HEADER_s header; /*!< Data block header */
264  uint8_t state; /*!< for future use */
265  uint32_t eepromReadAddressToUse; /*!< address to read from for slave EEPROM */
266  uint32_t eepromReadAddressLastUsed; /*!< last address used to read fromfor slave EEPROM */
267  uint32_t eepromWriteAddressToUse; /*!< address to write to for slave EEPROM */
268  uint32_t eepromWriteAddressLastUsed; /*!< last address used to write to for slave EEPROM */
269  uint8_t ioValueOut[BS_NR_OF_MODULES_PER_STRING]; /*!< data to be written to the port expander */
270  uint8_t ioValueIn[BS_NR_OF_MODULES_PER_STRING]; /*!< data read from to the port expander */
271  uint8_t eepromValueWrite[BS_NR_OF_MODULES_PER_STRING]; /*!< data to be written to the slave EEPROM */
272  uint8_t eepromValueRead[BS_NR_OF_MODULES_PER_STRING]; /*!< data read from to the slave EEPROM */
273  uint8_t
274  externalTemperatureSensor[BS_NR_OF_MODULES_PER_STRING]; /*!< temperature from the external sensor on slave */
276 
277 /** data block struct of cell balancing feedback */
278 typedef struct {
279  /* This struct needs to be at the beginning of every database entry. During
280  * the initialization of a database struct, uniqueId must be set to the
281  * respective database entry representation in enum DATA_BLOCK_ID_e. */
282  DATA_BLOCK_HEADER_s header; /*!< Data block header */
283  uint8_t state; /*!< for future use */
284  uint16_t value[BS_NR_OF_STRINGS][BS_NR_OF_MODULES_PER_STRING]; /*!< unit: mV (optocoupler output) */
286 
287 /** data block struct of user multiplexer values */
288 typedef struct {
289  /* This struct needs to be at the beginning of every database entry. During
290  * the initialization of a database struct, uniqueId must be set to the
291  * respective database entry representation in enum DATA_BLOCK_ID_e. */
292  DATA_BLOCK_HEADER_s header; /*!< Data block header */
293  uint8_t state; /*!< for future use */
294  uint16_t value[BS_NR_OF_STRINGS][8u * 2u * BS_NR_OF_MODULES_PER_STRING]; /*!< unit: mV (mux voltage input) */
296 
297 /** data block struct of cell open wire */
298 typedef struct {
299  /* This struct needs to be at the beginning of every database entry. During
300  * the initialization of a database struct, uniqueId must be set to the
301  * respective database entry representation in enum DATA_BLOCK_ID_e. */
302  DATA_BLOCK_HEADER_s header; /*!< Data block header */
303  uint8_t state; /*!< for future use */
304  uint16_t nrOpenWires[BS_NR_OF_STRINGS]; /*!< number of open wires */
305  uint8_t openwire[BS_NR_OF_STRINGS]
307  (BS_NR_OF_CELL_BLOCKS_PER_MODULE + 1u)]; /*!< 1 -> open wire, 0 -> everything ok */
309 
310 /** data block struct of GPIO voltage */
311 typedef struct {
312  /* This struct needs to be at the beginning of every database entry. During
313  * the initialization of a database struct, uniqueId must be set to the
314  * respective database entry representation in enum DATA_BLOCK_ID_e. */
315  DATA_BLOCK_HEADER_s header; /*!< Data block header */
316  uint8_t state; /*!< for future use */
317  uint16_t gpioVoltages_mV[BS_NR_OF_STRINGS]
319  uint16_t
320  invalidGpioVoltages[BS_NR_OF_STRINGS]
321  [BS_NR_OF_MODULES_PER_STRING]; /*!< bitmask if voltages are valid. 0->valid, 1->invalid */
323 
324 /** data block struct of error flags */
325 typedef struct {
326  /* This struct needs to be at the beginning of every database entry. During
327  * the initialization of a database struct, uniqueId must be set to the
328  * respective database entry representation in enum DATA_BLOCK_ID_e. */
329  DATA_BLOCK_HEADER_s header; /*!< Data block header */
330  uint8_t currentSensor[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error, not responding */
331  uint8_t stringContactor[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error, not responding */
332  uint8_t prechargeContactor[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error, not responding */
333  uint8_t interlock; /*!< 0 -> no error, 1 -> error */
334  uint8_t crcError[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error */
335  uint8_t muxError[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error */
336  uint8_t spiError[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error */
337  uint8_t afeConfigurationError[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error */
338  uint8_t afeCellVoltageError[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error */
339  uint8_t afeCellTemperatureError[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error */
340  uint8_t baseCellVoltageMeasurementTimeout; /*!< 0 -> no error, 1 -> error */
341  uint8_t redundancy0CellVoltageMeasurementTimeout; /*!< 0 -> no error, 1 -> error */
342  uint8_t baseCellTemperatureMeasurementTimeout; /*!< 0 -> no error, 1 -> error */
343  uint8_t redundancy0CellTemperatureMeasurementTimeout; /*!< 0 -> no error, 1 -> error */
344  uint8_t currentMeasurementTimeout[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error */
345  uint8_t currentMeasurementError[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error */
346  uint8_t currentSensorTimeoutV1[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error */
347  uint8_t currentSensorTimeoutV3[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error */
348  uint8_t currentSensorPowerTimeout[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error */
349  uint8_t powerMeasurementError[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error */
350  bool insulationMeasurementValid; /*!< false -> not valid, true -> valid */
351  bool
352  criticalLowInsulationResistance; /*!< false -> no critical resistance measured, true -> critical low resistance measured */
353  bool
354  warnableLowInsulationResistance; /*!< false -> no warnable resistance measured, true -> warnable low resistance measured */
355  bool
356  insulationGroundFaultDetected; /*!< false -> no insulation fault between HV and chassis detected, true -> insulation fault detected */
357  uint8_t fuseStateNormal[BS_NR_OF_STRINGS]; /*!< 0 -> fuse ok, 1 -> fuse tripped */
358  uint8_t fuseStateCharge[BS_NR_OF_STRINGS]; /*!< 0 -> fuse ok, 1 -> fuse tripped */
359  uint8_t open_wire[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error */
360  uint8_t canTiming; /*!< 0 -> no error, 1 -> error */
361  uint8_t canRxQueueFull; /*!< 0 -> no error, 1 -> error */
362  uint8_t canTimingCc[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error */
363  uint8_t canTimingEc[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error */
364  uint8_t mcuDieTemperature; /*!< 0 -> no error, 1 -> error */
365  uint8_t coinCellVoltage; /*!< 0 -> no error, 1 -> error */
366  uint8_t plausibilityCheckPackvoltage[BS_NR_OF_STRINGS]; /*!< 0 -> no error, else: error */
367  uint8_t plausibilityCheckCellVoltage[BS_NR_OF_STRINGS]; /*!< 0 -> no error, else: error */
368  uint8_t plausibilityCheckCellVoltageSpread[BS_NR_OF_STRINGS]; /*!< 0 -> no error, else: error */
369  uint8_t plausibilityCheckCelltemperatureSpread[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error */
370  uint8_t plausibilityCheckCelltemperature[BS_NR_OF_STRINGS]; /*!< 0 -> no error, else: error */
371  uint8_t deepDischargeDetected[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error */
372  uint8_t currentOnOpenString[BS_NR_OF_STRINGS]; /*!< 0 -> no error, 1 -> error */
373  uint8_t sbcFinState; /*!< 0 -> okay, 1 -> error: short-circuit to RSTB */
374  uint8_t sbcRstbState; /*!< 0 -> okay, 1 -> error: RSTB not working */
375  uint8_t i2cPexError; /*!< the I2C port expander does not work as expected */
376  uint8_t framReadCrcError; /*!< 0 if read CRC matches with CRC of read data , 1 otherwise */
377  bool timingViolationEngine; /*!< timing violation in engine task */
378  bool timingViolation1ms; /*!< timing violation in 1ms task */
379  bool timingViolation10ms; /*!< timing violation in 10ms task */
380  bool timingViolation100ms; /*!< timing violation in 100ms task */
381  bool timingViolation100msAlgo; /*!< timing violation in 100ms algorithm task */
383 
384 /** data block struct of contactor feedback */
385 typedef struct {
386  /* This struct needs to be at the beginning of every database entry. During
387  * the initialization of a database struct, uniqueId must be set to the
388  * respective database entry representation in enum DATA_BLOCK_ID_e. */
389  DATA_BLOCK_HEADER_s header; /*!< Data block header */
390  uint32_t contactorFeedback; /*!< feedback of all contactors, without interlock */
392 
393 /** data block struct of interlock 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  uint8_t interlockFeedback_IL_STATE; /*!< feedback of interlock, connected to pin */
400  float interlockVoltageFeedback_IL_HS_VS_mV; /*!< voltage feedback of interlock, connected to ADC input 2 */
401  float interlockVoltageFeedback_IL_LS_VS_mV; /*!< voltage feedback of interlock, connected to ADC input 3 */
402  float interlockCurrentFeedback_IL_HS_CS_mA; /*!< current feedback of interlock, connected to ADC input 4 */
403  float interlockCurrentFeedback_IL_LS_CS_mA; /*!< current feedback of interlock, connected to ADC input 5 */
405 
406 /** data block struct of sof limits */
407 typedef struct {
408  /* This struct needs to be at the beginning of every database entry. During
409  * the initialization of a database struct, uniqueId must be set to the
410  * respective database entry representation in enum DATA_BLOCK_ID_e. */
411  DATA_BLOCK_HEADER_s header; /*!< Data block header */
412  float recommendedContinuousPackChargeCurrent_mA; /*!< recommended continuous operating pack charge current */
413  float recommendedContinuousPackDischargeCurrent_mA; /*!< recommended continuous operating pack discharge current */
414  float recommendedPeakPackChargeCurrent_mA; /*!< recommended peak operating pack charge current */
415  float recommendedPeakPackDischargeCurrent_mA; /*!< recommended peak operating pack discharge current */
416  float recommendedContinuousChargeCurrent_mA
417  [BS_NR_OF_STRINGS]; /*!< recommended continuous operating charge current */
418  float recommendedContinuousDischargeCurrent_mA
419  [BS_NR_OF_STRINGS]; /*!< recommended continuous operating discharge current */
420  float recommendedPeakChargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< recommended peak operating charge current */
421  float recommendedPeakDischargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< recommended peak operating discharge current */
422  float continuousMolChargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< charge current maximum operating level */
423  float continuousMolDischargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< discharge current maximum operating level */
424  float peakMolChargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< charge current maximum operating level */
425  float peakMolDischargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< discharge current maximum operating level */
426  float continuousRslChargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< charge current recommended safety level */
427  float continuousRslDischargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< discharge current recommended safety level */
428  float peakRslChargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< charge current recommended safety level */
429  float peakRslDischargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< discharge current recommended safety level */
430  float continuousMslChargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< charge current maximum safety level */
431  float continuousMslDischargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< discharge current maximum safety level */
432  float peakMslChargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< charge current maximum safety level */
433  float peakMslDischargeCurrent_mA[BS_NR_OF_STRINGS]; /*!< discharge current maximum safety level */
435 
436 /** data block struct of system state */
437 typedef struct {
438  /* This struct needs to be at the beginning of every database entry. During
439  * the initialization of a database struct, uniqueId must be set to the
440  * respective database entry representation in enum DATA_BLOCK_ID_e. */
441  DATA_BLOCK_HEADER_s header; /*!< Data block header */
442  int32_t bmsCanState; /*!< system state for CAN messages (e.g., standby, normal) */
444 
445 /** data block struct of the maximum safe limits */
446 typedef struct {
447  /* This struct needs to be at the beginning of every database entry. During
448  * the initialization of a database struct, uniqueId must be set to the
449  * respective database entry representation in enum DATA_BLOCK_ID_e. */
450  DATA_BLOCK_HEADER_s header; /*!< Data block header */
451  uint8_t packChargeOvercurrent; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
452  uint8_t packDischargeOvercurrent; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
453  uint8_t overVoltage[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
454  uint8_t underVoltage[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
455  uint8_t overtemperatureCharge[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
456  uint8_t overtemperatureDischarge[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
457  uint8_t undertemperatureCharge[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
458  uint8_t undertemperatureDischarge[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
459  uint8_t cellChargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
460  uint8_t stringChargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
461  uint8_t cellDischargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
462  uint8_t stringDischargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
463  uint8_t pcbOvertemperature[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
464  uint8_t pcbUndertemperature[BS_NR_OF_STRINGS]; /*!< 0 -> MSL NOT violated, 1 -> MSL violated */
466 
467 /** data block struct of the recommended safety limit */
468 typedef struct {
469  /* This struct needs to be at the beginning of every database entry. During
470  * the initialization of a database struct, uniqueId must be set to the
471  * respective database entry representation in enum DATA_BLOCK_ID_e. */
472  DATA_BLOCK_HEADER_s header; /*!< Data block header */
473  uint8_t overVoltage[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
474  uint8_t underVoltage[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
475  uint8_t overtemperatureCharge[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
476  uint8_t overtemperatureDischarge[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
477  uint8_t undertemperatureCharge[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
478  uint8_t undertemperatureDischarge[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
479  uint8_t cellChargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
480  uint8_t stringChargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
481  uint8_t cellDischargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
482  uint8_t stringDischargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
483  uint8_t pcbOvertemperature[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
484  uint8_t pcbUndertemperature[BS_NR_OF_STRINGS]; /*!< 0 -> RSL NOT violated, 1 -> RSL violated */
486 
487 /** data block struct of the maximum operating limit */
488 typedef struct {
489  /* This struct needs to be at the beginning of every database entry. During
490  * the initialization of a database struct, uniqueId must be set to the
491  * respective database entry representation in enum DATA_BLOCK_ID_e. */
492  DATA_BLOCK_HEADER_s header; /*!< Data block header */
493  uint8_t overVoltage[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
494  uint8_t underVoltage[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
495  uint8_t overtemperatureCharge[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
496  uint8_t overtemperatureDischarge[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
497  uint8_t undertemperatureCharge[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
498  uint8_t undertemperatureDischarge[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
499  uint8_t cellChargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
500  uint8_t stringChargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
501  uint8_t cellDischargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
502  uint8_t stringDischargeOvercurrent[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
503  uint8_t pcbOvertemperature[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
504  uint8_t pcbUndertemperature[BS_NR_OF_STRINGS]; /*!< 0 -> MOL NOT violated, 1 -> MOL violated */
506 
507 /** data block struct of sox */
508 typedef struct {
509  /* This struct needs to be at the beginning of every database entry. During
510  * the initialization of a database struct, uniqueId must be set to the
511  * respective database entry representation in enum DATA_BLOCK_ID_e. */
512  DATA_BLOCK_HEADER_s header; /*!< Data block header */
513  float averageSoc_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= averageSoc <= 100.0 */
514  float minimumSoc_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= minSoc <= 100.0 */
515  float maximumSoc_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= maxSoc <= 100.0 */
516  float averageSoe_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= averageSoe <= 100.0 */
517  float minimumSoe_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= minimumSoe <= 100.0 */
518  float maximumSoe_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= maximumSoe <= 100.0 */
519  float averageSoh_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= averageSoh <= 100.0 */
520  float minimumSoh_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= minimumSoh <= 100.0 */
521  float maximumSoh_perc[BS_NR_OF_STRINGS]; /*!< 0.0 <= maximumSoh <= 100.0 */
522  uint32_t maximumSoe_Wh[BS_NR_OF_STRINGS]; /*!< maximum string energy in Wh */
523  uint32_t averageSoe_Wh[BS_NR_OF_STRINGS]; /*!< average string energy in Wh */
524  uint32_t minimumSoe_Wh[BS_NR_OF_STRINGS]; /*!< minimum string energy in Wh */
526 
527 /** data block struct of can state request */
528 typedef struct {
529  /* This struct needs to be at the beginning of every database entry. During
530  * the initialization of a database struct, uniqueId must be set to the
531  * respective database entry representation in enum DATA_BLOCK_ID_e. */
532  DATA_BLOCK_HEADER_s header; /*!< Data block header */
533  uint8_t stateRequestViaCan; /*!< state request */
534  uint8_t previousStateRequestViaCan; /*!< previous state request */
535  uint8_t stateRequestViaCanPending; /*!< pending state request */
536  uint8_t stateCounter; /*!< counts state updates */
538 
539 /** data block struct of the moving average algorithm */
540 typedef struct {
541  /* This struct needs to be at the beginning of every database entry. During
542  * the initialization of a database struct, uniqueId must be set to the
543  * respective database entry representation in enum DATA_BLOCK_ID_e. */
544  DATA_BLOCK_HEADER_s header; /*!< Data block header */
545  float movingAverageCurrent1sInterval_mA; /*!< current moving average over the last 1s */
546  float movingAverageCurrent5sInterval_mA; /*!< current moving average over the last 5s */
547  float movingAverageCurrent10sInterval_mA; /*!< current moving average over the last 10s */
548  float movingAverageCurrent30sInterval_mA; /*!< current moving average over the last 30s */
549  float movingAverageCurrent60sInterval_mA; /*!< current moving average over the last 60s */
550  float movingAverageCurrentConfigurableInterval_mA; /*!< current moving average over the last configured time */
551  float movingAveragePower1sInterval_mA; /*!< power moving average over the last 1s */
552  float movingAveragePower5sInterval_mA; /*!< power moving average over the last 5s */
553  float movingAveragePower10sInterval_mA; /*!< power moving average over the last 10s */
554  float movingAveragePower30sInterval_mA; /*!< power moving average over the last 30s */
555  float movingAveragePower60sInterval_mA; /*!< power moving average over the last 60s */
556  float movingAveragePowerConfigurableInterval_mA; /*!< power moving average over the last configured time */
558 
559 /** data block struct of insulation monitoring device measurement */
560 typedef struct {
561  /* This struct needs to be at the beginning of every database entry. During
562  * the initialization of a database struct, uniqueId must be set to the
563  * respective database entry representation in enum DATA_BLOCK_ID_e. */
564  DATA_BLOCK_HEADER_s header; /*!< Data block header */
565  bool isImdRunning; /*!< true -> Insulation resistance measurement active, false -> not active */
566  bool isInsulationMeasurementValid; /*!< true -> resistance value valid, false -> resistance unreliable */
567  uint32_t insulationResistance_kOhm; /*!< insulation resistance measured in kOhm */
568  bool
569  areDeviceFlagsValid; /*!< true -> flags below this database entry valid, false -> flags unreliable e.g. if device error detected */
570  bool
571  dfIsCriticalResistanceDetected; /*!< device status flag: false -> resistance value okay, true -> resistance value too low/error */
572  bool dfIsWarnableResistanceDetected; /*!< true: warning threshold violated, false: no warning active */
573  bool dfIsChassisFaultDetected; /*!< true: short between HV potential and chassis detected, false: no error */
574  bool dfIsChassisShortToHvPlus; /*!< true: bias/tendency to the location of the insulation fault to HV plus */
575  bool dfIsChassisShortToHvMinus; /*!< true: bias/tendency to the location of the insulation fault to HV minus */
576  bool dfIsDeviceErrorDetected; /*!< true: device error detected, false: no error detected */
577  bool dfIsMeasurmentedUpToDate; /*!< true: measurement up to-date, false: outdated */
579 
580 /** data block struct for the I2C humidity/temperature sensor */
581 typedef struct {
582  /* This struct needs to be at the beginning of every database entry. During
583  * the initialization of a database struct, uniqueId must be set to the
584  * respective database entry representation in enum DATA_BLOCK_ID_e. */
585  DATA_BLOCK_HEADER_s header; /*!< Data block header */
587  uint8_t humidity_perc;
589 
590 /** data block struct of internal ADC voltage measurement */
591 typedef struct {
592  /* This struct needs to be at the beginning of every database entry. During
593  * the initialization of a database struct, uniqueId must be set to the
594  * respective database entry representation in enum DATA_BLOCK_ID_e. */
595  DATA_BLOCK_HEADER_s header; /*!< Data block header */
596  float adc1ConvertedVoltages_mV[MCU_ADC1_MAX_NR_CHANNELS]; /*!< voltages measured by the internal ADC ADC1 */
598 
599 /** data block struct for the database built-in self-test */
600 typedef struct {
601  /* This struct needs to be at the beginning of every database entry. During
602  * the initialization of a database struct, uniqueId must be set to the
603  * respective database entry representation in enum DATA_BLOCK_ID_e. */
604  DATA_BLOCK_HEADER_s header; /*!< Data block header */
605  uint8_t member1; /*!< first member of self-test struct */
606  uint8_t member2; /*!< second member of self-test struct */
608 
609 /** array for the database */
611 
612 /*========== Extern Constant and Variable Declarations ======================*/
613 
614 /*========== Extern Function Prototypes =====================================*/
615 
616 /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/
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
Number of GPIOs on the LTC IC.
#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
DATA_BLOCK_ID_e
Definition: database_cfg.h:75
@ DATA_BLOCK_ID_CELL_VOLTAGE_REDUNDANCY0
Definition: database_cfg.h:99
@ DATA_BLOCK_ID_OPEN_WIRE_REDUNDANCY0
Definition: database_cfg.h:103
@ DATA_BLOCK_ID_INTERLOCK_FEEDBACK
Definition: database_cfg.h:88
@ DATA_BLOCK_ID_BALANCING_CONTROL
Definition: database_cfg.h:80
@ DATA_BLOCK_ID_MIN_MAX
Definition: database_cfg.h:78
@ DATA_BLOCK_ID_ALL_GPIO_VOLTAGES_REDUNDANCY0
Definition: database_cfg.h:102
@ DATA_BLOCK_ID_USER_MUX
Definition: database_cfg.h:83
@ DATA_BLOCK_ID_SOX
Definition: database_cfg.h:94
@ DATA_BLOCK_ID_DUMMY_FOR_SELF_TEST
Definition: database_cfg.h:108
@ DATA_BLOCK_ID_RSL_FLAG
Definition: database_cfg.h:92
@ DATA_BLOCK_ID_INSULATION_MONITORING
Definition: database_cfg.h:104
@ DATA_BLOCK_ID_CELL_VOLTAGE
Definition: database_cfg.h:76
@ DATA_BLOCK_ID_MOVING_AVERAGE
Definition: database_cfg.h:96
@ DATA_BLOCK_ID_CELL_TEMPERATURE_REDUNDANCY0
Definition: database_cfg.h:100
@ DATA_BLOCK_ID_CELL_TEMPERATURE_BASE
Definition: database_cfg.h:98
@ DATA_BLOCK_ID_CURRENT_SENSOR
Definition: database_cfg.h:79
@ DATA_BLOCK_ID_MAX
Definition: database_cfg.h:109
@ DATA_BLOCK_ID_SYSTEMSTATE
Definition: database_cfg.h:90
@ DATA_BLOCK_ID_OPEN_WIRE_BASE
Definition: database_cfg.h:84
@ DATA_BLOCK_ID_SLAVE_CONTROL
Definition: database_cfg.h:81
@ DATA_BLOCK_ID_CONTACTOR_FEEDBACK
Definition: database_cfg.h:87
@ DATA_BLOCK_ID_SOF
Definition: database_cfg.h:89
@ DATA_BLOCK_ID_ADC_VOLTAGE
Definition: database_cfg.h:107
@ DATA_BLOCK_ID_CELL_VOLTAGE_BASE
Definition: database_cfg.h:97
@ DATA_BLOCK_ID_MSL_FLAG
Definition: database_cfg.h:91
@ DATA_BLOCK_ID_ERRORSTATE
Definition: database_cfg.h:86
@ DATA_BLOCK_ID_HTSEN
Definition: database_cfg.h:106
@ DATA_BLOCK_ID_ALL_GPIO_VOLTAGES_BASE
Definition: database_cfg.h:85
@ DATA_BLOCK_ID_PACK_VALUES
Definition: database_cfg.h:105
@ DATA_BLOCK_ID_BALANCING_FEEDBACK_BASE
Definition: database_cfg.h:82
@ DATA_BLOCK_ID_MOL_FLAG
Definition: database_cfg.h:93
@ DATA_BLOCK_ID_BALANCING_FEEDBACK_REDUNDANCY0
Definition: database_cfg.h:101
@ DATA_BLOCK_ID_CELL_TEMPERATURE
Definition: database_cfg.h:77
@ DATA_BLOCK_ID_STATEREQUEST
Definition: database_cfg.h:95
DATA_BASE_s data_database[DATA_BLOCK_ID_MAX]
channel configuration of database (data blocks)
Definition: database_cfg.c:177
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")
General macros and definitions for the whole platform.
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:76
uint32_t dataLength
Definition: database_cfg.h:71
void * pDatabaseEntry
Definition: database_cfg.h:70
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:595
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:315
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:247
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:282
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:146
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:129
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:389
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:211
uint8_t baseCellVoltageMeasurementTimeout
Definition: database_cfg.h:340
uint8_t redundancy0CellVoltageMeasurementTimeout
Definition: database_cfg.h:341
uint8_t baseCellTemperatureMeasurementTimeout
Definition: database_cfg.h:342
uint8_t redundancy0CellTemperatureMeasurementTimeout
Definition: database_cfg.h:343
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:329
uint32_t previousTimestamp
Definition: database_cfg.h:121
DATA_BLOCK_ID_e uniqueId
Definition: database_cfg.h:119
int16_t temperature_ddegC
Definition: database_cfg.h:586
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:585
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:398
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:159
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:492
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:544
float movingAverageCurrentConfigurableInterval_mA
Definition: database_cfg.h:550
float movingAveragePowerConfigurableInterval_mA
Definition: database_cfg.h:556
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:450
uint8_t packDischargeOvercurrent
Definition: database_cfg.h:452
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:302
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:187
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:472
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:263
float recommendedPeakPackChargeCurrent_mA
Definition: database_cfg.h:414
float recommendedPeakPackDischargeCurrent_mA
Definition: database_cfg.h:415
float recommendedContinuousPackChargeCurrent_mA
Definition: database_cfg.h:412
float recommendedContinuousPackDischargeCurrent_mA
Definition: database_cfg.h:413
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:411
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:512
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:532
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:441
DATA_BLOCK_HEADER_s header
Definition: database_cfg.h:292