From 161288ef7153ec97ffeea575f8412e3bcfbaf820 Mon Sep 17 00:00:00 2001 From: David Sidrane <david_s5@nscdg.com> Date: Wed, 24 Oct 2018 13:37:33 -0700 Subject: [PATCH] px4fmu-v4:use board_hardfault_init API --- src/drivers/boards/px4fmu-v4/init.c | 143 ++-------------------------- 1 file changed, 8 insertions(+), 135 deletions(-) diff --git a/src/drivers/boards/px4fmu-v4/init.c b/src/drivers/boards/px4fmu-v4/init.c index 6a99b5761e..977b19b6c7 100644 --- a/src/drivers/boards/px4fmu-v4/init.c +++ b/src/drivers/boards/px4fmu-v4/init.c @@ -77,8 +77,6 @@ #include <perf/perf_counter.h> #include <systemlib/err.h> -#include <systemlib/hardfault_log.h> - #include <parameters/param.h> /**************************************************************************** @@ -319,143 +317,16 @@ __EXPORT int board_app_initialize(uintptr_t arg) (hrt_callout)stm32_serial_dma_poll, NULL); -#if defined(CONFIG_STM32_BBSRAM) - - /** - * NB. the use of the console requires the hrt running - * to poll the DMA. - */ - - // Using Battery Backed Up SRAM. - int filesizes[CONFIG_STM32_BBSRAM_FILES + 1] = BSRAM_FILE_SIZES; - - stm32_bbsraminitialize(BBSRAM_PATH, filesizes); - -#if defined(CONFIG_STM32_SAVE_CRASHDUMP) - - /* Panic Logging in Battery Backed Up Files */ - - /** - * In an ideal world, if a fault happens in flight the - * system save it to BBSRAM will then reboot. Upon - * rebooting, the system will log the fault to disk, recover - * the flight state and continue to fly. But if there is - * a fault on the bench or in the air that prohibit the recovery - * or committing the log to disk, the things are too broken to - * fly. So the question is: - * - * Did we have a hard fault and not make it far enough - * through the boot sequence to commit the fault data to - * the SD card? - */ - - /** - * Do we have an uncommitted hard fault in BBSRAM? - * - this will be reset after a successful commit to SD. - */ - int hadCrash = hardfault_check_status("boot"); - - if (hadCrash == OK) { - - message("[boot] There is a hard fault logged. Hold down the SPACE BAR," \ - " while booting to halt the system!\n"); - - /** - * Yes. So add one to the boot count - this will be reset after a successful - * commit to SD. - */ - int reboots = hardfault_increment_reboot("boot", false); - - /* Also end the misery for a user that holds for a key down on the console. */ - int bytesWaiting; - ioctl(fileno(stdin), FIONREAD, (unsigned long)((uintptr_t) &bytesWaiting)); - - if (reboots > 2 || bytesWaiting != 0) { - - /** - * Since we can not commit the fault dump to disk. Display it - * to the console. - */ - hardfault_write("boot", fileno(stdout), HARDFAULT_DISPLAY_FORMAT, false); - - message("[boot] There were %d reboots with Hard fault that were not committed to disk - System halted %s\n", - reboots, - (bytesWaiting == 0 ? "" : " Due to Key Press\n")); - - - /** - * For those of you with a debugger set a break point on up_assert and - * then set dbgContinue = 1 and go. - */ - - // Clear any key press that got us here. - static volatile bool dbgContinue = false; - int c = '>'; - - while (!dbgContinue) { - - switch (c) { - - case EOF: - - - case '\n': - case '\r': - case ' ': - continue; - - default: - - putchar(c); - putchar('\n'); - - switch (c) { - - case 'D': - case 'd': - hardfault_write("boot", fileno(stdout), HARDFAULT_DISPLAY_FORMAT, false); - break; - - case 'C': - case 'c': - hardfault_rearm("boot"); - hardfault_increment_reboot("boot", true); - break; - - case 'B': - case 'b': - dbgContinue = true; - break; - - default: - break; - } // Inner Switch - - message("\nEnter B - Continue booting\n" \ - "Enter C - Clear the fault log\n" \ - "Enter D - Dump fault log\n\n?>"); - fflush(stdout); - - if (!dbgContinue) { - c = getchar(); - } - - break; - - } // outer switch - } // for - } // inner if - } // outer if - -#endif // CONFIG_STM32_SAVE_CRASHDUMP -#endif // CONFIG_STM32_BBSRAM - // Initial LED state. drv_led_start(); led_off(LED_RED); led_off(LED_GREEN); led_off(LED_BLUE); + if (board_hardfault_init(2, true) != 0) { + led_on(LED_RED); + } + // Power up the sensors. stm32_gpiowrite(GPIO_VDD_3V3_SENSORS_EN, 1); @@ -467,7 +338,7 @@ __EXPORT int board_app_initialize(uintptr_t arg) if (!spi1) { message("[boot] FAILED to initialize SPI port 1\n"); - board_autoled_on(LED_RED); + led_on(LED_RED); return -ENODEV; } @@ -486,7 +357,7 @@ __EXPORT int board_app_initialize(uintptr_t arg) if (!spi2) { message("[boot] FAILED to initialize SPI port 2\n"); - board_autoled_on(LED_RED); + led_on(LED_RED); return -ENODEV; } @@ -508,6 +379,7 @@ __EXPORT int board_app_initialize(uintptr_t arg) sdio = sdio_initialize(CONFIG_NSH_MMCSDSLOTNO); if (!sdio) { + led_on(LED_RED); message("[boot] Failed to initialize SDIO slot %d\n", CONFIG_NSH_MMCSDSLOTNO); return -ENODEV; @@ -517,6 +389,7 @@ __EXPORT int board_app_initialize(uintptr_t arg) int ret = mmcsd_slotinitialize(CONFIG_NSH_MMCSDMINOR, sdio); if (ret != OK) { + led_on(LED_RED); message("[boot] Failed to bind SDIO to the MMC/SD driver: %d\n", ret); return ret; } -- GitLab