mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-07-23 05:42:07 +08:00
14318d2f09
# Conflicts: # .github/labeler.yaml # .github/workflows/auto_pr_review.yaml # .github/workflows/docs.yaml # .github/workflows/release.yaml # .github/workflows/repo-maintenance.yaml # .github/workflows/tests.yaml # .github/workflows/ui_preview.yaml # README.md # SConstruct # conftest.py # docs/CARS.md # msgq_repo # opendbc_repo # openpilot/cereal/messaging/tests/validate_sp_cereal_upstream.py # openpilot/common/api.py # openpilot/common/hardware/hw.py # openpilot/common/version.py # openpilot/selfdrive/assets/fonts/Audiowide-Regular.ttf # openpilot/selfdrive/assets/sounds/prompt_single_high.wav # openpilot/selfdrive/assets/sounds/prompt_single_low.wav # openpilot/selfdrive/car/card.py # openpilot/selfdrive/car/helpers.py # openpilot/selfdrive/car/tests/test_car_interfaces.py # openpilot/selfdrive/car/tests/test_cruise_speed.py # openpilot/selfdrive/controls/lib/desire_helper.py # openpilot/selfdrive/controls/lib/longcontrol.py # openpilot/selfdrive/controls/plannerd.py # openpilot/selfdrive/controls/radard.py # openpilot/selfdrive/controls/tests/test_longcontrol.py # openpilot/selfdrive/modeld/compile_warp.py # openpilot/selfdrive/modeld/modeld.py # openpilot/selfdrive/monitoring/policy.py # openpilot/selfdrive/monitoring/test_monitoring.py # openpilot/selfdrive/selfdrived/events.py # openpilot/selfdrive/selfdrived/selfdrived.py # openpilot/selfdrive/ui/layouts/onboarding.py # openpilot/selfdrive/ui/mici/layouts/onboarding.py # openpilot/selfdrive/ui/soundd.py # openpilot/selfdrive/ui/tests/diff/replay.py # openpilot/selfdrive/ui/translations/app.pot # openpilot/system/athena/athenad.py # openpilot/system/athena/manage_athenad.py # openpilot/system/hardware/hardwared.py # openpilot/system/loggerd/config.py # openpilot/system/manager/github_runner.sh # openpilot/system/manager/manager.py # openpilot/system/updated/updated.py # panda # pyproject.toml # scripts/lint/lint.sh # system/manager/process_config.py # system/statsd.py # tinygrad_repo # tools/release/build_release.sh # tools/release/build_stripped.sh # uv.lock
92 lines
2.3 KiB
C++
92 lines
2.3 KiB
C++
#pragma once
|
|
|
|
#include <future>
|
|
#include <map>
|
|
#include <optional>
|
|
#include <string>
|
|
#include <tuple>
|
|
#include <utility>
|
|
#include <vector>
|
|
|
|
#include "common/queue.h"
|
|
|
|
enum ParamKeyFlag {
|
|
PERSISTENT = 0x02,
|
|
CLEAR_ON_MANAGER_START = 0x04,
|
|
CLEAR_ON_ONROAD_TRANSITION = 0x08,
|
|
CLEAR_ON_OFFROAD_TRANSITION = 0x10,
|
|
DONT_LOG = 0x20,
|
|
DEVELOPMENT_ONLY = 0x40,
|
|
CLEAR_ON_IGNITION_ON = 0x80,
|
|
BACKUP = 0x100,
|
|
ALL = 0xFFFFFFFF
|
|
};
|
|
|
|
enum ParamKeyType {
|
|
STRING = 0, // must be utf-8 decodable
|
|
BOOL = 1,
|
|
INT = 2,
|
|
FLOAT = 3,
|
|
TIME = 4, // ISO 8601
|
|
JSON = 5,
|
|
BYTES = 6
|
|
};
|
|
|
|
struct ParamKeyAttributes {
|
|
uint32_t flags;
|
|
ParamKeyType type;
|
|
std::optional<std::string> default_value = std::nullopt;
|
|
};
|
|
|
|
class Params {
|
|
public:
|
|
explicit Params(const std::string &path = {});
|
|
~Params();
|
|
// Not copyable.
|
|
Params(const Params&) = delete;
|
|
Params& operator=(const Params&) = delete;
|
|
|
|
std::vector<std::string> allKeys(ParamKeyFlag flag = ALL) const;
|
|
bool checkKey(const std::string &key);
|
|
ParamKeyFlag getKeyFlag(const std::string &key);
|
|
ParamKeyType getKeyType(const std::string &key);
|
|
std::optional<std::string> getKeyDefaultValue(const std::string &key);
|
|
inline std::string getParamPath(const std::string &key = {}) {
|
|
return params_path + params_prefix + (key.empty() ? "" : "/" + key);
|
|
}
|
|
|
|
// Delete a value
|
|
int remove(const std::string &key);
|
|
void clearAll(ParamKeyFlag flag);
|
|
|
|
// helpers for reading values
|
|
std::string get(const std::string &key, bool block = false);
|
|
inline bool getBool(const std::string &key, bool block = false) {
|
|
return get(key, block) == "1";
|
|
}
|
|
std::map<std::string, std::string> readAll();
|
|
|
|
// helpers for writing values
|
|
int put(const char *key, const char *val, size_t value_size);
|
|
inline int put(const std::string &key, const std::string &val) {
|
|
return put(key.c_str(), val.data(), val.size());
|
|
}
|
|
inline int putBool(const std::string &key, bool val) {
|
|
return put(key.c_str(), val ? "1" : "0", 1);
|
|
}
|
|
void putNonBlocking(const std::string &key, const std::string &val);
|
|
inline void putBoolNonBlocking(const std::string &key, bool val) {
|
|
putNonBlocking(key, val ? "1" : "0");
|
|
}
|
|
|
|
private:
|
|
void asyncWriteThread();
|
|
|
|
std::string params_path;
|
|
std::string params_prefix;
|
|
|
|
// for nonblocking write
|
|
std::future<void> future;
|
|
SafeQueue<std::pair<std::string, std::string>> queue;
|
|
};
|