mirror of
https://github.com/dalathegreat/Battery-Emulator.git
synced 2025-10-05 02:39:57 +02:00
Merge pull request #1357 from jonny5532/feature/improve-web-log
Make web log output show in correct order.
This commit is contained in:
commit
ff0ca99051
1 changed files with 66 additions and 2 deletions
|
@ -4,8 +4,45 @@
|
||||||
#include "index_html.h"
|
#include "index_html.h"
|
||||||
|
|
||||||
#if defined(DEBUG_VIA_WEB) || defined(LOG_TO_SD)
|
#if defined(DEBUG_VIA_WEB) || defined(LOG_TO_SD)
|
||||||
|
char* strnchr(const char* s, int c, size_t n) {
|
||||||
|
// Like strchr, but only searches the first 'n' bytes of the string.
|
||||||
|
|
||||||
|
if (s == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Iterate through the string up to 'n' characters or until a null terminator is found.
|
||||||
|
for (size_t i = 0; i < n && s[i] != '\0'; ++i) {
|
||||||
|
if (s[i] == c) {
|
||||||
|
// Character found, return a pointer to it.
|
||||||
|
return (char*)&s[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the character to be found is the null terminator, and we haven't exceeded
|
||||||
|
// 'n' bytes, check if the null terminator is at the current position.
|
||||||
|
if (c == '\0') {
|
||||||
|
for (size_t i = 0; i < n; ++i) {
|
||||||
|
if (s[i] == '\0') {
|
||||||
|
return (char*)&s[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Character not found within the first 'n' bytes.
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
String debug_logger_processor(void) {
|
String debug_logger_processor(void) {
|
||||||
String content = String(index_html_header);
|
String content = String();
|
||||||
|
// Reserve enough space for the content to avoid reallocations.
|
||||||
|
if (!content.reserve(1000 + sizeof(datalayer.system.info.logged_can_messages))) {
|
||||||
|
if (content.reserve(15)) {
|
||||||
|
content += "Out of memory.";
|
||||||
|
}
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
content += index_html_header;
|
||||||
// Page format
|
// Page format
|
||||||
content += "<style>";
|
content += "<style>";
|
||||||
content += "body { background-color: black; color: white; font-family: Arial, sans-serif; }";
|
content += "body { background-color: black; color: white; font-family: Arial, sans-serif; }";
|
||||||
|
@ -28,7 +65,34 @@ String debug_logger_processor(void) {
|
||||||
|
|
||||||
// Start a new block for the debug log messages
|
// Start a new block for the debug log messages
|
||||||
content += "<PRE style='text-align: left'>";
|
content += "<PRE style='text-align: left'>";
|
||||||
content += String(datalayer.system.info.logged_can_messages);
|
size_t offset = datalayer.system.info.logged_can_messages_offset;
|
||||||
|
// If we're mid-buffer, print the older part first.
|
||||||
|
if (offset > 0 && offset < (sizeof(datalayer.system.info.logged_can_messages) - 1)) {
|
||||||
|
// Find the next newline after the current offset. The offset will always be
|
||||||
|
// before the penultimate character, so (offset + 1) will be the final '\0'
|
||||||
|
// or earlier.
|
||||||
|
|
||||||
|
char* next_newline = strnchr(&datalayer.system.info.logged_can_messages[offset + 1], '\n',
|
||||||
|
sizeof(datalayer.system.info.logged_can_messages) - offset - 1);
|
||||||
|
|
||||||
|
if (next_newline != NULL) {
|
||||||
|
// We found a newline, so append from the character after that. We check
|
||||||
|
// the string length to ensure we don't add any intermediate '\0'
|
||||||
|
// characters.
|
||||||
|
content.concat(next_newline + 1,
|
||||||
|
strnlen(next_newline + 1, sizeof(datalayer.system.info.logged_can_messages) - offset - 2));
|
||||||
|
} else {
|
||||||
|
// No newline found, so append from the next character after the offset to
|
||||||
|
// the end of the buffer. We check the string length to ensure we don't
|
||||||
|
// add any intermediate '\0' characters.
|
||||||
|
content.concat(&datalayer.system.info.logged_can_messages[offset + 1],
|
||||||
|
strnlen(&datalayer.system.info.logged_can_messages[offset + 1],
|
||||||
|
sizeof(datalayer.system.info.logged_can_messages) - offset - 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Append the first part of the buffer up to the current write offset (which
|
||||||
|
// points to the first \0).
|
||||||
|
content.concat(datalayer.system.info.logged_can_messages, offset);
|
||||||
content += "</PRE>";
|
content += "</PRE>";
|
||||||
|
|
||||||
// Add JavaScript for navigation
|
// Add JavaScript for navigation
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue