text: /****************************************************************************
   *
   *   Copyright (c) 2020 PX4 Development Team. All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   * 3. Neither the name PX4 nor the names of its contributors may be
   *    used to endorse or promote products derived from this software
   *    without specific prior written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
   * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
   * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
   * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
   * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
   * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
   * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   * POSSIBILITY OF SUCH DAMAGE.
   *
   ****************************************************************************/
  
  /**
   * @file board_config.h
   *
   * Board internal definitions
   */
  
  #pragma once
  
  #include <px4_platform_common/px4_config.h>
  #include <nuttx/compiler.h>
  #include <stdint.h>
  #include <stm32_gpio.h>
  
  /* PX4IO connection configuration */
  #define BOARD_USES_PX4IO_VERSION       2
  #define PX4IO_SERIAL_DEVICE            "/dev/ttyS3"
  #define PX4IO_SERIAL_TX_GPIO           GPIO_USART6_TX
  #define PX4IO_SERIAL_RX_GPIO           GPIO_USART6_RX
  #define PX4IO_SERIAL_BASE              STM32_USART6_BASE
  #define PX4IO_SERIAL_VECTOR            STM32_IRQ_USART6
  #define PX4IO_SERIAL_TX_DMAMAP         DMAMAP_USART6_TX
  #define PX4IO_SERIAL_RX_DMAMAP         DMAMAP_USART6_RX
  #define PX4IO_SERIAL_RCC_REG           STM32_RCC_APB2ENR
  #define PX4IO_SERIAL_RCC_EN            RCC_APB2ENR_USART6EN
  #define PX4IO_SERIAL_CLOCK             STM32_PCLK2_FREQUENCY
  #define PX4IO_SERIAL_BITRATE           1500000               /* 1.5Mbps -> max rate for IO */
  
  /* LEDs */
  #define GPIO_nLED_AMBER        /* PE12 */  (GPIO_OUTPUT|GPIO_OPENDRAIN|GPIO_SPEED_50MHz|GPIO_OUTPUT_SET|GPIO_PORTE|GPIO_PIN12)
  
  #define BOARD_HAS_CONTROL_STATUS_LEDS      1
  #define BOARD_ARMED_STATE_LED  LED_AMBER
  
  /* ADC channels */
  #define PX4_ADC_GPIO  \
  	/* PA2 */  GPIO_ADC12_INP14,  \
  	/* PA3 */  GPIO_ADC12_INP15,  \
  	/* PA4 */  GPIO_ADC12_INP18,  \
  	/* PC3 */  GPIO_ADC12_INP13,  \
  	/* PC4 */  GPIO_ADC12_INP4,   \
  	/* PC5 */  GPIO_ADC12_INP8
  
  /* Define Channel numbers must match above GPIO pins */
  #define ADC_BATTERY1_VOLTAGE_CHANNEL        14 /* PA2: BATT_VOLTAGE_SENS */
  #define ADC_BATTERY1_CURRENT_CHANNEL        15 /* PA3: BATT_CURRENT_SENS */
  #define ADC_SCALED_V5_CHANNEL               18 /* PA4: VDD_5V_SENS */
  #define ADC_BATTERY2_VOLTAGE_CHANNEL        13 /* PC3: FMU_AUX_POWER_ADC1 */
  #define ADC_BATTERY2_CURRENT_CHANNEL         4 /* PC4: FMU_AUX_ADC2 */
  #define ADC_AIRSPEED_VOLTAGE_CHANNEL         8 /* PC5: PRESSURE_SENS */
  
  #define ADC_CHANNELS \
  	((1 << ADC_BATTERY1_VOLTAGE_CHANNEL)       | \
  	 (1 << ADC_BATTERY1_CURRENT_CHANNEL)       | \
  	 (1 << ADC_SCALED_V5_CHANNEL)              | \
  	 (1 << ADC_BATTERY2_VOLTAGE_CHANNEL)       | \
  	 (1 << ADC_BATTERY2_CURRENT_CHANNEL)       | \
  	 (1 << ADC_AIRSPEED_VOLTAGE_CHANNEL))
  
  /* HW has to large of R termination on ADC todo:change when HW value is chosen */
  #define BOARD_ADC_OPEN_CIRCUIT_V     (5.6f)
  
  /* PWM */
  #define DIRECT_PWM_OUTPUT_CHANNELS  6
  #define GPIO_PWM_VOLT_SEL    /* PB4  */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN4)
  
  /* Power supply control and monitoring GPIOs */
  #define BOARD_NUMBER_BRICKS             2
  #define GPIO_nVDD_BRICK1_VALID          /* PB5  */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTB|GPIO_PIN5) // VDD_BRICK_VALID
  #define GPIO_nVDD_BRICK2_VALID          /* PB7  */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTB|GPIO_PIN7) // VDD_BACKUP_VALID
  #define GPIO_nVDD_USB_VALID             /* PC0  */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTC|GPIO_PIN0) // VBUS_VALID
  #define GPIO_VDD_3V3_SENSORS_EN         /* PE3  */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTE|GPIO_PIN3) // VDD_3V3_SENSORS_EN
  #define GPIO_nVDD_5V_PERIPH_EN          /* PA8  */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_SET|GPIO_PORTA|GPIO_PIN8) // VDD_5V_PERIPH_EN
  #define GPIO_nVDD_5V_PERIPH_OC          /* PE15 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTE|GPIO_PIN15) // VDD_5V_PERIPH_OC
  #define GPIO_nVDD_5V_HIPOWER_OC         /* PE10 */ (GPIO_INPUT|GPIO_PULLUP|GPIO_PORTE|GPIO_PIN10) // VDD_5V_HIPOWER_OC
  
  /* Tone alarm output */
  #define TONE_ALARM_TIMER        2  /* timer 2 */
  #define TONE_ALARM_CHANNEL      1  /* PA15 TIM2_CH1 */
  
  #define GPIO_BUZZER_1           /* PA15 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN15) // ALARM
  
  #define GPIO_TONE_ALARM_IDLE    GPIO_BUZZER_1
  #define GPIO_TONE_ALARM         GPIO_TIM2_CH1OUT_2
  
  /* USB
   *  OTG FS: PA9  OTG_FS_VBUS VBUS sensing
   */
  #define GPIO_OTGFS_VBUS         /* PA9 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_SPEED_100MHz|GPIO_PORTA|GPIO_PIN9)
  
  /* High-resolution timer */
  #define HRT_TIMER               8  /* use timer8 for the HRT */
  #define HRT_TIMER_CHANNEL       3  /* use capture/compare channel 3 */
  
  /* By Providing BOARD_ADC_USB_CONNECTED (using the px4_arch abstraction)
   * this board support the ADC system_power interface, and therefore
   * provides the true logic GPIO BOARD_ADC_xxxx macros.
   */
  #define BOARD_ADC_USB_CONNECTED (px4_arch_gpioread(GPIO_OTGFS_VBUS))
  #define BOARD_ADC_USB_VALID     (!px4_arch_gpioread(GPIO_nVDD_USB_VALID))
  #define BOARD_ADC_BRICK1_VALID  (!px4_arch_gpioread(GPIO_nVDD_BRICK1_VALID))
  #define BOARD_ADC_BRICK2_VALID  (!px4_arch_gpioread(GPIO_nVDD_BRICK2_VALID))
  #define BOARD_ADC_PERIPH_5V_OC  (!px4_arch_gpioread(GPIO_nVDD_5V_PERIPH_OC))
  #define BOARD_ADC_HIPOWER_5V_OC (!px4_arch_gpioread(GPIO_nVDD_5V_HIPOWER_OC))
  
  /* This board provides a DMA pool and APIs */
  #define BOARD_DMA_ALLOC_POOL_SIZE 5120
  
  /* This board provides the board_on_reset interface */
  #define BOARD_HAS_ON_RESET 1
  
  #define BOARD_HAS_STATIC_MANIFEST 1
  
  #define BOARD_HAS_PWM  DIRECT_PWM_OUTPUT_CHANNELS
  
  #define BOARD_DSHOT_MOTOR_ASSIGNMENT {3, 2, 1, 0, 4, 5};
  
  #define BOARD_ENABLE_CONSOLE_BUFFER
  
  #define PX4_GPIO_INIT_LIST { \
  		PX4_ADC_GPIO,                     \
  		GPIO_CAN1_TX,                     \
  		GPIO_CAN1_RX,                     \
  		GPIO_CAN2_TX,                     \
  		GPIO_CAN2_RX,                     \
  		GPIO_PWM_VOLT_SEL,                \
  		GPIO_nVDD_BRICK1_VALID,           \
  		GPIO_nVDD_BRICK1_VALID,           \
  		GPIO_nVDD_USB_VALID,              \
  		GPIO_VDD_3V3_SENSORS_EN,          \
  		GPIO_nVDD_5V_PERIPH_EN,           \
  		GPIO_nVDD_5V_PERIPH_OC,           \
  		GPIO_nVDD_5V_HIPOWER_OC,          \
  		PX4_GPIO_PIN_OFF(GPIO_SDMMC1_D0), \
  		PX4_GPIO_PIN_OFF(GPIO_SDMMC1_D1), \
  		PX4_GPIO_PIN_OFF(GPIO_SDMMC1_D2), \
  		PX4_GPIO_PIN_OFF(GPIO_SDMMC1_D3), \
  		PX4_GPIO_PIN_OFF(GPIO_SDMMC1_CMD),\
  		GPIO_TONE_ALARM_IDLE,             \
  		GPIO_OTGFS_VBUS,                  \
  	}
  
  __BEGIN_DECLS
  #ifndef __ASSEMBLY__
  
  extern void stm32_spiinitialize(void);
  extern void board_peripheral_reset(int ms);
  
  #include <px4_platform_common/board_common.h>
  #endif /* __ASSEMBLY__ */
  __END_DECLS
  