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
 |