1/*
2 * Copyright (c) 2021-2022 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 SYSTEM_PARAMETERS_H
17#define SYSTEM_PARAMETERS_H
18
19#include <limits>
20#include <string>
21
22namespace OHOS {
23namespace system {
24/*
25 * Returns the current value of the system parameter `key`.
26 * If the parameter is empty or doesn't exist, `def` will be returned.
27 */
28std::string GetParameter(const std::string& key, const std::string& def);
29
30/*
31 * Returns true if the system parameter `key` has the value "1", "y", "yes", "on", or "true",
32 * false for "0", "n", "no", "off", or "false", or `def` otherwise.
33 */
34bool GetBoolParameter(const std::string& key, bool def);
35
36/*
37 * Returns the signed integer corresponding to the system parameter `key`.
38 * If the parameter is empty, doesn't exist, doesn't have an integer value, or is outside
39 * the optional bounds, returns `def`.
40 */
41template<typename T>
42T GetIntParameter(const std::string& key, T def, T min = std::numeric_limits<T>::min(),
43    T max = std::numeric_limits<T>::max());
44
45/*
46 * Returns the unsigned integer corresponding to the system parameter `key`.
47 * If the parameter is empty, doesn't exist, doesn't have an integer value, or is outside
48 * the optional bound, returns `def`.
49 */
50template<typename T>
51T GetUintParameter(const std::string& key, T def, T max = std::numeric_limits<T>::max());
52
53/*
54 * Sets the system parameter `key` to `value`.
55 * Note that system parameter setting is inherently asynchronous so a return value of `true`
56 * isn't particularly meaningful, and immediately reading back the value won't necessarily
57 * tell you whether or not your call succeeded. A `false` return value definitely means failure.
58 */
59bool SetParameter(const std::string& key, const std::string& value);
60
61/*
62 * Obtains the device type of your product represented by a string.
63 */
64std::string GetDeviceType(void);
65} // namespace system
66} // namespace OHOS
67
68#endif // SYSTEM_PARAMETERS_H