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