blob: fc51c80fb31578f635c87132923e2856a3788f1c [file] [log] [blame]
//
// Copyright (C) 2020 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
#include <json/json.h>
namespace cuttlefish {
// Holds the configuration of modem simulator.
class NvramConfig {
public:
static void InitNvramConfigService(size_t num_instances, int sim_type);
static const NvramConfig* Get();
static void SaveToFile();
NvramConfig(size_t num_instances, int sim_type);
NvramConfig(NvramConfig&&);
~NvramConfig();
NvramConfig& operator=(NvramConfig&&);
std::string ConfigFileLocation() const;
// Saves the configuration object in a file
bool SaveToFile(const std::string& file) const;
class InstanceSpecific;
InstanceSpecific ForInstance(int instance_num) const;
std::vector<InstanceSpecific> Instances() const;
int sim_type() const;
// A view into an existing modem simulator object for a particular instance.
class InstanceSpecific {
public:
int network_selection_mode() const;
void set_network_selection_mode(int mode);
std::string operator_numeric() const;
void set_operator_numeric(std::string& operator_numeric);
int modem_technoloy() const;
void set_modem_technoloy(int technoloy);
int preferred_network_mode() const;
void set_preferred_network_mode(int mode);
bool emergency_mode() const;
void set_emergency_mode(bool mode);
private:
friend InstanceSpecific NvramConfig::ForInstance(int num) const;
friend std::vector<InstanceSpecific> NvramConfig::Instances() const;
InstanceSpecific(const NvramConfig* config, const std::string& id)
: config_(config), id_(id) {}
Json::Value* Dictionary();
const Json::Value* Dictionary() const;
const NvramConfig* config_;
std::string id_;
};
private:
static std::unique_ptr<NvramConfig> s_nvram_config;
size_t total_instances_;
int sim_type_;
std::unique_ptr<Json::Value> dictionary_;
bool LoadFromFile(const char* file);
static NvramConfig* BuildConfigImpl(size_t num_instances, int sim_type);
void InitDefaultNvramConfig();
NvramConfig(const NvramConfig&) = delete;
NvramConfig& operator=(const NvramConfig&) = delete;
};
} // namespace cuttlefish