• 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_FAIL_CONNECT,
50     PARAM_CODE_NODE_EXIST, // 9
51     PARAM_CODE_INVALID_SOCKET,
52     PARAM_DEFAULT_PARAM_MEMORY_NOT_ENOUGH,
53     DAC_RESULT_INVALID_PARAM = 1000,
54     DAC_RESULT_FORBIDED,
55     PARAM_CODE_MAX
56 } PARAM_CODE;
57 
58 typedef enum {
59     EVENT_TRIGGER_PARAM,
60     EVENT_TRIGGER_BOOT,
61     EVENT_TRIGGER_PARAM_WAIT,
62     EVENT_TRIGGER_PARAM_WATCH
63 } EventType;
64 
65 #define LOAD_PARAM_NORMAL 0x00
66 #define LOAD_PARAM_ONLY_ADD 0x01
67 
68 typedef uint32_t ParamHandle;
69 
70 /**
71  * Init 接口
72  * 初始化参数服务
73  *
74  */
75 void InitParamService(void);
76 void LoadSpecialParam(void);
77 
78 /**
79  * Init 接口
80  * 启动参数服务,在main启动的最后调用,阻赛当前线程
81  *
82  */
83 int StartParamService(void);
84 
85 /**
86  * Init 接口
87  * 停止参数服务
88  *
89  */
90 void StopParamService(void);
91 
92 /**
93  * Init 接口
94  * 加载默认的参数值
95  *
96  */
97 int LoadDefaultParams(const char *fileName, uint32_t mode);
98 
99 /**
100  * Init 接口
101  * 加载持久化参数。
102  *
103  */
104 int LoadPersistParams(void);
105 
106 /**
107  * Init 接口
108  * 设置参数,主要用于其他进程使用,通过管道修改参数
109  *
110  */
111 int SystemWriteParam(const char *name, const char *value);
112 
113 #ifdef PARAM_SUPPORT_TRIGGER
114 /**
115  * 对外接口
116  * 触发一个trigger操作。
117  *
118  */
119 void PostTrigger(EventType type, const char *content, uint32_t contentLen);
120 
121 /**
122  * 对外接口
123  * 解析trigger文件。
124  *
125  */
126 int ParseTriggerConfig(const cJSON *fileRoot, int (*checkJobValid)(const char *jobName), void *context);
127 
128 /**
129  * 对外接口
130  * 按名字执行对应的trigger。
131  *
132  */
133 void DoTriggerExec(const char *triggerName);
134 void DoJobExecNow(const char *triggerName);
135 
136 /**
137  * 对外接口
138  * 按名字添加一个job,用于group支持。
139  *
140  */
141 int AddCompleteJob(const char *name, const char *condition, const char *cmdContent);
142 
143 void RegisterBootStateChange(void (*bootStateChange)(int start, const char *));
144 
145 /**
146  * 对外接口
147  * dump 参数和trigger信息
148  *
149  */
150 void SystemDumpTriggers(int verbose, int (*dump)(const char *fmt, ...));
151 #endif
152 
153 /**
154  * 对外接口
155  * 设置参数,主要用于其他进程使用,通过管道修改参数。
156  *
157  */
158 int SystemSetParameter(const char *name, const char *value);
159 
160 /**
161  * Init 接口
162  * 查询参数。
163  *
164  */
165 int SystemReadParam(const char *name, char *value, uint32_t *len);
166 
167 /**
168  * 对外接口
169  * 查询参数,主要用于其他进程使用,找到对应属性的handle。
170  *
171  */
172 int SystemFindParameter(const char *name, ParamHandle *handle);
173 
174 /**
175  * 对外接口
176  * 根据handle获取对应数据的修改标识。
177  * commitId 获取计数变化
178  *
179  */
180 int SystemGetParameterCommitId(ParamHandle handle, uint32_t *commitId);
181 
182 /**
183  * 外部接口
184  * 获取参数值。
185  *
186  */
187 int SystemGetParameterValue(ParamHandle handle, char *value, unsigned int *len);
188 
189 long long GetSystemCommitId(void);
190 
191 /**
192  * 对外接口
193  * 查询参数,主要用于其他进程使用,需要给定足够的内存保存参数。
194  * 如果 value == null,获取value的长度
195  * 否则value的大小认为是len
196  *
197  */
198 #define SystemGetParameter SystemReadParam
199 
200 /**
201  * 外部接口
202  * 遍历参数。
203  *
204  */
205 int SystemTraversalParameter(const char *prefix,
206     void (*traversalParameter)(ParamHandle handle, void *cookie), void *cookie);
207 
208 /**
209  * 外部接口
210  * 查询参数,主要用于其他进程使用,需要给定足够的内存保存参数。
211  * 如果 value == null,获取value的长度
212  * 否则value的大小认为是len
213  *
214  */
215 int SystemGetParameterName(ParamHandle handle, char *name, unsigned int len);
216 
217 /**
218  * 外部接口
219  * 等待某个参数值被修改,阻塞直到参数值被修改或超时
220  *
221  */
222 int SystemWaitParameter(const char *name, const char *value, int32_t timeout);
223 
224 typedef void (*ParameterChangePtr)(const char *key, const char *value, void *context);
225 int SystemWatchParameter(const char *keyprefix, ParameterChangePtr change, void *context);
226 
227 int SystemCheckParamExist(const char *name);
228 
229 void SystemDumpParameters(int verbose, int index, int (*dump)(const char *fmt, ...));
230 
231 int WatchParamCheck(const char *keyprefix);
232 
233 void ResetParamSecurityLabel(void);
234 
235 #ifdef __cplusplus
236 #if __cplusplus
237 }
238 #endif
239 #endif
240 #endif