replay: print parameter changes and error on mismatch

This commit is contained in:
Daniel Agar 2020-11-02 19:47:38 -05:00
parent 03aa2dd46c
commit 142452f80c

View File

@ -127,7 +127,9 @@ Replay::setupReplayFile(const char *file_name)
void
Replay::setUserParams(const char *filename)
{
string line, param_name, value_string;
string line;
string pname;
string value_string;
ifstream myfile(filename);
if (!myfile.is_open()) {
@ -144,23 +146,37 @@ Replay::setUserParams(const char *filename)
}
istringstream mystrstream(line);
mystrstream >> param_name;
mystrstream >> pname;
mystrstream >> value_string;
double param_value_double = stod(value_string);
param_t handle = param_find(param_name.c_str());
param_t handle = param_find(pname.c_str());
param_type_t param_format = param_type(handle);
_overridden_params.insert(param_name);
_overridden_params.insert(pname);
if (param_format == PARAM_TYPE_INT32) {
int32_t value = 0;
value = (int32_t)param_value_double;
int32_t orig_value = 0;
param_get(handle, &orig_value);
int32_t value = (int32_t)param_value_double;
if (orig_value != value) {
PX4_WARN("setting %s (INT32) %d -> %d", param_name(handle), orig_value, value);
}
param_set(handle, (const void *)&value);
} else if (param_format == PARAM_TYPE_FLOAT) {
float value = 0;
value = (float)param_value_double;
float orig_value = 0;
param_get(handle, &orig_value);
float value = (float)param_value_double;
if (fabsf(orig_value - value) > FLT_EPSILON) {
PX4_WARN("setting %s (FLOAT) %.3f -> %.3f", param_name(handle), (double)orig_value, (double)value);
}
param_set(handle, (const void *)&value);
}
}
@ -383,7 +399,7 @@ Replay::readAndAddSubscription(std::ifstream &file, uint16_t msg_size)
}
if (!compat) {
PX4_WARN("Formats for %s don't match. Will ignore it.", topic_name.c_str());
PX4_ERR("Formats for %s don't match. Will ignore it.", topic_name.c_str());
PX4_WARN(" Internal format: %s", orb_meta->o_fields);
PX4_WARN(" File format : %s", file_format.c_str());
return true; // not a fatal error
@ -549,7 +565,7 @@ Replay::readDropout(std::ifstream &file, uint16_t msg_size)
uint16_t duration;
file.read((char *)&duration, sizeof(duration));
PX4_INFO("Dropout in replayed log, %i ms", (int)duration);
PX4_ERR("Dropout in replayed log, %i ms", (int)duration);
return file.good();
}