blob: 67c5064b2aabf35f0202789074dc67e3f290d547 [file] [log] [blame]
// Copyright (c) 2012 GCT Semiconductor, Inc. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#if !defined(LOG_H_07092008)
#define LOG_H_07092008
#include "global.h"
#define SDK_LOG_TITLE "SDK"
#define SDK_NOW SDK_FORCE
#define SDK_FORCE (1<<0)
#define SDK_ERR (1<<1)
#define SDK_STD_ERR (1<<2)
#define SDK_NOTICE (1<<3)
#define SDK_INFO (1<<4)
#define SDK_DBG (1<<5)
#define SDK_FUNC (1<<6)
#define SDK_API_LOG (1<<7)
#define SDK_LOG_STDOUT (1<<31)
#define SDK_LOG_FILE (1<<30)
#define SDK_LOG_FILE_FLUSH (1<<28) /*Flush log buffer to file*/
#define _LOG_LEVEL_0 (SDK_FORCE|SDK_ERR|SDK_STD_ERR|SDK_API_LOG)
#define _LOG_LEVEL_1 (_LOG_LEVEL_0|SDK_NOTICE|SDK_API_LOG)
#define _LOG_LEVEL_2 (_LOG_LEVEL_1|SDK_INFO|SDK_API_LOG)
#define _LOG_LEVEL_3 (_LOG_LEVEL_2|SDK_DBG|SDK_API_LOG)
#define _LOG_LEVEL_4 (_LOG_LEVEL_3|SDK_FUNC|SDK_API_LOG)
#define SDK_LOG_LEVEL_0 (_LOG_LEVEL_0|SDK_LOG_STDOUT)
#define SDK_LOG_LEVEL_1 (_LOG_LEVEL_1|SDK_LOG_STDOUT)
#define SDK_LOG_LEVEL_2 (_LOG_LEVEL_2|SDK_LOG_STDOUT)
#define SDK_LOG_LEVEL_3 (_LOG_LEVEL_3|SDK_LOG_STDOUT)
#define SDK_LOG_LEVEL_4 (_LOG_LEVEL_4|SDK_LOG_STDOUT)
#define SDK_LOG_LEVEL_5 (_LOG_LEVEL_0|SDK_LOG_FILE)
#define SDK_LOG_LEVEL_6 (_LOG_LEVEL_1|SDK_LOG_FILE)
#define SDK_LOG_LEVEL_7 (_LOG_LEVEL_2|SDK_LOG_FILE)
#define SDK_LOG_LEVEL_8 (_LOG_LEVEL_3|SDK_LOG_FILE)
#define SDK_LOG_LEVEL_9 (_LOG_LEVEL_4|SDK_LOG_FILE)
#define SDK_LOG_LEVEL_10 (SDK_LOG_FILE_FLUSH)
#define LOG_FILE_FLUSH_LEVEL 10
#define SDK_LOG_FLAG_NO_STDOUT_IN_LOGFILE (1<<0)
#define xfunc_in(fmt, args...)\
log_printf(SDK_FUNC, SDK_LOG_TITLE, "+%s[lr:%x] " fmt "\n",\
__FUNCTION__, __builtin_return_address(0), ## args)
#define xfunc_out(fmt, args...)\
log_printf(SDK_FUNC, SDK_LOG_TITLE, "-%s " fmt "\n",\
__FUNCTION__, ## args)
#define xprintf(mask, fmt, args...) do {\
if ((mask) & SDK_ERR)\
log_printf(mask, SDK_LOG_TITLE, "#ERROR: in %s [lr:%x]\n\t:" fmt,\
__FUNCTION__, __builtin_return_address(0), ## args);\
else if ((mask) & SDK_STD_ERR)\
log_printf(mask, SDK_LOG_TITLE, "#ERROR: in %s [lr:%x] err=%s(%d)\n\t:" fmt,\
__FUNCTION__, __builtin_return_address(0), strerror(errno), errno, ## args);\
else\
log_printf(mask, SDK_LOG_TITLE, fmt, ## args);\
} while (0)
#define xprintf_hex(mask, title, buf, len) log_printf_hex(mask, title, buf, len)
#define xprintf_mac(mask, msg, buf)\
log_printf(mask, SDK_LOG_TITLE, "%s=%02x:%02x:%02x:%02x:%02x:%02x\n",\
msg, (u8)(buf)[0], (u8)(buf)[1], (u8)(buf)[2],\
(u8)(buf)[3], (u8)(buf)[4], (u8)(buf)[5])
extern bool log_print_all;
#define log_dbg_start() (log_print_all=TRUE)
#define log_dbg_end() (log_print_all=FALSE)
void log_init(const char *logfile, int log_level);
void log_deinit(void);
int log_set_level(int level);
int log_printf(unsigned mask, const char *title, const char *fmt, ...);
int log_printf_string(unsigned mask, int flag, const char *title, const char *str);
void log_printf_hex(unsigned mask, const char *title, void *buf, int len);
#endif