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