diff options
author | Andrew Tridgell <tridge@samba.org> | 2014-01-07 15:59:18 +0800 |
---|---|---|
committer | Lorenz Meier <lm@inf.ethz.ch> | 2014-01-07 09:30:56 +0100 |
commit | 1a13e66aab3cd88b5447448b577fc44165ab01bc (patch) | |
tree | 77972a5cb24c42c4e016af76bcac318c2748a451 /src/modules/px4iofirmware/px4io.c | |
parent | 76477b205775ddcbce6147d93985ddcdb10a3d52 (diff) | |
download | px4-firmware-1a13e66aab3cd88b5447448b577fc44165ab01bc.tar.gz px4-firmware-1a13e66aab3cd88b5447448b577fc44165ab01bc.tar.bz2 px4-firmware-1a13e66aab3cd88b5447448b577fc44165ab01bc.zip |
px4iofirmware: make forceupdate more reliable
this schedules a reboot rather than rebooting immediately, which means
the FMU gets an ACK for its reboot operation, preventing it from
timing out waiting for the ACK. That makes the timing of the reboot
more consistent, which makes it more reliable for forceupdate
Diffstat (limited to 'src/modules/px4iofirmware/px4io.c')
-rw-r--r-- | src/modules/px4iofirmware/px4io.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/modules/px4iofirmware/px4io.c b/src/modules/px4iofirmware/px4io.c index 745bd5705..0b8c4a6a8 100644 --- a/src/modules/px4iofirmware/px4io.c +++ b/src/modules/px4iofirmware/px4io.c @@ -125,6 +125,25 @@ heartbeat_blink(void) LED_BLUE(heartbeat = !heartbeat); } +static uint64_t reboot_time; + +/** + schedule a reboot in time_delta_usec microseconds + */ +void schedule_reboot(uint32_t time_delta_usec) +{ + reboot_time = hrt_absolute_time() + time_delta_usec; +} + +/** + check for a scheduled reboot + */ +static void check_reboot(void) +{ + if (reboot_time != 0 && hrt_absolute_time() > reboot_time) { + up_systemreset(); + } +} static void calculate_fw_crc(void) @@ -249,6 +268,8 @@ user_start(int argc, char *argv[]) heartbeat_blink(); } + check_reboot(); + #if 0 /* check for debug activity */ show_debug_messages(); |