From 4cda5513b9e79aa72a4b0a19deb47423e2c2c2a3 Mon Sep 17 00:00:00 2001 From: David Sidrane <david_s5@nscdg.com> Date: Wed, 24 Oct 2018 13:28:12 -0700 Subject: [PATCH] omnibus-f4sd:use board_hardfault_init API and indicate on BLUE LED --- src/drivers/boards/omnibus-f4sd/init.c | 145 ++----------------------- 1 file changed, 9 insertions(+), 136 deletions(-) diff --git a/src/drivers/boards/omnibus-f4sd/init.c b/src/drivers/boards/omnibus-f4sd/init.c index 4537e8e60b..3955940707 100644 --- a/src/drivers/boards/omnibus-f4sd/init.c +++ b/src/drivers/boards/omnibus-f4sd/init.c @@ -76,8 +76,6 @@ #include <perf/perf_counter.h> #include <systemlib/err.h> -#include <systemlib/hardfault_log.h> - #include <parameters/param.h> /**************************************************************************** @@ -305,142 +303,15 @@ __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_BLUE); + if (board_hardfault_init(2, true) != 0) { + led_on(LED_BLUE); + } + + /* Configure SPI-based devices */ // SPI1: MPU6000 @@ -448,7 +319,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_BLUE); return -ENODEV; } @@ -465,6 +336,7 @@ __EXPORT int board_app_initialize(uintptr_t arg) if (!spi2) { message("[boot] FAILED to initialize SPI port %d\n", CONFIG_NSH_MMCSDSPIPORTNO); + led_on(LED_BLUE); return -ENODEV; } @@ -472,6 +344,7 @@ __EXPORT int board_app_initialize(uintptr_t arg) int result = mmcsd_spislotinitialize(CONFIG_NSH_MMCSDMINOR, CONFIG_NSH_MMCSDSLOTNO, spi2); if (result != OK) { + led_on(LED_BLUE); message("[boot] FAILED to bind SPI port 2 to the MMCSD driver\n"); return -ENODEV; } @@ -484,7 +357,7 @@ __EXPORT int board_app_initialize(uintptr_t arg) if (!spi3) { message("[boot] FAILED to initialize SPI port 3\n"); - board_autoled_on(LED_RED); + led_on(LED_BLUE); return -ENODEV; } -- GitLab