From dbd02b1e47aacc4982c944dfb79e424eacdc6f14 Mon Sep 17 00:00:00 2001
From: David Sidrane <david_s5@nscdg.com>
Date: Wed, 10 Apr 2019 13:49:58 -0700
Subject: [PATCH] px4io:Detect Running on Cube and set GPIO for heater

   Addresses #11832 - configure the mixed use GPIO
   that can be the a BLue LED or a Heater as PUSH
   PULL on Cube as to not let the heater input float.
---
 boards/px4/io-v2/src/board_config.h | 21 +++++++++++++++++++++
 boards/px4/io-v2/src/init.c         | 24 ++++++++++++++++++++++++
 2 files changed, 45 insertions(+)

diff --git a/boards/px4/io-v2/src/board_config.h b/boards/px4/io-v2/src/board_config.h
index 475d450379..0571ae22f3 100644
--- a/boards/px4/io-v2/src/board_config.h
+++ b/boards/px4/io-v2/src/board_config.h
@@ -77,6 +77,27 @@
 #define GPIO_LED3 (GPIO_OUTPUT|GPIO_CNF_OUTOD|GPIO_MODE_50MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN13)
 #define GPIO_LED4 (GPIO_OUTPUT|GPIO_CNF_OUTOD|GPIO_MODE_50MHz|GPIO_OUTPUT_SET|GPIO_PORTA|GPIO_PIN11)
 
+#define GPIO_HEATER_OFF (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN14)
+
+#define GPIO_PC14 (GPIO_INPUT|GPIO_CNF_INFLOAT|GPIO_MODE_INPUT|GPIO_PORTC|GPIO_PIN14)
+#define GPIO_PC15 (GPIO_INPUT|GPIO_CNF_INFLOAT|GPIO_MODE_INPUT|GPIO_PORTC|GPIO_PIN15)
+
+/*  PixHawk 1:
+ *      PC14 Floating
+ *      PC15 Floating
+ *
+ *  PixHawk 2:
+ *      PC14 3.3v
+ *      PC15 GND
+ */
+
+#define GPIO_SENSE_PC14_DN (GPIO_INPUT|GPIO_CNF_INPULLDWN|GPIO_MODE_INPUT|GPIO_PORTC|GPIO_PIN14)
+#define GPIO_SENSE_PC15_UP (GPIO_INPUT|GPIO_CNF_INPULLUP|GPIO_MODE_INPUT|GPIO_PORTC|GPIO_PIN15)
+# define SENSE_PH1 0b10 /* Floating pulled as set */
+# define SENSE_PH2 0b01 /* Driven as tied */
+
+#define GPIO_HEATER_OFF (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN14)
+
 #define GPIO_USART1_RX_SPEKTRUM		(GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|GPIO_OUTPUT_SET|GPIO_PORTA|GPIO_PIN10)
 
 /* Safety switch button *******************************************************/
diff --git a/boards/px4/io-v2/src/init.c b/boards/px4/io-v2/src/init.c
index f7ba363580..4d064e5b13 100644
--- a/boards/px4/io-v2/src/init.c
+++ b/boards/px4/io-v2/src/init.c
@@ -86,12 +86,36 @@ __EXPORT void stm32_boardinitialize(void)
 
 	/* configure GPIOs */
 
+	/* Set up for sensing HW */
+
+	stm32_configgpio(GPIO_SENSE_PC14_DN);
+	stm32_configgpio(GPIO_SENSE_PC15_UP);
+
 	/* LEDS - default to off */
 	stm32_configgpio(GPIO_LED1);
 	stm32_configgpio(GPIO_LED2);
 	stm32_configgpio(GPIO_LED3);
 	stm32_configgpio(GPIO_LED4);
 
+	/*  PixHawk 1:
+	 *      PC14 Floating
+	 *      PC15 Floating
+	 *
+	 *  PixHawk 2:
+	 *      PC14 3.3v
+	 *      PC15 GND
+	 */
+
+	uint8_t sense = stm32_gpioread(GPIO_SENSE_PC15_UP) << 1  | stm32_gpioread(GPIO_SENSE_PC14_DN);
+
+	if (sense == SENSE_PH2) {
+		stm32_configgpio(GPIO_HEATER_OFF);
+	}
+
+	stm32_configgpio(GPIO_PC14);
+	stm32_configgpio(GPIO_PC15);
+
+
 	stm32_configgpio(GPIO_BTN_SAFETY);
 
 	/* spektrum power enable is active high - enable it by default */
-- 
GitLab