• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 BASE_STARTUP_INIT_PARAM_H
17 #define BASE_STARTUP_INIT_PARAM_H
18 #include <stdint.h>
19 #include <stdio.h>
20 #ifdef PARAM_SUPPORT_TRIGGER
21 #include "cJSON.h"
22 #endif
23 #ifdef __cplusplus
24 #if __cplusplus
25 extern "C" {
26 #endif
27 #endif
28 
29 #define DEFAULT_PARAM_WAIT_TIMEOUT 30 // 30s
30 #define DEFAULT_PARAM_SET_TIMEOUT 10 // 10s
31 
32 #ifndef PARAM_NAME_LEN_MAX
33 #define PARAM_CONST_VALUE_LEN_MAX 4096
34 #define PARAM_VALUE_LEN_MAX  96
35 #define PARAM_NAME_LEN_MAX  96
36 #endif
37 
38 typedef enum {
39     PARAM_CODE_ERROR = -1,
40     PARAM_CODE_SUCCESS = 0,
41     PARAM_CODE_INVALID_PARAM = 100,
42     PARAM_CODE_INVALID_NAME,
43     PARAM_CODE_INVALID_VALUE,
44     PARAM_CODE_REACHED_MAX,
45     PARAM_CODE_NOT_SUPPORT,
46     PARAM_CODE_TIMEOUT,
47     PARAM_CODE_NOT_FOUND,
48     PARAM_CODE_READ_ONLY,
49     PARAM_CODE_IPC_ERROR,
50     PARAM_CODE_NODE_EXIST,
51     PARAM_WATCHER_CALLBACK_EXIST,
52     PARAM_WATCHER_GET_SERVICE_FAILED,
53     PARAM_CODE_MEMORY_MAP_FAILED,
54     PARAM_WORKSPACE_NOT_INIT,
55     PARAM_CODE_FAIL_CONNECT,
56     PARAM_CODE_MEMORY_NOT_ENOUGH,
57     PARAM_CODE_PERMISSION_DENIED,
58     PARAM_DEFAULT_PARAM_MEMORY_NOT_ENOUGH,
59     DAC_RESULT_INVALID_PARAM = 1000,
60     DAC_RESULT_FORBIDED,
61     SELINUX_RESULT_FORBIDED,
62     PARAM_CODE_MAX
63 } PARAM_CODE;
64 
65 typedef enum {
66     EVENT_TRIGGER_PARAM,
67     EVENT_TRIGGER_BOOT,
68     EVENT_TRIGGER_PARAM_WAIT,
69     EVENT_TRIGGER_PARAM_WATCH
70 } EventType;
71 
72 #define LOAD_PARAM_NORMAL 0x00
73 #define LOAD_PARAM_ONLY_ADD 0x01
74 
75 typedef uint32_t ParamHandle;
76 
77 /**
78  * Init 接口
79  * 初始化参数服务
80  *
81  */
82 int InitParamService(void);
83 void LoadSpecialParam(void);
84 
85 /**
86  * Init 接口
87  * 启动参数服务,在main启动的最后调用,阻赛当前线程
88  *
89  */
90 int StartParamService(void);
91 
92 /**
93  * Init 接口
94  * 停止参数服务
95  *
96  */
97 void StopParamService(void);
98 
99 /**
100  * Init 接口
101  * 加载默认的参数值
102  *
103  */
104 int LoadDefaultParams(const char *fileName, uint32_t mode);
105 
106 /**
107  * Init 接口
108  * 加载持久化参数。
109  *
110  */
111 int LoadPersistParams(void);
112 
113 /**
114  * Init 接口
115  * 设置参数,主要用于其他进程使用,通过管道修改参数
116  *
117  */
118 int SystemWriteParam(const char *name, const char *value);
119 
120 #ifdef PARAM_SUPPORT_TRIGGER
121 /**
122  * 对外接口
123  * 触发一个trigger操作。
124  *
125  */
126 void PostTrigger(EventType type, const char *content, uint32_t contentLen);
127 
128 /**
129  * 对外接口
130  * 解析trigger文件。
131  *
132  */
133 int ParseTriggerConfig(const cJSON *fileRoot, int (*checkJobValid)(const char *jobName), void *context);
134 
135 /**
136  * 对外接口
137  * 按名字执行对应的trigger。
138  *
139  */
140 void DoTriggerExec(const char *triggerName);
141 void DoJobExecNow(const char *triggerName);
142 
143 /**
144  * 对外接口
145  * 按名字添加一个job,用于group支持。
146  *
147  */
148 int AddCompleteJob(const char *name, const char *condition, const char *cmdContent);
149 
150 void RegisterBootStateChange(void (*bootStateChange)(int start, const char *));
151 
152 /**
153  * 对外接口
154  * dump 参数和trigger信息
155  *
156  */
157 void SystemDumpTriggers(int verbose, int (*dump)(const char *fmt, ...));
158 #endif
159 
160 /**
161  * 对外接口
162  * 设置参数,主要用于其他进程使用,通过管道修改参数。
163  *
164  */
165 int SystemSetParameter(const char *name, const char *value);
166 
167 /**
168  * 对外接口
169  * 保存共享内存中的所有持久化参数
170  *
171 */
172 int SystemSaveParameters(void);
173 
174 /**
175  * Init 接口
176  * 查询参数。
177  *
178  */
179 int SystemReadParam(const char *name, char *value, uint32_t *len);
180 
181 /**
182  * 对外接口
183  * 查询参数,主要用于其他进程使用,需要给定足够的内存保存参数。
184  * 如果 value == null,获取value的长度
185  * 否则value的大小认为是len
186  *
187  */
188 #define SystemGetParameter SystemReadParam
189 
190 
191 /**
192  * 外部接口
193  * 等待某个参数值被修改,阻塞直到参数值被修改或超时
194  *
195  */
196 int SystemWaitParameter(const char *name, const char *value, int32_t timeout);
197 
198 typedef void (*ParameterChangePtr)(const char *key, const char *value, void *context);
199 int SystemWatchParameter(const char *keyprefix, ParameterChangePtr change, void *context);
200 
201 int SystemCheckParamExist(const char *name);
202 
203 void SystemDumpParameters(int verbose, int index, int (*dump)(const char *fmt, ...));
204 
205 int WatchParamCheck(const char *keyprefix);
206 
207 void ResetParamSecurityLabel(void);
208 
209 #ifdef __cplusplus
210 #if __cplusplus
211 }
212 #endif
213 #endif
214 #endif