forked from Archive/PX4-Autopilot
Some more commander cleanup, param update handling code was doubled
This commit is contained in:
parent
08926019ea
commit
6dc3fcd1ad
|
@ -39,11 +39,6 @@
|
||||||
* @file commander.c
|
* @file commander.c
|
||||||
* Main system state machine implementation.
|
* Main system state machine implementation.
|
||||||
*
|
*
|
||||||
* @author Petri Tanskanen <petri.tanskanen@inf.ethz.ch>
|
|
||||||
* @author Lorenz Meier <lm@inf.ethz.ch>
|
|
||||||
* @author Thomas Gubler <thomasgubler@student.ethz.ch>
|
|
||||||
* @author Julian Oes <joes@student.ethz.ch>
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "commander.h"
|
#include "commander.h"
|
||||||
|
@ -656,9 +651,23 @@ int commander_thread_main(int argc, char *argv[])
|
||||||
uint16_t stick_off_counter = 0;
|
uint16_t stick_off_counter = 0;
|
||||||
uint16_t stick_on_counter = 0;
|
uint16_t stick_on_counter = 0;
|
||||||
|
|
||||||
/* XXX what exactly is this for? */
|
/* To remember when last notification was sent */
|
||||||
uint64_t last_print_time = 0;
|
uint64_t last_print_time = 0;
|
||||||
|
|
||||||
|
float voltage_previous = 0.0f;
|
||||||
|
|
||||||
|
uint64_t last_idle_time = 0;
|
||||||
|
|
||||||
|
uint64_t start_time = 0;
|
||||||
|
|
||||||
|
/* XXX use this! */
|
||||||
|
//uint64_t failsave_ll_start_time = 0;
|
||||||
|
|
||||||
|
bool state_changed = true;
|
||||||
|
bool param_init_forced = true;
|
||||||
|
|
||||||
|
bool new_data = false;
|
||||||
|
|
||||||
/* Subscribe to safety topic */
|
/* Subscribe to safety topic */
|
||||||
int safety_sub = orb_subscribe(ORB_ID(safety));
|
int safety_sub = orb_subscribe(ORB_ID(safety));
|
||||||
struct safety_s safety;
|
struct safety_s safety;
|
||||||
|
@ -702,6 +711,7 @@ int commander_thread_main(int argc, char *argv[])
|
||||||
struct sensor_combined_s sensors;
|
struct sensor_combined_s sensors;
|
||||||
memset(&sensors, 0, sizeof(sensors));
|
memset(&sensors, 0, sizeof(sensors));
|
||||||
|
|
||||||
|
/* Subscribe to differential pressure topic */
|
||||||
int diff_pres_sub = orb_subscribe(ORB_ID(differential_pressure));
|
int diff_pres_sub = orb_subscribe(ORB_ID(differential_pressure));
|
||||||
struct differential_pressure_s diff_pres;
|
struct differential_pressure_s diff_pres;
|
||||||
memset(&diff_pres, 0, sizeof(diff_pres));
|
memset(&diff_pres, 0, sizeof(diff_pres));
|
||||||
|
@ -717,7 +727,7 @@ int commander_thread_main(int argc, char *argv[])
|
||||||
struct parameter_update_s param_changed;
|
struct parameter_update_s param_changed;
|
||||||
memset(¶m_changed, 0, sizeof(param_changed));
|
memset(¶m_changed, 0, sizeof(param_changed));
|
||||||
|
|
||||||
/* subscribe to battery topic */
|
/* Subscribe to battery topic */
|
||||||
int battery_sub = orb_subscribe(ORB_ID(battery_status));
|
int battery_sub = orb_subscribe(ORB_ID(battery_status));
|
||||||
struct battery_status_s battery;
|
struct battery_status_s battery;
|
||||||
memset(&battery, 0, sizeof(battery));
|
memset(&battery, 0, sizeof(battery));
|
||||||
|
@ -728,28 +738,14 @@ int commander_thread_main(int argc, char *argv[])
|
||||||
struct subsystem_info_s info;
|
struct subsystem_info_s info;
|
||||||
memset(&info, 0, sizeof(info));
|
memset(&info, 0, sizeof(info));
|
||||||
|
|
||||||
// uint8_t vehicle_state_previous = current_status.state_machine;
|
|
||||||
float voltage_previous = 0.0f;
|
|
||||||
|
|
||||||
uint64_t last_idle_time = 0;
|
|
||||||
|
|
||||||
/* now initialized */
|
/* now initialized */
|
||||||
commander_initialized = true;
|
commander_initialized = true;
|
||||||
thread_running = true;
|
thread_running = true;
|
||||||
|
|
||||||
uint64_t start_time = hrt_absolute_time();
|
start_time = hrt_absolute_time();
|
||||||
|
|
||||||
/* XXX use this! */
|
|
||||||
//uint64_t failsave_ll_start_time = 0;
|
|
||||||
|
|
||||||
bool state_changed = true;
|
|
||||||
bool param_init_forced = true;
|
|
||||||
|
|
||||||
while (!thread_should_exit) {
|
while (!thread_should_exit) {
|
||||||
|
|
||||||
/* Get current values */
|
|
||||||
bool new_data;
|
|
||||||
|
|
||||||
/* update parameters */
|
/* update parameters */
|
||||||
orb_check(param_changed_sub, &new_data);
|
orb_check(param_changed_sub, &new_data);
|
||||||
|
|
||||||
|
@ -758,11 +754,10 @@ int commander_thread_main(int argc, char *argv[])
|
||||||
/* parameters changed */
|
/* parameters changed */
|
||||||
orb_copy(ORB_ID(parameter_update), param_changed_sub, ¶m_changed);
|
orb_copy(ORB_ID(parameter_update), param_changed_sub, ¶m_changed);
|
||||||
|
|
||||||
|
|
||||||
/* update parameters */
|
/* update parameters */
|
||||||
if (!armed.armed) {
|
if (!armed.armed) {
|
||||||
if (param_get(_param_sys_type, &(current_status.system_type)) != OK) {
|
if (param_get(_param_sys_type, &(current_status.system_type)) != OK) {
|
||||||
warnx("failed setting new system type");
|
warnx("failed getting new system type");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* disable manual override for all systems that rely on electronic stabilization */
|
/* disable manual override for all systems that rely on electronic stabilization */
|
||||||
|
@ -817,37 +812,6 @@ int commander_thread_main(int argc, char *argv[])
|
||||||
handle_command(status_pub, ¤t_status, &cmd, armed_pub, &armed);
|
handle_command(status_pub, ¤t_status, &cmd, armed_pub, &armed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* update parameters */
|
|
||||||
orb_check(param_changed_sub, &new_data);
|
|
||||||
|
|
||||||
if (new_data || param_init_forced) {
|
|
||||||
param_init_forced = false;
|
|
||||||
/* parameters changed */
|
|
||||||
orb_copy(ORB_ID(parameter_update), param_changed_sub, ¶m_changed);
|
|
||||||
|
|
||||||
/* update parameters */
|
|
||||||
if (!armed.armed) {
|
|
||||||
if (param_get(_param_sys_type, &(current_status.system_type)) != OK) {
|
|
||||||
warnx("failed setting new system type");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* disable manual override for all systems that rely on electronic stabilization */
|
|
||||||
if (current_status.system_type == VEHICLE_TYPE_QUADROTOR ||
|
|
||||||
current_status.system_type == VEHICLE_TYPE_HEXAROTOR ||
|
|
||||||
current_status.system_type == VEHICLE_TYPE_OCTOROTOR) {
|
|
||||||
current_status.flag_external_manual_override_ok = false;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
current_status.flag_external_manual_override_ok = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* check and update system / component ID */
|
|
||||||
param_get(_param_system_id, &(current_status.system_id));
|
|
||||||
param_get(_param_component_id, &(current_status.component_id));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* update safety topic */
|
/* update safety topic */
|
||||||
orb_check(safety_sub, &new_data);
|
orb_check(safety_sub, &new_data);
|
||||||
|
|
||||||
|
@ -1664,11 +1628,16 @@ int commander_thread_main(int argc, char *argv[])
|
||||||
buzzer_deinit();
|
buzzer_deinit();
|
||||||
close(sp_man_sub);
|
close(sp_man_sub);
|
||||||
close(sp_offboard_sub);
|
close(sp_offboard_sub);
|
||||||
|
close(local_position_sub);
|
||||||
close(global_position_sub);
|
close(global_position_sub);
|
||||||
|
close(gps_sub);
|
||||||
close(sensor_sub);
|
close(sensor_sub);
|
||||||
close(safety_sub);
|
close(safety_sub);
|
||||||
close(cmd_sub);
|
close(cmd_sub);
|
||||||
close(subsys_sub);
|
close(subsys_sub);
|
||||||
|
close(diff_pres_sub);
|
||||||
|
close(param_changed_sub);
|
||||||
|
close(battery_sub);
|
||||||
|
|
||||||
warnx("exiting");
|
warnx("exiting");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
|
Loading…
Reference in New Issue