1094332d3Sopenharmony_ci/* 2094332d3Sopenharmony_ci * Copyright (c) 2022-2023 Huawei Device Co., Ltd. 3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License. 5094332d3Sopenharmony_ci * You may obtain a copy of the License at 6094332d3Sopenharmony_ci * 7094332d3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8094332d3Sopenharmony_ci * 9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and 13094332d3Sopenharmony_ci * limitations under the License. 14094332d3Sopenharmony_ci */ 15094332d3Sopenharmony_ci 16094332d3Sopenharmony_ci#ifndef BATTERY_CONFIG_H 17094332d3Sopenharmony_ci#define BATTERY_CONFIG_H 18094332d3Sopenharmony_ci 19094332d3Sopenharmony_ci#include <fstream> 20094332d3Sopenharmony_ci#include <memory> 21094332d3Sopenharmony_ci#include <mutex> 22094332d3Sopenharmony_ci#include <vector> 23094332d3Sopenharmony_ci#include <string> 24094332d3Sopenharmony_ci#include <map> 25094332d3Sopenharmony_ci 26094332d3Sopenharmony_ci#include <json/json.h> 27094332d3Sopenharmony_ci#include "nocopyable.h" 28094332d3Sopenharmony_ci 29094332d3Sopenharmony_cinamespace OHOS { 30094332d3Sopenharmony_cinamespace HDI { 31094332d3Sopenharmony_cinamespace Battery { 32094332d3Sopenharmony_cinamespace V2_0 { 33094332d3Sopenharmony_ciusing UeventMap = std::map<std::string, std::vector<std::pair<std::string, std::string>>>; 34094332d3Sopenharmony_ciclass BatteryConfig : public NoCopyable { 35094332d3Sopenharmony_cipublic: 36094332d3Sopenharmony_ci struct LightConfig { 37094332d3Sopenharmony_ci int32_t beginSoc; 38094332d3Sopenharmony_ci int32_t endSoc; 39094332d3Sopenharmony_ci uint32_t rgb; 40094332d3Sopenharmony_ci }; 41094332d3Sopenharmony_ci 42094332d3Sopenharmony_ci struct ChargerConfig { 43094332d3Sopenharmony_ci std::string currentPath; 44094332d3Sopenharmony_ci std::string voltagePath; 45094332d3Sopenharmony_ci std::string chargeTypePath; 46094332d3Sopenharmony_ci }; 47094332d3Sopenharmony_ci 48094332d3Sopenharmony_ci struct ChargeSceneConfig { 49094332d3Sopenharmony_ci std::string supportPath; 50094332d3Sopenharmony_ci std::string type; 51094332d3Sopenharmony_ci std::string expectValue; 52094332d3Sopenharmony_ci std::string getPath; 53094332d3Sopenharmony_ci std::string setPath; 54094332d3Sopenharmony_ci }; 55094332d3Sopenharmony_ci static BatteryConfig& GetInstance(); 56094332d3Sopenharmony_ci static void DestroyInstance(); 57094332d3Sopenharmony_ci bool ParseConfig(); 58094332d3Sopenharmony_ci const std::vector<LightConfig>& GetLightConfig() const; 59094332d3Sopenharmony_ci const BatteryConfig::ChargerConfig& GetChargerConfig() const; 60094332d3Sopenharmony_ci const std::map<std::string, BatteryConfig::ChargeSceneConfig>& GetChargeSceneConfigMap() const; 61094332d3Sopenharmony_ci const UeventMap& GetUeventList() const; 62094332d3Sopenharmony_ci 63094332d3Sopenharmony_ciprivate: 64094332d3Sopenharmony_ci bool OpenFile(std::ifstream& ifsConf, const std::string& configPath); 65094332d3Sopenharmony_ci void ParseConfInner(const Json::Value& config); 66094332d3Sopenharmony_ci void ParseConfSplit(const Json::Value& config); 67094332d3Sopenharmony_ci void ParseLightConfig(const Json::Value& lightConfig); 68094332d3Sopenharmony_ci void ParseChargeSceneConfig(const Json::Value& chargeSceneConfig); 69094332d3Sopenharmony_ci bool IsValidChargeSceneConfig(const std::string& key, const Json::Value& valueObj); 70094332d3Sopenharmony_ci bool ParseChargeSceneSupport(const Json::Value& valueObj, BatteryConfig::ChargeSceneConfig& config); 71094332d3Sopenharmony_ci bool ParseChargeSceneSet(const Json::Value& valueObj, BatteryConfig::ChargeSceneConfig& config); 72094332d3Sopenharmony_ci bool ParseChargeSceneGet(const Json::Value& valueObj, BatteryConfig::ChargeSceneConfig& config); 73094332d3Sopenharmony_ci bool IsValidSysPath(const std::string& path); 74094332d3Sopenharmony_ci void ParseChargerConfig(const Json::Value& chargerConfig); 75094332d3Sopenharmony_ci void ParseUeventConfig(const Json::Value& ueventConfig); 76094332d3Sopenharmony_ci bool SplitKey(const std::string& key, std::vector<std::string>& keys) const; 77094332d3Sopenharmony_ci Json::Value GetValue(const Json::Value& config, std::string key) const; 78094332d3Sopenharmony_ci bool isValidJsonString(const Json::Value& config) const; 79094332d3Sopenharmony_ci std::vector<BatteryConfig::LightConfig> lightConfig_; 80094332d3Sopenharmony_ci BatteryConfig::ChargerConfig chargerConfig_; 81094332d3Sopenharmony_ci std::map<std::string, BatteryConfig::ChargeSceneConfig> chargeSceneConfigMap_; 82094332d3Sopenharmony_ci static std::mutex mutex_; 83094332d3Sopenharmony_ci static std::shared_ptr<BatteryConfig> instance_; 84094332d3Sopenharmony_ci UeventMap ueventMap_; 85094332d3Sopenharmony_ci}; 86094332d3Sopenharmony_ci} // namespace V2_0 87094332d3Sopenharmony_ci} // namespace Battery 88094332d3Sopenharmony_ci} // namespace HDI 89094332d3Sopenharmony_ci} // namespace OHOS 90094332d3Sopenharmony_ci#endif 91