Skip to content

Commit

Permalink
fixed some bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
nopeslide authored and jonathan-may committed Jan 27, 2021
1 parent d059634 commit 4fbb83d
Show file tree
Hide file tree
Showing 7 changed files with 292 additions and 111 deletions.
33 changes: 13 additions & 20 deletions parts/esp32-components/lifesensor_common/include/logger.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,14 @@

#include <stddef.h>

#define LOG_UINT(LOGGER,SCOPE,PTR,NAME) LOGGER->log_uint(SCOPE,#NAME,(PTR)->NAME)
#define LOG_INT(LOGGER,SCOPE,PTR,NAME) LOGGER->log_int(SCOPE,#NAME,(PTR)->NAME)
#define LOG_FLOAT(LOGGER,SCOPE,PTR,NAME) LOGGER->log_float(SCOPE,#NAME,(PTR)->NAME)
#define LOG_CHAR(LOGGER,SCOPE,PTR,NAME) LOGGER->log_char(SCOPE,#NAME,(PTR)->NAME)
#define LOG_STR(LOGGER,SCOPE,PTR,NAME) LOGGER->log_str(SCOPE,#NAME,(PTR)->NAME)
#define LOG_PTR(LOGGER,SCOPE,PTR,NAME) LOGGER->log_ptr(SCOPE,#NAME,(PTR)->NAME)

enum lifesensor_logger_scope_type {
LIFESENSOR_LOGGER_SCOPE_NONE,
LIFESENSOR_LOGGER_SCOPE_LIST,
LIFESENSOR_LOGGER_SCOPE_MAP
};

