1f16e0440Sopenharmony_ci/*
2f16e0440Sopenharmony_ci * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3f16e0440Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4f16e0440Sopenharmony_ci * you may not use this file except in compliance with the License.
5f16e0440Sopenharmony_ci * You may obtain a copy of the License at
6f16e0440Sopenharmony_ci *
7f16e0440Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8f16e0440Sopenharmony_ci *
9f16e0440Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10f16e0440Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11f16e0440Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12f16e0440Sopenharmony_ci * See the License for the specific language governing permissions and
13f16e0440Sopenharmony_ci * limitations under the License.
14f16e0440Sopenharmony_ci */
15f16e0440Sopenharmony_ci
16f16e0440Sopenharmony_ci#ifndef POWERMGR_BATTERY_MANAGER_BATTERY_CONFIG_H
17f16e0440Sopenharmony_ci#define POWERMGR_BATTERY_MANAGER_BATTERY_CONFIG_H
18f16e0440Sopenharmony_ci
19f16e0440Sopenharmony_ci#include <fstream>
20f16e0440Sopenharmony_ci#include <memory>
21f16e0440Sopenharmony_ci#include <mutex>
22f16e0440Sopenharmony_ci#include <vector>
23f16e0440Sopenharmony_ci#include <string>
24f16e0440Sopenharmony_ci
25f16e0440Sopenharmony_ci#include <json/json.h>
26f16e0440Sopenharmony_ci#include "nocopyable.h"
27f16e0440Sopenharmony_ci
28f16e0440Sopenharmony_cinamespace OHOS {
29f16e0440Sopenharmony_cinamespace PowerMgr {
30f16e0440Sopenharmony_ciclass BatteryConfig : public NoCopyable {
31f16e0440Sopenharmony_cipublic:
32f16e0440Sopenharmony_ci    struct LightConf {
33f16e0440Sopenharmony_ci        int32_t beginSoc;
34f16e0440Sopenharmony_ci        int32_t endSoc;
35f16e0440Sopenharmony_ci        uint32_t rgb;
36f16e0440Sopenharmony_ci    };
37f16e0440Sopenharmony_ci    struct CommonEventConf {
38f16e0440Sopenharmony_ci        std::string eventName;
39f16e0440Sopenharmony_ci        std::string uevent;
40f16e0440Sopenharmony_ci        std::string sceneConfigName;
41f16e0440Sopenharmony_ci        bool sceneConfigEqual;
42f16e0440Sopenharmony_ci        std::string sceneConfigValue;
43f16e0440Sopenharmony_ci    };
44f16e0440Sopenharmony_ci    static BatteryConfig& GetInstance();
45f16e0440Sopenharmony_ci    bool ParseConfig();
46f16e0440Sopenharmony_ci    bool IsExist(std::string key) const;
47f16e0440Sopenharmony_ci    int32_t GetInt(std::string key, int32_t defVal = 0) const;
48f16e0440Sopenharmony_ci    const std::vector<LightConf>& GetLightConf() const;
49f16e0440Sopenharmony_ci    const std::vector<BatteryConfig::CommonEventConf>& GetCommonEventConf() const;
50f16e0440Sopenharmony_ci
51f16e0440Sopenharmony_ciprivate:
52f16e0440Sopenharmony_ci    bool OpenFile(std::ifstream& ifsConf, const std::string& configPath);
53f16e0440Sopenharmony_ci    void ParseConfInner();
54f16e0440Sopenharmony_ci    void ParseLightConf(std::string level);
55f16e0440Sopenharmony_ci    void ParseBootActionsConf();
56f16e0440Sopenharmony_ci    void ParseCommonEventConf(const Json::Value &bootActionsConfig);
57f16e0440Sopenharmony_ci    Json::Value FindConf(const std::string& key) const;
58f16e0440Sopenharmony_ci    bool SplitKey(const std::string& key, std::vector<std::string>& keys) const;
59f16e0440Sopenharmony_ci    Json::Value GetValue(std::string key) const;
60f16e0440Sopenharmony_ci    Json::Value config_;
61f16e0440Sopenharmony_ci    std::vector<BatteryConfig::LightConf> lightConf_;
62f16e0440Sopenharmony_ci    std::vector<BatteryConfig::CommonEventConf> commonEventConf_;
63f16e0440Sopenharmony_ci    static std::mutex mutex_;
64f16e0440Sopenharmony_ci    static std::shared_ptr<BatteryConfig> instance_;
65f16e0440Sopenharmony_ci};
66f16e0440Sopenharmony_ci} // namespace PowerMgr
67f16e0440Sopenharmony_ci} // namespace OHOS
68f16e0440Sopenharmony_ci#endif // POWERMGR_BATTERY_MANAGER_BATTERY_CONFIG_H
69