diff --git a/boards/modalai/fc-v1/init/rc.board_sensors b/boards/modalai/fc-v1/init/rc.board_sensors index 802beb66d24..67c7b987e97 100644 --- a/boards/modalai/fc-v1/init/rc.board_sensors +++ b/boards/modalai/fc-v1/init/rc.board_sensors @@ -28,3 +28,6 @@ qmc5883 -X start # Internal I2C Baro bmp388 -I start + +# External RM3100 (I2C or SPI) +rm3100 start diff --git a/boards/modalai/fc-v1/src/board_config.h b/boards/modalai/fc-v1/src/board_config.h index 17617859231..d7d0f13d701 100644 --- a/boards/modalai/fc-v1/src/board_config.h +++ b/boards/modalai/fc-v1/src/board_config.h @@ -277,11 +277,6 @@ #define DIRECT_PWM_OUTPUT_CHANNELS 8 #define DIRECT_INPUT_TIMER_CHANNELS 8 -/* Power supply control and monitoring GPIOs */ - -#define BOARD_NUMBER_BRICKS 0 -#define BOARD_NUMBER_DIGITAL_BRICKS 0 - #define GPIO_CAN1_SILENT /* PI11 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTI|GPIO_PIN11) #define GPIO_VDD_3V3_SPEKTRUM_POWER_EN /* PH2 */ (GPIO_OUTPUT|GPIO_PUSHPULL|GPIO_SPEED_2MHz|GPIO_OUTPUT_CLEAR|GPIO_PORTH|GPIO_PIN2) @@ -311,12 +306,10 @@ #define HRT_PPM_CHANNEL /* T8C1 */ 1 /* use capture/compare channel 1 */ #define GPIO_PPM_IN /* PI5 T8C1 */ GPIO_TIM8_CH1IN_2 -#define RC_UXART_BASE STM32_USART6_BASE +/* RC Serial port */ + #define RC_SERIAL_PORT "/dev/ttyS5" -#define BOARD_HAS_SINGLE_WIRE 1 /* HW is capable of Single Wire */ -#define BOARD_HAS_SINGLE_WIRE_ON_TX 0 /* HW default is wired as Single Wire On RX pin */ -#define BOARD_HAS_RX_TX_SWAP 1 /* HW Can swap TX and RX */ -#define RC_SERIAL_PORT_IS_SWAPED 1 /* Board wired with RC's TX is on cpu RX */ +#define RC_SERIAL_SINGLEWIRE /* Safety Switch: Enable the FMU to control it as there is no px4io in ModalAI FC-v1 */ #define GPIO_SAFETY_SWITCH_IN /* PF3 */ (GPIO_INPUT|GPIO_PULLDOWN|GPIO_PORTF|GPIO_PIN3) @@ -365,28 +358,8 @@ /* ModalAI FC-v1 never powers off the Servo rail */ #define BOARD_ADC_SERVO_VALID (1) +#define BOARD_ADC_BRICK_VALID (1) -#if !defined(BOARD_HAS_LTC44XX_VALIDS) || BOARD_HAS_LTC44XX_VALIDS == 0 -# define BOARD_ADC_BRICK1_VALID (1) -# define BOARD_ADC_BRICK2_VALID (0) -#elif BOARD_HAS_LTC44XX_VALIDS == 1 -# define BOARD_ADC_BRICK1_VALID (!px4_arch_gpioread(GPIO_nVDD_BRICK1_VALID)) -# define BOARD_ADC_BRICK2_VALID (0) -#elif BOARD_HAS_LTC44XX_VALIDS == 2 -# define BOARD_ADC_BRICK1_VALID (!px4_arch_gpioread(GPIO_nVDD_BRICK1_VALID)) -# define BOARD_ADC_BRICK2_VALID (!px4_arch_gpioread(GPIO_nVDD_BRICK2_VALID)) -#elif BOARD_HAS_LTC44XX_VALIDS == 3 -# 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_BRICK3_VALID (!px4_arch_gpioread(GPIO_nVDD_BRICK3_VALID)) -#elif BOARD_HAS_LTC44XX_VALIDS == 4 -# 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_BRICK3_VALID (!px4_arch_gpioread(GPIO_nVDD_BRICK3_VALID)) -# define BOARD_ADC_BRICK4_VALID (!px4_arch_gpioread(GPIO_nVDD_BRICK4_VALID)) -#else -# error Unsupported BOARD_HAS_LTC44XX_VALIDS value -#endif #define BOARD_HAS_PWM DIRECT_PWM_OUTPUT_CHANNELS diff --git a/boards/modalai/fc-v1/src/init.c b/boards/modalai/fc-v1/src/init.c index d9a4bc8e8f3..59c9322754c 100644 --- a/boards/modalai/fc-v1/src/init.c +++ b/boards/modalai/fc-v1/src/init.c @@ -56,7 +56,6 @@ #include #include #include -#include #include #include #include @@ -95,51 +94,6 @@ extern void led_off(int led); __END_DECLS -/************************************************************************************ - * Name: board_rc_input - * - * Description: - * All boards my optionally provide this API to invert the Serial RC input. - * This is needed on SoCs that support the notion RXINV or TXINV as apposed to - * and external XOR controlled by a GPIO - * - ************************************************************************************/ - -__EXPORT void board_rc_input(bool invert_on, uint32_t uxart_base) -{ - - irqstate_t irqstate = px4_enter_critical_section(); - - uint32_t cr1 = getreg32(STM32_USART_CR1_OFFSET + uxart_base); - uint32_t cr2 = getreg32(STM32_USART_CR2_OFFSET + uxart_base); - uint32_t regval = cr1; - - /* {R|T}XINV bit fields can only be written when the USART is disabled (UE=0). */ - - regval &= ~USART_CR1_UE; - - putreg32(regval, STM32_USART_CR1_OFFSET + uxart_base); - - if (invert_on) { -#if defined(BOARD_HAS_RX_TX_SWAP) && RC_SERIAL_PORT_IS_SWAPED == 1 - - /* This is only ever turned on */ - - cr2 |= (USART_CR2_RXINV | USART_CR2_TXINV | USART_CR2_SWAP); -#else - cr2 |= (USART_CR2_RXINV | USART_CR2_TXINV); -#endif - - } else { - cr2 &= ~(USART_CR2_RXINV | USART_CR2_TXINV); - } - - putreg32(cr2, STM32_USART_CR2_OFFSET + uxart_base); - putreg32(cr1, STM32_USART_CR1_OFFSET + uxart_base); - - leave_critical_section(irqstate); -} - /************************************************************************************ * Name: board_peripheral_reset * diff --git a/boards/modalai/fc-v1/src/manifest.c b/boards/modalai/fc-v1/src/manifest.c index 26b1e5b34fb..f6d5a960c3a 100644 --- a/boards/modalai/fc-v1/src/manifest.c +++ b/boards/modalai/fc-v1/src/manifest.c @@ -92,21 +92,6 @@ static px4_hw_mft_list_entry_t mft_lists[] = { {0x0100, hw_mft_list_fc0100, arraySize(hw_mft_list_fc0100)} }; - -/************************************************************************************ - * Name: board_rc_input - * - * Description: - * All boards my optionally provide this API to invert the Serial RC input. - * This is needed on SoCs that support the notion RXINV or TXINV as opposed to - * and external XOR controlled by a GPIO - * - ************************************************************************************/ -__EXPORT bool board_supports_single_wire(uint32_t uxart_base) -{ - return uxart_base == RC_UXART_BASE; -} - /************************************************************************************ * Name: board_query_manifest * diff --git a/boards/modalai/fc-v1/src/timer_config.cpp b/boards/modalai/fc-v1/src/timer_config.cpp index 23a4b893bcd..6c3e0de9b7a 100644 --- a/boards/modalai/fc-v1/src/timer_config.cpp +++ b/boards/modalai/fc-v1/src/timer_config.cpp @@ -33,20 +33,33 @@ #include +/* Timer allocation + * + * FMU_CH1 : PE14 : TIM1_CH4 + * FMU_CH2 : PA10 : TIM1_CH3 + * FMU_CH3 : PE11 : TIM1_CH2 + * FMU_CH4 : PA8 : TIM1_CH1 + * FMU_CH5 : PD13 : TIM4_CH2 + * FMU_CH6 : PD14 : TIM4_CH3 + * FMU_CH7 : PD12 : TIM4_CH1 + * FMU_CH8 : PH15 : TIM4_CH4 + */ + constexpr io_timers_t io_timers[MAX_IO_TIMERS] = { initIOTimer(Timer::Timer1, DMA{DMA::Index2, DMA::Stream5, DMA::Channel6}), initIOTimer(Timer::Timer4), }; + constexpr timer_io_channels_t timer_io_channels[MAX_TIMER_IO_CHANNELS] = { - initIOTimerChannel(io_timers, {Timer::Timer4, Timer::Channel4}, {GPIO::PortD, GPIO::Pin15}), - initIOTimerChannel(io_timers, {Timer::Timer4, Timer::Channel1}, {GPIO::PortD, GPIO::Pin12}), - initIOTimerChannel(io_timers, {Timer::Timer4, Timer::Channel3}, {GPIO::PortD, GPIO::Pin14}), - initIOTimerChannel(io_timers, {Timer::Timer4, Timer::Channel2}, {GPIO::PortD, GPIO::Pin13}), - initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel1}, {GPIO::PortA, GPIO::Pin8}), - initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel2}, {GPIO::PortE, GPIO::Pin11}), - initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel3}, {GPIO::PortA, GPIO::Pin10}), initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel4}, {GPIO::PortE, GPIO::Pin14}), + initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel3}, {GPIO::PortA, GPIO::Pin10}), + initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel2}, {GPIO::PortE, GPIO::Pin11}), + initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel1}, {GPIO::PortA, GPIO::Pin8}), + initIOTimerChannel(io_timers, {Timer::Timer4, Timer::Channel2}, {GPIO::PortD, GPIO::Pin13}), + initIOTimerChannel(io_timers, {Timer::Timer4, Timer::Channel3}, {GPIO::PortD, GPIO::Pin14}), + initIOTimerChannel(io_timers, {Timer::Timer4, Timer::Channel1}, {GPIO::PortD, GPIO::Pin12}), + initIOTimerChannel(io_timers, {Timer::Timer4, Timer::Channel4}, {GPIO::PortD, GPIO::Pin15}) }; constexpr io_timers_channel_mapping_t io_timers_channel_mapping =