1d9f0492fSopenharmony_ci/*
2d9f0492fSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
3d9f0492fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4d9f0492fSopenharmony_ci * you may not use this file except in compliance with the License.
5d9f0492fSopenharmony_ci * You may obtain a copy of the License at
6d9f0492fSopenharmony_ci *
7d9f0492fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
8d9f0492fSopenharmony_ci *
9d9f0492fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10d9f0492fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11d9f0492fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12d9f0492fSopenharmony_ci * See the License for the specific language governing permissions and
13d9f0492fSopenharmony_ci * limitations under the License.
14d9f0492fSopenharmony_ci */
15d9f0492fSopenharmony_ci
16d9f0492fSopenharmony_ci#ifndef BASE_STARTUP_INIT_PARAM_H
17d9f0492fSopenharmony_ci#define BASE_STARTUP_INIT_PARAM_H
18d9f0492fSopenharmony_ci#include <stdint.h>
19d9f0492fSopenharmony_ci#include <stdio.h>
20d9f0492fSopenharmony_ci#ifdef PARAM_SUPPORT_TRIGGER
21d9f0492fSopenharmony_ci#include "cJSON.h"
22d9f0492fSopenharmony_ci#endif
23d9f0492fSopenharmony_ci#ifdef __cplusplus
24d9f0492fSopenharmony_ci#if __cplusplus
25d9f0492fSopenharmony_ciextern "C" {
26d9f0492fSopenharmony_ci#endif
27d9f0492fSopenharmony_ci#endif
28d9f0492fSopenharmony_ci
29d9f0492fSopenharmony_ci#define DEFAULT_PARAM_WAIT_TIMEOUT 30 // 30s
30d9f0492fSopenharmony_ci#define DEFAULT_PARAM_SET_TIMEOUT 10 // 10s
31d9f0492fSopenharmony_ci
32d9f0492fSopenharmony_ci#ifndef PARAM_NAME_LEN_MAX
33d9f0492fSopenharmony_ci#define PARAM_CONST_VALUE_LEN_MAX 4096
34d9f0492fSopenharmony_ci#define PARAM_VALUE_LEN_MAX  96
35d9f0492fSopenharmony_ci#define PARAM_NAME_LEN_MAX  96
36d9f0492fSopenharmony_ci#endif
37d9f0492fSopenharmony_ci
38d9f0492fSopenharmony_citypedef enum {
39d9f0492fSopenharmony_ci    PARAM_CODE_ERROR = -1,
40d9f0492fSopenharmony_ci    PARAM_CODE_SUCCESS = 0,
41d9f0492fSopenharmony_ci    PARAM_CODE_INVALID_PARAM = 100,
42d9f0492fSopenharmony_ci    PARAM_CODE_INVALID_NAME,
43d9f0492fSopenharmony_ci    PARAM_CODE_INVALID_VALUE,
44d9f0492fSopenharmony_ci    PARAM_CODE_REACHED_MAX,
45d9f0492fSopenharmony_ci    PARAM_CODE_NOT_SUPPORT,
46d9f0492fSopenharmony_ci    PARAM_CODE_TIMEOUT,
47d9f0492fSopenharmony_ci    PARAM_CODE_NOT_FOUND,
48d9f0492fSopenharmony_ci    PARAM_CODE_READ_ONLY,
49d9f0492fSopenharmony_ci    PARAM_CODE_IPC_ERROR,
50d9f0492fSopenharmony_ci    PARAM_CODE_NODE_EXIST,
51d9f0492fSopenharmony_ci    PARAM_WATCHER_CALLBACK_EXIST,
52d9f0492fSopenharmony_ci    PARAM_WATCHER_GET_SERVICE_FAILED,
53d9f0492fSopenharmony_ci    PARAM_CODE_MEMORY_MAP_FAILED,
54d9f0492fSopenharmony_ci    PARAM_WORKSPACE_NOT_INIT,
55d9f0492fSopenharmony_ci    PARAM_CODE_FAIL_CONNECT,
56d9f0492fSopenharmony_ci    PARAM_CODE_MEMORY_NOT_ENOUGH,
57d9f0492fSopenharmony_ci    PARAM_CODE_PERMISSION_DENIED,
58d9f0492fSopenharmony_ci    PARAM_DEFAULT_PARAM_MEMORY_NOT_ENOUGH,
59d9f0492fSopenharmony_ci    DAC_RESULT_INVALID_PARAM = 1000,
60d9f0492fSopenharmony_ci    DAC_RESULT_FORBIDED,
61d9f0492fSopenharmony_ci    SELINUX_RESULT_FORBIDED,
62d9f0492fSopenharmony_ci    PARAM_CODE_MAX
63d9f0492fSopenharmony_ci} PARAM_CODE;
64d9f0492fSopenharmony_ci
65d9f0492fSopenharmony_citypedef enum {
66d9f0492fSopenharmony_ci    EVENT_TRIGGER_PARAM,
67d9f0492fSopenharmony_ci    EVENT_TRIGGER_BOOT,
68d9f0492fSopenharmony_ci    EVENT_TRIGGER_PARAM_WAIT,
69d9f0492fSopenharmony_ci    EVENT_TRIGGER_PARAM_WATCH
70d9f0492fSopenharmony_ci} EventType;
71d9f0492fSopenharmony_ci
72d9f0492fSopenharmony_ci#define LOAD_PARAM_NORMAL 0x00
73d9f0492fSopenharmony_ci#define LOAD_PARAM_ONLY_ADD 0x01
74d9f0492fSopenharmony_ci#define LOAD_PARAM_PERSIST 0x02
75d9f0492fSopenharmony_ci
76d9f0492fSopenharmony_citypedef uint32_t ParamHandle;
77d9f0492fSopenharmony_ci
78d9f0492fSopenharmony_ci/**
79d9f0492fSopenharmony_ci * Init 接口
80d9f0492fSopenharmony_ci * 初始化参数服务
81d9f0492fSopenharmony_ci *
82d9f0492fSopenharmony_ci */
83d9f0492fSopenharmony_ciint InitParamService(void);
84d9f0492fSopenharmony_civoid LoadSpecialParam(void);
85d9f0492fSopenharmony_ci
86d9f0492fSopenharmony_ci/**
87d9f0492fSopenharmony_ci * Init 接口
88d9f0492fSopenharmony_ci * 启动参数服务,在main启动的最后调用,阻赛当前线程
89d9f0492fSopenharmony_ci *
90d9f0492fSopenharmony_ci */
91d9f0492fSopenharmony_ciint StartParamService(void);
92d9f0492fSopenharmony_ci
93d9f0492fSopenharmony_ci/**
94d9f0492fSopenharmony_ci * Init 接口
95d9f0492fSopenharmony_ci * 停止参数服务
96d9f0492fSopenharmony_ci *
97d9f0492fSopenharmony_ci */
98d9f0492fSopenharmony_civoid StopParamService(void);
99d9f0492fSopenharmony_ci
100d9f0492fSopenharmony_ci/**
101d9f0492fSopenharmony_ci * Init 接口
102d9f0492fSopenharmony_ci * 加载默认的参数值
103d9f0492fSopenharmony_ci *
104d9f0492fSopenharmony_ci */
105d9f0492fSopenharmony_ciint LoadDefaultParams(const char *fileName, uint32_t mode);
106d9f0492fSopenharmony_ci
107d9f0492fSopenharmony_ci/**
108d9f0492fSopenharmony_ci * Init 接口
109d9f0492fSopenharmony_ci * 加载持久化参数。
110d9f0492fSopenharmony_ci *
111d9f0492fSopenharmony_ci */
112d9f0492fSopenharmony_ciint LoadPersistParams(void);
113d9f0492fSopenharmony_ci
114d9f0492fSopenharmony_ci/**
115d9f0492fSopenharmony_ci * Init 接口
116d9f0492fSopenharmony_ci * 加载加密目录下持久化参数。
117d9f0492fSopenharmony_ci *
118d9f0492fSopenharmony_ci */
119d9f0492fSopenharmony_ciint LoadPrivatePersistParams(void);
120d9f0492fSopenharmony_ci
121d9f0492fSopenharmony_ci/**
122d9f0492fSopenharmony_ci * Init 接口
123d9f0492fSopenharmony_ci * 设置参数,主要用于其他进程使用,通过管道修改参数
124d9f0492fSopenharmony_ci *
125d9f0492fSopenharmony_ci */
126d9f0492fSopenharmony_ciint SystemWriteParam(const char *name, const char *value);
127d9f0492fSopenharmony_ci
128d9f0492fSopenharmony_ci#ifdef PARAM_SUPPORT_TRIGGER
129d9f0492fSopenharmony_ci/**
130d9f0492fSopenharmony_ci * 对外接口
131d9f0492fSopenharmony_ci * 触发一个trigger操作。
132d9f0492fSopenharmony_ci *
133d9f0492fSopenharmony_ci */
134d9f0492fSopenharmony_civoid PostTrigger(EventType type, const char *content, uint32_t contentLen);
135d9f0492fSopenharmony_ci
136d9f0492fSopenharmony_ci/**
137d9f0492fSopenharmony_ci * 对外接口
138d9f0492fSopenharmony_ci * 解析trigger文件。
139d9f0492fSopenharmony_ci *
140d9f0492fSopenharmony_ci */
141d9f0492fSopenharmony_ciint ParseTriggerConfig(const cJSON *fileRoot, int (*checkJobValid)(const char *jobName), void *context);
142d9f0492fSopenharmony_ci
143d9f0492fSopenharmony_ci/**
144d9f0492fSopenharmony_ci * 对外接口
145d9f0492fSopenharmony_ci * 按名字执行对应的trigger。
146d9f0492fSopenharmony_ci *
147d9f0492fSopenharmony_ci */
148d9f0492fSopenharmony_civoid DoTriggerExec(const char *triggerName);
149d9f0492fSopenharmony_civoid DoJobExecNow(const char *triggerName);
150d9f0492fSopenharmony_ci
151d9f0492fSopenharmony_ci/**
152d9f0492fSopenharmony_ci * 对外接口
153d9f0492fSopenharmony_ci * 按名字添加一个job,用于group支持。
154d9f0492fSopenharmony_ci *
155d9f0492fSopenharmony_ci */
156d9f0492fSopenharmony_ciint AddCompleteJob(const char *name, const char *condition, const char *cmdContent);
157d9f0492fSopenharmony_ci
158d9f0492fSopenharmony_civoid RegisterBootStateChange(void (*bootStateChange)(int start, const char *));
159d9f0492fSopenharmony_ci
160d9f0492fSopenharmony_ci/**
161d9f0492fSopenharmony_ci * 对外接口
162d9f0492fSopenharmony_ci * dump 参数和trigger信息
163d9f0492fSopenharmony_ci *
164d9f0492fSopenharmony_ci */
165d9f0492fSopenharmony_civoid SystemDumpTriggers(int verbose, int (*dump)(const char *fmt, ...));
166d9f0492fSopenharmony_ci#endif
167d9f0492fSopenharmony_ci
168d9f0492fSopenharmony_ci/**
169d9f0492fSopenharmony_ci * 对外接口
170d9f0492fSopenharmony_ci * 设置参数,主要用于其他进程使用,通过管道修改参数。
171d9f0492fSopenharmony_ci *
172d9f0492fSopenharmony_ci */
173d9f0492fSopenharmony_ciint SystemSetParameter(const char *name, const char *value);
174d9f0492fSopenharmony_ci
175d9f0492fSopenharmony_ci/**
176d9f0492fSopenharmony_ci * 对外接口
177d9f0492fSopenharmony_ci * 保存共享内存中的所有持久化参数
178d9f0492fSopenharmony_ci *
179d9f0492fSopenharmony_ci*/
180d9f0492fSopenharmony_ciint SystemSaveParameters(void);
181d9f0492fSopenharmony_ci
182d9f0492fSopenharmony_ci/**
183d9f0492fSopenharmony_ci * Init 接口
184d9f0492fSopenharmony_ci * 查询参数。
185d9f0492fSopenharmony_ci *
186d9f0492fSopenharmony_ci */
187d9f0492fSopenharmony_ciint SystemReadParam(const char *name, char *value, uint32_t *len);
188d9f0492fSopenharmony_ci
189d9f0492fSopenharmony_ci/**
190d9f0492fSopenharmony_ci * 对外接口
191d9f0492fSopenharmony_ci * 查询参数,主要用于其他进程使用,需要给定足够的内存保存参数。
192d9f0492fSopenharmony_ci * 如果 value == null,获取value的长度
193d9f0492fSopenharmony_ci * 否则value的大小认为是len
194d9f0492fSopenharmony_ci *
195d9f0492fSopenharmony_ci */
196d9f0492fSopenharmony_ci#define SystemGetParameter SystemReadParam
197d9f0492fSopenharmony_ci
198d9f0492fSopenharmony_ci
199d9f0492fSopenharmony_ci/**
200d9f0492fSopenharmony_ci * 外部接口
201d9f0492fSopenharmony_ci * 等待某个参数值被修改,阻塞直到参数值被修改或超时
202d9f0492fSopenharmony_ci *
203d9f0492fSopenharmony_ci */
204d9f0492fSopenharmony_ciint SystemWaitParameter(const char *name, const char *value, int32_t timeout);
205d9f0492fSopenharmony_ci
206d9f0492fSopenharmony_citypedef void (*ParameterChangePtr)(const char *key, const char *value, void *context);
207d9f0492fSopenharmony_ciint SystemWatchParameter(const char *keyprefix, ParameterChangePtr change, void *context);
208d9f0492fSopenharmony_ci
209d9f0492fSopenharmony_ciint SystemCheckParamExist(const char *name);
210d9f0492fSopenharmony_ci
211d9f0492fSopenharmony_civoid SystemDumpParameters(int verbose, int index, int (*dump)(const char *fmt, ...));
212d9f0492fSopenharmony_ci
213d9f0492fSopenharmony_ciint WatchParamCheck(const char *keyprefix);
214d9f0492fSopenharmony_ci
215d9f0492fSopenharmony_civoid ResetParamSecurityLabel(void);
216d9f0492fSopenharmony_ci
217d9f0492fSopenharmony_ci#ifdef __cplusplus
218d9f0492fSopenharmony_ci#if __cplusplus
219d9f0492fSopenharmony_ci}
220d9f0492fSopenharmony_ci#endif
221d9f0492fSopenharmony_ci#endif
222d9f0492fSopenharmony_ci#endif