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 25extern "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 38typedef 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 65typedef 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#define LOAD_PARAM_PERSIST 0x02 75 76typedef uint32_t ParamHandle; 77 78/** 79 * Init 接口 80 * 初始化参数服务 81 * 82 */ 83int InitParamService(void); 84void LoadSpecialParam(void); 85 86/** 87 * Init 接口 88 * 启动参数服务,在main启动的最后调用,阻赛当前线程 89 * 90 */ 91int StartParamService(void); 92 93/** 94 * Init 接口 95 * 停止参数服务 96 * 97 */ 98void StopParamService(void); 99 100/** 101 * Init 接口 102 * 加载默认的参数值 103 * 104 */ 105int LoadDefaultParams(const char *fileName, uint32_t mode); 106 107/** 108 * Init 接口 109 * 加载持久化参数。 110 * 111 */ 112int LoadPersistParams(void); 113 114/** 115 * Init 接口 116 * 加载加密目录下持久化参数。 117 * 118 */ 119int LoadPrivatePersistParams(void); 120 121/** 122 * Init 接口 123 * 设置参数,主要用于其他进程使用,通过管道修改参数 124 * 125 */ 126int SystemWriteParam(const char *name, const char *value); 127 128#ifdef PARAM_SUPPORT_TRIGGER 129/** 130 * 对外接口 131 * 触发一个trigger操作。 132 * 133 */ 134void PostTrigger(EventType type, const char *content, uint32_t contentLen); 135 136/** 137 * 对外接口 138 * 解析trigger文件。 139 * 140 */ 141int ParseTriggerConfig(const cJSON *fileRoot, int (*checkJobValid)(const char *jobName), void *context); 142 143/** 144 * 对外接口 145 * 按名字执行对应的trigger。 146 * 147 */ 148void DoTriggerExec(const char *triggerName); 149void DoJobExecNow(const char *triggerName); 150 151/** 152 * 对外接口 153 * 按名字添加一个job,用于group支持。 154 * 155 */ 156int AddCompleteJob(const char *name, const char *condition, const char *cmdContent); 157 158void RegisterBootStateChange(void (*bootStateChange)(int start, const char *)); 159 160/** 161 * 对外接口 162 * dump 参数和trigger信息 163 * 164 */ 165void SystemDumpTriggers(int verbose, int (*dump)(const char *fmt, ...)); 166#endif 167 168/** 169 * 对外接口 170 * 设置参数,主要用于其他进程使用,通过管道修改参数。 171 * 172 */ 173int SystemSetParameter(const char *name, const char *value); 174 175/** 176 * 对外接口 177 * 保存共享内存中的所有持久化参数 178 * 179*/ 180int SystemSaveParameters(void); 181 182/** 183 * Init 接口 184 * 查询参数。 185 * 186 */ 187int SystemReadParam(const char *name, char *value, uint32_t *len); 188 189/** 190 * 对外接口 191 * 查询参数,主要用于其他进程使用,需要给定足够的内存保存参数。 192 * 如果 value == null,获取value的长度 193 * 否则value的大小认为是len 194 * 195 */ 196#define SystemGetParameter SystemReadParam 197 198 199/** 200 * 外部接口 201 * 等待某个参数值被修改,阻塞直到参数值被修改或超时 202 * 203 */ 204int SystemWaitParameter(const char *name, const char *value, int32_t timeout); 205 206typedef void (*ParameterChangePtr)(const char *key, const char *value, void *context); 207int SystemWatchParameter(const char *keyprefix, ParameterChangePtr change, void *context); 208 209int SystemCheckParamExist(const char *name); 210 211void SystemDumpParameters(int verbose, int index, int (*dump)(const char *fmt, ...)); 212 213int WatchParamCheck(const char *keyprefix); 214 215void ResetParamSecurityLabel(void); 216 217#ifdef __cplusplus 218#if __cplusplus 219} 220#endif 221#endif 222#endif