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