|
|
|
@ -13,7 +13,7 @@ |
|
|
|
|
#include <mutex> |
|
|
|
|
#include <csignal> |
|
|
|
|
#include <string.h> |
|
|
|
|
|
|
|
|
|
#include <unordered_map> |
|
|
|
|
#include "common/util.h" |
|
|
|
|
#include "common/swaglog.h" |
|
|
|
|
|
|
|
|
@ -141,6 +141,80 @@ private: |
|
|
|
|
std::string fn_; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
std::unordered_map<std::string, uint32_t> keys = { |
|
|
|
|
{"AccessToken", CLEAR_ON_MANAGER_START}, |
|
|
|
|
{"ApiCache_DriveStats", PERSISTENT}, |
|
|
|
|
{"ApiCache_Device", PERSISTENT}, |
|
|
|
|
{"ApiCache_Owner", PERSISTENT}, |
|
|
|
|
{"AthenadPid", PERSISTENT}, |
|
|
|
|
{"CalibrationParams", PERSISTENT}, |
|
|
|
|
{"CarBatteryCapacity", PERSISTENT}, |
|
|
|
|
{"CarParams", CLEAR_ON_MANAGER_START | CLEAR_ON_PANDA_DISCONNECT}, |
|
|
|
|
{"CarParamsCache", CLEAR_ON_MANAGER_START | CLEAR_ON_PANDA_DISCONNECT}, |
|
|
|
|
{"CarVin", CLEAR_ON_MANAGER_START | CLEAR_ON_PANDA_DISCONNECT}, |
|
|
|
|
{"CommunityFeaturesToggle", PERSISTENT}, |
|
|
|
|
{"ControlsReady", CLEAR_ON_MANAGER_START | CLEAR_ON_PANDA_DISCONNECT}, |
|
|
|
|
{"EnableLteOnroad", PERSISTENT}, |
|
|
|
|
{"EndToEndToggle", PERSISTENT}, |
|
|
|
|
{"CompletedTrainingVersion", PERSISTENT}, |
|
|
|
|
{"DisablePowerDown", PERSISTENT}, |
|
|
|
|
{"DisableUpdates", PERSISTENT}, |
|
|
|
|
{"EnableWideCamera", PERSISTENT}, |
|
|
|
|
{"DoUninstall", CLEAR_ON_MANAGER_START}, |
|
|
|
|
{"DongleId", PERSISTENT}, |
|
|
|
|
{"GitDiff", PERSISTENT}, |
|
|
|
|
{"GitBranch", PERSISTENT}, |
|
|
|
|
{"GitCommit", PERSISTENT}, |
|
|
|
|
{"GitRemote", PERSISTENT}, |
|
|
|
|
{"GithubSshKeys", PERSISTENT}, |
|
|
|
|
{"GithubUsername", PERSISTENT}, |
|
|
|
|
{"HardwareSerial", PERSISTENT}, |
|
|
|
|
{"HasAcceptedTerms", PERSISTENT}, |
|
|
|
|
{"IsDriverViewEnabled", CLEAR_ON_MANAGER_START}, |
|
|
|
|
{"IMEI", PERSISTENT}, |
|
|
|
|
{"IsLdwEnabled", PERSISTENT}, |
|
|
|
|
{"IsMetric", PERSISTENT}, |
|
|
|
|
{"IsOffroad", CLEAR_ON_MANAGER_START}, |
|
|
|
|
{"IsRHD", PERSISTENT}, |
|
|
|
|
{"IsTakingSnapshot", CLEAR_ON_MANAGER_START}, |
|
|
|
|
{"IsUpdateAvailable", CLEAR_ON_MANAGER_START}, |
|
|
|
|
{"IsUploadRawEnabled", PERSISTENT}, |
|
|
|
|
{"LastAthenaPingTime", PERSISTENT}, |
|
|
|
|
{"LastGPSPosition", PERSISTENT}, |
|
|
|
|
{"LastUpdateException", PERSISTENT}, |
|
|
|
|
{"LastUpdateTime", PERSISTENT}, |
|
|
|
|
{"LiveParameters", PERSISTENT}, |
|
|
|
|
{"OpenpilotEnabledToggle", PERSISTENT}, |
|
|
|
|
{"PandaFirmware", CLEAR_ON_MANAGER_START | CLEAR_ON_PANDA_DISCONNECT}, |
|
|
|
|
{"PandaFirmwareHex", CLEAR_ON_MANAGER_START | CLEAR_ON_PANDA_DISCONNECT}, |
|
|
|
|
{"PandaDongleId", CLEAR_ON_MANAGER_START | CLEAR_ON_PANDA_DISCONNECT}, |
|
|
|
|
{"Passive", PERSISTENT}, |
|
|
|
|
{"RecordFront", PERSISTENT}, |
|
|
|
|
{"RecordFrontLock", PERSISTENT}, // for the internal fleet
|
|
|
|
|
{"ReleaseNotes", PERSISTENT}, |
|
|
|
|
{"ShouldDoUpdate", CLEAR_ON_MANAGER_START}, |
|
|
|
|
{"SubscriberInfo", PERSISTENT}, |
|
|
|
|
{"SshEnabled", PERSISTENT}, |
|
|
|
|
{"TermsVersion", PERSISTENT}, |
|
|
|
|
{"Timezone", PERSISTENT}, |
|
|
|
|
{"TrainingVersion", PERSISTENT}, |
|
|
|
|
{"UpdateAvailable", CLEAR_ON_MANAGER_START}, |
|
|
|
|
{"UpdateFailedCount", CLEAR_ON_MANAGER_START}, |
|
|
|
|
{"Version", PERSISTENT}, |
|
|
|
|
{"VisionRadarToggle", PERSISTENT}, |
|
|
|
|
{"Offroad_ChargeDisabled", CLEAR_ON_MANAGER_START | CLEAR_ON_PANDA_DISCONNECT}, |
|
|
|
|
{"Offroad_ConnectivityNeeded", CLEAR_ON_MANAGER_START}, |
|
|
|
|
{"Offroad_ConnectivityNeededPrompt", CLEAR_ON_MANAGER_START}, |
|
|
|
|
{"Offroad_TemperatureTooHigh", CLEAR_ON_MANAGER_START}, |
|
|
|
|
{"Offroad_PandaFirmwareMismatch", CLEAR_ON_MANAGER_START | CLEAR_ON_PANDA_DISCONNECT}, |
|
|
|
|
{"Offroad_InvalidTime", CLEAR_ON_MANAGER_START}, |
|
|
|
|
{"Offroad_IsTakingSnapshot", CLEAR_ON_MANAGER_START}, |
|
|
|
|
{"Offroad_NeosUpdate", CLEAR_ON_MANAGER_START}, |
|
|
|
|
{"Offroad_UpdateFailed", CLEAR_ON_MANAGER_START}, |
|
|
|
|
{"Offroad_HardwareUnsupported", CLEAR_ON_MANAGER_START}, |
|
|
|
|
{"ForcePowerDown", CLEAR_ON_MANAGER_START}, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
} // namespace
|
|
|
|
|
|
|
|
|
|
Params::Params(bool persistent_param) : Params(persistent_param ? persistent_params_path : default_params_path) {} |
|
|
|
@ -151,6 +225,10 @@ Params::Params(const std::string &path) : params_path(path) { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool Params::checkKey(const std::string &key) { |
|
|
|
|
return keys.find(key) != keys.end(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int Params::put(const char* key, const char* value, size_t value_size) { |
|
|
|
|
// Information about safely and atomically writing a file: https://lwn.net/Articles/457667/
|
|
|
|
|
// 1) Create temp file
|
|
|
|
@ -158,7 +236,6 @@ int Params::put(const char* key, const char* value, size_t value_size) { |
|
|
|
|
// 3) fsync() the temp file
|
|
|
|
|
// 4) rename the temp file to the real name
|
|
|
|
|
// 5) fsync() the containing directory
|
|
|
|
|
|
|
|
|
|
std::string tmp_path = params_path + "/.tmp_value_XXXXXX"; |
|
|
|
|
int tmp_fd = mkstemp((char*)tmp_path.c_str()); |
|
|
|
|
if (tmp_fd < 0) return -1; |
|
|
|
@ -233,7 +310,7 @@ std::string Params::get(const char *key, bool block) { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int Params::read_db_all(std::map<std::string, std::string> *params) { |
|
|
|
|
int Params::readAll(std::map<std::string, std::string> *params) { |
|
|
|
|
FileLock file_lock(params_path + "/.lock", LOCK_SH); |
|
|
|
|
std::lock_guard<FileLock> lk(file_lock); |
|
|
|
|
|
|
|
|
@ -251,3 +328,11 @@ int Params::read_db_all(std::map<std::string, std::string> *params) { |
|
|
|
|
closedir(d); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void Params::clearAll(ParamKeyType key_type) { |
|
|
|
|
for (auto &[key, type] : keys) { |
|
|
|
|
if (type & key_type) { |
|
|
|
|
remove(key); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|