mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-05-22 22:32:11 +08:00
param load / store cleanup, storage location selection now exclusively through dedicated "param select <path>" command
This commit is contained in:
+68
-10
@@ -143,7 +143,7 @@ int commander_thread_main(int argc, char *argv[]);
|
||||
|
||||
static int buzzer_init(void);
|
||||
static void buzzer_deinit(void);
|
||||
static void tune_confirm();
|
||||
static void tune_confirm(void);
|
||||
static int led_init(void);
|
||||
static void led_deinit(void);
|
||||
static int led_toggle(int led);
|
||||
@@ -264,7 +264,7 @@ int trigger_audio_alarm(uint8_t old_mode, uint8_t old_state, uint8_t new_mode, u
|
||||
return 0;
|
||||
}
|
||||
|
||||
void tune_confirm() {
|
||||
void tune_confirm(void) {
|
||||
ioctl(buzzer, TONE_SET_ALARM, 3);
|
||||
}
|
||||
|
||||
@@ -914,17 +914,69 @@ void handle_command(int status_pub, struct vehicle_status_s *current_vehicle_sta
|
||||
}
|
||||
break;
|
||||
|
||||
/*
|
||||
* do not report an error for commands that are
|
||||
* handled directly by MAVLink.
|
||||
*/
|
||||
case MAV_CMD_PREFLIGHT_STORAGE:
|
||||
case MAV_CMD_PREFLIGHT_STORAGE: {
|
||||
if (current_status.flag_system_armed) {
|
||||
mavlink_log_info(mavlink_fd, "[cmd] REJECTING param command while armed");
|
||||
} else {
|
||||
|
||||
// XXX move this to LOW PRIO THREAD of commander app
|
||||
/* Read all parameters from EEPROM to RAM */
|
||||
|
||||
if (((int)(cmd->param1)) == 0) {
|
||||
|
||||
/* read all parameters from EEPROM to RAM */
|
||||
int read_ret = param_load_default();
|
||||
if (read_ret == OK) {
|
||||
//printf("[mavlink pm] Loaded EEPROM params in RAM\n");
|
||||
mavlink_log_info(mavlink_fd, "[cmd] OK loading params from");
|
||||
mavlink_log_info(mavlink_fd, param_get_default_file());
|
||||
result = MAV_RESULT_ACCEPTED;
|
||||
} else if (read_ret == 1) {
|
||||
mavlink_log_info(mavlink_fd, "[cmd] OK no changes in");
|
||||
mavlink_log_info(mavlink_fd, param_get_default_file());
|
||||
result = MAV_RESULT_ACCEPTED;
|
||||
} else {
|
||||
if (read_ret < -1) {
|
||||
mavlink_log_info(mavlink_fd, "[cmd] ERR loading params from");
|
||||
mavlink_log_info(mavlink_fd, param_get_default_file());
|
||||
} else {
|
||||
mavlink_log_info(mavlink_fd, "[cmd] ERR no param file named");
|
||||
mavlink_log_info(mavlink_fd, param_get_default_file());
|
||||
}
|
||||
result = MAV_RESULT_FAILED;
|
||||
}
|
||||
|
||||
} else if (((int)(cmd->param1)) == 1) {
|
||||
|
||||
/* write all parameters from RAM to EEPROM */
|
||||
int write_ret = param_save_default();
|
||||
if (write_ret == OK) {
|
||||
mavlink_log_info(mavlink_fd, "[cmd] OK saved param file");
|
||||
mavlink_log_info(mavlink_fd, param_get_default_file());
|
||||
result = MAV_RESULT_ACCEPTED;
|
||||
|
||||
} else {
|
||||
if (write_ret < -1) {
|
||||
mavlink_log_info(mavlink_fd, "[cmd] ERR params file does not exit:");
|
||||
mavlink_log_info(mavlink_fd, param_get_default_file());
|
||||
} else {
|
||||
mavlink_log_info(mavlink_fd, "[cmd] ERR writing params to");
|
||||
mavlink_log_info(mavlink_fd, param_get_default_file());
|
||||
}
|
||||
result = MAV_RESULT_FAILED;
|
||||
}
|
||||
|
||||
} else {
|
||||
mavlink_log_info(mavlink_fd, "[pm] refusing unsupp. STOR request");
|
||||
result = MAV_RESULT_UNSUPPORTED;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default: {
|
||||
mavlink_log_critical(mavlink_fd, "[commander] refusing unsupported command");
|
||||
mavlink_log_critical(mavlink_fd, "[cmd] refusing unsupported command");
|
||||
result = MAV_RESULT_UNSUPPORTED;
|
||||
usleep(200000);
|
||||
/* announce command rejection */
|
||||
ioctl(buzzer, TONE_SET_ALARM, 4);
|
||||
}
|
||||
@@ -932,7 +984,13 @@ void handle_command(int status_pub, struct vehicle_status_s *current_vehicle_sta
|
||||
}
|
||||
|
||||
/* supported command handling stop */
|
||||
|
||||
if (result == MAV_RESULT_FAILED ||
|
||||
result == MAV_RESULT_DENIED ||
|
||||
result == MAV_RESULT_UNSUPPORTED) {
|
||||
ioctl(buzzer, TONE_SET_ALARM, 5);
|
||||
} else if (result == MAV_RESULT_ACCEPTED) {
|
||||
tune_confirm();
|
||||
}
|
||||
|
||||
/* send any requested ACKs */
|
||||
if (cmd->confirmation > 0) {
|
||||
|
||||
@@ -233,66 +233,68 @@ void mavlink_pm_message_handler(const mavlink_channel_t chan, const mavlink_mess
|
||||
|
||||
} break;
|
||||
|
||||
case MAVLINK_MSG_ID_COMMAND_LONG: {
|
||||
mavlink_command_long_t cmd_mavlink;
|
||||
mavlink_msg_command_long_decode(msg, &cmd_mavlink);
|
||||
// case MAVLINK_MSG_ID_COMMAND_LONG: {
|
||||
// mavlink_command_long_t cmd_mavlink;
|
||||
// mavlink_msg_command_long_decode(msg, &cmd_mavlink);
|
||||
|
||||
uint8_t result = MAV_RESULT_UNSUPPORTED;
|
||||
// uint8_t result = MAV_RESULT_UNSUPPORTED;
|
||||
|
||||
if (cmd_mavlink.target_system == mavlink_system.sysid &&
|
||||
((cmd_mavlink.target_component == mavlink_system.compid) ||(cmd_mavlink.target_component == MAV_COMP_ID_ALL))) {
|
||||
// if (cmd_mavlink.target_system == mavlink_system.sysid &&
|
||||
// ((cmd_mavlink.target_component == mavlink_system.compid) ||(cmd_mavlink.target_component == MAV_COMP_ID_ALL))) {
|
||||
|
||||
/* preflight parameter load / store */
|
||||
if (cmd_mavlink.command == MAV_CMD_PREFLIGHT_STORAGE) {
|
||||
/* Read all parameters from EEPROM to RAM */
|
||||
// // XXX move this to LOW PRIO THREAD of commander app
|
||||
|
||||
if (((int)(cmd_mavlink.param1)) == 0) {
|
||||
// /* preflight parameter load / store */
|
||||
// if (cmd_mavlink.command == MAV_CMD_PREFLIGHT_STORAGE) {
|
||||
// /* Read all parameters from EEPROM to RAM */
|
||||
|
||||
/* read all parameters from EEPROM to RAM */
|
||||
int read_ret = param_load_default();
|
||||
if (read_ret == OK) {
|
||||
//printf("[mavlink pm] Loaded EEPROM params in RAM\n");
|
||||
mavlink_missionlib_send_gcs_string("[mavlink pm] OK loaded EEPROM params");
|
||||
result = MAV_RESULT_ACCEPTED;
|
||||
} else if (read_ret == 1) {
|
||||
mavlink_missionlib_send_gcs_string("[mavlink pm] No stored parameters to load");
|
||||
result = MAV_RESULT_ACCEPTED;
|
||||
} else {
|
||||
if (read_ret < -1) {
|
||||
mavlink_missionlib_send_gcs_string("[mavlink pm] ERR loading params from EEPROM");
|
||||
} else {
|
||||
mavlink_missionlib_send_gcs_string("[mavlink pm] ERR loading params, no EEPROM found");
|
||||
}
|
||||
result = MAV_RESULT_FAILED;
|
||||
}
|
||||
// if (((int)(cmd_mavlink.param1)) == 0) {
|
||||
|
||||
} else if (((int)(cmd_mavlink.param1)) == 1) {
|
||||
// /* read all parameters from EEPROM to RAM */
|
||||
// int read_ret = param_load_default();
|
||||
// if (read_ret == OK) {
|
||||
// //printf("[mavlink pm] Loaded EEPROM params in RAM\n");
|
||||
// mavlink_missionlib_send_gcs_string("[pm] OK loading %s", param_get_default_file());
|
||||
// result = MAV_RESULT_ACCEPTED;
|
||||
// } else if (read_ret == 1) {
|
||||
// mavlink_missionlib_send_gcs_string("[pm] OK no changes %s", param_get_default_file());
|
||||
// result = MAV_RESULT_ACCEPTED;
|
||||
// } else {
|
||||
// if (read_ret < -1) {
|
||||
// mavlink_missionlib_send_gcs_string("[pm] ERR loading %s", param_get_default_file());
|
||||
// } else {
|
||||
// mavlink_missionlib_send_gcs_string("[pm] ERR no file %s", param_get_default_file());
|
||||
// }
|
||||
// result = MAV_RESULT_FAILED;
|
||||
// }
|
||||
|
||||
/* write all parameters from RAM to EEPROM */
|
||||
int write_ret = param_save_default();
|
||||
if (write_ret == OK) {
|
||||
mavlink_missionlib_send_gcs_string("[mavlink pm] OK params written to EEPROM");
|
||||
result = MAV_RESULT_ACCEPTED;
|
||||
// } else if (((int)(cmd_mavlink.param1)) == 1) {
|
||||
|
||||
} else {
|
||||
if (write_ret < -1) {
|
||||
mavlink_missionlib_send_gcs_string("[mavlink pm] ERR writing params to EEPROM");
|
||||
} else {
|
||||
mavlink_missionlib_send_gcs_string("[mavlink pm] ERR writing params, no EEPROM found");
|
||||
}
|
||||
result = MAV_RESULT_FAILED;
|
||||
}
|
||||
// /* write all parameters from RAM to EEPROM */
|
||||
// int write_ret = param_save_default();
|
||||
// if (write_ret == OK) {
|
||||
// mavlink_missionlib_send_gcs_string("[pm] OK saved %s", param_get_default_file());
|
||||
// result = MAV_RESULT_ACCEPTED;
|
||||
|
||||
} else {
|
||||
//fprintf(stderr, "[mavlink pm] refusing unsupported storage request\n");
|
||||
mavlink_missionlib_send_gcs_string("[mavlink pm] refusing unsupported STOR request");
|
||||
result = MAV_RESULT_UNSUPPORTED;
|
||||
}
|
||||
}
|
||||
}
|
||||
// } else {
|
||||
// if (write_ret < -1) {
|
||||
// mavlink_missionlib_send_gcs_string("[pm] ERR writing %s", param_get_default_file());
|
||||
// } else {
|
||||
// mavlink_missionlib_send_gcs_string("[pm] ERR writing %s", param_get_default_file());
|
||||
// }
|
||||
// result = MAV_RESULT_FAILED;
|
||||
// }
|
||||
|
||||
/* send back command result */
|
||||
//mavlink_msg_command_ack_send(chan, cmd.command, result);
|
||||
} break;
|
||||
// } else {
|
||||
// //fprintf(stderr, "[mavlink pm] refusing unsupported storage request\n");
|
||||
// mavlink_missionlib_send_gcs_string("[pm] refusing unsupp. STOR request");
|
||||
// result = MAV_RESULT_UNSUPPORTED;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// /* send back command result */
|
||||
// //mavlink_msg_command_ack_send(chan, cmd.command, result);
|
||||
// } break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -220,9 +220,9 @@ mc_thread_main(int argc, char *argv[])
|
||||
|
||||
/* only move setpoint if manual input is != 0 */
|
||||
// XXX turn into param
|
||||
if ((manual.yaw < -0.01f || 0.01f < manual.yaw) && manual.throttle > 0.25f) {
|
||||
if ((manual.yaw < -0.01f || 0.01f < manual.yaw) && manual.throttle > 0.3f) {
|
||||
att_sp.yaw_body = att_sp.yaw_body + manual.yaw * 0.0025f;
|
||||
} else if (manual.throttle <= 0.25f) {
|
||||
} else if (manual.throttle <= 0.3f) {
|
||||
att_sp.yaw_body = att.yaw;
|
||||
}
|
||||
att_sp.thrust = manual.throttle;
|
||||
|
||||
@@ -96,7 +96,8 @@ param_main(int argc, char *argv[])
|
||||
} else {
|
||||
param_set_default_file(NULL);
|
||||
}
|
||||
warnx("selected parameter file %s", param_get_default_file());
|
||||
warnx("selected parameter default file %s", param_get_default_file());
|
||||
exit(0);
|
||||
}
|
||||
|
||||
if (!strcmp(argv[1], "show"))
|
||||
@@ -141,17 +142,11 @@ do_load(const char* param_file_name)
|
||||
if (fd < 0)
|
||||
err(1, "open '%s'", param_file_name);
|
||||
|
||||
/* set new default file name */
|
||||
param_set_default_file(param_file_name);
|
||||
|
||||
int result = param_load(fd);
|
||||
close(fd);
|
||||
|
||||
if (result < 0) {
|
||||
errx(1, "error importing from '%s'", param_file_name);
|
||||
} else {
|
||||
/* set default file name for next storage operation */
|
||||
param_set_default_file(param_file_name);
|
||||
}
|
||||
|
||||
exit(0);
|
||||
|
||||
@@ -482,7 +482,7 @@ param_reset_all(void)
|
||||
}
|
||||
|
||||
static const char *param_default_file = "/eeprom/parameters";
|
||||
static char *param_user_file;
|
||||
static char *param_user_file = NULL;
|
||||
|
||||
int
|
||||
param_set_default_file(const char* filename)
|
||||
|
||||
Reference in New Issue
Block a user