diff options
author | Julian Oes <julian@oes.ch> | 2013-12-27 00:04:32 +0100 |
---|---|---|
committer | Julian Oes <julian@oes.ch> | 2013-12-27 00:04:32 +0100 |
commit | 40f2d581bffacbf214edfcadac3a57756d605196 (patch) | |
tree | e63077b8eeb2ac98a3a28772ffa9dbeb63f6f865 /src/modules/px4iofirmware/px4io.c | |
parent | 9d4ba6e4f64d631c67a419518a8398debade4641 (diff) | |
parent | d3a71d1e420c595a9a242d12264d553759dd9e2a (diff) | |
download | px4-firmware-40f2d581bffacbf214edfcadac3a57756d605196.tar.gz px4-firmware-40f2d581bffacbf214edfcadac3a57756d605196.tar.bz2 px4-firmware-40f2d581bffacbf214edfcadac3a57756d605196.zip |
Merge branch 'fw_autoland_att_tecs_navigator_termination_controlgroups' into bottle_drop_navigator
Conflicts:
src/drivers/px4fmu/fmu.cpp
src/modules/dataman/dataman.c
src/modules/dataman/dataman.h
src/modules/mavlink/orb_listener.c
src/modules/mavlink/waypoints.c
src/modules/navigator/navigator_main.cpp
src/modules/navigator/navigator_mission.cpp
src/modules/navigator/navigator_mission.h
src/modules/uORB/topics/mission.h
Diffstat (limited to 'src/modules/px4iofirmware/px4io.c')
-rw-r--r-- | src/modules/px4iofirmware/px4io.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/modules/px4iofirmware/px4io.c b/src/modules/px4iofirmware/px4io.c index ff9eecd74..745bd5705 100644 --- a/src/modules/px4iofirmware/px4io.c +++ b/src/modules/px4iofirmware/px4io.c @@ -45,6 +45,7 @@ #include <string.h> #include <poll.h> #include <signal.h> +#include <crc32.h> #include <drivers/drv_pwm_output.h> #include <drivers/drv_hrt.h> @@ -117,6 +118,29 @@ show_debug_messages(void) } } +static void +heartbeat_blink(void) +{ + static bool heartbeat = false; + LED_BLUE(heartbeat = !heartbeat); +} + + +static void +calculate_fw_crc(void) +{ +#define APP_SIZE_MAX 0xf000 +#define APP_LOAD_ADDRESS 0x08001000 + // compute CRC of the current firmware + uint32_t sum = 0; + for (unsigned p = 0; p < APP_SIZE_MAX; p += 4) { + uint32_t bytes = *(uint32_t *)(p + APP_LOAD_ADDRESS); + sum = crc32part((uint8_t *)&bytes, sizeof(bytes), sum); + } + r_page_setup[PX4IO_P_SETUP_CRC] = sum & 0xFFFF; + r_page_setup[PX4IO_P_SETUP_CRC+1] = sum >> 16; +} + int user_start(int argc, char *argv[]) { @@ -129,6 +153,9 @@ user_start(int argc, char *argv[]) /* configure the high-resolution time/callout interface */ hrt_init(); + /* calculate our fw CRC so FMU can decide if we need to update */ + calculate_fw_crc(); + /* * Poll at 1ms intervals for received bytes that have not triggered * a DMA event. @@ -201,6 +228,7 @@ user_start(int argc, char *argv[]) */ uint64_t last_debug_time = 0; + uint64_t last_heartbeat_time = 0; for (;;) { /* track the rate at which the loop is running */ @@ -216,6 +244,11 @@ user_start(int argc, char *argv[]) controls_tick(); perf_end(controls_perf); + if ((hrt_absolute_time() - last_heartbeat_time) > 250*1000) { + last_heartbeat_time = hrt_absolute_time(); + heartbeat_blink(); + } + #if 0 /* check for debug activity */ show_debug_messages(); |