163 lines
5.1 KiB
C
163 lines
5.1 KiB
C
|
/****************************************************************************
|
||
|
|
||
|
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
|
||
|
|
||
|
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
|
||
|
be copied by any method or incorporated into another program without
|
||
|
the express written consent of Aerospace C.Power. This Information or any portion
|
||
|
thereof remains the property of Aerospace C.Power. The Information contained herein
|
||
|
is believed to be accurate and Aerospace C.Power assumes no responsibility or
|
||
|
liability for its use in any way and conveys no license or title under
|
||
|
any patent or copyright and makes no representation or warranty that this
|
||
|
Information is free from patent or copyright infringement.
|
||
|
|
||
|
****************************************************************************/
|
||
|
#ifndef IOT_DBGLOG_H
|
||
|
#define IOT_DBGLOG_H
|
||
|
|
||
|
/* os shim includes */
|
||
|
#include "os_types.h"
|
||
|
#include "os_lock.h"
|
||
|
#include "os_timer.h"
|
||
|
#include "iot_pkt_api.h"
|
||
|
#include "iot_frame_parse_api.h"
|
||
|
/* export includes */
|
||
|
#include "iot_dbglog_api.h"
|
||
|
#include "iot_utils_api.h"
|
||
|
|
||
|
/* internal includes */
|
||
|
#include "iot_dbglog_parser.h"
|
||
|
#include "iot_cli_type_definition.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#define DBGLOG_MAX_BUFFER_CNT 4
|
||
|
#define DBGLOG_MAX_RAW_BUFFER_SIZE 950
|
||
|
|
||
|
#if (HW_PLATFORM == HW_PLATFORM_SIMU)
|
||
|
#define DBGLOG_MAX_BUFFER_SIZE (DBGLOG_MAX_RAW_BUFFER_SIZE - \
|
||
|
sizeof(cli_msg_hdr_t)- MAX_CLI_FRAME_HEAD - MAX_CLI_FRAME_END)
|
||
|
#else
|
||
|
#define DBGLOG_MAX_BUFFER_SIZE (DBGLOG_MAX_RAW_BUFFER_SIZE - \
|
||
|
sizeof(cli_msg_hdr_t)- MAX_CLI_FRAME_HEAD - MAX_CLI_FRAME_END)
|
||
|
#endif
|
||
|
#define DBGLOG_DEFAULT_UPLOAD_TIME_PERIOD (2 * 1000)
|
||
|
#define DBGLOG_MAX_ARGUMENT_NUM (9)
|
||
|
#define MODULEID_DEBUGLOG (0)
|
||
|
#define MSGID_DEBUG_LOG_REPORT (0)
|
||
|
#define MAX_MODULE_GROUP_NUM (4)
|
||
|
|
||
|
typedef void(*DBGLOG_DEBUG_LOG_EVENT_CB)
|
||
|
(void* buffer, uint8_t crash_log, uint32_t buffer_len);
|
||
|
|
||
|
typedef struct _dbglog_buf_context
|
||
|
{
|
||
|
/*log content*/
|
||
|
iot_pkt_t* buffer;
|
||
|
/*the max buffer size*/
|
||
|
uint32_t buf_size;
|
||
|
/*the next write offset of the buffer*/
|
||
|
uint32_t write_offset;
|
||
|
}dbglog_buf_context_t;
|
||
|
|
||
|
typedef struct _dbglog_mod_info
|
||
|
{
|
||
|
uint16_t module_id; /* module id */
|
||
|
uint8_t level; /* log level */
|
||
|
}dbglog_mod_info_t;
|
||
|
|
||
|
typedef struct _dbglog_info {
|
||
|
dbglog_buf_context_t debuglog;
|
||
|
os_mutex_h debuglog_lock;
|
||
|
dbglog_mod_info_t module_info[MAX_MODULE_GROUP_NUM];
|
||
|
/*callback fun to upplayer*/
|
||
|
DBGLOG_DEBUG_LOG_EVENT_CB dbglog_send_debug_logs_cb;
|
||
|
uint32_t timestamp_start;
|
||
|
timer_id_t upload_timer;
|
||
|
/*time interval of uploading log buffer*/
|
||
|
int32_t upload_interval;
|
||
|
bool_t is_initialized;
|
||
|
uint32_t seq; /* sequence number */
|
||
|
uint8_t level; /* global level water marker*/
|
||
|
uint8_t live_capture;/* if work as live capture mode*/
|
||
|
uint8_t live_log_receiver[IOT_MAC_ADDR_LEN];
|
||
|
} dbglog_info_t;
|
||
|
|
||
|
uint32_t iot_dbglog_init();
|
||
|
uint32_t iot_dbglog_deinit();
|
||
|
uint32_t register_dbglog_callback(DBGLOG_DEBUG_LOG_EVENT_CB callback);
|
||
|
void iot_dbglog_config_module_level(uint16_t module_id, uint8_t level);
|
||
|
void iot_dbglog_config_level(uint8_t level);
|
||
|
uint8_t iot_dbglog_get_level();
|
||
|
uint8_t iot_dbglog_get_module_level(uint16_t module_id);
|
||
|
void iot_dbglog_start_stop_live_capture(uint8_t enable, uint8_t* receiver);
|
||
|
uint8_t iot_dbglog_live_capture_enabled();
|
||
|
uint8_t *iot_dbglog_live_log_receiver();
|
||
|
dbglog_info_t *get_dbglog_instance();
|
||
|
|
||
|
#define DBGLOG_SET_DBUF_INFO(dbuf, _buffer, _buf_size, _writeoffset) \
|
||
|
do { \
|
||
|
(dbuf).buffer = _buffer; \
|
||
|
(dbuf).buf_size = _buf_size;\
|
||
|
(dbuf).write_offset = _writeoffset; \
|
||
|
} while (0)
|
||
|
|
||
|
#define DBGLOG_GET_LOG_LVL(cfg_s,mod_id) \
|
||
|
(cfg_s)->module_info[(mod_id)].level
|
||
|
|
||
|
#define DEBUGLOG_BUFFER_IS_EMPTY(dbuf) \
|
||
|
((dbuf)->buffer == NULL)
|
||
|
|
||
|
#define DBGLOG_BUFFER_SPACE_AVAILABLE(dbuf, args) \
|
||
|
((dbuf)->write_offset < ((dbuf)->buf_size - (args << 2)))
|
||
|
|
||
|
#define DBGLOG_UPDATE_SEQ(dbglog) \
|
||
|
(++dbglog->seq)
|
||
|
|
||
|
#define DBG_MODULE_ID_OFFSET 0
|
||
|
#define DBG_MODULE_ID_MASK 0x0000FFFF
|
||
|
|
||
|
#define DBG_MSG_ID_OFFSET 16
|
||
|
#define DBG_MSG_ID_MASK 0xFFFF0000
|
||
|
|
||
|
#define DBG_LOG_RESVD_OFFSET 0
|
||
|
#define DBG_LOG_RESVD_MASK 0x0000FFFF
|
||
|
|
||
|
#define DBG_PAYLOAD_LEN_OFFSET 16
|
||
|
#define DBG_PAYLOAD_LEN_MASK 0xFFFF0000
|
||
|
|
||
|
#define DBGLOG_SET_MSG_ID(module_id, msg_id) \
|
||
|
(((module_id << DBG_MODULE_ID_OFFSET) & DBG_MODULE_ID_MASK) | \
|
||
|
((msg_id << DBG_MSG_ID_OFFSET) & DBG_MSG_ID_MASK))
|
||
|
|
||
|
#define DBGLOG_SET_MSG_HDR(payload_len, resvd) \
|
||
|
(((payload_len << DBG_PAYLOAD_LEN_OFFSET) & DBG_PAYLOAD_LEN_MASK) | \
|
||
|
((resvd << DBG_LOG_RESVD_OFFSET) & DBG_LOG_RESVD_MASK))
|
||
|
|
||
|
#define RAW_DATA_MSG_ID 0
|
||
|
#define SUPPORT_RAW_DATA_LOG 1
|
||
|
|
||
|
#if SUPPORT_RAW_DATA_LOG
|
||
|
#define MAX_RAW_DATA_MSG_LEN 36
|
||
|
#endif
|
||
|
|
||
|
#define DBGLOG_PAYLOAD_OFFSET (sizeof(uint32_t) * 5)
|
||
|
#define DBGLOG_MODULE_GROUP_NAME_LEN 20
|
||
|
typedef struct _module_group_config {
|
||
|
uint8_t group_id;
|
||
|
uint16_t group_start_module_id;
|
||
|
uint16_t group_end_module_id;
|
||
|
uint8_t group_name[DBGLOG_MODULE_GROUP_NAME_LEN];
|
||
|
}module_group_config;
|
||
|
|
||
|
#define DBGLOG_HEAD_SIZE (MAX_FRAME_CODE_LEN + CLI_MSG_HEADER_LEN \
|
||
|
+ DBGLOG_PAYLOAD_OFFSET)
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif // !IOT_DBGLOG_H
|