mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-05 10:49:42 +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
|
uint16_t intervalUpdateValues = INTERVAL_1_S; // Interval at which to update inverter values / Modbus registers
|
||||||
unsigned long previousMillis10ms = 0;
|
unsigned long previousMillis10ms = 0;
|
||||||
unsigned long previousMillisUpdateVal = 0;
|
unsigned long previousMillisUpdateVal = 0;
|
||||||
|
unsigned long lastMillisOverflowCheck = 0;
|
||||||
// Task time measurement for debugging and for setting CPU load events
|
// Task time measurement for debugging and for setting CPU load events
|
||||||
int64_t core_task_time_us;
|
int64_t core_task_time_us;
|
||||||
MyTimer core_task_timer_10s(INTERVAL_10_S);
|
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;
|
datalayer.battery.status.reported_remaining_capacity_Wh = datalayer.battery2.status.remaining_capacity_Wh;
|
||||||
}
|
}
|
||||||
#endif // DOUBLE_BATTERY
|
#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() {
|
void update_values_inverter() {
|
||||||
|
|
|
@ -238,6 +238,8 @@ typedef struct {
|
||||||
} DATALAYER_SYSTEM_INFO_TYPE;
|
} DATALAYER_SYSTEM_INFO_TYPE;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
/** Millis rollover count. Increments every 49.7 days. Used for keeping track on events */
|
||||||
|
uint8_t millisrolloverCount = 0;
|
||||||
#ifdef FUNCTION_TIME_MEASUREMENT
|
#ifdef FUNCTION_TIME_MEASUREMENT
|
||||||
/** Core task measurement variable */
|
/** Core task measurement variable */
|
||||||
int64_t core_task_max_us = 0;
|
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 log_event(EVENTS_ENUM_TYPE event, uint8_t millisrolloverCount, uint32_t timestamp, uint8_t data);
|
||||||
static void print_event_log(void);
|
static void print_event_log(void);
|
||||||
|
|
||||||
uint8_t millisrolloverCount = 0;
|
|
||||||
|
|
||||||
/* Initialization function */
|
/* Initialization function */
|
||||||
void init_events(void) {
|
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) {
|
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) {
|
if (events.entries[event].state == EVENT_STATE_ACTIVE) {
|
||||||
events.entries[event].state = EVENT_STATE_INACTIVE;
|
events.entries[event].state = EVENT_STATE_INACTIVE;
|
||||||
update_event_level();
|
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
|
// We should set the event, update event info
|
||||||
events.entries[event].timestamp = millis();
|
events.entries[event].timestamp = millis();
|
||||||
events.entries[event].millisrolloverCount = millisrolloverCount;
|
events.entries[event].millisrolloverCount = datalayer.system.status.millisrolloverCount;
|
||||||
events.entries[event].data = data;
|
events.entries[event].data = data;
|
||||||
// Check if the event is latching
|
// Check if the event is latching
|
||||||
events.entries[event].state = latched ? EVENT_STATE_ACTIVE_LATCHED : EVENT_STATE_ACTIVE;
|
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;
|
int entry_address = EE_EVENT_ENTRY_START_ADDRESS + EE_EVENT_ENTRY_SIZE * events.event_log_head_index;
|
||||||
|
|
||||||
// Prepare an event block to write
|
// Prepare an event block to write
|
||||||
EVENT_LOG_ENTRY_TYPE entry = {
|
EVENT_LOG_ENTRY_TYPE entry = {.event = event,
|
||||||
.event = event, .millisrolloverCount = millisrolloverCount, .timestamp = timestamp, .data = data};
|
.millisrolloverCount = datalayer.system.status.millisrolloverCount,
|
||||||
|
.timestamp = timestamp,
|
||||||
|
.data = data};
|
||||||
|
|
||||||
// Put the event in (what I guess is) the RAM EEPROM mirror, or write buffer
|
// Put the event in (what I guess is) the RAM EEPROM mirror, or write buffer
|
||||||
EEPROM.put(entry_address, entry);
|
EEPROM.put(entry_address, entry);
|
||||||
|
|
|
@ -159,8 +159,6 @@ struct EventData {
|
||||||
const EVENTS_STRUCT_TYPE* event_pointer;
|
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_enum_string(EVENTS_ENUM_TYPE event);
|
||||||
const char* get_event_message_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);
|
const char* get_event_level_string(EVENTS_ENUM_TYPE event);
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "events_html.h"
|
#include "events_html.h"
|
||||||
|
#include "../../datalayer/datalayer.h"
|
||||||
|
|
||||||
const char EVENTS_HTML_START[] = R"=====(
|
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>
|
<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 class='event'>");
|
||||||
content.concat("<div>" + String(get_event_enum_string(event_handle)) + "</div>");
|
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>" + 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>");
|
String(timestamp_now - event_pointer->timestamp) + "</div>");
|
||||||
content.concat("<div>" + String(event_pointer->occurences) + "</div>");
|
content.concat("<div>" + String(event_pointer->occurences) + "</div>");
|
||||||
content.concat("<div>" + String(event_pointer->data) + "</div>");
|
content.concat("<div>" + String(event_pointer->data) + "</div>");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue