[update][bflog] update bflog macro

This commit is contained in:
jzlv 2022-11-25 20:17:29 +08:00
parent 8d6352419a
commit 53323e2c62
5 changed files with 288 additions and 192 deletions

View file

@ -5,5 +5,9 @@ sdk_add_compile_definitions(-DCONFIG_BFLOG)
if(CONFIG_BFLOG_USER)
sdk_add_compile_definitions(-DBFLOG_USER)
sdk_add_compile_definitions(-DCONFIG_BFLOG_USER)
endif()
if(CONFIG_BFLOG_DEBUG)
sdk_add_compile_definitions(-DCONFIG_BFLOG_DEBUG)
endif()

View file

@ -81,7 +81,7 @@
* @{
*/
#ifdef BFLOG_DEBUG_ENABLE
#ifdef CONFIG_BFLOG_DEBUG
#define _BFLOG_CHECK(_expr, _ret) \
if (!(_expr)) \
return _ret
@ -89,6 +89,8 @@
#define _BFLOG_CHECK(_expr, _ret) ((void)0)
#endif
#define _bflog_t(_ptr) ((bflog_t *)(_ptr))
#define _msg_t(_ptr) ((struct _bflog_msg *)(_ptr))
#define _direct_t(_ptr) ((bflog_direct_t *)(_ptr))
@ -170,8 +172,9 @@ static char *bflog_dummy_string = "";
/**
* @brief dummy function
*/
static void dummy(void)
static int dummy(void)
{
return 0;
}
/** @addtogroup BFLOG_TIMESTAMP
@ -424,7 +427,7 @@ static void queue_get(bflog_t *log, struct _bflog_msg *msg)
* @param size pool size
* @return int
*/
int bflog_create(bflog_t *log, void *pool, uint16_t size, uint8_t mode)
int bflog_create_s(bflog_t *log, void *pool, uint16_t size, uint8_t mode)
{
_BFLOG_CHECK(log != NULL, -1);
_BFLOG_CHECK(pool != NULL, -1);
@ -472,7 +475,9 @@ int bflog_delete_s(bflog_t *log)
return 0;
}
log->enter_critical();
if (log->enter_critical()) {
return -1;
}
switch (log->status) {
case BFLOG_STATUS_READY:
@ -521,7 +526,9 @@ int bflog_append_s(bflog_t *log, bflog_direct_t *direct)
return -1;
}
log->enter_critical();
if (log->enter_critical()) {
return -1;
}
switch (log->status) {
case BFLOG_STATUS_READY:
@ -570,7 +577,9 @@ int bflog_remove_s(bflog_t *log, bflog_direct_t *direct)
return -1;
}
log->enter_critical();
if (log->enter_critical()) {
return -1;
}
switch (log->status) {
case BFLOG_STATUS_READY:
@ -625,7 +634,9 @@ int bflog_suspend_s(bflog_t *log)
return -1;
}
log->enter_critical();
if (log->enter_critical()) {
return -1;
}
switch (log->status) {
case BFLOG_STATUS_SUSPEND:
@ -665,7 +676,10 @@ int bflog_resume_s(bflog_t *log)
return -1;
}
log->enter_critical();
if (log->enter_critical()) {
printf("3");
return -1;
}
switch (log->status) {
case BFLOG_STATUS_RUNNING:
@ -705,7 +719,29 @@ int bflog_control_s(bflog_t *log, uint32_t command, uint32_t param)
return -1;
}
log->enter_critical();
switch (command) {
case BFLOG_CMD_ENTER_CRITICAL:
if ((void *)param == NULL) {
log->enter_critical = dummy;
} else {
log->enter_critical = (void *)param;
}
return 0;
case BFLOG_CMD_EXIT_CRITICAL: {
if ((void *)param == NULL) {
log->exit_critical = dummy;
} else {
log->exit_critical = (void *)param;
}
}
return 0;
default:
break;
}
if (log->enter_critical()) {
return -1;
}
switch (log->status) {
case BFLOG_STATUS_READY:
@ -736,17 +772,12 @@ int bflog_control_s(bflog_t *log, uint32_t command, uint32_t param)
log->queue.rpos = 0;
log->queue.free = log->queue.size;
break;
case BFLOG_CMD_ENTER_CRITICAL:
log->enter_critical = (void *)param;
break;
case BFLOG_CMD_EXIT_CRITICAL: {
void (*exit_critical)(void) = log->exit_critical;
log->exit_critical = (void *)param;
exit_critical();
}
return 0;
case BFLOG_CMD_FLUSH_NOTICE:
if ((void *)param == NULL) {
log->flush_notice = dummy;
} else {
log->flush_notice = (void *)param;
}
break;
case BFLOG_CMD_MODE:
log->mode = param & 0xff;
@ -774,10 +805,10 @@ int bflog_control_s(bflog_t *log, uint32_t command, uint32_t param)
* @param ... format params
* @return int
*/
void bflog_s(bflog_t *log, uint8_t level, const char *const tag, const char *const file, const char *const func, const long line, const char *format, ...)
int bflog_s(void *log, uint8_t level, const char *const tag, const char *const file, const char *const func, const long line, const char *format, ...)
{
_BFLOG_CHECK(log != NULL, );
_BFLOG_CHECK(format != NULL, );
_BFLOG_CHECK(log != NULL, -1);
_BFLOG_CHECK(format != NULL, -1);
int ret;
va_list args;
@ -785,28 +816,28 @@ void bflog_s(bflog_t *log, uint8_t level, const char *const tag, const char *con
uint16_t size = sizeof(struct _bflog_msg);
/*!< working only during running and suspend */
switch (log->status) {
switch (_bflog_t(log)->status) {
case BFLOG_STATUS_SUSPEND:
case BFLOG_STATUS_RUNNING:
break;
default:
return;
return -1;
}
/*!< ignore high level */
if (level > log->level) {
return;
if (level > _bflog_t(log)->level) {
return -1;
}
/*!< record clock tick */
if (log->flags & BFLOG_FLAG_CLK) {
if (_bflog_t(log)->flags & BFLOG_FLAG_CLK) {
_msg_t(msg)->clk = bflog_clock();
} else {
_msg_t(msg)->clk = 0;
}
/*!< record timestamp */
if (log->flags & BFLOG_FLAG_TIME) {
if (_bflog_t(log)->flags & BFLOG_FLAG_TIME) {
_msg_t(msg)->time = bflog_time();
} else {
_msg_t(msg)->time = 0;
@ -816,35 +847,35 @@ void bflog_s(bflog_t *log, uint8_t level, const char *const tag, const char *con
_msg_t(msg)->level = level;
/*!< record tag, only record pointer */
if (log->flags & BFLOG_FLAG_TAG) {
if (_bflog_t(log)->flags & BFLOG_FLAG_TAG) {
_msg_t(msg)->tag = tag;
} else {
_msg_t(msg)->tag = bflog_dummy_string;
}
/*!< record func, only record pointer */
if (log->flags & BFLOG_FLAG_FUNC) {
if (_bflog_t(log)->flags & BFLOG_FLAG_FUNC) {
_msg_t(msg)->func = func;
} else {
_msg_t(msg)->func = bflog_dummy_string;
}
/*!< record line */
if (log->flags & BFLOG_FLAG_LINE) {
if (_bflog_t(log)->flags & BFLOG_FLAG_LINE) {
_msg_t(msg)->line = line;
} else {
_msg_t(msg)->line = 0;
}
/*!< record file, only record pointer */
if (log->flags & BFLOG_FLAG_FILE) {
if (_bflog_t(log)->flags & BFLOG_FLAG_FILE) {
_msg_t(msg)->file = file;
} else {
_msg_t(msg)->file = bflog_dummy_string;
}
/*!< record thread, only record pointer */
if (log->flags & BFLOG_FLAG_THREAD) {
if (_bflog_t(log)->flags & BFLOG_FLAG_THREAD) {
_msg_t(msg)->thread = bflog_thread();
} else {
_msg_t(msg)->thread = bflog_dummy_string;
@ -872,28 +903,30 @@ void bflog_s(bflog_t *log, uint8_t level, const char *const tag, const char *con
_msg_t(msg)->size = size;
}
log->enter_critical();
if (_bflog_t(log)->enter_critical()) {
return -1;
}
/*!< working only during running and suspend */
switch (log->status) {
switch (_bflog_t(log)->status) {
case BFLOG_STATUS_SUSPEND:
case BFLOG_STATUS_RUNNING:
break;
default:
log->exit_critical();
return;
_bflog_t(log)->exit_critical();
return -1;
}
queue_put(log, (void *)(&msg));
queue_put(_bflog_t(log), (void *)(&msg));
if (log->mode & BFLOG_MODE_ASYNC) {
log->flush_notice();
log->exit_critical();
return;
if (_bflog_t(log)->mode & BFLOG_MODE_ASYNC) {
_bflog_t(log)->flush_notice();
_bflog_t(log)->exit_critical();
return 0;
}
log->exit_critical();
_bflog_t(log)->exit_critical();
bflog_flush_s(log);
return bflog_flush_s(_bflog_t(log));
}
/**
@ -901,9 +934,9 @@ void bflog_s(bflog_t *log, uint8_t level, const char *const tag, const char *con
* @param log recorder
* @return int
*/
void bflog_flush_s(bflog_t *log)
int bflog_flush_s(void *log)
{
_BFLOG_CHECK(log != NULL, );
_BFLOG_CHECK(log != NULL, -1);
uint8_t msg[BFLOG_LINE_BUFFER_SIZE + sizeof(struct _bflog_msg)];
char buf[BFLOG_LINE_BUFFER_SIZE * 2];
@ -911,45 +944,47 @@ void bflog_flush_s(bflog_t *log)
void *direct;
/*!< working only during running */
switch (log->status) {
switch (_bflog_t(log)->status) {
case BFLOG_STATUS_SUSPEND:
return;
return -1;
case BFLOG_STATUS_RUNNING:
break;
default:
return;
return -1;
}
do {
/*!< reset msg string */
_msg_t(msg)->string[0] = '\0';
log->enter_critical();
if (_bflog_t(log)->enter_critical()) {
return -1;
}
/*!< working only during running */
switch (log->status) {
switch (_bflog_t(log)->status) {
case BFLOG_STATUS_SUSPEND:
log->exit_critical();
return;
_bflog_t(log)->exit_critical();
return -1;
case BFLOG_STATUS_RUNNING:
break;
default:
log->exit_critical();
return;
_bflog_t(log)->exit_critical();
return -1;
}
/*!< get msg(on stack) from queue(on ram) */
queue_get(log, (void *)(&msg));
queue_get(_bflog_t(log), (void *)(&msg));
log->exit_critical();
_bflog_t(log)->exit_critical();
if (_msg_t(msg)->zero != 0) {
if (_msg_t(msg)->zero == 0xbd) {
/*!< no msg */
return;
return -1;
} else {
/*!< error */
return;
return -1;
}
}
@ -959,7 +994,7 @@ void bflog_flush_s(bflog_t *log)
/*!< level */
char *level;
if (log->flags & BFLOG_FLAG_LEVEL) {
if (_bflog_t(log)->flags & BFLOG_FLAG_LEVEL) {
level = bflog_level_strings[_msg_t(msg)->level];
} else {
level = bflog_dummy_string;
@ -972,11 +1007,11 @@ void bflog_flush_s(bflog_t *log)
bflog_unix2time(_msg_t(msg)->time, &tm);
#endif
log->enter_critical();
_bflog_t(log)->enter_critical();
/*!< foreach direct, execute layout to buf(on stack), then output buf(on stack) */
BFLOG_DLIST_FOREACH_NEXT(node, &(log->direct))
BFLOG_DLIST_FOREACH_NEXT(node, &(_bflog_t(log)->direct))
{
log->exit_critical();
_bflog_t(log)->exit_critical();
int size;
direct = BFLOG_DLIST_ENTRY(node, bflog_direct_t, list);
@ -1047,16 +1082,22 @@ void bflog_flush_s(bflog_t *log)
size = BFLOG_LINE_BUFFER_SIZE * 2;
}
if (_direct_t(direct)->lock()) {
/*!< drop log message */
} else {
/*!< call write */
_direct_t(direct)->write(direct, buf, size);
log->enter_critical();
_direct_t(direct)->unlock();
}
log->exit_critical();
_bflog_t(log)->enter_critical();
}
_bflog_t(log)->exit_critical();
} while (1);
return;
return -1;
}
/**
@ -1073,7 +1114,7 @@ void bflog_flush_s(bflog_t *log)
* @param type directed output type
* @return int
*/
int bflog_direct_create(bflog_direct_t *direct, uint8_t type, uint8_t color)
int bflog_direct_create(bflog_direct_t *direct, uint8_t type, uint8_t color, void(*lock), void(*unlock))
{
_BFLOG_CHECK(direct != NULL, -1);
_BFLOG_CHECK(
@ -1093,6 +1134,14 @@ int bflog_direct_create(bflog_direct_t *direct, uint8_t type, uint8_t color)
direct->type = type;
direct->color = color;
if ((lock == NULL) || (unlock == NULL)) {
direct->lock = dummy;
direct->unlock = dummy;
} else {
direct->lock = lock;
direct->unlock = unlock;
}
return 0;
}
@ -1101,7 +1150,7 @@ int bflog_direct_create(bflog_direct_t *direct, uint8_t type, uint8_t color)
* @param direct directed output
* @return int
*/
int bflog_direct_delete(bflog_direct_t *direct)
int bflog_direct_delete_s(bflog_direct_t *direct)
{
_BFLOG_CHECK(direct != NULL, -1);
@ -1112,12 +1161,31 @@ int bflog_direct_delete(bflog_direct_t *direct)
return -1;
}
if (direct->lock()) {
return -1;
}
switch (direct->status) {
case BFLOG_DIRECT_STATUS_INIT:
break;
default:
direct->unlock();
return -1;
}
bflog_dlist_remove(&(direct->list));
direct->write = NULL;
direct->status = BFLOG_DIRECT_STATUS_ILLEGAL;
direct->type = BFLOG_DIRECT_TYPE_ILLEGAL;
direct->lock = dummy;
int (*unlock)(void) = direct->unlock;
direct->unlock = dummy;
unlock();
return 0;
}
@ -1196,7 +1264,7 @@ int bflog_direct_link(bflog_direct_t *direct, bflog_layout_t *layout)
* @param param
* @return int
*/
int bflog_direct_control(bflog_direct_t *direct, uint32_t command, uint32_t param)
int bflog_direct_control_s(bflog_direct_t *direct, uint32_t command, uint32_t param)
{
_BFLOG_CHECK(direct != NULL, -1);
@ -1217,6 +1285,22 @@ int bflog_direct_control(bflog_direct_t *direct, uint32_t command, uint32_t para
direct->color = param != 0;
break;
case BFLOG_DIRECT_CMD_LOCK:
if ((void *)param == NULL) {
direct->lock = dummy;
} else {
direct->lock = (void *)param;
}
break;
case BFLOG_DIRECT_CMD_UNLOCK:
if ((void *)param == NULL) {
direct->unlock = dummy;
} else {
direct->unlock = (void *)param;
}
break;
default:
return -1;
}
@ -1243,14 +1327,14 @@ static void bflog_driect_write_buffer(bflog_direct_t *direct, void *ptr, uint16_
return;
}
int bflog_direct_init_buffer(bflog_direct_t *direct, void *buffer, void *size)
int bflog_direct_init_buffer_s(bflog_direct_t *direct, void *buffer, void *size)
{
/*!< TODO */
(void)bflog_driect_write_buffer;
return 0;
}
int bflog_direct_deinit_buffer(bflog_direct_t *direct)
int bflog_direct_deinit_buffer_s(bflog_direct_t *direct)
{
/*!< TODO */
return 0;
@ -1278,28 +1362,37 @@ static void bflog_direct_write_stream(bflog_direct_t *direct, void *ptr, uint16_
}
/**
* @brief init stream type direct
* @brief init stream type direct, thread safe
* @param direct directed output
* @param stream_output stream output function pointer
* @return int
*/
int bflog_direct_init_stream(bflog_direct_t *direct, uint16_t (*stream_output)(void *, uint16_t))
int bflog_direct_init_stream_s(bflog_direct_t *direct, uint16_t (*stream_output)(void *, uint16_t))
{
_BFLOG_CHECK(direct != NULL, -1);
_BFLOG_CHECK(stream_output != NULL, -1);
if (direct->lock()) {
return -1;
}
if (direct->type != BFLOG_DIRECT_TYPE_STREAM) {
direct->unlock();
return -1;
}
if (direct->status != BFLOG_DIRECT_STATUS_INIT) {
direct->unlock();
return -1;
}
_direct_stream_t(direct)->stream_output = stream_output;
direct->status = BFLOG_DIRECT_STATUS_READY;
direct->write = bflog_direct_write_stream;
direct->unlock();
return 0;
}
@ -1308,10 +1401,29 @@ int bflog_direct_init_stream(bflog_direct_t *direct, uint16_t (*stream_output)(v
* @param direct directed output
* @return int
*/
int bflog_direct_deinit_stream(bflog_direct_t *direct)
int bflog_direct_deinit_stream_s(bflog_direct_t *direct)
{
_BFLOG_CHECK(direct != NULL, -1);
/*!< TODO */
if (direct->type != BFLOG_DIRECT_TYPE_STREAM) {
return -1;
}
if (direct->status != BFLOG_DIRECT_STATUS_READY) {
return -1;
}
if (direct->lock()) {
return -1;
}
direct->status = BFLOG_DIRECT_STATUS_INIT;
direct->write = NULL;
_direct_stream_t(direct)->stream_output = NULL;
direct->unlock();
return 0;
}
@ -1348,31 +1460,26 @@ static void bflog_direct_write_file(bflog_direct_t *direct, void *ptr, uint16_t
* @brief
* @param direct
* @param path
* @param lock
* @param unlock
* @return int
*/
int bflog_direct_init_file(bflog_direct_t *direct, const char *path, void (*lock)(void), void (*unlock)(void))
int bflog_direct_init_file_s(bflog_direct_t *direct, const char *path)
{
_BFLOG_CHECK(direct != NULL, -1);
_BFLOG_CHECK(path != NULL, -1);
char fullpath[256];
if ((lock == NULL) || (unlock == NULL)) {
lock = dummy;
unlock = dummy;
if (direct->lock()) {
return -1;
}
lock();
if (direct->type != BFLOG_DIRECT_TYPE_FILE) {
unlock();
direct->unlock();
return -1;
}
if (direct->status != BFLOG_DIRECT_STATUS_INIT) {
unlock();
direct->unlock();
return -1;
}
@ -1382,18 +1489,16 @@ int bflog_direct_init_file(bflog_direct_t *direct, const char *path, void (*lock
_direct_file_t(direct)->fp = bflog_fopen(fullpath, "a+");
if (_direct_file_t(direct)->fp == NULL) {
unlock();
direct->unlock();
return -1;
}
_direct_file_t(direct)->path = path;
_direct_file_t(direct)->lock = lock;
_direct_file_t(direct)->unlock = unlock;
direct->status = BFLOG_DIRECT_STATUS_READY;
direct->write = bflog_direct_write_file;
unlock();
direct->unlock();
return 0;
}
@ -1403,7 +1508,7 @@ int bflog_direct_init_file(bflog_direct_t *direct, const char *path, void (*lock
* @param direct
* @return int
*/
int bflog_direct_deinit_file(bflog_direct_t *direct)
int bflog_direct_deinit_file_s(bflog_direct_t *direct)
{
_BFLOG_CHECK(direct != NULL, -1);
@ -1415,22 +1520,22 @@ int bflog_direct_deinit_file(bflog_direct_t *direct)
return -1;
}
_direct_file_t(direct)->lock();
if (direct->lock()) {
return -1;
}
if (bflog_fclose(_direct_file_t(direct)->fp)) {
_direct_file_t(direct)->unlock();
direct->unlock();
return -1;
}
direct->status = BFLOG_DIRECT_STATUS_INIT;
direct->write = NULL;
_direct_file_t(direct)->fp = NULL;
_direct_file_t(direct)->path = NULL;
_direct_file_t(direct)->lock = NULL;
void (*unlock)(void) = _direct_file_t(direct)->unlock;
_direct_file_t(direct)->unlock = NULL;
unlock();
direct->unlock();
return 0;
}
@ -1523,11 +1628,9 @@ static void bflog_direct_write_file_time(bflog_direct_t *direct, void *ptr, uint
* @param path file path
* @param interval file rotate interval
* @param keep max keep file count
* @param lock lock function
* @param unlock unlock function
* @return int
*/
int bflog_direct_init_file_time(bflog_direct_t *direct, const char *path, uint32_t interval, uint32_t keep, void (*lock)(void), void (*unlock)(void))
int bflog_direct_init_file_time_s(bflog_direct_t *direct, const char *path, uint32_t interval, uint32_t keep)
{
_BFLOG_CHECK(direct != NULL, -1);
_BFLOG_CHECK(path != NULL, -1);
@ -1540,20 +1643,17 @@ int bflog_direct_init_file_time(bflog_direct_t *direct, const char *path, uint32
char fullpath[256];
if ((lock == NULL) || (unlock == NULL)) {
lock = dummy;
unlock = dummy;
if (direct->lock()) {
return -1;
}
lock();
if (direct->type != BFLOG_DIRECT_TYPE_FILE_TIME) {
unlock();
direct->unlock();
return -1;
}
if (direct->status != BFLOG_DIRECT_STATUS_INIT) {
unlock();
direct->unlock();
return -1;
}
@ -1563,7 +1663,7 @@ int bflog_direct_init_file_time(bflog_direct_t *direct, const char *path, uint32
_direct_file_time_t(direct)->fp = bflog_fopen(fullpath, "a+");
if (_direct_file_time_t(direct)->fp == NULL) {
unlock();
direct->unlock();
return -1;
}
@ -1571,13 +1671,11 @@ int bflog_direct_init_file_time(bflog_direct_t *direct, const char *path, uint32
_direct_file_time_t(direct)->keep = keep;
_direct_file_time_t(direct)->interval = interval;
_direct_file_time_t(direct)->path = path;
_direct_file_time_t(direct)->lock = lock;
_direct_file_time_t(direct)->unlock = unlock;
direct->status = BFLOG_DIRECT_STATUS_READY;
direct->write = bflog_direct_write_file_time;
unlock();
direct->unlock();
return 0;
}
@ -1587,7 +1685,7 @@ int bflog_direct_init_file_time(bflog_direct_t *direct, const char *path, uint32
* @param direct
* @return int
*/
int bflog_direct_deinit_file_time(bflog_direct_t *direct)
int bflog_direct_deinit_file_time_s(bflog_direct_t *direct)
{
_BFLOG_CHECK(direct != NULL, -1);
@ -1599,10 +1697,12 @@ int bflog_direct_deinit_file_time(bflog_direct_t *direct)
return -1;
}
_direct_file_time_t(direct)->lock();
if (direct->lock()) {
return -1;
}
if (bflog_fclose(_direct_file_time_t(direct)->fp)) {
_direct_file_time_t(direct)->unlock();
direct->unlock();
return -1;
}
@ -1610,12 +1710,9 @@ int bflog_direct_deinit_file_time(bflog_direct_t *direct)
direct->write = NULL;
_direct_file_time_t(direct)->fp = NULL;
_direct_file_time_t(direct)->path = NULL;
_direct_file_time_t(direct)->lock = NULL;
_direct_file_time_t(direct)->keep = 0;
void (*unlock)(void) = _direct_file_time_t(direct)->unlock;
_direct_file_time_t(direct)->unlock = NULL;
unlock();
direct->unlock();
return 0;
}
@ -1664,11 +1761,9 @@ static void bflog_direct_write_file_size(bflog_direct_t *direct, void *ptr, uint
* @param path
* @param size
* @param keep
* @param lock
* @param unlock
* @return int
*/
int bflog_direct_init_file_size(bflog_direct_t *direct, const char *path, uint32_t size, uint32_t keep, void (*lock)(void), void (*unlock)(void))
int bflog_direct_init_file_size_s(bflog_direct_t *direct, const char *path, uint32_t size, uint32_t keep)
{
_BFLOG_CHECK(direct != NULL, -1);
_BFLOG_CHECK(path != NULL, -1);
@ -1680,20 +1775,17 @@ int bflog_direct_init_file_size(bflog_direct_t *direct, const char *path, uint32
char fullpath[256];
if ((lock == NULL) || (unlock == NULL)) {
lock = dummy;
unlock = dummy;
if (direct->lock()) {
return -1;
}
lock();
if (direct->type != BFLOG_DIRECT_TYPE_FILE_SIZE) {
unlock();
direct->unlock();
return -1;
}
if (direct->status != BFLOG_DIRECT_STATUS_INIT) {
unlock();
direct->unlock();
return -1;
}
@ -1703,20 +1795,18 @@ int bflog_direct_init_file_size(bflog_direct_t *direct, const char *path, uint32
_direct_file_size_t(direct)->fp = bflog_fopen(fullpath, "a+");
if (_direct_file_size_t(direct)->fp == NULL) {
unlock();
direct->unlock();
return -1;
}
_direct_file_size_t(direct)->keep = keep;
_direct_file_size_t(direct)->size = size;
_direct_file_size_t(direct)->path = path;
_direct_file_size_t(direct)->lock = lock;
_direct_file_size_t(direct)->unlock = unlock;
direct->status = BFLOG_DIRECT_STATUS_READY;
direct->write = bflog_direct_write_file_size;
unlock();
direct->unlock();
return 0;
}
@ -1726,7 +1816,7 @@ int bflog_direct_init_file_size(bflog_direct_t *direct, const char *path, uint32
* @param direct
* @return int
*/
int bflog_direct_deinit_file_size(bflog_direct_t *direct)
int bflog_direct_deinit_file_size_s(bflog_direct_t *direct)
{
_BFLOG_CHECK(direct != NULL, -1);
@ -1738,10 +1828,12 @@ int bflog_direct_deinit_file_size(bflog_direct_t *direct)
return -1;
}
_direct_file_size_t(direct)->lock();
if (direct->lock()) {
return -1;
}
if (bflog_fclose(_direct_file_size_t(direct)->fp)) {
_direct_file_size_t(direct)->unlock();
direct->unlock();
return -1;
}
@ -1749,12 +1841,9 @@ int bflog_direct_deinit_file_size(bflog_direct_t *direct)
direct->write = NULL;
_direct_file_size_t(direct)->fp = NULL;
_direct_file_size_t(direct)->path = NULL;
_direct_file_size_t(direct)->lock = NULL;
_direct_file_size_t(direct)->keep = 0;
void (*unlock)(void) = _direct_file_size_t(direct)->unlock;
_direct_file_size_t(direct)->unlock = NULL;
unlock();
direct->unlock();
return 0;
}

View file

@ -26,7 +26,7 @@
#include <stdint.h>
#ifdef BFLOG_USER
#ifdef CONFIG_BFLOG_USER
#include "bflog_user.h"
#else
#include "bflog_default.h"
@ -272,6 +272,8 @@
*/
#define BFLOG_DIRECT_CMD_ILLEGAL ((uint32_t)0x00)
#define BFLOG_DIRECT_CMD_LEVEL ((uint32_t)0x02)
#define BFLOG_DIRECT_CMD_LOCK ((uint32_t)0x06)
#define BFLOG_DIRECT_CMD_UNLOCK ((uint32_t)0x07)
#define BFLOG_DIRECT_CMD_COLOR ((uint32_t)0x0A)
/**
* @}
@ -400,9 +402,9 @@ struct _bflog_msg {
typedef struct
{
struct _bflog_list direct; /*!< dlist */
void (*enter_critical)(void);
void (*exit_critical)(void);
void (*flush_notice)(void);
int (*enter_critical)(void);
int (*exit_critical)(void);
int (*flush_notice)(void);
uint8_t status;
uint8_t flags;
@ -465,7 +467,9 @@ typedef struct
uint8_t status; \
uint8_t color; \
uint8_t level; \
uint8_t type
uint8_t type; \
int (*lock)(void); \
int (*unlock)(void)
/**
* @brief direct base type
@ -497,8 +501,6 @@ typedef struct
typedef struct
{
_BFLOG_STRUCT_DIRECT_EXTENDS;
void (*lock)(void);
void (*unlock)(void);
void *fp;
const char *path;
} bflog_direct_file_t;
@ -509,8 +511,6 @@ typedef struct
typedef struct
{
_BFLOG_STRUCT_DIRECT_EXTENDS;
void (*lock)(void); /*!< lock */
void (*unlock)(void); /*!< unlock */
void *fp; /*!< file pointer now */
const char *path; /*!< file path */
uint32_t interval;
@ -524,8 +524,6 @@ typedef struct
typedef struct
{
_BFLOG_STRUCT_DIRECT_EXTENDS;
void (*lock)(void);
void (*unlock)(void);
void *fp;
const char *path;
uint32_t size;
@ -540,37 +538,37 @@ extern uint64_t bflog_clock(void);
extern uint32_t bflog_time(void);
extern char *bflog_thread(void);
extern int bflog_create(bflog_t *log, void *pool, uint16_t size, uint8_t mode);
extern int bflog_create_s(bflog_t *log, void *pool, uint16_t size, uint8_t mode);
extern int bflog_delete_s(bflog_t *log);
extern int bflog_append_s(bflog_t *log, bflog_direct_t *direct);
extern int bflog_remove_s(bflog_t *log, bflog_direct_t *direct);
extern int bflog_suspend_s(bflog_t *log);
extern int bflog_resume_s(bflog_t *log);
extern int bflog_control_s(bflog_t *log, uint32_t command, uint32_t param);
extern void bflog_s(bflog_t *log, uint8_t level, const char *const tag, const char *const file, const char *const func, const long line, const char *format, ...);
extern void bflog_flush_s(bflog_t *log);
extern int bflog_s(void *log, uint8_t level, const char *const tag, const char *const file, const char *const func, const long line, const char *format, ...);
extern int bflog_flush_s(void *log);
extern int bflog_direct_create(bflog_direct_t *direct, uint8_t type, uint8_t color);
extern int bflog_direct_delete(bflog_direct_t *direct);
extern int bflog_direct_create(bflog_direct_t *direct, uint8_t type, uint8_t color, void(*lock), void(*unlock));
extern int bflog_direct_delete_s(bflog_direct_t *direct);
extern int bflog_direct_suspend_s(bflog_direct_t *direct);
extern int bflog_direct_resume_s(bflog_direct_t *direct);
extern int bflog_direct_link(bflog_direct_t *direct, bflog_layout_t *layout);
extern int bflog_direct_control(bflog_direct_t *direct, uint32_t command, uint32_t param);
extern int bflog_direct_control_s(bflog_direct_t *direct, uint32_t command, uint32_t param);
extern int bflog_direct_init_buffer(bflog_direct_t *direct, void *buffer, void *size);
extern int bflog_direct_deinit_buffer(bflog_direct_t *direct);
extern int bflog_direct_init_buffer_s(bflog_direct_t *direct, void *buffer, void *size);
extern int bflog_direct_deinit_buffer_s(bflog_direct_t *direct);
extern int bflog_direct_init_stream(bflog_direct_t *direct, uint16_t (*stream_output)(void *, uint16_t));
extern int bflog_direct_deinit_stream(bflog_direct_t *direct);
extern int bflog_direct_init_stream_s(bflog_direct_t *direct, uint16_t (*stream_output)(void *, uint16_t));
extern int bflog_direct_deinit_stream_s(bflog_direct_t *direct);
extern int bflog_direct_init_file(bflog_direct_t *direct, const char *path, void (*lock)(void), void (*unlock)(void));
extern int bflog_direct_deinit_file(bflog_direct_t *direct);
extern int bflog_direct_init_file_s(bflog_direct_t *direct, const char *path);
extern int bflog_direct_deinit_file_s(bflog_direct_t *direct);
extern int bflog_direct_init_file_size(bflog_direct_t *direct, const char *path, uint32_t size, uint32_t keep, void (*lock)(void), void (*unlock)(void));
extern int bflog_direct_deinit_file_size(bflog_direct_t *direct);
extern int bflog_direct_init_file_size_s(bflog_direct_t *direct, const char *path, uint32_t size, uint32_t keep);
extern int bflog_direct_deinit_file_size_s(bflog_direct_t *direct);
extern int bflog_direct_init_file_time(bflog_direct_t *direct, const char *path, uint32_t interval, uint32_t keep, void (*lock)(void), void (*unlock)(void));
extern int bflog_direct_deinit_file_time(bflog_direct_t *direct);
extern int bflog_direct_init_file_time_s(bflog_direct_t *direct, const char *path, uint32_t interval, uint32_t keep);
extern int bflog_direct_deinit_file_time_s(bflog_direct_t *direct);
extern int bflog_layout_create(bflog_layout_t *layout, uint8_t type);
extern int bflog_layout_delete(bflog_layout_t *layout);

View file

@ -28,7 +28,7 @@
#include "bflog.h"
/*!< param check enable */
#define BFLOG_DEBUG_ENABLE
#define CONFIG_BFLOG_DEBUG
/*!< log enable */
#define BFLOG_ENABLE

View file

@ -141,6 +141,7 @@ extern void error_handler(void);
#define _CALL_ERROR() \
do { \
printf("(Call Error Handler)\r\n"); \
LOG_F("Call Error Handler\r\n"); \
LOG_FLUSH(); \
error_handler(); \
@ -148,8 +149,10 @@ extern void error_handler(void);
#define _ASSERT_PARAM(x) \
if ((uint32_t)(x) == 0) { \
printf("(Assertion Faild)\r\n"); \
printf("(%s)\r\n", (const char *)(#x)); \
LOG_F("Assertion Faild\r\n"); \
LOG_F("%s", (const char *)(#x)); \
LOG_F("%s\r\n", (const char *)(#x)); \
LOG_FLUSH(); \
error_handler(); \
}
@ -157,8 +160,10 @@ extern void error_handler(void);
#define _ASSERT_FUNC(x) \
do { \
if ((uint32_t)(x) == 0) { \
printf("(Assertion Faild)\r\n"); \
printf("(%s)\r\n", (const char *)(#x)); \
LOG_F("Assertion Faild\r\n"); \
LOG_F("%s", (const char *)(#x)); \
LOG_F("%s\r\n", (const char *)(#x)); \
LOG_FLUSH(); \
error_handler(); \
} \