1d9f0492fSopenharmony_ci/* 2d9f0492fSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 3d9f0492fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4d9f0492fSopenharmony_ci * you may not use this file except in compliance with the License. 5d9f0492fSopenharmony_ci * You may obtain a copy of the License at 6d9f0492fSopenharmony_ci * 7d9f0492fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8d9f0492fSopenharmony_ci * 9d9f0492fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10d9f0492fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11d9f0492fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d9f0492fSopenharmony_ci * See the License for the specific language governing permissions and 13d9f0492fSopenharmony_ci * limitations under the License. 14d9f0492fSopenharmony_ci */ 15d9f0492fSopenharmony_ci 16d9f0492fSopenharmony_ci#ifndef BASE_STARTUP_INIT_PARAM_H 17d9f0492fSopenharmony_ci#define BASE_STARTUP_INIT_PARAM_H 18d9f0492fSopenharmony_ci#include <stdint.h> 19d9f0492fSopenharmony_ci#include <stdio.h> 20d9f0492fSopenharmony_ci#ifdef PARAM_SUPPORT_TRIGGER 21d9f0492fSopenharmony_ci#include "cJSON.h" 22d9f0492fSopenharmony_ci#endif 23d9f0492fSopenharmony_ci#ifdef __cplusplus 24d9f0492fSopenharmony_ci#if __cplusplus 25d9f0492fSopenharmony_ciextern "C" { 26d9f0492fSopenharmony_ci#endif 27d9f0492fSopenharmony_ci#endif 28d9f0492fSopenharmony_ci 29d9f0492fSopenharmony_ci#define DEFAULT_PARAM_WAIT_TIMEOUT 30 // 30s 30d9f0492fSopenharmony_ci#define DEFAULT_PARAM_SET_TIMEOUT 10 // 10s 31d9f0492fSopenharmony_ci 32d9f0492fSopenharmony_ci#ifndef PARAM_NAME_LEN_MAX 33d9f0492fSopenharmony_ci#define PARAM_CONST_VALUE_LEN_MAX 4096 34d9f0492fSopenharmony_ci#define PARAM_VALUE_LEN_MAX 96 35d9f0492fSopenharmony_ci#define PARAM_NAME_LEN_MAX 96 36d9f0492fSopenharmony_ci#endif 37d9f0492fSopenharmony_ci 38d9f0492fSopenharmony_citypedef enum { 39d9f0492fSopenharmony_ci PARAM_CODE_ERROR = -1, 40d9f0492fSopenharmony_ci PARAM_CODE_SUCCESS = 0, 41d9f0492fSopenharmony_ci PARAM_CODE_INVALID_PARAM = 100, 42d9f0492fSopenharmony_ci PARAM_CODE_INVALID_NAME, 43d9f0492fSopenharmony_ci PARAM_CODE_INVALID_VALUE, 44d9f0492fSopenharmony_ci PARAM_CODE_REACHED_MAX, 45d9f0492fSopenharmony_ci PARAM_CODE_NOT_SUPPORT, 46d9f0492fSopenharmony_ci PARAM_CODE_TIMEOUT, 47d9f0492fSopenharmony_ci PARAM_CODE_NOT_FOUND, 48d9f0492fSopenharmony_ci PARAM_CODE_READ_ONLY, 49d9f0492fSopenharmony_ci PARAM_CODE_IPC_ERROR, 50d9f0492fSopenharmony_ci PARAM_CODE_NODE_EXIST, 51d9f0492fSopenharmony_ci PARAM_WATCHER_CALLBACK_EXIST, 52d9f0492fSopenharmony_ci PARAM_WATCHER_GET_SERVICE_FAILED, 53d9f0492fSopenharmony_ci PARAM_CODE_MEMORY_MAP_FAILED, 54d9f0492fSopenharmony_ci PARAM_WORKSPACE_NOT_INIT, 55d9f0492fSopenharmony_ci PARAM_CODE_FAIL_CONNECT, 56d9f0492fSopenharmony_ci PARAM_CODE_MEMORY_NOT_ENOUGH, 57d9f0492fSopenharmony_ci PARAM_CODE_PERMISSION_DENIED, 58d9f0492fSopenharmony_ci PARAM_DEFAULT_PARAM_MEMORY_NOT_ENOUGH, 59d9f0492fSopenharmony_ci DAC_RESULT_INVALID_PARAM = 1000, 60d9f0492fSopenharmony_ci DAC_RESULT_FORBIDED, 61d9f0492fSopenharmony_ci SELINUX_RESULT_FORBIDED, 62d9f0492fSopenharmony_ci PARAM_CODE_MAX 63d9f0492fSopenharmony_ci} PARAM_CODE; 64d9f0492fSopenharmony_ci 65d9f0492fSopenharmony_citypedef enum { 66d9f0492fSopenharmony_ci EVENT_TRIGGER_PARAM, 67d9f0492fSopenharmony_ci EVENT_TRIGGER_BOOT, 68d9f0492fSopenharmony_ci EVENT_TRIGGER_PARAM_WAIT, 69d9f0492fSopenharmony_ci EVENT_TRIGGER_PARAM_WATCH 70d9f0492fSopenharmony_ci} EventType; 71d9f0492fSopenharmony_ci 72d9f0492fSopenharmony_ci#define LOAD_PARAM_NORMAL 0x00 73d9f0492fSopenharmony_ci#define LOAD_PARAM_ONLY_ADD 0x01 74d9f0492fSopenharmony_ci#define LOAD_PARAM_PERSIST 0x02 75d9f0492fSopenharmony_ci 76d9f0492fSopenharmony_citypedef uint32_t ParamHandle; 77d9f0492fSopenharmony_ci 78d9f0492fSopenharmony_ci/** 79d9f0492fSopenharmony_ci * Init 接口 80d9f0492fSopenharmony_ci * 初始化参数服务 81d9f0492fSopenharmony_ci * 82d9f0492fSopenharmony_ci */ 83d9f0492fSopenharmony_ciint InitParamService(void); 84d9f0492fSopenharmony_civoid LoadSpecialParam(void); 85d9f0492fSopenharmony_ci 86d9f0492fSopenharmony_ci/** 87d9f0492fSopenharmony_ci * Init 接口 88d9f0492fSopenharmony_ci * 启动参数服务,在main启动的最后调用,阻赛当前线程 89d9f0492fSopenharmony_ci * 90d9f0492fSopenharmony_ci */ 91d9f0492fSopenharmony_ciint StartParamService(void); 92d9f0492fSopenharmony_ci 93d9f0492fSopenharmony_ci/** 94d9f0492fSopenharmony_ci * Init 接口 95d9f0492fSopenharmony_ci * 停止参数服务 96d9f0492fSopenharmony_ci * 97d9f0492fSopenharmony_ci */ 98d9f0492fSopenharmony_civoid StopParamService(void); 99d9f0492fSopenharmony_ci 100d9f0492fSopenharmony_ci/** 101d9f0492fSopenharmony_ci * Init 接口 102d9f0492fSopenharmony_ci * 加载默认的参数值 103d9f0492fSopenharmony_ci * 104d9f0492fSopenharmony_ci */ 105d9f0492fSopenharmony_ciint LoadDefaultParams(const char *fileName, uint32_t mode); 106d9f0492fSopenharmony_ci 107d9f0492fSopenharmony_ci/** 108d9f0492fSopenharmony_ci * Init 接口 109d9f0492fSopenharmony_ci * 加载持久化参数。 110d9f0492fSopenharmony_ci * 111d9f0492fSopenharmony_ci */ 112d9f0492fSopenharmony_ciint LoadPersistParams(void); 113d9f0492fSopenharmony_ci 114d9f0492fSopenharmony_ci/** 115d9f0492fSopenharmony_ci * Init 接口 116d9f0492fSopenharmony_ci * 加载加密目录下持久化参数。 117d9f0492fSopenharmony_ci * 118d9f0492fSopenharmony_ci */ 119d9f0492fSopenharmony_ciint LoadPrivatePersistParams(void); 120d9f0492fSopenharmony_ci 121d9f0492fSopenharmony_ci/** 122d9f0492fSopenharmony_ci * Init 接口 123d9f0492fSopenharmony_ci * 设置参数,主要用于其他进程使用,通过管道修改参数 124d9f0492fSopenharmony_ci * 125d9f0492fSopenharmony_ci */ 126d9f0492fSopenharmony_ciint SystemWriteParam(const char *name, const char *value); 127d9f0492fSopenharmony_ci 128d9f0492fSopenharmony_ci#ifdef PARAM_SUPPORT_TRIGGER 129d9f0492fSopenharmony_ci/** 130d9f0492fSopenharmony_ci * 对外接口 131d9f0492fSopenharmony_ci * 触发一个trigger操作。 132d9f0492fSopenharmony_ci * 133d9f0492fSopenharmony_ci */ 134d9f0492fSopenharmony_civoid PostTrigger(EventType type, const char *content, uint32_t contentLen); 135d9f0492fSopenharmony_ci 136d9f0492fSopenharmony_ci/** 137d9f0492fSopenharmony_ci * 对外接口 138d9f0492fSopenharmony_ci * 解析trigger文件。 139d9f0492fSopenharmony_ci * 140d9f0492fSopenharmony_ci */ 141d9f0492fSopenharmony_ciint ParseTriggerConfig(const cJSON *fileRoot, int (*checkJobValid)(const char *jobName), void *context); 142d9f0492fSopenharmony_ci 143d9f0492fSopenharmony_ci/** 144d9f0492fSopenharmony_ci * 对外接口 145d9f0492fSopenharmony_ci * 按名字执行对应的trigger。 146d9f0492fSopenharmony_ci * 147d9f0492fSopenharmony_ci */ 148d9f0492fSopenharmony_civoid DoTriggerExec(const char *triggerName); 149d9f0492fSopenharmony_civoid DoJobExecNow(const char *triggerName); 150d9f0492fSopenharmony_ci 151d9f0492fSopenharmony_ci/** 152d9f0492fSopenharmony_ci * 对外接口 153d9f0492fSopenharmony_ci * 按名字添加一个job,用于group支持。 154d9f0492fSopenharmony_ci * 155d9f0492fSopenharmony_ci */ 156d9f0492fSopenharmony_ciint AddCompleteJob(const char *name, const char *condition, const char *cmdContent); 157d9f0492fSopenharmony_ci 158d9f0492fSopenharmony_civoid RegisterBootStateChange(void (*bootStateChange)(int start, const char *)); 159d9f0492fSopenharmony_ci 160d9f0492fSopenharmony_ci/** 161d9f0492fSopenharmony_ci * 对外接口 162d9f0492fSopenharmony_ci * dump 参数和trigger信息 163d9f0492fSopenharmony_ci * 164d9f0492fSopenharmony_ci */ 165d9f0492fSopenharmony_civoid SystemDumpTriggers(int verbose, int (*dump)(const char *fmt, ...)); 166d9f0492fSopenharmony_ci#endif 167d9f0492fSopenharmony_ci 168d9f0492fSopenharmony_ci/** 169d9f0492fSopenharmony_ci * 对外接口 170d9f0492fSopenharmony_ci * 设置参数,主要用于其他进程使用,通过管道修改参数。 171d9f0492fSopenharmony_ci * 172d9f0492fSopenharmony_ci */ 173d9f0492fSopenharmony_ciint SystemSetParameter(const char *name, const char *value); 174d9f0492fSopenharmony_ci 175d9f0492fSopenharmony_ci/** 176d9f0492fSopenharmony_ci * 对外接口 177d9f0492fSopenharmony_ci * 保存共享内存中的所有持久化参数 178d9f0492fSopenharmony_ci * 179d9f0492fSopenharmony_ci*/ 180d9f0492fSopenharmony_ciint SystemSaveParameters(void); 181d9f0492fSopenharmony_ci 182d9f0492fSopenharmony_ci/** 183d9f0492fSopenharmony_ci * Init 接口 184d9f0492fSopenharmony_ci * 查询参数。 185d9f0492fSopenharmony_ci * 186d9f0492fSopenharmony_ci */ 187d9f0492fSopenharmony_ciint SystemReadParam(const char *name, char *value, uint32_t *len); 188d9f0492fSopenharmony_ci 189d9f0492fSopenharmony_ci/** 190d9f0492fSopenharmony_ci * 对外接口 191d9f0492fSopenharmony_ci * 查询参数,主要用于其他进程使用,需要给定足够的内存保存参数。 192d9f0492fSopenharmony_ci * 如果 value == null,获取value的长度 193d9f0492fSopenharmony_ci * 否则value的大小认为是len 194d9f0492fSopenharmony_ci * 195d9f0492fSopenharmony_ci */ 196d9f0492fSopenharmony_ci#define SystemGetParameter SystemReadParam 197d9f0492fSopenharmony_ci 198d9f0492fSopenharmony_ci 199d9f0492fSopenharmony_ci/** 200d9f0492fSopenharmony_ci * 外部接口 201d9f0492fSopenharmony_ci * 等待某个参数值被修改,阻塞直到参数值被修改或超时 202d9f0492fSopenharmony_ci * 203d9f0492fSopenharmony_ci */ 204d9f0492fSopenharmony_ciint SystemWaitParameter(const char *name, const char *value, int32_t timeout); 205d9f0492fSopenharmony_ci 206d9f0492fSopenharmony_citypedef void (*ParameterChangePtr)(const char *key, const char *value, void *context); 207d9f0492fSopenharmony_ciint SystemWatchParameter(const char *keyprefix, ParameterChangePtr change, void *context); 208d9f0492fSopenharmony_ci 209d9f0492fSopenharmony_ciint SystemCheckParamExist(const char *name); 210d9f0492fSopenharmony_ci 211d9f0492fSopenharmony_civoid SystemDumpParameters(int verbose, int index, int (*dump)(const char *fmt, ...)); 212d9f0492fSopenharmony_ci 213d9f0492fSopenharmony_ciint WatchParamCheck(const char *keyprefix); 214d9f0492fSopenharmony_ci 215d9f0492fSopenharmony_civoid ResetParamSecurityLabel(void); 216d9f0492fSopenharmony_ci 217d9f0492fSopenharmony_ci#ifdef __cplusplus 218d9f0492fSopenharmony_ci#if __cplusplus 219d9f0492fSopenharmony_ci} 220d9f0492fSopenharmony_ci#endif 221d9f0492fSopenharmony_ci#endif 222d9f0492fSopenharmony_ci#endif