/* * Copyright (c) Hisilicon Technologies Co., Ltd.. 2019-2020. All rights reserved. * Description: This file contains api definition for Device Driver Source Manage. * Author: Hisilicon * Create: 2019-10-15 * * 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 SLOG_H #define SLOG_H #ifdef __cplusplus extern "C" { #endif #ifndef LINUX #define LINUX 0 #endif #ifndef OS_TYPE #define OS_TYPE 0 #endif #define MSG_LENGTH 1024 #define DLOG_DEBUG 0 // debug-level messages #define DLOG_INFO 1 // informational #define DLOG_WARN 2 // warning conditions #define DLOG_ERROR 3 // error conditions #define DLOG_NULL 4 // don't output log #define DLOG_TRACE 5 // trace log #define DLOG_OPLOG 6 // op log #define DLOG_EVENT 0x10 // event typedef struct tag_data_code { const char *name; int val; } data_code; typedef struct tag_key_value { char *kname; char *value; } key_value; // module id enum { SLOG, // Slog IDEDD, // IDE daemon device IDEDH, // IDE daemon host HCCL, // HCCL FMK, // Framework HIAIENGINE, // Matrix DVPP, // DVPP RUNTIME, // Runtime CCE, // CCE #if (OS_TYPE == LINUX) HDC, // HDC #else HDCL, // HDCL windows has a def with the same name HDC, so change HDC to HDCL #endif DRV, // Driver MDCFUSION, // Mdc fusion MDCLOCATION, // Mdc location MDCPERCEPTION, // Mdc perception MDCFSM, MDCCOMMON, MDCMONITOR, MDCBSWP, // MDC basesoftware platform MDCDEFAULT, // MDC UNDEFINE MDCSC, // MDC spatial cognition MDCPNC, MLL, DEVMM, // Dlog memory managent KERNEL, // Kernel LIBMEDIA, // Libmedia CCECPU, // ai cpu ASCENDDK, // AscendDK ROS, // ROS HCCP, ROCE, TEFUSION, PROFILING, // Profiling DP, // Data Preprocess APP, // User Application call HIAI_ENGINE_LOG TS, // TS module TSDUMP, // TSDUMP module AICPU, // AICPU module LPM3, // LPM3 module TDT, FE, MD, MB, ME, IMU, IMP, GE, // Fmk MDCFUSA, CAMERA, INVLID_MOUDLE_ID }; #if (OS_TYPE == LINUX) /** * External log interface, which called by modules. * External log interface: dlog_init, dlog_getlevel, dlog_error, dlog_warn, dlog_info, dlog_debug, dlog_event, * Dlog, DlogSub,DlogWithKV */ extern void dlog_init(void); /***************************************************************************** Prototype : dlog_getlevel Description : get module level:external log interface, which called by modules Input : module_id module ID, eg: CCE Output : enable_event 1:enable 0 :disable Return Value : module level((0: debug, 1: info, 2: warning, 3: error, 4: null output)) *****************************************************************************/ extern int dlog_getlevel(int module_id, int *enable_event); /***************************************************************************** Description : dlog_error: external log interface, which called by modules. its log level is error Input : module_id, eg: CCE Input : fmt, log content *****************************************************************************/ #define dlog_error(module_id, fmt, ...) do { \ DlogErrorInner((module_id), "[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__); \ } while (0) /***************************************************************************** Description : dlog_warn: external log interface, which called by modules. its log level is warn Input : module_id, eg: CCE Input : fmt, log content *****************************************************************************/ #define dlog_warn(module_id, fmt, ...) do { \ DlogWarnInner((module_id), "[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__); \ } while (0) /***************************************************************************** Description : dlog_info: external log interface, which called by modules. its log level is info Input : module_id, eg: CCE Input : fmt, log content *****************************************************************************/ #define dlog_info(module_id, fmt, ...) do { \ DlogInfoInner((module_id), "[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__); \ } while (0) /***************************************************************************** Description : dlog_debug: external log interface, which called by modules. its log level is debug Input : module_id, eg: CCE Input : fmt, log content *****************************************************************************/ #define dlog_debug(module_id, fmt, ...) do { \ DlogDebugInner((module_id), "[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__); \ } while (0) /***************************************************************************** Description : dlog_event: external log interface, which called by modules. its log level is event Input : module_id, eg: CCE Input : fmt, log content *****************************************************************************/ #define dlog_event(module_id, fmt, ...) do { \ DlogEventInner((module_id), "[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__); \ } while (0) /***************************************************************************** Description : Dlog: external log interface, which called by modules Input : module_id, eg: CCE Input : level(0: debug, 1: info, 2: warning, 3: error, 5: trace, 6: oplog, 16: event) Input : fmt, log content *****************************************************************************/ #define Dlog(module_id, level, fmt, ...) do { \ DlogInner((module_id), (level), "[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__); \ } while (0) /***************************************************************************** Description : DlogSub: external log interface, which called by modules Input : module_id, eg: HIAIENGINE Input : submodule, eg: engine Input : level(0: debug, 1: info, 2: warning, 3: error, 5: trace, 6: oplog, 16: event) Input : fmt, log content *****************************************************************************/ #define DlogSub(module_id, submodule, level, fmt, ...) do { \ DlogInner((module_id), (level), "[%s:%d][%s]" fmt, __FILE__, __LINE__, (submodule), ##__VA_ARGS__); \ } while (0) /***************************************************************************** Prototype : DlogWithKV: external log interface, which called by modules Description : log interface with level and key-value Input : module_id module ID, eg: CCE Input : level(0: debug, 1: info, 2: warning, 3: error, 5: trace, 6: oplog, 16: event) Input : key_value_array, key-value array Input : kvNum, key-value element num in array Input : fmt *****************************************************************************/ #define DlogWithKV(module_id, level, key_value_array, kvNum, fmt, ...) do { \ DlogWithKVInner((module_id), (level), (key_value_array), (kvNum), "[%s:%d]" fmt, __FILE__, __LINE__, \ ##__VA_ARGS__); \ } while (0) /** * Internal log interface, is only defined in log module, other modules are not allowed to call this interface * Internal log interface: DlogErrorInner, DlogWarnInner, DlogInfoInner, DlogDebugInner, DlogEventInner * DlogInner, DlogWithKVInner */ void DlogErrorInner(int module_id, const char *fmt, ...); void DlogWarnInner(int module_id, const char *fmt, ...); void DlogInfoInner(int module_id, const char *fmt, ...); void DlogDebugInner(int module_id, const char *fmt, ...); void DlogEventInner(int module_id, const char *fmt, ...); void DlogInner(int module_id, int level, const char *fmt, ...); void DlogWithKVInner(int module_id, int level, key_value *key_value_array, int kvNum, const char *fmt, ...); #else _declspec(dllexport) void dlog_init(void); _declspec(dllexport) int dlog_getlevel(int module_id, int *enable_event); #endif #ifdef __cplusplus } #endif #endif /* sys/slog.h */