ADD_DEFINITIONS("-DLOG_TAG=\"HALAPI_TDM\"")
SET(SRCS
- src/hal-api-tdm.c)
+ src/hal-api-tdm.c
+ src/hal-tdm-log.c)
ADD_LIBRARY( ${PROJECT_NAME} SHARED ${SRCS})
TARGET_LINK_LIBRARIES( ${PROJECT_NAME} ${pkgs_LDFLAGS} -ldl -lm -Wl,-z,nodelete,--no-undefined)
#define __HAL_TDM_TYPES_H__
#include <stdint.h>
+#include <unistd.h>
#include <tbm_surface.h>
#ifdef __cplusplus
#ifndef __COMMON_H__
#define __COMMON_H__
+#include <sys/syscall.h>
+#include <time.h>
#include <dlog.h>
-#define _D(fmt, args...) SLOGD(fmt, ##args)
-#define _I(fmt, args...) SLOGI(fmt, ##args)
-#define _W(fmt, args...) SLOGW(fmt, ##args)
-#define _E(fmt, args...) SLOGE(fmt, ##args)
+
+/* log level */
+void hal_tdm_log_print(int level, const char *fmt, ...);
+
+#define HAL_TDM_DBG(fmt, args...) \
+ do { \
+ struct timespec ts; \
+ clock_gettime(CLOCK_MONOTONIC, &ts); \
+ hal_tdm_log_print(HAL_TDM_LOG_LEVEL_DBG, "[%5d.%06d][%d][%s %d]"fmt, \
+ (int)ts.tv_sec, (int)ts.tv_nsec / 1000, \
+ (int)syscall(SYS_gettid), __FUNCTION__, __LINE__, ##args); \
+ } while (0)
+
+#define HAL_TDM_INFO(fmt, args...) \
+ do { \
+ struct timespec ts; \
+ clock_gettime(CLOCK_MONOTONIC, &ts); \
+ hal_tdm_log_print(HAL_TDM_LOG_LEVEL_INFO, "[%5d.%06d][%d][%s %d]"fmt, \
+ (int)ts.tv_sec, (int)ts.tv_nsec / 1000, \
+ (int)syscall(SYS_gettid), __FUNCTION__, __LINE__, ##args); \
+ } while (0)
+
+#define HAL_TDM_WRN(fmt, args...) \
+ do { \
+ struct timespec ts; \
+ clock_gettime(CLOCK_MONOTONIC, &ts); \
+ hal_tdm_log_print(HAL_TDM_LOG_LEVEL_WRN, "[%5d.%06d][%d][%s %d]"fmt, \
+ (int)ts.tv_sec, (int)ts.tv_nsec / 1000, \
+ (int)syscall(SYS_gettid), __FUNCTION__, __LINE__, ##args); \
+ } while (0)
+
+#define HAL_TDM_ERR(fmt, args...) \
+ do { \
+ struct timespec ts; \
+ clock_gettime(CLOCK_MONOTONIC, &ts); \
+ hal_tdm_log_print(HAL_TDM_LOG_LEVEL_ERR, "[%5d.%06d][%d][%s %d]"fmt, \
+ (int)ts.tv_sec, (int)ts.tv_nsec / 1000, \
+ (int)syscall(SYS_gettid), __FUNCTION__, __LINE__, ##args); \
+ } while (0)
+
+#define HAL_TDM_RETURN_IF_FAIL(cond) {\
+ if (!(cond)) {\
+ HAL_TDM_ERR("'%s' failed.\n", #cond);\
+ return;\
+ } \
+}
+#define HAL_TDM_RETURN_VAL_IF_FAIL(cond, val) {\
+ if (!(cond)) {\
+ HAL_TDM_ERR("'%s' failed.\n", #cond);\
+ return val;\
+ } \
+}
+#define HAL_TDM_GOTO_VAL_IF_FAIL(cond, val) {\
+ if (!(cond)) {\
+ HAL_TDM_ERR("'%s' failed.\n", #cond);\
+ goto val;\
+ } \
+}
+
+enum {
+ HAL_TDM_LOG_LEVEL_NONE,
+ HAL_TDM_LOG_LEVEL_ERR,
+ HAL_TDM_LOG_LEVEL_WRN,
+ HAL_TDM_LOG_LEVEL_INFO,
+ HAL_TDM_LOG_LEVEL_DBG,
+};
#endif /* __COMMON_H__ */
ret = hal_common_get_backend(HAL_MODULE_TDM, (void **)&backend_data);
if (ret < 0) {
- _E("Failed to get backend\n");
+ HAL_TDM_ERR("Failed to get backend\n");
if (error)
*error = HAL_TDM_ERROR_NO_MODULE;
return NULL;
if (error)
*error = HAL_TDM_ERROR_NONE;
- _I("hal_tdm_get_backend");
+ HAL_TDM_INFO("hal_tdm_get_backend");
return (hal_tdm_backend *)backend_data;
}
int ret;
if (!backend_data && g_hal_tdm_backend_data != backend) {
- _E("no backend_data\n");
+ HAL_TDM_ERR("no backend_data\n");
return HAL_TDM_ERROR_NO_MODULE;
}
ret = hal_common_put_backend(HAL_MODULE_TDM, backend_data);
if (ret < 0) {
- _E("Failed to put backend\n");
+ HAL_TDM_ERR("Failed to put backend\n");
return HAL_TDM_ERROR_OPERATION_FAILED;
}
g_hal_tdm_backend_data = NULL;
- _I("hal_tdm_put_backend");
+ HAL_TDM_INFO("hal_tdm_put_backend");
return HAL_TDM_ERROR_NONE;
}
hal_tdm_display *display;
if (!backend_data || g_hal_tdm_backend_data != backend) {
- _E("no backend_data\n");
+ HAL_TDM_ERR("no backend_data\n");
if (error)
*error = HAL_TDM_ERROR_NO_MODULE;
return NULL;
display = backend_data->display;
if (!display) {
- _E("no display\n");
+ HAL_TDM_ERR("no display\n");
if (error)
*error = HAL_TDM_ERROR_OPERATION_FAILED;
return NULL;
hal_tdm_backend_data *backend_data = (hal_tdm_backend_data *)backend;
if (!backend_data || g_hal_tdm_backend_data != backend) {
- _E("no backend_data\n");
+ HAL_TDM_ERR("no backend_data\n");
if (error)
*error = HAL_TDM_ERROR_OPERATION_FAILED;
return 0;
hal_tdm_backend_data *backend_data = (hal_tdm_backend_data *)backend;
if (!backend_data || g_hal_tdm_backend_data != backend) {
- _E("no backend_data\n");
+ HAL_TDM_ERR("no backend_data\n");
if (error)
*error = HAL_TDM_ERROR_OPERATION_FAILED;
return -1;
}
if (!backend_data->drm_info.is_master) {
- _I("no master_drm_fd");
+ HAL_TDM_INFO("no master_drm_fd");
return -1;
}
- _I("master_drm_fd is %d", backend_data->drm_info.drm_fd);
+ HAL_TDM_INFO("master_drm_fd is %d", backend_data->drm_info.drm_fd);
return backend_data->drm_info.drm_fd;
}
int ret;
if (!backend_data || g_hal_tdm_backend_data != backend) {
- _E("no backend_data\n");
+ HAL_TDM_ERR("no backend_data\n");
return HAL_TDM_ERROR_OPERATION_FAILED;
}
if (!backend_data->drm_info.master_drm_fd_func) {
- _E("no backend_data->drm_info.auth_fd_func\n");
+ HAL_TDM_ERR("no backend_data->drm_info.auth_fd_func\n");
return HAL_TDM_ERROR_OPERATION_FAILED;
}
ret = backend_data->drm_info.master_drm_fd_func(master_drm_fd, backend_data->drm_info.user_data);
if (ret != HAL_TDM_ERROR_NONE) {
- _E("backend_data->drm_info.master_drm_fd_func failed\n");
+ HAL_TDM_ERR("backend_data->drm_info.master_drm_fd_func failed\n");
return ret;
}
hal_tdm_event_source **event_source;
if (!backend_data || g_hal_tdm_backend_data != backend) {
- _E("no backend_data\n");
+ HAL_TDM_ERR("no backend_data\n");
if (error)
*error = HAL_TDM_ERROR_NO_MODULE;
return NULL;
name = calloc(HAL_TDM_NAME_LEN, sizeof(char));
if (!name) {
- _E("no memory");
+ HAL_TDM_ERR("no memory");
return NULL;
}
ret = hal_common_get_backend_name(HAL_MODULE_TDM, name, HAL_TDM_NAME_LEN);
if (ret < 0) {
- _E("hal_common_get_backend_name failed.\n");
+ HAL_TDM_ERR("hal_common_get_backend_name failed.\n");
free(name);
return NULL;
}
vendor = calloc(HAL_TDM_NAME_LEN, sizeof(char));
if (!vendor) {
- _E("no memory");
+ HAL_TDM_ERR("no memory");
return NULL;
}
ret = hal_common_get_backend_vendor(HAL_MODULE_TDM, vendor, HAL_TDM_NAME_LEN);
if (ret < 0) {
- _E("hal_common_get_backend_name failed.\n");
+ HAL_TDM_ERR("hal_common_get_backend_name failed.\n");
free(vendor);
return NULL;
}
--- /dev/null
+#include <stdio.h>
+#include <dlog.h>
+#include "hal-tdm-types.h"
+#include "common.h"
+
+#define TDM_PATH_LEN 1024
+
+#define COLOR_RED "\x1b[31m" /* for error */
+#define COLOR_YELLOW "\x1b[33m" /* for warning */
+#define COLOR_GREEN "\x1b[32m" /* for info */
+#define COLOR_RESET "\x1b[0m"
+
+#if ENABLE_DLOG
+static unsigned int dlog_enable = 1;
+#else
+static unsigned int dlog_enable = 0;
+#endif
+static unsigned int color_enable = 1;
+
+unsigned int tdm_log_debug_level = HAL_TDM_LOG_LEVEL_INFO;
+
+static int stdout_fd = -1;
+
+void
+tdm_log_set_path(const char *path)
+{
+ if (!path) {
+ if (stdout_fd != -1) {
+ fflush(stdout);
+ close(STDOUT_FILENO);
+ dup2(stdout_fd, STDOUT_FILENO);
+ close(stdout_fd);
+ stdout_fd = -1;
+ }
+ } else {
+ char fd_name[TDM_PATH_LEN];
+ int log_fd = -1;
+ FILE *log_fl;
+
+ snprintf(fd_name, TDM_PATH_LEN, "%s", path);
+
+ log_fl = fopen(fd_name, "a");
+ if (!log_fl) {
+ HAL_TDM_ERR("failed: open file(%s)\n", fd_name);
+ return;
+ }
+
+ if (stdout_fd == -1) {
+ fflush(stdout);
+ stdout_fd = dup(STDOUT_FILENO);
+ if (stdout_fd < 0) {
+ HAL_TDM_ERR("dup failed: %m\n");
+ fclose(log_fl);
+ return;
+ }
+ }
+
+ setvbuf(log_fl, NULL, _IOLBF, 512);
+ log_fd = fileno(log_fl);
+
+ close(STDOUT_FILENO);
+ dup2(log_fd, STDOUT_FILENO);
+ fclose(log_fl);
+ }
+}
+
+static void
+_tdm_log_vprint_stdout(int level, const char *fmt, va_list arg)
+{
+ char *lvl_str[] = {"HAL_TDM_NON", "HAL_TDM_ERR", "HAL_TDM_WRN", "HAL_TDM_INF", "HAL_TDM_DBG"};
+ char *color[] = {COLOR_RESET, COLOR_RED, COLOR_YELLOW, COLOR_GREEN, COLOR_RESET};
+
+ if (level > tdm_log_debug_level)
+ return;
+
+ if (color_enable)
+ printf("%s", color[level]);
+ printf("[%s]", lvl_str[level]);
+ if (color_enable)
+ printf(COLOR_RESET);
+ vprintf(fmt, arg);
+ printf("\n");
+}
+
+void
+tdm_log_print_stdout(int level, const char *fmt, ...)
+{
+ va_list arg;
+ va_start(arg, fmt);
+ _tdm_log_vprint_stdout(level, fmt, arg);
+ va_end(arg);
+}
+
+static void
+_tdm_log_dlog_print(int level, const char *fmt, va_list arg)
+{
+ log_priority dlog_prio;
+
+ switch (level) {
+ case HAL_TDM_LOG_LEVEL_ERR:
+ dlog_prio = DLOG_ERROR;
+ break;
+ case HAL_TDM_LOG_LEVEL_WRN:
+ dlog_prio = DLOG_WARN;
+ break;
+ case HAL_TDM_LOG_LEVEL_INFO:
+ dlog_prio = DLOG_INFO;
+ break;
+ case HAL_TDM_LOG_LEVEL_DBG:
+ dlog_prio = DLOG_DEBUG;
+ break;
+ default:
+ return;
+ }
+ __dlog_vprint(LOG_ID_SYSTEM, dlog_prio, LOG_TAG, fmt, arg);
+}
+
+void
+hal_tdm_log_print(int level, const char *fmt, ...)
+{
+ va_list arg;
+
+ if (level > tdm_log_debug_level)
+ return;
+
+ if (dlog_enable) {
+ va_start(arg, fmt);
+ _tdm_log_dlog_print(level, fmt, arg);
+ va_end(arg);
+ } else {
+ va_start(arg, fmt);
+ _tdm_log_vprint_stdout(level, fmt, arg);
+ va_end(arg);
+ }
+}
\ No newline at end of file