1 /* 2 * Copyright (c) 2020 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef HOS_LITE_HIVIEW_EVENT_H 17 #define HOS_LITE_HIVIEW_EVENT_H 18 19 #include "ohos_types.h" 20 21 #ifdef __cplusplus 22 #if __cplusplus 23 extern "C" { 24 #endif 25 #endif /* End of #ifdef __cplusplus */ 26 27 #ifndef HIEVENT_NONE 28 #define HIEVENT_NONE 0 /* none event */ 29 #endif 30 #ifndef HIEVENT_FAULT 31 #define HIEVENT_FAULT 1 /* fault event */ 32 #endif 33 #ifndef HIEVENT_UE 34 #define HIEVENT_UE 2 /* user behavior event */ 35 #endif 36 #ifndef HIEVENT_STAT 37 #define HIEVENT_STAT 4 /* statistics event */ 38 #endif 39 40 #pragma pack(1) 41 typedef struct { 42 uint8 mark; 43 uint8 len; /* payload length */ 44 uint16 eventId; /* 0-65535 */ 45 uint32 time; 46 } HiEventCommon; 47 48 typedef struct { 49 HiEventCommon common; 50 uint8 type; /* Do not write to file. */ 51 uint8 *payload; /* T-L-V */ 52 } HiEvent; 53 #pragma pack() 54 55 /** 56 * Definitions for function Pointer. 57 * @param data HieventContent pointer. 58 * @return function handle result. If TRUE is returned, the platform does not process, 59 * else the platform continues to process. 60 **/ 61 typedef boolean (*HieventProc)(const HiEvent *event); 62 63 #ifndef FILE_PROC_DEFINED 64 #define FILE_PROC_DEFINED 65 /** 66 * Callback function prototype for file processing. 67 * 68 * @param path the path of the file to be processed. 69 * @param type the type of the file to be processed. 70 * @param event the type of event that triggered the function. 0 for file full. 71 **/ 72 typedef void (*FileProc)(const char *path, uint8 type, uint8 event); 73 #endif 74 75 /** 76 * Create and output a event. 77 * Use the macro definition interface instead of directly using this interface. 78 * @param type Event type. 79 * @param eventId Event ID. Event ID is assigned uniformly and globally unique. 80 * @param key The id of the parameter in the XML definition. Valid data range: 0-15. -1 means no parameters. 81 * @param value The Value of the parameter. 82 * @attention This event carry only one parameter. 83 **/ 84 void HiEventPrintf(uint8 type, uint16 eventId, int8 key, int32 value); 85 86 /** 87 * Create the HivewEvent object. 88 * Use the macro definition interface instead of directly using this interface. 89 * @param type Event type. 90 * @param eventId Event ID. Event ID is assigned uniformly and globally unique. 91 * @param num The number of values carried by the event. Valid data range: 2-16. 92 * @return HiEvent object. 93 * @attention This function is the atomic operation. This method cannot be used when no parameter 94 is carried or only one parameter is carried. 95 **/ 96 HiEvent *HiEventCreate(uint8 type, uint16 eventId, uint8 num); 97 98 /** 99 * Add parameter's value to event object. 100 * Use the macro definition interface instead of directly using this interface. 101 * @param event Operation object. 102 * @param key The id of the parameter in the XML definition. Valid data range: 0-15. 103 * @param value The Value of the parameter. 104 **/ 105 void HiEventPutInteger(HiEvent *event, int8 key, int32 value); 106 107 /** 108 * Ouput the event object and release memory. 109 * Use the macro definition interface instead of directly using this interface. 110 * @param event Operation object. 111 * @attention This function will automatically release the event object. 112 **/ 113 void HiEventReport(HiEvent *event); 114 115 /* 116 * Interface for flush event before the system restarts. 117 * @param syncFlag indicates synchronised flush or asynchronous flush. 118 * @attention Use this interface to flush event to the UART or the files. 119 */ 120 void HiEventFlush(boolean syncFlag); 121 122 /** 123 * Interface for register the Hievent handle. 124 * @param func Function Pointer. 125 **/ 126 void HiEventRegisterProc(HieventProc func); 127 128 /** 129 * Interface for deregister the Hievent handle. 130 **/ 131 void HiEventUnRegisterProc(HieventProc func); 132 133 /** 134 * Add a monitoring function when the specified type of file is full . 135 * 136 * @param type hievent type. 137 * @param func callback function. 138 * @param dest hievent output target file path. 139 **/ 140 void HiEventFileAddWatcher(uint8 type, FileProc func, const char *dest); 141 142 /** 143 * Remove monitoring of specified types of files. 144 * 145 * @param type hievent type. 146 * @param func callback function. 147 **/ 148 void HiEventFileRemoveWatcher(uint8 type, FileProc func); 149 150 /** 151 * Process files according to mode. 152 * 153 * @param type hievent type. 154 * @param dest hievent output target file path. 155 * @param mode file processing mode. 0 for copy specified type hievent file to dest and keep the 156 * content in the source file, 1 for rename specified type hievent file to dest. 157 * @return 0 if success, otherwise -1. 158 **/ 159 int HiEventFileProc(uint8 type, const char *dest, uint8 mode); 160 161 /** 162 * Lock the hievent output target file. 163 * 164 **/ 165 void HiEventOutputFileLock(void); 166 167 /** 168 * Unlock the hievent output target file. 169 * 170 **/ 171 void HiEventOutputFileUnLock(void); 172 173 #ifndef HIEVENT_COMPILE_TYPE 174 #define HIEVENT_COMPILE_TYPE (HIEVENT_FAULT | HIEVENT_UE | HIEVENT_STAT) 175 #endif 176 177 #define IS_COMPILE_EVENT(t) (((HIEVENT_COMPILE_TYPE) & (t)) == (t)) 178 179 /** 180 * If no parameter is carried or only one parameter is carried, use the following method. 181 * @param id Event ID. Event ID is assigned uniformly and globally unique. The maximum value is 65535. 182 * @param k Index of the parameter carried in the event. Valid data range: 0-15. If the value is -1, 183 * the event does not carry any parameter. 184 * @param v Value of the parameter carried in the event. 185 **/ 186 #if IS_COMPILE_EVENT(HIEVENT_FAULT) 187 #define HIEVENT_FAULT_REPORT(id, k, v) HiEventPrintf(HIEVENT_FAULT, (id), (k), (v)) 188 #else 189 #define HIEVENT_FAULT_REPORT(id, k, v) 190 #endif 191 192 #if IS_COMPILE_EVENT(HIEVENT_UE) 193 #define HIEVENT_UE_REPORT(id, k, v) HiEventPrintf(HIEVENT_UE, (id), (k), (v)) 194 #else 195 #define HIEVENT_UE_REPORT(id, k, v) 196 #endif 197 198 #if IS_COMPILE_EVENT(HIEVENT_STAT) 199 #define HIEVENT_STAT_REPORT(id, k, v) HiEventPrintf(HIEVENT_STAT, (id), (k), (v)) 200 #else 201 #define HIEVENT_STAT_REPORT(id, k, v) 202 #endif 203 204 /** 205 * If multiple parameters need to be carried, use the following method. 206 * @param type Event type. 207 * @param id Event id. Event ID is assigned uniformly and globally unique. 208 * @param num Number of parameters carried in an event. Valid data range: 2-16. 209 * @attention The following method cannot be used when no parameter is carried or only one parameter is carried. 210 **/ 211 #if HIEVENT_COMPILE_TYPE > HIEVENT_NONE 212 #define HIEVENT_CREATE(type, id, num) HiEventCreate(type, id, num) 213 #define HIEVENT_PUT_INT_VALUE(pEvent, k, v) HiEventPutInteger(pEvent, k, v) 214 #define HIEVENT_REPORT(pEvent) HiEventReport(pEvent) 215 #else 216 #define HIEVENT_CREATE(type, id, num) 217 #define HIEVENT_PUT_INT_VALUE(pEvent, k, v) 218 #define HIEVENT_REPORT(pEvent) 219 #endif 220 221 #ifdef __cplusplus 222 #if __cplusplus 223 } 224 #endif 225 #endif /* End of #ifdef __cplusplus */ 226 227 #endif /* End of #ifndef HOS_LITE_HIVIEW_EVENT_H */ 228