mirror of https://github.com/ArduPilot/ardupilot
AP_Filesystem: allow for partial mission upload
This commit is contained in:
parent
d96002942c
commit
d8575f0607
|
@ -367,7 +367,9 @@ bool AP_Filesystem_Mission::finish_upload(const rfile &r)
|
|||
return false;
|
||||
}
|
||||
WITH_SEMAPHORE(mission->get_semaphore());
|
||||
mission->clear();
|
||||
if ((hdr.options & unsigned(Options::NO_CLEAR)) == 0) {
|
||||
mission->clear();
|
||||
}
|
||||
for (uint32_t i=0; i<nitems; i++) {
|
||||
mavlink_mission_item_int_t m;
|
||||
AP_Mission::Mission_Command cmd;
|
||||
|
@ -380,8 +382,15 @@ bool AP_Filesystem_Mission::finish_upload(const rfile &r)
|
|||
(cmd.content.jump.target >= nitems || cmd.content.jump.target == 0)) {
|
||||
return false;
|
||||
}
|
||||
if (!mission->add_cmd(cmd)) {
|
||||
return false;
|
||||
uint16_t idx = i + hdr.start;
|
||||
if (idx == mission->num_commands()) {
|
||||
if (!mission->add_cmd(cmd)) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if (!mission->replace_cmd(idx, cmd)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -36,11 +36,17 @@ private:
|
|||
|
||||
static constexpr uint16_t mission_magic = 0x763d;
|
||||
|
||||
enum class Options {
|
||||
NO_CLEAR = (1U<<0), // don't clear the old mission
|
||||
};
|
||||
|
||||
// header at front of the file
|
||||
struct header {
|
||||
uint16_t magic = mission_magic;
|
||||
uint16_t data_type; // MAV_MISSION_TYPE_*
|
||||
uint32_t num_items;
|
||||
uint16_t options; // optional features
|
||||
uint16_t start; // first WP num, 0 for full upload
|
||||
uint16_t num_items;
|
||||
};
|
||||
|
||||
struct rfile {
|
||||
|
|
Loading…
Reference in New Issue