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