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 */