Data layer introduction (#254)

* Active power, SOH

* Total and remaining capacity

* pre-commit, baby!

* Typo

* pre-commit wrestling

* Temp min/max

* Voltage and current

* Min/max design voltage

* BMS status, max charge/discharge, cell min/max

* BMS status cleanup

* Pre-commit, we meet again

* Cell voltages and minor fixes

* Cell number

* SOC

* Missed a spot

* Event handling moved, Wh bugs fixed, time measurements improved

* Pre-commit, old friend...

* Battery chemistry

* Update TESLA-MODEL-3-BATTERY.cpp

* Total capacity/Wh max, soem default values

* Good ol' pre-comm

* Some prio/core cleanup, docs...

* Contactor closing variables

* Max charge/discharge amps

* Data layer variable documentation

* USER_SETTINGS comments

* Charger comment

* Update datalayer.h
This commit is contained in:
Cabooman 2024-04-15 22:26:10 +02:00 committed by GitHub
parent e7f14084e3
commit 0fee07313a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
68 changed files with 1097 additions and 1510 deletions

View file

@ -1,5 +1,5 @@
#include "events.h"
#include "../../datalayer/datalayer.h"
#ifndef UNIT_TEST
#include <EEPROM.h>
#endif
@ -47,6 +47,7 @@ typedef struct {
uint32_t time_seconds;
MyTimer second_timer;
MyTimer ee_timer;
MyTimer update_timer;
EVENTS_LEVEL_TYPE level;
uint16_t event_log_head_index;
uint16_t event_log_tail_index;
@ -76,6 +77,7 @@ void run_event_handling(void) {
update_event_time();
run_sequence_on_target();
check_ee_write();
update_event_level();
}
/* Initialization function */
@ -165,6 +167,7 @@ void init_events(void) {
events.second_timer.set_interval(1000);
// Write to EEPROM every X minutes (if an event has been set)
events.ee_timer.set_interval(EE_WRITE_PERIOD_MINUTES * 60 * 1000);
events.update_timer.set_interval(2000);
}
void set_event(EVENTS_ENUM_TYPE event, uint8_t data) {
@ -307,7 +310,9 @@ static void set_event(EVENTS_ENUM_TYPE event, uint8_t data, bool latched) {
// Check if the event is latching
events.entries[event].state = latched ? EVENT_STATE_ACTIVE_LATCHED : EVENT_STATE_ACTIVE;
update_event_level();
// Update event level, only upwards. Downward changes are done in Software.ino:loop()
events.level = max(events.level, events.entries[event].level);
update_bms_status();
#ifdef DEBUG_VIA_USB
@ -320,13 +325,13 @@ static void update_bms_status(void) {
case EVENT_LEVEL_INFO:
case EVENT_LEVEL_WARNING:
case EVENT_LEVEL_DEBUG:
system_bms_status = ACTIVE;
datalayer.battery.status.bms_status = ACTIVE;
break;
case EVENT_LEVEL_UPDATE:
system_bms_status = UPDATING;
datalayer.battery.status.bms_status = UPDATING;
break;
case EVENT_LEVEL_ERROR:
system_bms_status = FAULT;
datalayer.battery.status.bms_status = FAULT;
break;
default:
break;
@ -334,12 +339,13 @@ static void update_bms_status(void) {
}
static void update_event_level(void) {
events.level = EVENT_LEVEL_INFO;
EVENTS_LEVEL_TYPE temporary_level = EVENT_LEVEL_INFO;
for (uint8_t i = 0u; i < EVENT_NOF_EVENTS; i++) {
if ((events.entries[i].state == EVENT_STATE_ACTIVE) || (events.entries[i].state == EVENT_STATE_ACTIVE_LATCHED)) {
events.level = max(events.entries[i].level, events.level);
temporary_level = max(events.entries[i].level, temporary_level);
}
}
events.level = temporary_level;
}
static void update_event_time(void) {