mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-05 02:39:57 +02:00
Move millis() check into datalayer
This commit is contained in:
parent
873c5e249e
commit
51b0e80132
5 changed files with 15 additions and 15 deletions
|
@ -55,6 +55,7 @@ const char* version_number = "8.8.dev";
|
|||
uint16_t intervalUpdateValues = INTERVAL_1_S; // Interval at which to update inverter values / Modbus registers
|
||||
unsigned long previousMillis10ms = 0;
|
||||
unsigned long previousMillisUpdateVal = 0;
|
||||
unsigned long lastMillisOverflowCheck = 0;
|
||||
// Task time measurement for debugging and for setting CPU load events
|
||||
int64_t core_task_time_us;
|
||||
MyTimer core_task_timer_10s(INTERVAL_10_S);
|
||||
|
@ -490,6 +491,11 @@ void update_calculated_values() {
|
|||
datalayer.battery.status.reported_remaining_capacity_Wh = datalayer.battery2.status.remaining_capacity_Wh;
|
||||
}
|
||||
#endif // DOUBLE_BATTERY
|
||||
// Check if millis() has overflowed. Used in events to keep better track of time
|
||||
if (millis() < lastMillisOverflowCheck) { // Overflow detected
|
||||
datalayer.system.status.millisrolloverCount++;
|
||||
}
|
||||
lastMillisOverflowCheck = millis();
|
||||
}
|
||||
|
||||
void update_values_inverter() {
|
||||
|
|
|
@ -238,6 +238,8 @@ typedef struct {
|
|||
} DATALAYER_SYSTEM_INFO_TYPE;
|
||||
|
||||
typedef struct {
|
||||
/** Millis rollover count. Increments every 49.7 days. Used for keeping track on events */
|
||||
uint8_t millisrolloverCount = 0;
|
||||
#ifdef FUNCTION_TIME_MEASUREMENT
|
||||
/** Core task measurement variable */
|
||||
int64_t core_task_max_us = 0;
|
||||
|
|
|
@ -68,8 +68,6 @@ static void update_bms_status(void);
|
|||
static void log_event(EVENTS_ENUM_TYPE event, uint8_t millisrolloverCount, uint32_t timestamp, uint8_t data);
|
||||
static void print_event_log(void);
|
||||
|
||||
uint8_t millisrolloverCount = 0;
|
||||
|
||||
/* Initialization function */
|
||||
void init_events(void) {
|
||||
|
||||
|
@ -227,13 +225,6 @@ void set_event_latched(EVENTS_ENUM_TYPE event, uint8_t data) {
|
|||
}
|
||||
|
||||
void clear_event(EVENTS_ENUM_TYPE event) {
|
||||
//Not related to clearing, but good time to check if we have rollover on millis
|
||||
currentMillis = millis();
|
||||
if (currentMillis < lastMillis) { // Overflow detected
|
||||
millisrolloverCount++;
|
||||
}
|
||||
lastMillis = currentMillis;
|
||||
|
||||
if (events.entries[event].state == EVENT_STATE_ACTIVE) {
|
||||
events.entries[event].state = EVENT_STATE_INACTIVE;
|
||||
update_event_level();
|
||||
|
@ -505,7 +496,7 @@ static void set_event(EVENTS_ENUM_TYPE event, uint8_t data, bool latched) {
|
|||
|
||||
// We should set the event, update event info
|
||||
events.entries[event].timestamp = millis();
|
||||
events.entries[event].millisrolloverCount = millisrolloverCount;
|
||||
events.entries[event].millisrolloverCount = datalayer.system.status.millisrolloverCount;
|
||||
events.entries[event].data = data;
|
||||
// Check if the event is latching
|
||||
events.entries[event].state = latched ? EVENT_STATE_ACTIVE_LATCHED : EVENT_STATE_ACTIVE;
|
||||
|
@ -578,8 +569,10 @@ static void log_event(EVENTS_ENUM_TYPE event, uint8_t millisrolloverCount, uint3
|
|||
int entry_address = EE_EVENT_ENTRY_START_ADDRESS + EE_EVENT_ENTRY_SIZE * events.event_log_head_index;
|
||||
|
||||
// Prepare an event block to write
|
||||
EVENT_LOG_ENTRY_TYPE entry = {
|
||||
.event = event, .millisrolloverCount = millisrolloverCount, .timestamp = timestamp, .data = data};
|
||||
EVENT_LOG_ENTRY_TYPE entry = {.event = event,
|
||||
.millisrolloverCount = datalayer.system.status.millisrolloverCount,
|
||||
.timestamp = timestamp,
|
||||
.data = data};
|
||||
|
||||
// Put the event in (what I guess is) the RAM EEPROM mirror, or write buffer
|
||||
EEPROM.put(entry_address, entry);
|
||||
|
|
|
@ -159,8 +159,6 @@ struct EventData {
|
|||
const EVENTS_STRUCT_TYPE* event_pointer;
|
||||
};
|
||||
|
||||
extern uint8_t millisrolloverCount; // number of times millis rollovers
|
||||
|
||||
const char* get_event_enum_string(EVENTS_ENUM_TYPE event);
|
||||
const char* get_event_message_string(EVENTS_ENUM_TYPE event);
|
||||
const char* get_event_level_string(EVENTS_ENUM_TYPE event);
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#include "events_html.h"
|
||||
#include "../../datalayer/datalayer.h"
|
||||
|
||||
const char EVENTS_HTML_START[] = R"=====(
|
||||
<style>body{background-color:#000;color:#fff}.event-log{display:flex;flex-direction:column}.event{display:flex;flex-wrap:wrap;border:1px solid #fff;padding:10px}.event>div{flex:1;min-width:100px;max-width:90%;word-break:break-word}</style><div style="background-color:#303e47;padding:10px;margin-bottom:10px;border-radius:25px"><div class="event-log"><div class="event" style="background-color:#1e2c33;font-weight:700"><div>Event Type</div><div>Severity</div><div>Last Event</div><div>Count</div><div>Data</div><div>Message</div></div>
|
||||
|
@ -48,7 +49,7 @@ String events_processor(const String& var) {
|
|||
content.concat("<div class='event'>");
|
||||
content.concat("<div>" + String(get_event_enum_string(event_handle)) + "</div>");
|
||||
content.concat("<div>" + String(get_event_level_string(event_handle)) + "</div>");
|
||||
content.concat("<div class='sec-ago'>" + String(millisrolloverCount) + ";" +
|
||||
content.concat("<div class='sec-ago'>" + String(datalayer.system.status.millisrolloverCount) + ";" +
|
||||
String(timestamp_now - event_pointer->timestamp) + "</div>");
|
||||
content.concat("<div>" + String(event_pointer->occurences) + "</div>");
|
||||
content.concat("<div>" + String(event_pointer->data) + "</div>");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue