204 lines
5.7 KiB
C
204 lines
5.7 KiB
C
/*
|
|
* 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 */
|
|
uint32 configSize; /* Config size */
|
|
} 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 *path);
|
|
|
|
/**
|
|
* 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 */
|