加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
hiview_file.h 5.70 KB
一键复制 编辑 原始数据 按行查看 历史
huxia 提交于 2021-07-05 16:32 . fix file head refresh slow problem.
/*
* Copyright (c) 2020 Huawei Device Co., Ltd.
* 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 HOS_LITE_HIVIEW_FILE_H
#define HOS_LITE_HIVIEW_FILE_H
#include "hiview_util.h"
#include "ohos_types.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* End of #ifdef __cplusplus */
#define HIVIEW_FILE_HEADER_PREFIX_LOG 0x48565701 /* HVW ASCii + 0x01 */
#define HIVIEW_FILE_HEADER_PREFIX_EVENT 0x48565702 /* HVW ASCii + 0x02 */
#define HIVIEW_FILE_HEADER_PREFIX_TEXT 0x48565703 /* HVW ASCii + 0x03 */
#define HIVIEW_FILE_HEADER_PREFIX_MASK 0x48565700 /* HVW ASCii + 0x00 */
#define HIVIEW_FILE_HEADER_MAIN_VERSION 1 /* Main version:1 */
#define HIVIEW_FILE_HEADER_SUB_VERSION 10 /* Sub version:10 (lite) */
#define HIVIEW_UE_EVENT_VER 991231100 /* UE event version */
#define HIVIEW_FAULT_EVENT_VER 991231000 /* Fault event version */
#define HIVIEW_STATIC_EVENT_VER 991231000 /* Static event version */
#define HIVIEW_CONF_PRODUCT_VER_STR "1.0.0"
#ifndef FILE_PROC_DEFINED
#define FILE_PROC_DEFINED
/**
* Callback function prototype for file processing .
*
* @param path the path of the file to be processed.
* @param type the type of the file to be processed.
* @param event the type of event that triggered the function. 0 for file full.
**/
typedef void (*FileProc)(const char *path, uint8 type, uint8 event);
#endif
typedef enum {
HIVIEW_LOG_TEXT_FILE = 0,
HIVIEW_LOG_BIN_FILE,
HIVIEW_DUMP_FILE,
HIVIEW_FAULT_EVENT_FILE,
HIVIEW_UE_EVENT_FILE,
HIVIEW_STAT_EVENT_FILE,
} HiviewFileType;
typedef enum {
HIVIEW_FILE_COPY = 0,
HIVIEW_FILE_RENAME
} FileProcMode;
typedef enum {
HIVIEW_FILE_FULL = 0
} HiviewFileEvent;
#pragma pack(1)
typedef struct {
uint32 prefix;
uint8 type; /* HiviewFileType */
uint8 codeMainVersion;
uint8 codeSubVersion;
uint32 defineFileVersion;
} FileHeaderCommon;
typedef struct {
FileHeaderCommon common;
uint32 createTime;
uint32 wCursor;
uint32 rCursor;
uint32 size; /* Max size. Include the file header. */
} HiviewFileHeader;
typedef struct {
HiviewFileHeader header;
const char *path;
char *outPath;
FileProc pFunc;
HiviewMutexId_t mutex; /* file lock of outPath */
int32 fhandle; /* Circular file */
} HiviewFile;
#pragma pack()
/**
* Initializes the file object.
*
* @param fp The address of hivew file object.
* @param type file type.
* @param size file size.
* @return TRUE if success, otherwise FALSE.
**/
boolean InitHiviewFile(HiviewFile *fp, HiviewFileType type, uint32 size);
/**
* Writes the file header to file.
*
* @param fp the pointer of hiview file object.
* @return TRUE if success, otherwise FALSE.
**/
boolean WriteFileHeader(HiviewFile *fp);
/**
* Reads the file header info.
*
* @param fp the pointer of hiview file object.
* @return TRUE if the file contains the correct header info, otherwise FALSE.
**/
boolean ReadFileHeader(HiviewFile *fp);
/**
* Writes data to file.
*
* @param fp the pointer of hiview file object.
* @param data bytes to be written to the file.
* @param len the length of the data to be written. The length should be a multiple of a structure.
* @return length of bytes written.
* @attention Avoid calling this function too frequently, the watchdog may timeout otherwise.
**/
int32 WriteToFile(HiviewFile *fp, const uint8 *data, uint32 len);
/**
* Reads data from file.
*
* @param fp the pointer of hiview file object.
* @param data buffer for holding reading data.
* @param readLen the length of the data to be read. The length should be a multiple of a structure.
* @return length of bytes read.
* @attention Avoid calling this function too frequently, the watchdog may timeout otherwise.
**/
int32 ReadFromFile(HiviewFile *fp, uint8 *data, uint32 readLen);
/**
* Gets used size of file, excluding the size of file header
*
* @param fp the pointer of hiview file object.
* @return used size.
**/
uint32 GetFileUsedSize(HiviewFile *fp);
/**
* Gets free size of file, excluding the size of file header
*
* @param fp the pointer of hiview file object.
* @return free size.
**/
uint32 GetFileFreeSize(HiviewFile *fp);
/**
* Closes the file.
*
* @param fp the pointer of hiview file object.
* @return 0 if success, otherwise -1.
**/
int32 CloseHiviewFile(HiviewFile *fp);
/**
* Process files according to mode.
*
* @param fp the pointer of hiview file object.
* @param dest target file path.
* @param mode file processing mode.
* @return 0 if success, otherwise -1.
**/
int8 ProcFile(HiviewFile *fp, const char *dest, FileProcMode mode);
/**
* Register a monitoring function when file is full .
*
* @param fp the pointer of file object.
* @param func callback function.
* @param dest target file path.
**/
void RegisterFileWatcher(HiviewFile *fp, FileProc func, const char *dest);
/**
* Unregister a monitoring function.
*
* @param fp the pointer of file object.
* @param func callback function.
*
**/
void UnRegisterFileWatcher(HiviewFile *fp, FileProc func);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* End of #ifdef __cplusplus */
#endif /* End of #ifndef HOS_LITE_HIVIEW_FILE_H */
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化