From f04b274db13ba34c651fd15b28bca5468314f4a7 Mon Sep 17 00:00:00 2001 From: zheng_wenlong Date: Mon, 23 Oct 2017 13:08:02 +0900 Subject: Add debug message macros controlled by environment variable Add a HMI_DEBUG macro to print debug messages. It is controlled by the USE_HMI_DEBUG environment variable. BUG-AGL: SPEC-998 Change-Id: Ibb0a5c119a3a627538e7ec2728c64007f21af215 Signed-off-by: zheng_wenlong --- src/hmi-debug.h | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/homescreen.c | 29 ++++++++++++------------ 2 files changed, 84 insertions(+), 14 deletions(-) create mode 100644 src/hmi-debug.h diff --git a/src/hmi-debug.h b/src/hmi-debug.h new file mode 100644 index 0000000..3240171 --- /dev/null +++ b/src/hmi-debug.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2017 TOYOTA MOTOR CORPORATION + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __HMI_DEBUG_H__ +#define __HMI_DEBUG_H__ + +#include +#include +#include +#include + +enum LOG_LEVEL{ + LOG_LEVEL_NONE = 0, + LOG_LEVEL_ERROR, + LOG_LEVEL_WARNING, + LOG_LEVEL_NOTICE, + LOG_LEVEL_INFO, + LOG_LEVEL_DEBUG, + LOG_LEVEL_MAX = LOG_LEVEL_ERROR +}; + +#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) + +#define HMI_ERROR(prefix, args,...) _HMI_LOG(LOG_LEVEL_ERROR, __FILENAME__, __FUNCTION__, __LINE__, prefix, args, ##__VA_ARGS__) +#define HMI_WARNING(prefix, args,...) _HMI_LOG(LOG_LEVEL_WARNING, __FILENAME__, __FUNCTION__,__LINE__, prefix, args,##__VA_ARGS__) +#define HMI_NOTICE(prefix, args,...) _HMI_LOG(LOG_LEVEL_NOTICE, __FILENAME__, __FUNCTION__,__LINE__, prefix, args,##__VA_ARGS__) +#define HMI_INFO(prefix, args,...) _HMI_LOG(LOG_LEVEL_INFO, __FILENAME__, __FUNCTION__,__LINE__, prefix, args,##__VA_ARGS__) +#define HMI_DEBUG(prefix, args,...) _HMI_LOG(LOG_LEVEL_DEBUG, __FILENAME__, __FUNCTION__,__LINE__, prefix, args,##__VA_ARGS__) + +static char ERROR_FLAG[6][20] = {"NONE", "ERROR", "WARNING", "NOTICE", "INFO", "DEBUG"}; + +static void _HMI_LOG(enum LOG_LEVEL level, const char* file, const char* func, const int line, const char* prefix, const char* log, ...) +{ + const int log_level = (getenv("USE_HMI_DEBUG") == NULL)?0:atoi(getenv("USE_HMI_DEBUG")); + if(log_level < level) + { + return; + } + + char *message; + struct timespec tp; + unsigned int time; + + clock_gettime(CLOCK_REALTIME, &tp); + time = (tp.tv_sec * 1000000L) + (tp.tv_nsec / 1000); + + va_list args; + va_start(args, log); + if (log == NULL || vasprintf(&message, log, args) < 0) + message = NULL; + fprintf(stderr, "[%10.3f] [%s %s] [%s, %s(), Line:%d] >>> %s \n", time / 1000.0, prefix, ERROR_FLAG[level], file, func, line, message); + va_end(args); + free(message); +} + +#endif //__HMI_DEBUG_H__ \ No newline at end of file diff --git a/src/homescreen.c b/src/homescreen.c index 98631c8..7f5f067 100644 --- a/src/homescreen.c +++ b/src/homescreen.c @@ -27,6 +27,7 @@ #include #include #include "hs-helper.h" +#include "hmi-debug.h" #define COMMAND_EVENT_NUM 3 #define EVENT_SUBSCRIBE_ERROR_CODE 100 @@ -56,7 +57,7 @@ static void pingSample(struct afb_req request) { static int pingcount = 0; afb_req_success_f(request, json_object_new_int(pingcount), "Ping count = %d", pingcount); - AFB_NOTICE("Verbosity macro at level notice invoked at ping invocation count = %d", pingcount); + HMI_NOTICE("homescreen-service","Verbosity macro at level notice invoked at ping invocation count = %d", pingcount); pingcount++; } @@ -74,13 +75,13 @@ static void pingSample(struct afb_req request) */ static void tap_shortcut (struct afb_req request) { - AFB_NOTICE("%s is called.", __FUNCTION__); + HMI_NOTICE("homescreen-service","called."); int ret = 0; const char* value = afb_req_value(request, _application_name); if (value) { - AFB_NOTICE("request params = %s.", value); + HMI_NOTICE("homescreen-service","request params = %s.", value); struct json_object* push_obj = json_object_new_object(); hs_add_object_to_json_object_str( push_obj, 2, @@ -111,13 +112,13 @@ static void tap_shortcut (struct afb_req request) */ static void on_screen_message (struct afb_req request) { - AFB_NOTICE("%s is called.", __FUNCTION__); + HMI_NOTICE("homescreen-service","called."); int ret = 0; const char* value = afb_req_value(request, _display_message); if (value) { - AFB_NOTICE("request params = %s.", value); + HMI_NOTICE("homescreen-service","request params = %s.", value); struct json_object* push_obj = json_object_new_object(); hs_add_object_to_json_object_str( push_obj, 2, @@ -150,13 +151,13 @@ static void on_screen_message (struct afb_req request) static void subscribe(struct afb_req request) { const char *value = afb_req_value(request, "event"); - AFB_NOTICE("value is %s", value); + HMI_NOTICE("homescreen-service","value is %s", value); int ret = 0; if(value) { int index = hs_search_event_name_index(value); if(index < 0) { - AFB_NOTICE("dedicated event doesn't exist"); + HMI_NOTICE("homescreen-service","dedicated event doesn't exist"); ret = EVENT_SUBSCRIBE_ERROR_CODE; } else @@ -165,7 +166,7 @@ static void subscribe(struct afb_req request) } } else{ - AFB_NOTICE("Please input event name"); + HMI_NOTICE("homescreen-service","Please input event name"); ret = EVENT_SUBSCRIBE_ERROR_CODE; } /*create response json object*/ @@ -190,13 +191,13 @@ static void subscribe(struct afb_req request) static void unsubscribe(struct afb_req request) { const char *value = afb_req_value(request, "event"); - AFB_NOTICE("value is %s", value); + HMI_NOTICE("homescreen-service","value is %s", value); int ret = 0; if(value) { int index = hs_search_event_name_index(value); if(index < 0) { - AFB_NOTICE("dedicated event doesn't exist"); + HMI_NOTICE("homescreen-service","dedicated event doesn't exist"); ret = EVENT_SUBSCRIBE_ERROR_CODE; } else @@ -205,7 +206,7 @@ static void unsubscribe(struct afb_req request) } } else{ - AFB_NOTICE("Please input event name"); + HMI_NOTICE("homescreen-service","Please input event name"); ret = EVENT_SUBSCRIBE_ERROR_CODE; } /*create response json object*/ @@ -230,13 +231,13 @@ static const struct afb_verb_v2 verbs[]= { static int preinit() { - AFB_NOTICE("binding preinit (was register)"); + HMI_NOTICE("homescreen-service","binding preinit (was register)"); return 0; } static int init() { - AFB_NOTICE("binding init"); + HMI_NOTICE("homescreen-service","binding init"); ev_tap_shortcut = afb_daemon_make_event(evlist[0]); ev_on_screen_message = afb_daemon_make_event(evlist[1]); @@ -256,7 +257,7 @@ static int init() static void onevent(const char *event, struct json_object *object) { - AFB_NOTICE("on_event %s", event); + HMI_NOTICE("homescreen-service","on_event %s", event); } const struct afb_binding_v2 afbBindingV2 = { -- cgit 1.2.3-korg