diff options
Diffstat (limited to 'include/dlog.h')
-rwxr-xr-x | include/dlog.h | 271 |
1 files changed, 195 insertions, 76 deletions
diff --git a/include/dlog.h b/include/dlog.h index acc4656..709451a 100755 --- a/include/dlog.h +++ b/include/dlog.h @@ -21,14 +21,10 @@ * @version 0.4 * @brief This file is the header file of interface of dlog. */ -/** - * @addtogroup CAPI_BASE_DLOG_MODULE - * @{ - * - */ #ifndef _DLOG_H_ #define _DLOG_H_ +#include <tizen_error.h> #include <stdarg.h> #include <string.h> @@ -55,22 +51,54 @@ extern "C" { #endif #endif -/* - * log priority values, in ascending priority order. +/** + * @addtogroup CAPI_SYSTEM_DLOG + * @{ + * + */ +/** + * @brief Enumeration for Dlog Error. + * @since_tizen 2.3 + */ +typedef enum { + DLOG_ERROR_NONE = TIZEN_ERROR_NONE, /**< Successful */ + DLOG_ERROR_INVALID_PARAMETER = TIZEN_ERROR_INVALID_PARAMETER, /**< Invalid parameter */ + DLOG_ERROR_NOT_PERMITTED = TIZEN_ERROR_NOT_PERMITTED, /**< Operation not permitted */ +} dlog_error_e; +/** + * @} + */ + +/** + * @addtogroup CAPI_SYSTEM_DLOG + * @{ + * + */ +/** + * @brief log priority values, in ascending priority order. + * @since_tizen 2.3 */ typedef enum { - DLOG_UNKNOWN = 0, - DLOG_DEFAULT, - DLOG_VERBOSE, - DLOG_DEBUG, - DLOG_INFO, - DLOG_WARN, - DLOG_ERROR, - DLOG_FATAL, - DLOG_SILENT, - DLOG_PRIO_MAX /* Keep this always at the end. */ + DLOG_UNKNOWN = 0, /**< Keep this always at the start */ + DLOG_DEFAULT, /**< Default */ + DLOG_VERBOSE, /**< Verbose */ + DLOG_DEBUG, /**< Debug */ + DLOG_INFO, /**< Info */ + DLOG_WARN, /**< Warning */ + DLOG_ERROR, /**< Error */ + DLOG_FATAL, /**< Fatal */ + DLOG_SILENT, /**< Silent */ + DLOG_PRIO_MAX /**< Keep this always at the end. */ } log_priority; +/** + * @} + */ +/** + * @internal + * @brief log id + * @since_tizen 2.3 + */ typedef enum { LOG_ID_MAIN = 0, LOG_ID_RADIO, @@ -79,8 +107,10 @@ typedef enum { LOG_ID_MAX } log_id_t; +static inline int __dlog_no_print(const char *fmt __attribute__((unused)), ...) { return 0; } + #define CONDITION(cond) (__builtin_expect((cond) != 0, 0)) -#define NOP(fmt, arg...) ({ do { } while (0); }) +#define NOP(...) ({ do { __dlog_no_print(__VA_ARGS__); } while (0); }) // Macro inner work--------------------------------------------------------------- #undef LOG_ @@ -109,13 +139,15 @@ typedef enum { #endif // --------------------------------------------------------------------- /** - * For Secure Log. - * Normally we strip Secure log from release builds. + * @internal + * @brief For Secure Log. + * @remarks Normally we strip Secure log from release builds. * Please use this macros. */ /** - * For Application and etc. - * Simplified macro to send a main log message using the current LOG_TAG. + * @internal + * @brief For Application and etc. + * @details Simplified macro to send a main log message using the current LOG_TAG. * Example: * SECURE_LOGD("app debug %d", num); * SECURE_LOGE("app error %d", num); @@ -126,8 +158,9 @@ typedef enum { #define SECURE_LOGE(format, arg...) SECURE_LOG_(LOG_ID_MAIN, DLOG_ERROR, LOG_TAG, format, ##arg) #define SECURE_LOGF(format, arg...) SECURE_LOG_(LOG_ID_MAIN, DLOG_FATAL, LOG_TAG, format, ##arg) /** - * For Framework and system etc. - * Simplified macro to send a system log message using the current LOG_TAG. + * @internal + * @brief For Framework and system etc. + * @details Simplified macro to send a system log message using the current LOG_TAG. * Example: * SECURE_SLOGD("system debug %d", num); * SECURE_SLOGE("system error %d", num); @@ -138,8 +171,9 @@ typedef enum { #define SECURE_SLOGE(format, arg...) SECURE_LOG_(LOG_ID_SYSTEM, DLOG_ERROR, LOG_TAG, format, ##arg) #define SECURE_SLOGF(format, arg...) SECURE_LOG_(LOG_ID_SYSTEM, DLOG_FATAL, LOG_TAG, format, ##arg) /** - * For Modem and radio etc. - * Simplified macro to send a radio log message using the current LOG_TAG. + * @internal + * @brief For Modem and radio etc. + * @details Simplified macro to send a radio log message using the current LOG_TAG. * Example: * SECURE_RLOGD("radio debug %d", num); * SECURE_RLOGE("radio error %d", num); @@ -150,7 +184,8 @@ typedef enum { #define SECURE_RLOGE(format, arg...) SECURE_LOG_(LOG_ID_RADIO, DLOG_ERROR, LOG_TAG, format, ##arg) #define SECURE_RLOGF(format, arg...) SECURE_LOG_(LOG_ID_RADIO, DLOG_FATAL, LOG_TAG, format, ##arg) /** - * For Tizen OSP Application macro. + * @internal + * @brief For Tizen OSP Application macro. */ #define SECURE_ALOGD(format, arg...) SECURE_LOG_(LOG_ID_APPS, DLOG_DEBUG, LOG_TAG, format, ##arg) #define SECURE_ALOGI(format, arg...) SECURE_LOG_(LOG_ID_APPS, DLOG_INFO, LOG_TAG, format, ##arg) @@ -158,7 +193,8 @@ typedef enum { #define SECURE_ALOGE(format, arg...) SECURE_LOG_(LOG_ID_APPS, DLOG_ERROR, LOG_TAG, format, ##arg) #define SECURE_ALOGF(format, arg...) SECURE_LOG_(LOG_ID_APPS, DLOG_FATAL, LOG_TAG, format, ##arg) /** - * If you want use redefined macro. + * @internal + * @details If you want use redefined macro. * You can use this macro. * This macro need priority and tag arguments. */ @@ -168,8 +204,9 @@ typedef enum { #define SECURE_ALOG(priority, tag, format, arg...) SECURE_LOG_(LOG_ID_APPS, D##priority, tag, format, ##arg) /** - * For Application and etc. - * Simplified macro to send a main log message using the current LOG_TAG. + * @internal + * @brief For Application and etc. + * @details Simplified macro to send a main log message using the current LOG_TAG. * Example: * LOGD("app debug %d", num); * LOGE("app error %d", num); @@ -184,8 +221,9 @@ typedef enum { #define LOGE(format, arg...) LOG_(LOG_ID_MAIN, DLOG_ERROR, LOG_TAG, format, ##arg) #define LOGF(format, arg...) LOG_(LOG_ID_MAIN, DLOG_FATAL, LOG_TAG, format, ##arg) /** - * For Framework and system etc. - * Simplified macro to send a system log message using the current LOG_TAG. + * @internal + * @brief For Framework and system etc. + * @details Simplified macro to send a system log message using the current LOG_TAG. * Example: * SLOGD("system debug %d", num); * SLOGE("system error %d", num); @@ -200,8 +238,9 @@ typedef enum { #define SLOGE(format, arg...) LOG_(LOG_ID_SYSTEM, DLOG_ERROR, LOG_TAG, format, ##arg) #define SLOGF(format, arg...) LOG_(LOG_ID_SYSTEM, DLOG_FATAL, LOG_TAG, format, ##arg) /** - * For Modem and radio etc. - * Simplified macro to send a radio log message using the current LOG_TAG. + * @internal + * @brief For Modem and radio etc. + * @details Simplified macro to send a radio log message using the current LOG_TAG. * Example: * RLOGD("radio debug %d", num); * RLOGE("radio error %d", num); @@ -216,7 +255,8 @@ typedef enum { #define RLOGE(format, arg...) LOG_(LOG_ID_RADIO, DLOG_ERROR, LOG_TAG, format, ##arg) #define RLOGF(format, arg...) LOG_(LOG_ID_RADIO, DLOG_FATAL, LOG_TAG, format, ##arg) /** - * For Tizen OSP Application macro. + * @internal + * @brief For Tizen OSP Application macro. */ #ifdef TIZEN_DEBUG_ENABLE #define ALOGD(format, arg...) LOG_(LOG_ID_APPS, DLOG_DEBUG, LOG_TAG, format, ##arg) @@ -229,7 +269,9 @@ typedef enum { #define ALOGF(format, arg...) LOG_(LOG_ID_APPS, DLOG_FATAL, LOG_TAG, format, ##arg) /** - * Basic log message macro that allows you to specify a priority and a tag + * @internal + * @brief Basic log message macro + * @details This macro allows you to specify a priority and a tag * if you want to use this macro directly, you must add this messages for unity of messages. * (LOG(prio, tag, "%s: %s(%d) > " format, __MODULE__, __func__, __LINE__, ##arg)) * @@ -246,7 +288,9 @@ typedef enum { #define SLOG(priority, tag, format, arg...) LOG_(LOG_ID_SYSTEM, D##priority, tag, format, ##arg) #define RLOG(priority, tag, format, arg...) LOG_(LOG_ID_RADIO, D##priority, tag, format, ##arg) #define ALOG(priority, tag, format, arg...) LOG_(LOG_ID_APPS, D##priority, tag, format, ##arg) - +/** + * @internal + */ #define LOG_VA(priority, tag, fmt, args) \ vprint_log(D##priority, tag, fmt, args) #define ALOG_VA(priority, tag, fmt, args) \ @@ -277,8 +321,9 @@ typedef enum { #define COMPATIBILITY_ON #ifdef COMPATIBILITY_ON /** - * Conditional Macro. - * Don't use this macro. It's just compatibility. + * @internal + * @breif Conditional Macro. + * @remarks Don't use this macro. It's just compatibility. * It will be deprecated. */ #define LOGD_IF(cond, format, arg...) \ @@ -381,59 +426,133 @@ typedef enum { #define RLOGV_IF(cond, format, arg...) NOP(format, ##arg) #define SECLOG(...) ({ do { } while (0); }) #endif -// Don't use above macro no more!! It will be removed -Verbose, Warning and Fatal priority macro. // --------------------------------------------------------------------- + +/** + * @addtogroup CAPI_SYSTEM_DLOG + * @{ + */ +/** + * @brief Send log with priority and tag. + * @details for application + * @since_tizen 2.3 + * @param[in] prio log_priority + * @param[in] tag tag + * @param[in] fmt format string + * @return On success, the function returns the number of bytes written. + * On error, a negative errno-style error code + * @retval #DLOG_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #DLOG_ERROR_NOT_PERMITTED Operation not permitted + * @pre none + * @post none + * @see dlog_vprint + * @code +#include<dlog.h> +int main(void) +{ + int integer = 21; + char string[] = "test dlog"; + + dlog_print(DLOG_INFO, "USR_TAG", "test dlog"); + dlog_print(DLOG_INFO, "USR_TAG", "%s, %d", string, integer); + return 0; +} + * @endcode + */ +int dlog_print(log_priority prio, const char *tag, const char *fmt, ...); + +/** + * @brief Send log with priority, tag and va_list. + * @details for application + * @since_tizen 2.3 + * @param[in] prio log_priority + * @param[in] tag tag + * @param[in] fmt format string + * @param[in] ap va_list + * @return On success, the function returns the number of bytes written. + * On error, a negative errno-style error code + * @retval #DLOG_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #DLOG_ERROR_NOT_PERMITTED Operation not permitted + * @pre none + * @post none + * @see dlog_print + * @code +#include<dlog.h> +void my_debug_print(char *format, ...) +{ + va_list ap; + + va_start(ap, format); + dlog_vprint(DLOG_INFO, "USR_TAG", format, ap); + va_end(ap); +} + +int main(void) +{ + my_debug_print("%s", "test dlog"); + my_debug_print("%s, %d", "test dlog", 21); + return 0; +} + * @endcode + */ +int dlog_vprint(log_priority prio, const char *tag, const char *fmt, va_list ap); +/** + * @} + */ + + /* * The stuff in the rest of this file should not be used directly. */ /** - * @brief send log. must specify log_id ,priority, tag and format string. - * @pre none - * @post none - * @see __dlog_print - * @remarks you must not use this API directly. use macros instead. - * @param[in] log_id log device id - * @param[in] prio priority - * @param[in] tag tag - * @param[in] fmt format string - * @return Operation result - * @retval 0>= Success - * @retval -1 Error + * @internal + * @brief Send log. + * @details Use LOG(), SLOG(), RLOG() family + * not to use __dlog_print() directly + * @remarks Must not use this API directly. use macros instead. + * @param[in] log_id log device id + * @param[in] prio priority + * @param[in] tag tag + * @param[in] fmt format string + * @return Operation result + * @retval 0>= Success + * @retval -1 Error + * @pre none + * @post none + * @see __dlog_print * @code -// you have to use LOG(), SLOG(), RLOG() family not to use __dlog_print() directly -// so below example is just for passing Documentation Verification !!! -#define LOG_TAG USR_TAG -#include<dlog.h> - __dlog_print(LOG_ID_MAIN, DLOG_INFO, USR_TAG, "you must not use this API directly"); + #define LOG_TAG USR_TAG + #include<dlog.h> + __dlog_print(LOG_ID_MAIN, DLOG_INFO, USR_TAG, "you must not use this API directly"); * @endcode */ int __dlog_print(log_id_t log_id, int prio, const char *tag, const char *fmt, ...); /** - * @brief send log with va_list. must specify log_id ,priority, tag and format string. - * @pre none - * @post none - * @see __dlog_print - * @remarks you must not use this API directly. use macros instead. - * @param[in] log_id log device id - * @param[in] prio priority - * @param[in] tag tag - * @param[in] fmt format string - * @param[in] ap va_list - * @return Operation result - * @retval 0>= Success - * @retval -1 Error + * @internal + * @brief Send log with va_list. + * @details Use LOG_VA(), SLOG_VA(), RLOG_VA() family + not to use __dlog_vprint() directly + * @remarks Must not use this API directly. use macros instead. + * @param[in] log_id log device id + * @param[in] prio priority + * @param[in] tag tag + * @param[in] fmt format string + * @param[in] ap va_list + * @return Operation result + * @retval 0>= Success + * @retval -1 Error + * @pre none + * @post none + * @see __dlog_vprint * @code - // you have to use LOG_VA(), SLOG_VA(), RLOG_VA() family not to use __dlog_print() directly - // so below example is just for passing Documentation Verification !!! -#define LOG_TAG USR_TAG -#include<dlog.h> - __dlog_vprint(LOG_ID_MAIN, DLOG_INFO, USR_TAG, "you must not use this API directly", ap); + #define LOG_TAG USR_TAG + #include<dlog.h> + __dlog_vprint(LOG_ID_MAIN, DLOG_INFO, USR_TAG, "you must not use this API directly", ap); * @endcode */ int __dlog_vprint(log_id_t log_id, int prio, const char *tag, const char *fmt, va_list ap); #ifdef __cplusplus } #endif /* __cplusplus */ -/** @} */ #endif /* _DLOG_H_*/ |