Added ability to intercept log data for future GUI live log viewer.
This commit is contained in:
parent
8d5d5add73
commit
f445a6ef57
3 changed files with 58 additions and 30 deletions
|
@ -251,8 +251,8 @@ int main(int argc, char *argv[]) {
|
||||||
__packetThreadData = packetThreadDataCreate(NULL);
|
__packetThreadData = packetThreadDataCreate(NULL);
|
||||||
packetSenderRegister(comPacketSender);
|
packetSenderRegister(comPacketSender);
|
||||||
|
|
||||||
taskCreate(taskComDebugLoop, NULL);
|
//taskCreate(taskComDebugLoop, NULL);
|
||||||
//taskCreate(taskWelcome, NULL);
|
taskCreate(taskWelcome, NULL);
|
||||||
taskCreate(taskGuiEventLoop, NULL);
|
taskCreate(taskGuiEventLoop, NULL);
|
||||||
|
|
||||||
taskRun();
|
taskRun();
|
||||||
|
|
78
shared/log.c
78
shared/log.c
|
@ -21,15 +21,31 @@
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
||||||
|
|
||||||
static FILE *_log = NULL;
|
static FILE *_log = NULL;
|
||||||
static uint8_t _ourHandle = 0;
|
static uint8_t _ourHandle = 0;
|
||||||
|
static char *_logBuffer = NULL;
|
||||||
|
static uint16_t _logBufferSize = 0;
|
||||||
|
static logCallback _logCallback = NULL;
|
||||||
|
|
||||||
|
void logCallbackSet(logCallback callback) {
|
||||||
|
_logCallback = csallback;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void logClose(void) {
|
||||||
|
if (_log && _ourHandle) {
|
||||||
|
fclose(_log);
|
||||||
|
_ourHandle = 0;
|
||||||
|
}
|
||||||
|
DEL(_logBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
uint8_t logOpen(char *filename, uint8_t append) {
|
uint8_t logOpen(char *filename, uint8_t append) {
|
||||||
_log = fopen(filename, append ? "a" : "w");
|
_log = fopen(filename, append ? "a" : "w");
|
||||||
if (_log) {
|
if (_log) {
|
||||||
return 1;
|
|
||||||
_ourHandle = 1;
|
_ourHandle = 1;
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -40,34 +56,42 @@ void logOpenByHandle(FILE *handle) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void logClose(void) {
|
|
||||||
if (_log && _ourHandle) {
|
|
||||||
fclose(_log);
|
|
||||||
_ourHandle = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void logWrite(char *format, ...) {
|
void logWrite(char *format, ...) {
|
||||||
va_list args;
|
va_list args = { 0 };
|
||||||
|
va_list args2 = { 0 };
|
||||||
va_start(args, format);
|
uint16_t length = 0;
|
||||||
|
|
||||||
#ifdef __linux__
|
|
||||||
// Also output to stdout on Linux.
|
|
||||||
va_list args2;
|
|
||||||
va_copy(args2, args);
|
|
||||||
vfprintf(stdout, format, args2);
|
|
||||||
fflush(stdout);
|
|
||||||
va_end(args2);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (_log) {
|
if (_log) {
|
||||||
vfprintf(_log, format, args);
|
va_start(args, format);
|
||||||
fflush(_log);
|
va_copy(args2, args);
|
||||||
}
|
|
||||||
|
|
||||||
va_end(args);
|
// Attempt to write into current log buffer.
|
||||||
|
length = vsnprintf(_logBuffer, _logBufferSize, format, args);
|
||||||
|
|
||||||
|
// Did it fit?
|
||||||
|
if (length >= _logBufferSize) {
|
||||||
|
// Nope. Resize buffer to fit plus a bit more.
|
||||||
|
if (_logBuffer) free(_logBuffer);
|
||||||
|
_logBufferSize = length + 32;
|
||||||
|
_logBuffer = (char *)malloc(_logBufferSize);
|
||||||
|
// Do it again.
|
||||||
|
vsnprintf(_logBuffer, _logBufferSize, format, args2);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __linux__
|
||||||
|
// Also output to stdout on Linux.
|
||||||
|
fprintf(stdout, "%s", _logBuffer);
|
||||||
|
fflush(stdout);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (_logCallback) _logCallback(_logBuffer);
|
||||||
|
|
||||||
|
fprintf(_log, "%s", _logBuffer);
|
||||||
|
fflush(_log);
|
||||||
|
|
||||||
|
va_end(args2);
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -25,9 +25,13 @@
|
||||||
#include "os.h"
|
#include "os.h"
|
||||||
|
|
||||||
|
|
||||||
|
typedef void (*logCallback)(char *message);
|
||||||
|
|
||||||
|
|
||||||
|
void logCallbackSet(logCallback callback);
|
||||||
|
void logClose(void);
|
||||||
uint8_t logOpen(char *filename, uint8_t append);
|
uint8_t logOpen(char *filename, uint8_t append);
|
||||||
void logOpenByHandle(FILE *handle);
|
void logOpenByHandle(FILE *handle);
|
||||||
void logClose(void);
|
|
||||||
void logWrite(char *format, ...);
|
void logWrite(char *format, ...);
|
||||||
void logWriteToFileOnly(char *format, ...);
|
void logWriteToFileOnly(char *format, ...);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue