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 #include "sys_param.h" 24 #ifdef __cplusplus 25 #if __cplusplus 26 extern "C" { 27 #endif 28 #endif 29 30 #define DEFAULT_PARAM_WAIT_TIMEOUT 30 // 30s 31 #define DEFAULT_PARAM_SET_TIMEOUT 10 // 10s 32 33 #ifndef PARAM_NAME_LEN_MAX 34 #define PARAM_CONST_VALUE_LEN_MAX 4096 35 #define PARAM_VALUE_LEN_MAX 96 36 #define PARAM_NAME_LEN_MAX 96 37 #endif 38 39 typedef enum { 40 PARAM_CODE_ERROR = -1, 41 PARAM_CODE_SUCCESS = 0, 42 PARAM_CODE_INVALID_PARAM = 100, 43 PARAM_CODE_INVALID_NAME, 44 PARAM_CODE_INVALID_VALUE, 45 PARAM_CODE_REACHED_MAX, 46 PARAM_CODE_NOT_SUPPORT, 47 PARAM_CODE_TIMEOUT, 48 PARAM_CODE_NOT_FOUND, 49 PARAM_CODE_READ_ONLY, 50 PARAM_CODE_FAIL_CONNECT, 51 PARAM_CODE_NODE_EXIST, // 9 52 PARAM_CODE_INVALID_SOCKET, 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 /** 69 * Init 接口 70 * 初始化参数服务 71 * 72 */ 73 void InitParamService(void); 74 void LoadSpecialParam(void); 75 76 /** 77 * Init 接口 78 * 启动参数服务,在main启动的最后调用,阻赛当前线程 79 * 80 */ 81 int StartParamService(void); 82 83 /** 84 * Init 接口 85 * 停止参数服务 86 * 87 */ 88 void StopParamService(void); 89 90 /** 91 * Init 接口 92 * 加载默认的参数值 93 * 94 */ 95 int LoadDefaultParams(const char *fileName, uint32_t mode); 96 97 /** 98 * Init 接口 99 * 加载持久化参数。 100 * 101 */ 102 int LoadPersistParams(void); 103 104 /** 105 * Init 接口 106 * 设置参数,主要用于其他进程使用,通过管道修改参数 107 * 108 */ 109 int SystemWriteParam(const char *name, const char *value); 110 111 #ifdef PARAM_SUPPORT_TRIGGER 112 /** 113 * 对外接口 114 * 触发一个trigger操作。 115 * 116 */ 117 void PostTrigger(EventType type, const char *content, uint32_t contentLen); 118 119 /** 120 * 对外接口 121 * 解析trigger文件。 122 * 123 */ 124 int ParseTriggerConfig(const cJSON *fileRoot, int (*checkJobValid)(const char *jobName)); 125 126 /** 127 * 对外接口 128 * 按名字执行对应的trigger。 129 * 130 */ 131 void DoTriggerExec(const char *triggerName); 132 void DoJobExecNow(const char *triggerName); 133 134 /** 135 * 对外接口 136 * 按名字添加一个job,用于group支持。 137 * 138 */ 139 int AddCompleteJob(const char *name, const char *condition, const char *cmdContent); 140 141 void RegisterBootStateChange(void (*bootStateChange)(int start, const char *)); 142 143 /** 144 * 对外接口 145 * dump 参数和trigger信息 146 * 147 */ 148 void SystemDumpTriggers(int verbose, int (*dump)(const char *fmt, ...)); 149 #endif 150 151 /** 152 * 对外接口 153 * 设置参数,主要用于其他进程使用,通过管道修改参数。 154 * 155 */ 156 int SystemSetParameter(const char *name, const char *value); 157 158 /** 159 * 对外接口 160 * 查询参数,主要用于其他进程使用,需要给定足够的内存保存参数。 161 * 如果 value == null,获取value的长度 162 * 否则value的大小认为是len 163 * 164 */ 165 #define SystemGetParameter SystemReadParam 166 167 /** 168 * 外部接口 169 * 遍历参数。 170 * 171 */ 172 int SystemTraversalParameter(const char *prefix, 173 void (*traversalParameter)(ParamHandle handle, void *cookie), void *cookie); 174 175 /** 176 * 外部接口 177 * 查询参数,主要用于其他进程使用,需要给定足够的内存保存参数。 178 * 如果 value == null,获取value的长度 179 * 否则value的大小认为是len 180 * 181 */ 182 int SystemGetParameterName(ParamHandle handle, char *name, unsigned int len); 183 184 /** 185 * 外部接口 186 * 等待某个参数值被修改,阻塞直到参数值被修改或超时 187 * 188 */ 189 int SystemWaitParameter(const char *name, const char *value, int32_t timeout); 190 191 typedef void (*ParameterChangePtr)(const char *key, const char *value, void *context); 192 int SystemWatchParameter(const char *keyprefix, ParameterChangePtr change, void *context); 193 194 int SystemCheckParamExist(const char *name); 195 196 void SystemDumpParameters(int verbose, int (*dump)(const char *fmt, ...)); 197 198 int WatchParamCheck(const char *keyprefix); 199 200 #ifdef __cplusplus 201 #if __cplusplus 202 } 203 #endif 204 #endif 205 #endif