struct lifesensor_logger_scope {
void (*printf)(const char *fmt, ...);
int (*printf)(const char *fmt, ...);
enum lifesensor_logger_scope_type type;
size_t entries;
size_t level;
Expand All @@ -42,33 +35,33 @@ struct lifesensor_logger {

void (*log_uint)(
struct lifesensor_logger_scope* scope,
char *name,
unsigned long int value
unsigned long int value,
char *name
);
void (*log_int)(
struct lifesensor_logger_scope* scope,
char *name,
long int value
long int value,
char *name
);
void (*log_float)(
struct lifesensor_logger_scope* scope,
char *name,
float value
float value,
char *name
);
void (*log_char)(
struct lifesensor_logger_scope* scope,
char *name,
char value
char value,
char *name
);
void (*log_str)(
struct lifesensor_logger_scope* scope,
char *name,
char *value
char *value,
char *name
);
void (*log_ptr)(
struct lifesensor_logger_scope* scope,
char *name,
void *value
void *value,
char *name
);
};
typedef struct lifesensor_logger Lifesensor_logger;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
#ifndef LIFESENSOR_COMMON_LOGGER_JSON_H
#define LIFESENSOR_COMMON_LOGGER_JSON_H

#include "logger_json.h"
#include "logger.h"

lifesensor_logger_yaml_init(
void
lifesensor_logger_json_init(
Lifesensor_logger *logger,
Lifesensor_logger_scope *scope);
Lifesensor_logger_scope *scope,
int (*printf)(const char *fmt, ...));

#endif
12 changes: 12 additions & 0 deletions parts/esp32-components/lifesensor_common/include/logger_yaml.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#ifndef LIFESENSOR_COMMON_LOGGER_YAML_H
#define LIFESENSOR_COMMON_LOGGER_YAML_H

#include "logger.h"

void
lifesensor_logger_yaml_init(
Lifesensor_logger *logger,
Lifesensor_logger_scope *scope,
int (*printf)(const char *fmt, ...));

#endif
5 changes: 3 additions & 2 deletions parts/esp32-components/lifesensor_common/include/module.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,16 @@
#define LIFESENSOR_COMMON_MODULE_H

#include "logger.h"
#include "macro/map.h"
#include <stddef.h>

#define INIT_LIFESENSOR_MODULE(TYPE, NAME, INIT, DUMP, /* SUBMODULES */...) \
{ \
.parent = NULL, \
.type = #TYPE, \
.name = (NAME), \
.init(INIT), \
.dump(DUMP), \
.init = (INIT), \
.dump = (DUMP), \
.submodule_offsets = (ptrdiff_t[]){__VA_OPT__(MAP1(offsetof, TYPE, __VA_ARGS__), ) 0}, \
}

Expand Down
156 changes: 82 additions & 74 deletions parts/esp32-components/lifesensor_common/src/logger_json.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,152 +2,160 @@
#include "logger.h"

static inline void
_lifesensor_logger_yaml_comma(
Lifesensor_logger_scope *scope
){
if (scope->entries++) {
_lifesensor_logger_json_comma(
Lifesensor_logger_scope *scope)
{
if (scope->entries++)
{
scope->printf(", ");
}
}

static inline void
_lifesensor_logger_yaml_name(
_lifesensor_logger_json_name(
Lifesensor_logger_scope *scope,
char *name
){
if (name) {
char *name)
{
if (name)
{
scope->printf("\"%s\": ");
}
}

static void
lifesensor_logger_yaml_enter_map(
lifesensor_logger_json_enter_map(
Lifesensor_logger_scope *scope,
Lifesensor_logger_scope *subscope,
char *name)
{
subscope->entries = 0;
subscope->level = scope->level + 1;
if (scope) {
subscope->entries = 0;
subscope->level = scope->level + 1;
subscope->printf = scope->printf;

_lifesensor_logger_json_comma(scope);
_lifesensor_logger_json_name(scope, name);
}

subscope->type = LIFESENSOR_LOGGER_SCOPE_MAP;
subscope->printf = scope->printf;

_lifesensor_logger_yaml_comma(scope);
_lifesensor_logger_yaml_name(scope,name);
scope->printf("{ ");
subscope->printf("{ ");
}

static void
lifesensor_logger_yaml_enter_list(
lifesensor_logger_json_enter_list(
Lifesensor_logger_scope *scope,
Lifesensor_logger_scope *subscope,
char *name)
{
subscope->entries = 0;
subscope->level = scope->level + 1;
if (scope) {
subscope->entries = 0;
subscope->level = scope->level + 1;
subscope->printf = scope->printf;

_lifesensor_logger_json_comma(scope);
_lifesensor_logger_json_name(scope, name);
}

subscope->type = LIFESENSOR_LOGGER_SCOPE_LIST;
subscope->printf = scope->printf;

_lifesensor_logger_yaml_comma(scope);
_lifesensor_logger_yaml_name(scope,name);
scope->printf("[ ");
subscope->printf("[ ");
}

static void
lifesensor_logger_yaml_exit(
lifesensor_logger_json_exit(
Lifesensor_logger_scope *scope,
Lifesensor_logger_scope *subscope)
{
switch(subscope->type) {
case LIFESENSOR_LOGGER_SCOPE_MAP:
scope->printf(" }");
break;
case LIFESENSOR_LOGGER_SCOPE_LIST:
scope->printf(" ]");
break;
switch (subscope->type)
{
case LIFESENSOR_LOGGER_SCOPE_MAP:
subscope->printf(" }");
break;
case LIFESENSOR_LOGGER_SCOPE_LIST:
subscope->printf(" ]");
break;
}
}

static void
lifesensor_logger_yaml_log_uint(
lifesensor_logger_json_log_uint(
Lifesensor_logger_scope *scope,
char *name,
unsigned long int value)
unsigned long int value,
char *name)
{
_lifesensor_logger_yaml_comma(scope);
_lifesensor_logger_yaml_name(scope, name);
_lifesensor_logger_json_comma(scope);
_lifesensor_logger_json_name(scope, name);
scope->printf("%+lu", value);
}

static void
lifesensor_logger_yaml_log_int(
lifesensor_logger_json_log_int(
Lifesensor_logger_scope *scope,
char *name,
long int value)
long int value,
char *name)
{
_lifesensor_logger_yaml_comma(scope);
_lifesensor_logger_yaml_name(scope, name);
_lifesensor_logger_json_comma(scope);
_lifesensor_logger_json_name(scope, name);
scope->printf("%+ld", value);
}

static void
lifesensor_logger_yaml_log_float(
lifesensor_logger_json_log_float(
Lifesensor_logger_scope *scope,
char *name,
float value)
float value,
char *name)
{
_lifesensor_logger_yaml_comma(scope);
_lifesensor_logger_yaml_name(scope, name);
_lifesensor_logger_json_comma(scope);
_lifesensor_logger_json_name(scope, name);
scope->printf("%+G", value);
}

static void
lifesensor_logger_yaml_log_char(
lifesensor_logger_json_log_char(
Lifesensor_logger_scope *scope,
char *name,
char value)
char value,
char *name)
{
_lifesensor_logger_yaml_comma(scope);
_lifesensor_logger_yaml_name(scope, name);
_lifesensor_logger_json_comma(scope);
_lifesensor_logger_json_name(scope, name);
scope->printf("\"%c\"", value);
}

static void
lifesensor_logger_yaml_log_str(
lifesensor_logger_json_log_str(
Lifesensor_logger_scope *scope,
char *name,
char *value)
char *value,
char *name)
{
_lifesensor_logger_yaml_comma(scope);
_lifesensor_logger_yaml_name(scope, name);
_lifesensor_logger_json_comma(scope);
_lifesensor_logger_json_name(scope, name);
scope->printf("\"%s\"", value);
}

static void
lifesensor_logger_yaml_log_ptr(
lifesensor_logger_json_log_ptr(
Lifesensor_logger_scope *scope,
char *name,
void *value)
void *value,
char *name)
{
_lifesensor_logger_yaml_comma(scope);
_lifesensor_logger_yaml_name(scope, name);
_lifesensor_logger_json_comma(scope);
_lifesensor_logger_json_name(scope, name);
scope->printf("\"0x%x\"", value);
}

void
lifesensor_logger_yaml_init(
void lifesensor_logger_json_init(
Lifesensor_logger *logger,
Lifesensor_logger_scope *scope,
void (*printf)(const char* fmt, ...))
int (*printf)(const char *fmt, ...))
{
logger->enter_map = &lifesensor_logger_yaml_enter_map;
logger->enter_list = &lifesensor_logger_yaml_enter_list;
logger->exit = &lifesensor_logger_yaml_exit;
logger->log_uint = &lifesensor_logger_yaml_log_uint;
logger->log_int = &lifesensor_logger_yaml_log_int;
logger->log_float = &lifesensor_logger_yaml_log_float;
logger->log_char = &lifesensor_logger_yaml_log_char;
logger->log_str = &lifesensor_logger_yaml_log_str;
logger->log_ptr = &lifesensor_logger_yaml_log_ptr;
logger->enter_map = &lifesensor_logger_json_enter_map;
logger->enter_list = &lifesensor_logger_json_enter_list;
logger->exit = &lifesensor_logger_json_exit;
logger->log_uint = &lifesensor_logger_json_log_uint;
logger->log_int = &lifesensor_logger_json_log_int;
logger->log_float = &lifesensor_logger_json_log_float;
logger->log_char = &lifesensor_logger_json_log_char;
logger->log_str = &lifesensor_logger_json_log_str;
logger->log_ptr = &lifesensor_logger_json_log_ptr;

scope->type = LIFESENSOR_LOGGER_SCOPE_NONE;
scope->entries = 0;
Expand Down
Loading

0 comments on commit 4fbb83d

Please sign in to comment.