foxBMS  1.2.1
The foxBMS Battery Management System API Documentation
can_cbs_tx_state.c
Go to the documentation of this file.
1 /**
2  *
3  * @copyright © 2010 - 2021, 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 can_cbs_tx_state.c
44  * @author foxBMS Team
45  * @date 2021-07-21 (date of creation)
46  * @updated 2021-07-21 (date of last update)
47  * @ingroup DRIVER
48  * @prefix CAN
49  *
50  * @brief CAN driver Tx callback implementation
51  * @details CAN Tx callback for state messages
52  */
53 
54 /*========== Includes =======================================================*/
55 #include "bms.h"
56 #include "can_cbs.h"
57 #include "can_helper.h"
58 #include "diag.h"
59 
60 /*========== Macros and Definitions =========================================*/
61 
62 /*========== Static Constant and Variable Definitions =======================*/
63 
64 /*========== Extern Constant and Variable Definitions =======================*/
65 
66 /*========== Static Function Prototypes =====================================*/
67 
68 /*========== Static Function Implementations ================================*/
69 
70 /*========== Extern Function Implementations ================================*/
71 extern uint32_t CAN_TxState(
72  uint32_t id,
73  uint8_t dlc,
74  CAN_ENDIANNESS_e endianness,
75  uint8_t *pCanData,
76  uint8_t *pMuxId,
77  const CAN_SHIM_s *const kpkCanShim) {
78  /* pMuxId is not used here, therefore has to be NULL_PTR */
79  FAS_ASSERT(pMuxId == NULL_PTR);
80 
81  FAS_ASSERT(id < CAN_MAX_11BIT_ID); /* Currently standard ID, 11 bit */
82  FAS_ASSERT(dlc <= CAN_MAX_DLC); /* Currently max 8 bytes in a CAN frame */
83  FAS_ASSERT(pCanData != NULL_PTR);
84  FAS_ASSERT(kpkCanShim != NULL_PTR);
85  uint64_t message = 0;
86 
87  DATA_READ_DATA(kpkCanShim->pTableErrorState, kpkCanShim->pTableInsulation, kpkCanShim->pTableMsl);
88 
89  /* AXIVION Disable Style Generic-NoMagicNumbers: Signal data defined in .dbc file. */
90  /* State */
91  uint64_t data = (uint64_t)BMS_GetState();
92  /* set data in CAN frame */
93  CAN_TxSetMessageDataWithSignalData(&message, 3u, 4u, data, endianness);
94 
95  /* Connected strings */
96  data = (uint64_t)BMS_GetNumberOfConnectedStrings();
97  /* set data in CAN frame */
98  CAN_TxSetMessageDataWithSignalData(&message, 7u, 4u, data, endianness);
99 
100  /* General error - implement now */
101  if (true == DIAG_IsAnyFatalErrorSet()) {
102  data = 1u;
103  } else {
104  data = 0u;
105  }
106  CAN_TxSetMessageDataWithSignalData(&message, 11u, 1u, data, endianness);
107 
108  /* General warning: TODO */
109 
110  /* Emergency shutoff */
111  if (true == BMS_IsTransitionToErrorStateActive()) {
112  data = 1u;
113  } else {
114  data = 0u;
115  }
116  CAN_TxSetMessageDataWithSignalData(&message, 10u, 1u, data, endianness);
117 
118  /* Number of deactivated strings: TODO */
119 
120  /* Error: insulation */
121  data = kpkCanShim->pTableErrorState->insulationError;
122  CAN_TxSetMessageDataWithSignalData(&message, 23u, 1u, data, endianness);
123 
124  /* Insulation resistance */
125  float signalData = (float)kpkCanShim->pTableInsulation->insulationResistance_kOhm;
126  signalData = signalData * 0.1f; /* convert kOhm to 10kOhm */
127  data = (uint64_t)signalData;
128  CAN_TxSetMessageDataWithSignalData(&message, 63u, 8u, data, endianness);
129 
130  /* Charging complete: TODO */
131 
132  /* Insulation monitoring active */
133  data = kpkCanShim->pTableInsulation->insulationMeasurements;
134  CAN_TxSetMessageDataWithSignalData(&message, 13u, 1u, data, endianness);
135 
136  /* Heater state: TODO */
137  /* Cooling state: TODO */
138 
139  /* Error: Precharge voltage: TODO */
140  /* Error: Precharge current: TODO */
141 
142  /* Error: MCU die temperature */
143  data = kpkCanShim->pTableErrorState->mcuDieTemperature;
144  CAN_TxSetMessageDataWithSignalData(&message, 18u, 1u, data, endianness);
145 
146  /* Error: master overtemperature: TODO */
147  /* Error: master undertemperature: TODO */
148 
149  /* Error: interlock */
150  data = kpkCanShim->pTableErrorState->interlock;
151  CAN_TxSetMessageDataWithSignalData(&message, 22u, 1u, data, endianness);
152 
153  /* Main fuse state: TODO */
154 
155  /* Error: Can timing */
156  data = kpkCanShim->pTableErrorState->canTiming;
157  CAN_TxSetMessageDataWithSignalData(&message, 24u, 1u, data, endianness);
158 
159  /* Error: Overcurrent pack charge */
160  data = kpkCanShim->pTableMsl->packChargeOvercurrent;
161  CAN_TxSetMessageDataWithSignalData(&message, 25u, 1u, data, endianness);
162 
163  /* Error: Overcurrent pack discharge */
164  data = kpkCanShim->pTableMsl->packDischargeOvercurrent;
165  CAN_TxSetMessageDataWithSignalData(&message, 26u, 1u, data, endianness);
166  /* AXIVION Enable Style Generic-NoMagicNumbers: */
167 
168  /* now copy data in the buffer that will be use to send data */
169  CAN_TxSetCanDataWithMessageData(message, pCanData, endianness);
170 
171  return 0;
172 }
173 extern uint32_t CAN_TxStringState(
174  uint32_t id,
175  uint8_t dlc,
176  CAN_ENDIANNESS_e endianness,
177  uint8_t *pCanData,
178  uint8_t *pMuxId,
179  const CAN_SHIM_s *const kpkCanShim) {
180  FAS_ASSERT(id < CAN_MAX_11BIT_ID); /* Currently standard ID, 11 bit */
181  FAS_ASSERT(dlc <= CAN_MAX_DLC); /* Currently max 8 bytes in a CAN frame */
182  FAS_ASSERT(pCanData != NULL_PTR);
183  FAS_ASSERT(pMuxId != NULL_PTR);
184  FAS_ASSERT(*pMuxId < BS_NR_OF_STRINGS);
185  FAS_ASSERT(kpkCanShim != NULL_PTR);
186  uint64_t message = 0;
187  uint64_t data = 0;
188 
189  const uint8_t stringNumber = *pMuxId;
190 
191  /* First signal to transmit cell voltages: get database values */
192  if (stringNumber == 0u) {
193  /* Do not read pTableMsl and pTableErrorState as they already are read
194  * with a higher frequency from CAN_TxState callback */
195  DATA_READ_DATA(kpkCanShim->pTableRsl, kpkCanShim->pTableMol);
196  }
197 
198  /* AXIVION Disable Style Generic-NoMagicNumbers: Signal data defined in .dbc file. */
199  /* mux value */
200  data = (uint64_t)stringNumber;
201  /* set data in CAN frame */
202  CAN_TxSetMessageDataWithSignalData(&message, 3u, 4u, data, endianness);
203 
204  /* String connected */
205  if (true == BMS_IsStringClosed(stringNumber)) {
206  data = 1u;
207  } else {
208  data = 0u;
209  }
210  CAN_TxSetMessageDataWithSignalData(&message, 4u, 1u, data, endianness);
211 
212  /* Balancing active: TODO */
213 
214  /* String fuse blown */
215  if ((1u == kpkCanShim->pTableErrorState->fuseStateCharge[stringNumber]) ||
216  (1u == kpkCanShim->pTableErrorState->fuseStateNormal[stringNumber])) {
217  data = 1u;
218  } else {
219  data = 0u;
220  }
221  CAN_TxSetMessageDataWithSignalData(&message, 6u, 1u, data, endianness);
222 
223  /* Error: Deep-discharge */
224  data = kpkCanShim->pTableErrorState->deepDischargeDetected[stringNumber];
225  CAN_TxSetMessageDataWithSignalData(&message, 7u, 1u, data, endianness);
226 
227  /* Error: Overtemperature charge */
228  data = kpkCanShim->pTableMsl->overtemperatureCharge[stringNumber];
229  CAN_TxSetMessageDataWithSignalData(&message, 8u, 1u, data, endianness);
230 
231  /* Error: Undertemperature charge */
232  data = kpkCanShim->pTableMsl->undertemperatureCharge[stringNumber];
233  CAN_TxSetMessageDataWithSignalData(&message, 9u, 1u, data, endianness);
234 
235  /* Error: Overtemperature discharge */
236  data = kpkCanShim->pTableMsl->overtemperatureDischarge[stringNumber];
237  CAN_TxSetMessageDataWithSignalData(&message, 10u, 1u, data, endianness);
238 
239  /* Error: Undertemperature discharge */
240  data = kpkCanShim->pTableMsl->undertemperatureDischarge[stringNumber];
241  CAN_TxSetMessageDataWithSignalData(&message, 11u, 1u, data, endianness);
242 
243  /* Error: Overcurrent charge */
244  if ((1u == kpkCanShim->pTableMsl->cellChargeOvercurrent[stringNumber]) ||
245  (1u == kpkCanShim->pTableMsl->stringChargeOvercurrent[stringNumber])) {
246  data = 1u;
247  } else {
248  data = 0u;
249  }
250  CAN_TxSetMessageDataWithSignalData(&message, 12u, 1u, data, endianness);
251 
252  /* Error: Overcurrent discharge */
253  if ((1u == kpkCanShim->pTableMsl->cellDischargeOvercurrent[stringNumber]) ||
254  (1u == kpkCanShim->pTableMsl->stringDischargeOvercurrent[stringNumber])) {
255  data = 1u;
256  } else {
257  data = 0u;
258  }
259  CAN_TxSetMessageDataWithSignalData(&message, 13u, 1u, data, endianness);
260 
261  /* Error: Overvoltage */
262  data = kpkCanShim->pTableMsl->overVoltage[stringNumber];
263  CAN_TxSetMessageDataWithSignalData(&message, 14u, 1u, data, endianness);
264 
265  /* Error: Undervoltage */
266  data = kpkCanShim->pTableMsl->underVoltage[stringNumber];
267  CAN_TxSetMessageDataWithSignalData(&message, 15u, 1u, data, endianness);
268 
269  /* Info: Overtemperature charge - MOL */
270  data = kpkCanShim->pTableMol->overtemperatureCharge[stringNumber];
271  CAN_TxSetMessageDataWithSignalData(&message, 16u, 1u, data, endianness);
272 
273  /* Info: Undertemperature charge - MOL */
274  data = kpkCanShim->pTableMol->undertemperatureCharge[stringNumber];
275  CAN_TxSetMessageDataWithSignalData(&message, 17u, 1u, data, endianness);
276 
277  /* Info: Overtemperature discharge - MOL */
278  data = kpkCanShim->pTableMol->overtemperatureDischarge[stringNumber];
279  CAN_TxSetMessageDataWithSignalData(&message, 18u, 1u, data, endianness);
280 
281  /* Info: Undertemperature discharge - MOL */
282  data = kpkCanShim->pTableMol->undertemperatureCharge[stringNumber];
283  CAN_TxSetMessageDataWithSignalData(&message, 19u, 1u, data, endianness);
284 
285  /* Info: Overcurrent charge - MOL */
286  if ((1u == kpkCanShim->pTableMol->cellChargeOvercurrent[stringNumber]) ||
287  (1u == kpkCanShim->pTableMol->stringChargeOvercurrent[stringNumber])) {
288  data = 1u;
289  } else {
290  data = 0u;
291  }
292  CAN_TxSetMessageDataWithSignalData(&message, 20u, 1u, data, endianness);
293 
294  /* Info: Overcurrent discharge - MOL */
295  if ((1u == kpkCanShim->pTableMol->cellDischargeOvercurrent[stringNumber]) ||
296  (1u == kpkCanShim->pTableMol->stringDischargeOvercurrent[stringNumber])) {
297  data = 1u;
298  } else {
299  data = 0u;
300  }
301  CAN_TxSetMessageDataWithSignalData(&message, 21u, 1u, data, endianness);
302 
303  /* Info: Overvoltage - MOL */
304  data = kpkCanShim->pTableMol->overVoltage[stringNumber];
305  CAN_TxSetMessageDataWithSignalData(&message, 22u, 1u, data, endianness);
306 
307  /* Info: Undervoltage - MOL */
308  data = kpkCanShim->pTableMol->underVoltage[stringNumber];
309  CAN_TxSetMessageDataWithSignalData(&message, 23u, 1u, data, endianness);
310 
311  /* Warning: Overtemperature charge - RSL */
312  data = kpkCanShim->pTableRsl->overtemperatureCharge[stringNumber];
313  CAN_TxSetMessageDataWithSignalData(&message, 24u, 1u, data, endianness);
314 
315  /* Warning: Undertemperature charge - RSL */
316  data = kpkCanShim->pTableRsl->undertemperatureCharge[stringNumber];
317  CAN_TxSetMessageDataWithSignalData(&message, 25u, 1u, data, endianness);
318 
319  /* Warning: Overtemperature discharge - RSL */
320  data = kpkCanShim->pTableRsl->overtemperatureDischarge[stringNumber];
321  CAN_TxSetMessageDataWithSignalData(&message, 26u, 1u, data, endianness);
322 
323  /* Warning: Undertemperature discharge - RSL */
324  data = kpkCanShim->pTableRsl->undertemperatureDischarge[stringNumber];
325  CAN_TxSetMessageDataWithSignalData(&message, 27u, 1u, data, endianness);
326 
327  /* Warning: Overcurrent charge - RSL */
328  if ((1u == kpkCanShim->pTableRsl->cellChargeOvercurrent[stringNumber]) ||
329  (1u == kpkCanShim->pTableRsl->stringChargeOvercurrent[stringNumber])) {
330  data = 1u;
331  } else {
332  data = 0u;
333  }
334  CAN_TxSetMessageDataWithSignalData(&message, 28u, 1u, data, endianness);
335 
336  /* Warning: Overcurrent discharge - RSL */
337  if ((1u == kpkCanShim->pTableMol->cellDischargeOvercurrent[stringNumber]) ||
338  (1u == kpkCanShim->pTableMol->stringDischargeOvercurrent[stringNumber])) {
339  data = 1u;
340  } else {
341  data = 0u;
342  }
343  CAN_TxSetMessageDataWithSignalData(&message, 29u, 1u, data, endianness);
344 
345  /* Warning: Overvoltage - RSL */
346  data = kpkCanShim->pTableRsl->overVoltage[stringNumber];
347  CAN_TxSetMessageDataWithSignalData(&message, 30u, 1u, data, endianness);
348 
349  /* Warning: Undervoltage - RSL */
350  data = kpkCanShim->pTableRsl->underVoltage[stringNumber];
351  CAN_TxSetMessageDataWithSignalData(&message, 31u, 1u, data, endianness);
352 
353  /* Error: Positive string contactor: TODO */
354  /* Error: Negative string contactor: TODO */
355  /* Error: Slave hardware: TODO */
356 
357  /* Error: Daisy-chain base: communication */
358  data = kpkCanShim->pTableErrorState->spiError[stringNumber];
359  CAN_TxSetMessageDataWithSignalData(&message, 35u, 1u, data, endianness);
360 
361  /* Error: Daisy-chain redundancy: communication: TODO */
362  /* Error: Daisy-chain base: CRC */
363  data = kpkCanShim->pTableErrorState->crcError[stringNumber];
364  CAN_TxSetMessageDataWithSignalData(&message, 37u, 1u, data, endianness);
365 
366  /* Error: Daisy-chain redundancy: CRC: TODO */
367  /* Error: Daisy-chain base: Voltage out of operating range */
368  data = kpkCanShim->pTableErrorState->afeCellvoltageError[stringNumber];
369  CAN_TxSetMessageDataWithSignalData(&message, 39u, 1u, data, endianness);
370 
371  /* Error: Daisy-chain redundancy: Voltage out of operating range: TODO */
372  /* Error: Daisy-chain base: Temperature out of operating range */
373  data = kpkCanShim->pTableErrorState->afeCellTemperatureError[stringNumber];
374  CAN_TxSetMessageDataWithSignalData(&message, 41u, 1u, data, endianness);
375 
376  /* Error: Daisy-chain redundancy: Voltage out of operating range: TODO */
377 
378  /* Error: current measurement */
379  if ((1u == kpkCanShim->pTableErrorState->currentMeasurementError[stringNumber]) ||
380  (1u == kpkCanShim->pTableErrorState->currentMeasurementTimeout[stringNumber])) {
381  data = 1u;
382  } else {
383  data = 0u;
384  }
385  CAN_TxSetMessageDataWithSignalData(&message, 43u, 1u, data, endianness);
386 
387  /* Error: Coulomb counting measurement */
388  data = kpkCanShim->pTableErrorState->canTimingCc[stringNumber];
389  CAN_TxSetMessageDataWithSignalData(&message, 44u, 1u, data, endianness);
390 
391  /* Error: Energy counting measurement */
392  data = kpkCanShim->pTableErrorState->canTimingEc[stringNumber];
393  CAN_TxSetMessageDataWithSignalData(&message, 45u, 1u, data, endianness);
394 
395  /* Error: Current sensor V1 measurement */
396  data = kpkCanShim->pTableErrorState->currentSensorTimeoutV1[stringNumber];
397  CAN_TxSetMessageDataWithSignalData(&message, 46u, 1u, data, endianness);
398 
399  /* Error: Current sensor V2 measurement: TODO */
400  /* Error: Current sensor V3 measurement */
401  data = kpkCanShim->pTableErrorState->currentSensorTimeoutV3[stringNumber];
402  CAN_TxSetMessageDataWithSignalData(&message, 48u, 1u, data, endianness);
403 
404  /* Error: Open wire */
405  data = kpkCanShim->pTableErrorState->open_wire[stringNumber];
406  CAN_TxSetMessageDataWithSignalData(&message, 49u, 1u, data, endianness);
407 
408  /* Error: Plausibility: Cell temperature */
409  data = kpkCanShim->pTableErrorState->plausibilityCheckCelltemperature[stringNumber];
410  CAN_TxSetMessageDataWithSignalData(&message, 51u, 1u, data, endianness);
411 
412  /* Error: Plausibility: Cell voltage */
413  data = kpkCanShim->pTableErrorState->plausibilityCheckCellvoltage[stringNumber];
414  CAN_TxSetMessageDataWithSignalData(&message, 52u, 1u, data, endianness);
415 
416  /* Error: Plausibility: String voltage */
417  data = kpkCanShim->pTableErrorState->plausibilityCheckPackvoltage[stringNumber];
418  CAN_TxSetMessageDataWithSignalData(&message, 53u, 1u, data, endianness);
419 
420  /* Error: Plausibility: Cell temperature spread */
421  data = kpkCanShim->pTableErrorState->plausibilityCheckCelltemperatureSpread[stringNumber];
422  CAN_TxSetMessageDataWithSignalData(&message, 54u, 1u, data, endianness);
423 
424  /* Error: Plausibility: Cell voltage spread */
425  data = kpkCanShim->pTableErrorState->plausibilityCheckCellvoltageSpread[stringNumber];
426  CAN_TxSetMessageDataWithSignalData(&message, 55u, 1u, data, endianness);
427  /* AXIVION Enable Style Generic-NoMagicNumbers: */
428 
429  /* Open wire number: TODO */
430 
431  /* now copy data in the buffer that will be used to send data */
432  CAN_TxSetCanDataWithMessageData(message, pCanData, endianness);
433 
434  /* Increment multiplexer for next cell */
435  (*pMuxId)++;
436 
437  /* Check mux value */
438  if (*pMuxId >= BS_NR_OF_STRINGS) {
439  *pMuxId = 0u;
440  }
441 
442  return 0;
443 }
444 
445 /*========== Externalized Static Function Implementations (Unit Test) =======*/
446 #ifdef UNITY_UNIT_TEST
447 
448 #endif
#define BS_NR_OF_STRINGS
bool BMS_IsTransitionToErrorStateActive(void)
Check if transition in to error state is active.
Definition: bms.c:1310
uint8_t BMS_GetNumberOfConnectedStrings(void)
Returns number of connected strings.
Definition: bms.c:1306
bool BMS_IsStringClosed(uint8_t stringNumber)
Returns string state (closed or open)
Definition: bms.c:1288
BMS_STATEMACH_e BMS_GetState(void)
Returns the current state.
Definition: bms.c:629
bms driver header
CAN callbacks header.
uint32_t CAN_TxStringState(uint32_t id, uint8_t dlc, CAN_ENDIANNESS_e endianness, uint8_t *pCanData, uint8_t *pMuxId, const CAN_SHIM_s *const kpkCanShim)
can tx callback function for string state values
uint32_t CAN_TxState(uint32_t id, uint8_t dlc, CAN_ENDIANNESS_e endianness, uint8_t *pCanData, uint8_t *pMuxId, const CAN_SHIM_s *const kpkCanShim)
can tx callback function for state
#define CAN_MAX_11BIT_ID
Definition: can_cfg.h:85
enum CAN_ENDIANNESS CAN_ENDIANNESS_e
#define CAN_MAX_DLC
Definition: can_cfg.h:87
void CAN_TxSetMessageDataWithSignalData(uint64_t *pMessage, uint64_t bitStart, uint8_t bitLength, uint64_t canSignal, CAN_ENDIANNESS_e endianness)
Puts CAN signal data in a 64-bit variable. This function is used to compose a 64-bit CAN message....
Definition: can_helper.c:166
void CAN_TxSetCanDataWithMessageData(uint64_t message, uint8_t *pCanData, CAN_ENDIANNESS_e endianness)
Copy CAN data from a 64-bit variable to 8 bytes. This function is used to copy a 64-bit CAN message t...
Definition: can_helper.c:205
Headers for the helper functions for the CAN module.
#define DATA_READ_DATA(...)
Definition: database.h:76
bool DIAG_IsAnyFatalErrorSet(void)
Check if any fatal error is set.
Definition: diag.c:374
Diagnosis driver header.
#define FAS_ASSERT(x)
Assertion macro that asserts that x is true.
Definition: fassert.h:239
#define NULL_PTR
Null pointer.
Definition: fstd_types.h:75
DATA_BLOCK_MOL_FLAG_s * pTableMol
Definition: can_cfg.h:318
DATA_BLOCK_INSULATION_MONITORING_s * pTableInsulation
Definition: can_cfg.h:315
DATA_BLOCK_RSL_FLAG_s * pTableRsl
Definition: can_cfg.h:317
DATA_BLOCK_MSL_FLAG_s * pTableMsl
Definition: can_cfg.h:316
DATA_BLOCK_ERRORSTATE_s * pTableErrorState
Definition: can_cfg.h:314
uint8_t currentSensorTimeoutV3[BS_NR_OF_STRINGS]
Definition: database_cfg.h:332
uint8_t plausibilityCheckCelltemperature[BS_NR_OF_STRINGS]
Definition: database_cfg.h:349
uint8_t currentMeasurementTimeout[BS_NR_OF_STRINGS]
Definition: database_cfg.h:329
uint8_t deepDischargeDetected[BS_NR_OF_STRINGS]
Definition: database_cfg.h:350
uint8_t crcError[BS_NR_OF_STRINGS]
Definition: database_cfg.h:319
uint8_t canTimingEc[BS_NR_OF_STRINGS]
Definition: database_cfg.h:342
uint8_t plausibilityCheckPackvoltage[BS_NR_OF_STRINGS]
Definition: database_cfg.h:345
uint8_t currentMeasurementError[BS_NR_OF_STRINGS]
Definition: database_cfg.h:330
uint8_t plausibilityCheckCellvoltageSpread[BS_NR_OF_STRINGS]
Definition: database_cfg.h:347
uint8_t currentSensorTimeoutV1[BS_NR_OF_STRINGS]
Definition: database_cfg.h:331
uint8_t spiError[BS_NR_OF_STRINGS]
Definition: database_cfg.h:321
uint8_t open_wire[BS_NR_OF_STRINGS]
Definition: database_cfg.h:338
uint8_t fuseStateNormal[BS_NR_OF_STRINGS]
Definition: database_cfg.h:336
uint8_t afeCellTemperatureError[BS_NR_OF_STRINGS]
Definition: database_cfg.h:324
uint8_t fuseStateCharge[BS_NR_OF_STRINGS]
Definition: database_cfg.h:337
uint8_t afeCellvoltageError[BS_NR_OF_STRINGS]
Definition: database_cfg.h:323
uint8_t plausibilityCheckCelltemperatureSpread[BS_NR_OF_STRINGS]
Definition: database_cfg.h:348
uint8_t plausibilityCheckCellvoltage[BS_NR_OF_STRINGS]
Definition: database_cfg.h:346
uint8_t canTimingCc[BS_NR_OF_STRINGS]
Definition: database_cfg.h:341
uint8_t stringDischargeOvercurrent[BS_NR_OF_STRINGS]
Definition: database_cfg.h:475
uint8_t overtemperatureDischarge[BS_NR_OF_STRINGS]
Definition: database_cfg.h:469
uint8_t cellDischargeOvercurrent[BS_NR_OF_STRINGS]
Definition: database_cfg.h:474
uint8_t underVoltage[BS_NR_OF_STRINGS]
Definition: database_cfg.h:467
uint8_t overtemperatureCharge[BS_NR_OF_STRINGS]
Definition: database_cfg.h:468
uint8_t stringChargeOvercurrent[BS_NR_OF_STRINGS]
Definition: database_cfg.h:473
uint8_t undertemperatureCharge[BS_NR_OF_STRINGS]
Definition: database_cfg.h:470
uint8_t cellChargeOvercurrent[BS_NR_OF_STRINGS]
Definition: database_cfg.h:472
uint8_t overVoltage[BS_NR_OF_STRINGS]
Definition: database_cfg.h:466
uint8_t packDischargeOvercurrent
Definition: database_cfg.h:425
uint8_t cellChargeOvercurrent[BS_NR_OF_STRINGS]
Definition: database_cfg.h:432
uint8_t overtemperatureDischarge[BS_NR_OF_STRINGS]
Definition: database_cfg.h:429
uint8_t undertemperatureCharge[BS_NR_OF_STRINGS]
Definition: database_cfg.h:430
uint8_t stringDischargeOvercurrent[BS_NR_OF_STRINGS]
Definition: database_cfg.h:435
uint8_t underVoltage[BS_NR_OF_STRINGS]
Definition: database_cfg.h:427
uint8_t stringChargeOvercurrent[BS_NR_OF_STRINGS]
Definition: database_cfg.h:433
uint8_t packChargeOvercurrent
Definition: database_cfg.h:424
uint8_t cellDischargeOvercurrent[BS_NR_OF_STRINGS]
Definition: database_cfg.h:434
uint8_t overtemperatureCharge[BS_NR_OF_STRINGS]
Definition: database_cfg.h:428
uint8_t undertemperatureDischarge[BS_NR_OF_STRINGS]
Definition: database_cfg.h:431
uint8_t overVoltage[BS_NR_OF_STRINGS]
Definition: database_cfg.h:426
uint8_t overtemperatureDischarge[BS_NR_OF_STRINGS]
Definition: database_cfg.h:449
uint8_t overVoltage[BS_NR_OF_STRINGS]
Definition: database_cfg.h:446
uint8_t stringChargeOvercurrent[BS_NR_OF_STRINGS]
Definition: database_cfg.h:453
uint8_t overtemperatureCharge[BS_NR_OF_STRINGS]
Definition: database_cfg.h:448
uint8_t undertemperatureCharge[BS_NR_OF_STRINGS]
Definition: database_cfg.h:450
uint8_t undertemperatureDischarge[BS_NR_OF_STRINGS]
Definition: database_cfg.h:451
uint8_t cellChargeOvercurrent[BS_NR_OF_STRINGS]
Definition: database_cfg.h:452
uint8_t underVoltage[BS_NR_OF_STRINGS]
Definition: database_cfg.h:447