Browse Source

AP_Param: warn on last pass only about unknown parameters

Do not warn about unknown parameters on the first pass, i.e. when
AP_Param:load_all() is called. This is because we may still not know
about dynamically loaded parameters. When we call the second (last)
time, we expect to already know all possible parameters, so print a
warning to both console and the debug terminal.
master
Lucas De Marchi 7 years ago committed by Lucas De Marchi
parent
commit
1a45aa12f5
  1. 2
      ArduCopter/system.cpp
  2. 2
      ArduPlane/system.cpp
  3. 43
      libraries/AP_Param/AP_Param.cpp
  4. 8
      libraries/AP_Param/AP_Param.h

2
ArduCopter/system.cpp

@ -611,7 +611,7 @@ void Copter::allocate_motors(void) @@ -611,7 +611,7 @@ void Copter::allocate_motors(void)
#endif
// reload lines from the defaults file that may now be accessible
AP_Param::reload_defaults_file();
AP_Param::reload_defaults_file(true);
// now setup some frame-class specific defaults
switch ((AP_Motors::motor_frame_class)g2.frame_class.get()) {

2
ArduPlane/system.cpp

@ -184,7 +184,7 @@ void Plane::init_ardupilot() @@ -184,7 +184,7 @@ void Plane::init_ardupilot()
quadplane.setup();
AP_Param::reload_defaults_file();
AP_Param::reload_defaults_file(true);
startup_ground();

43
libraries/AP_Param/AP_Param.cpp

@ -1274,7 +1274,7 @@ bool AP_Param::load_all() @@ -1274,7 +1274,7 @@ bool AP_Param::load_all()
struct Param_header phdr;
uint16_t ofs = sizeof(AP_Param::EEPROM_header);
reload_defaults_file();
reload_defaults_file(false);
while (ofs < _storage.size()) {
_storage.read_block(&phdr, ofs, sizeof(phdr));
@ -1302,12 +1302,14 @@ bool AP_Param::load_all() @@ -1302,12 +1302,14 @@ bool AP_Param::load_all()
}
/*
reload from hal.util defaults file
* reload from hal.util defaults file or embedded param region
* @last_pass: if this is the last pass on defaults - unknown parameters are
* ignored but if this is set a warning will be emitted
*/
void AP_Param::reload_defaults_file()
void AP_Param::reload_defaults_file(bool last_pass)
{
if (param_defaults_data.length != 0) {
load_embedded_param_defaults();
load_embedded_param_defaults(last_pass);
return;
}
@ -1318,7 +1320,7 @@ void AP_Param::reload_defaults_file() @@ -1318,7 +1320,7 @@ void AP_Param::reload_defaults_file()
*/
const char *default_file = hal.util->get_custom_defaults_file();
if (default_file) {
if (load_defaults_file(default_file)) {
if (load_defaults_file(default_file, last_pass)) {
printf("Loaded defaults from %s\n", default_file);
} else {
printf("Failed to load defaults from %s\n", default_file);
@ -1815,7 +1817,7 @@ bool AP_Param::count_defaults_in_file(const char *filename, uint16_t &num_defaul @@ -1815,7 +1817,7 @@ bool AP_Param::count_defaults_in_file(const char *filename, uint16_t &num_defaul
return true;
}
bool AP_Param::read_param_defaults_file(const char *filename)
bool AP_Param::read_param_defaults_file(const char *filename, bool last_pass)
{
FILE *f = fopen(filename, "r");
if (f == nullptr) {
@ -1834,8 +1836,13 @@ bool AP_Param::read_param_defaults_file(const char *filename) @@ -1834,8 +1836,13 @@ bool AP_Param::read_param_defaults_file(const char *filename)
enum ap_var_type var_type;
AP_Param *vp = find(pname, &var_type);
if (!vp) {
::printf("Ignored unknown param %s in defaults file %s\n",
pname, filename);
if (last_pass) {
::printf("Ignored unknown param %s in defaults file %s\n",
pname, filename);
hal.console->printf(
"Ignored unknown param %s in defaults file %s\n",
pname, filename);
}
continue;
}
param_overrides[idx].object_ptr = vp;
@ -1852,7 +1859,7 @@ bool AP_Param::read_param_defaults_file(const char *filename) @@ -1852,7 +1859,7 @@ bool AP_Param::read_param_defaults_file(const char *filename)
/*
load a default set of parameters from a file
*/
bool AP_Param::load_defaults_file(const char *filename)
bool AP_Param::load_defaults_file(const char *filename, bool last_pass)
{
if (filename == nullptr) {
return false;
@ -1894,7 +1901,7 @@ bool AP_Param::load_defaults_file(const char *filename) @@ -1894,7 +1901,7 @@ bool AP_Param::load_defaults_file(const char *filename)
for (char *pname = strtok_r(mutable_filename, ",", &saveptr);
pname != nullptr;
pname = strtok_r(nullptr, ",", &saveptr)) {
if (!read_param_defaults_file(pname)) {
if (!read_param_defaults_file(pname, last_pass)) {
free(mutable_filename);
return false;
}
@ -1957,11 +1964,12 @@ bool AP_Param::count_embedded_param_defaults(uint16_t &count) @@ -1957,11 +1964,12 @@ bool AP_Param::count_embedded_param_defaults(uint16_t &count)
return true;
}
/*
load a default set of parameters from a embedded parameter region
* load a default set of parameters from a embedded parameter region
* @last_pass: if this is the last pass on defaults - unknown parameters are
* ignored but if this is set a warning will be emitted
*/
void AP_Param::load_embedded_param_defaults()
void AP_Param::load_embedded_param_defaults(bool last_pass)
{
if (param_overrides != nullptr) {
free(param_overrides);
@ -2015,8 +2023,13 @@ void AP_Param::load_embedded_param_defaults() @@ -2015,8 +2023,13 @@ void AP_Param::load_embedded_param_defaults()
enum ap_var_type var_type;
AP_Param *vp = find(pname, &var_type);
if (!vp) {
::printf("Ignored unknown param %s from embedded region (offset=%u)\n",
pname, ptr - param_defaults_data.data);
if (last_pass) {
::printf("Ignored unknown param %s from embedded region (offset=%u)\n",
pname, ptr - param_defaults_data.data);
hal.console->printf(
"Ignored unknown param %s from embedded region (offset=%u)\n",
pname, ptr - param_defaults_data.data);
}
continue;
}
param_overrides[idx].object_ptr = vp;

8
libraries/AP_Param/AP_Param.h

@ -327,7 +327,7 @@ public: @@ -327,7 +327,7 @@ public:
/// reoad the hal.util defaults file. Called after pointer parameters have been allocated
///
static void reload_defaults_file();
static void reload_defaults_file(bool last_pass);
static void load_object_from_eeprom(const void *object_pointer, const struct GroupInfo *group_info);
@ -574,15 +574,15 @@ private: @@ -574,15 +574,15 @@ private:
load a parameter defaults file. This happens as part of load_all()
*/
static bool count_defaults_in_file(const char *filename, uint16_t &num_defaults);
static bool read_param_defaults_file(const char *filename);
static bool load_defaults_file(const char *filename);
static bool read_param_defaults_file(const char *filename, bool last_pass);
static bool load_defaults_file(const char *filename, bool last_pass);
#endif
/*
load defaults from embedded parameters
*/
static bool count_embedded_param_defaults(uint16_t &count);
static void load_embedded_param_defaults();
static void load_embedded_param_defaults(bool last_pass);
// send a parameter to all GCS instances
void send_parameter(const char *name, enum ap_var_type param_header_type, uint8_t idx) const;

Loading…
Cancel
Save