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