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