diff --git a/conf/messages.xml b/conf/messages.xml
index d1b9267047..5fc0c2dfa8 100644
--- a/conf/messages.xml
+++ b/conf/messages.xml
@@ -654,7 +654,11 @@
-
+
+
+
+
+
diff --git a/conf/modules/mission_fw.xml b/conf/modules/mission_fw.xml
index e908686cac..a0ceaae7b9 100644
--- a/conf/modules/mission_fw.xml
+++ b/conf/modules/mission_fw.xml
@@ -12,6 +12,7 @@
+
diff --git a/sw/airborne/modules/mission/mission.c b/sw/airborne/modules/mission/mission.c
index d3794bbca9..b8335f8103 100644
--- a/sw/airborne/modules/mission/mission.c
+++ b/sw/airborne/modules/mission/mission.c
@@ -31,7 +31,6 @@
#include "subsystems/datalink/datalink.h"
#include "subsystems/datalink/downlink.h"
-
struct _mission mission;
@@ -84,6 +83,26 @@ struct _mission_element * mission_get(void) {
}
+// Report function
+void mission_status_report(void) {
+ // build task list
+ uint8_t task_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;
+ i = (i+1)%MISSION_ELEMENT_NB;
+ }
+ if (j == 0) { task_list[j++] = 255; } // Dummy value if task list is empty
+ //compute remaining time (or -1. if no time limit)
+ float remaining_time = -1.;
+ if (mission.elements[mission.current_idx].duration > 0.) {
+ remaining_time = mission.elements[mission.current_idx].duration - mission.element_time;
+ }
+
+ // send status
+ DOWNLINK_SEND_MISSION_STATUS(DefaultChannel, DefaultDevice, &remaining_time, j, task_list);
+}
+
///////////////////////
// Parsing functions //
diff --git a/sw/airborne/modules/mission/mission.h b/sw/airborne/modules/mission/mission.h
index d423c48c12..582ca3754f 100644
--- a/sw/airborne/modules/mission/mission.h
+++ b/sw/airborne/modules/mission/mission.h
@@ -117,7 +117,13 @@ extern struct _mission_element * mission_get(void);
*
* @return return TRUE when the mission is running, FALSE when it is finished
*/
-extern int mission_run();
+extern int mission_run(void);
+
+/** Report mission status
+ *
+ * Send mission status over datalink
+ */
+extern void mission_status_report(void);
/** Parsing functions called when a mission message is received
*/