diff --git a/sw/airborne/modules/mission/mission_common.c b/sw/airborne/modules/mission/mission_common.c index e7ce945802..a4824a762a 100644 --- a/sw/airborne/modules/mission/mission_common.c +++ b/sw/airborne/modules/mission/mission_common.c @@ -100,14 +100,14 @@ struct _mission_element *mission_get(void) // Report function void mission_status_report(void) { - // build task list - uint8_t task_list[MISSION_ELEMENT_NB]; + // build index list + uint8_t index_list[MISSION_ELEMENT_NB]; uint8_t i = mission.current_idx, j = 0; while (i != mission.insert_idx) { - task_list[j++] = (uint8_t)mission.elements[i].type; + index_list[j++] = mission.elements[i].index; i = (i + 1) % MISSION_ELEMENT_NB; } - if (j == 0) { task_list[j++] = 0; } // Dummy value if task list is empty + if (j == 0) { index_list[j++] = 0; } // Dummy value if index list is empty //compute remaining time (or -1. if no time limit) float remaining_time = -1.; if (mission.elements[mission.current_idx].duration > 0.) { @@ -115,7 +115,7 @@ void mission_status_report(void) } // send status - DOWNLINK_SEND_MISSION_STATUS(DefaultChannel, DefaultDevice, &remaining_time, j, task_list); + DOWNLINK_SEND_MISSION_STATUS(DefaultChannel, DefaultDevice, &remaining_time, j, index_list); } @@ -133,6 +133,7 @@ int mission_parse_GOTO_WP(void) me.element.mission_wp.wp.wp_f.y = DL_MISSION_GOTO_WP_wp_north(dl_buffer); me.element.mission_wp.wp.wp_f.z = DL_MISSION_GOTO_WP_wp_alt(dl_buffer); me.duration = DL_MISSION_GOTO_WP_duration(dl_buffer); + me.index = DL_MISSION_GOTO_WP_index(dl_buffer); enum MissionInsertMode insert = (enum MissionInsertMode)(DL_MISSION_GOTO_WP_insert(dl_buffer)); @@ -153,6 +154,7 @@ int mission_parse_GOTO_WP_LLA(void) // if there is no valid local coordinate, do not insert mission element if (!mission_point_of_lla(&me.element.mission_wp.wp.wp_f, &lla)) { return false; } me.duration = DL_MISSION_GOTO_WP_LLA_duration(dl_buffer); + me.index = DL_MISSION_GOTO_WP_LLA_index(dl_buffer); enum MissionInsertMode insert = (enum MissionInsertMode)(DL_MISSION_GOTO_WP_LLA_insert(dl_buffer)); @@ -170,6 +172,7 @@ int mission_parse_CIRCLE(void) me.element.mission_circle.center.center_f.z = DL_MISSION_CIRCLE_center_alt(dl_buffer); me.element.mission_circle.radius = DL_MISSION_CIRCLE_radius(dl_buffer); me.duration = DL_MISSION_CIRCLE_duration(dl_buffer); + me.index = DL_MISSION_CIRCLE_index(dl_buffer); enum MissionInsertMode insert = (enum MissionInsertMode)(DL_MISSION_CIRCLE_insert(dl_buffer)); @@ -191,6 +194,7 @@ int mission_parse_CIRCLE_LLA(void) if (!mission_point_of_lla(&me.element.mission_circle.center.center_f, &lla)) { return false; } me.element.mission_circle.radius = DL_MISSION_CIRCLE_LLA_radius(dl_buffer); me.duration = DL_MISSION_CIRCLE_LLA_duration(dl_buffer); + me.index = DL_MISSION_CIRCLE_LLA_index(dl_buffer); enum MissionInsertMode insert = (enum MissionInsertMode)(DL_MISSION_CIRCLE_LLA_insert(dl_buffer)); @@ -210,6 +214,7 @@ int mission_parse_SEGMENT(void) me.element.mission_segment.to.to_f.y = DL_MISSION_SEGMENT_segment_north_2(dl_buffer); me.element.mission_segment.to.to_f.z = DL_MISSION_SEGMENT_segment_alt(dl_buffer); me.duration = DL_MISSION_SEGMENT_duration(dl_buffer); + me.index = DL_MISSION_SEGMENT_index(dl_buffer); enum MissionInsertMode insert = (enum MissionInsertMode)(DL_MISSION_SEGMENT_insert(dl_buffer)); @@ -234,6 +239,7 @@ int mission_parse_SEGMENT_LLA(void) if (!mission_point_of_lla(&me.element.mission_segment.from.from_f, &from_lla)) { return false; } if (!mission_point_of_lla(&me.element.mission_segment.to.to_f, &to_lla)) { return false; } me.duration = DL_MISSION_SEGMENT_LLA_duration(dl_buffer); + me.index = DL_MISSION_SEGMENT_LLA_index(dl_buffer); enum MissionInsertMode insert = (enum MissionInsertMode)(DL_MISSION_SEGMENT_LLA_insert(dl_buffer)); @@ -265,6 +271,7 @@ int mission_parse_PATH(void) if (me.element.mission_path.nb > MISSION_PATH_NB) { me.element.mission_path.nb = MISSION_PATH_NB; } me.element.mission_path.path_idx = 0; me.duration = DL_MISSION_PATH_duration(dl_buffer); + me.index = DL_MISSION_PATH_index(dl_buffer); enum MissionInsertMode insert = (enum MissionInsertMode)(DL_MISSION_PATH_insert(dl_buffer)); @@ -303,6 +310,7 @@ int mission_parse_PATH_LLA(void) } me.element.mission_path.path_idx = 0; me.duration = DL_MISSION_PATH_LLA_duration(dl_buffer); + me.index = DL_MISSION_PATH_LLA_index(dl_buffer); enum MissionInsertMode insert = (enum MissionInsertMode)(DL_MISSION_PATH_LLA_insert(dl_buffer)); @@ -340,4 +348,3 @@ int mission_parse_END_MISSION(void) mission.current_idx = mission.insert_idx; return true; } - diff --git a/sw/airborne/modules/mission/mission_common.h b/sw/airborne/modules/mission/mission_common.h index 10c7aa4591..0618865c07 100644 --- a/sw/airborne/modules/mission/mission_common.h +++ b/sw/airborne/modules/mission/mission_common.h @@ -100,6 +100,7 @@ struct _mission_element { } element; float duration; ///< time to spend in the element (<= 0 to disable) + uint8_t index; ///< index of mission element }; /** Max number of elements in the tasks' list