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