diff --git a/radio/src/targets/pl18/CMakeLists.txt b/radio/src/targets/pl18/CMakeLists.txt index 25c319f3d..162e1d741 100644 --- a/radio/src/targets/pl18/CMakeLists.txt +++ b/radio/src/targets/pl18/CMakeLists.txt @@ -42,15 +42,15 @@ add_definitions(-DSTM32_SUPPORT_32BIT_TIMERS) if(PCBREV STREQUAL NB4P) set(FLAVOUR nb4p) add_definitions(-DRADIO_NB4P) + set(ROTARY_ENCODER YES) elseif(PCBREV STREQUAL PL18EV) set(FLAVOUR pl18ev) - add_definitions(-DRADIO_PL18EV) + add_definitions(-DRADIO_PL18EV -DUSE_HATS_AS_KEYS) set(WIRELESS_CHARGER YES) set(FLYSKY_GIMBAL ON) - set(ROTARY_ENCODER YES) else() set(FLAVOUR pl18) - add_definitions(-DRADIO_PL18) + add_definitions(-DRADIO_PL18 -DUSE_HATS_AS_KEYS) set(WIRELESS_CHARGER YES) set(FLYSKY_GIMBAL ON) @@ -74,7 +74,7 @@ add_definitions( -DSTM32F429_439xx -DSTM32F429xx -DSDRAM -DCOLORLCD -DLIBOPENUI -DHARDWARE_TOUCH -DHARDWARE_KEYS - -DSOFTWARE_KEYBOARD -DUSE_HATS_AS_KEYS) + -DSOFTWARE_KEYBOARD) set(SDRAM ON) @@ -124,6 +124,12 @@ set(BOARD_COMMON_SRC drivers/frftl.cpp ) +if(ROTARY_ENCODER) + list(APPEND BOARD_COMMON_SRC + targets/common/arm/stm32/rotary_encoder_driver.cpp + ) +endif() + # Bootloader board library add_library(board_bl OBJECT EXCLUDE_FROM_ALL ${BOARD_COMMON_SRC} diff --git a/radio/src/targets/pl18/board.cpp b/radio/src/targets/pl18/board.cpp index 2ff18226d..4aa518931 100644 --- a/radio/src/targets/pl18/board.cpp +++ b/radio/src/targets/pl18/board.cpp @@ -36,6 +36,7 @@ #include "hal/watchdog_driver.h" #include "hal/usb_driver.h" #include "hal/gpio.h" +#include "hal/rotary_encoder.h" #include "globals.h" #include "sdcard.h" @@ -164,6 +165,9 @@ void boardInit() keysInit(); switchInit(); +#if defined(ROTARY_ENCODER_NAVIGATION) && !defined(USE_HATS_AS_KEYS) + rotaryEncoderInit(); +#endif #if defined(RADIO_NB4P) disableVoiceChip(); #endif diff --git a/radio/src/targets/pl18/bootloader/boot_menu.cpp b/radio/src/targets/pl18/bootloader/boot_menu.cpp index ec169a7ad..74b431c6e 100644 --- a/radio/src/targets/pl18/bootloader/boot_menu.cpp +++ b/radio/src/targets/pl18/bootloader/boot_menu.cpp @@ -56,7 +56,9 @@ extern BitmapBuffer * lcd; void bootloaderInitScreen() { lcdInitDisplayDriver(); +#if defined(USE_HATS_AS_KEYS) setHatsAsKeys(true); +#endif } static void bootloaderDrawTitle(const char* text) diff --git a/radio/src/targets/pl18/hal.h b/radio/src/targets/pl18/hal.h index 088f1121c..fdcc35d27 100644 --- a/radio/src/targets/pl18/hal.h +++ b/radio/src/targets/pl18/hal.h @@ -473,10 +473,9 @@ #if defined(RADIO_NB4P) // Rotary Encoder -#define ROTARY_ENCODER_RCC_APB1Periph RCC_APB1Periph_TIM12 #define ROTARY_ENCODER_GPIO GPIOH -#define ROTARY_ENCODER_GPIO_PIN_A GPIO_Pin_11 // PH.11 -#define ROTARY_ENCODER_GPIO_PIN_B GPIO_Pin_10 // PH.10 +#define ROTARY_ENCODER_GPIO_PIN_A LL_GPIO_PIN_11 // PH.11 +#define ROTARY_ENCODER_GPIO_PIN_B LL_GPIO_PIN_10 // PH.10 #define ROTARY_ENCODER_POSITION() ((ROTARY_ENCODER_GPIO->IDR >> 10) & 0x03) #define ROTARY_ENCODER_EXTI_LINE1 LL_EXTI_LINE_11 #define ROTARY_ENCODER_EXTI_LINE2 LL_EXTI_LINE_10 @@ -487,11 +486,9 @@ #define ROTARY_ENCODER_EXTI_PORT LL_SYSCFG_EXTI_PORTH #define ROTARY_ENCODER_EXTI_SYS_LINE1 LL_SYSCFG_EXTI_LINE11 #define ROTARY_ENCODER_EXTI_SYS_LINE2 LL_SYSCFG_EXTI_LINE10 -#define ROTARY_ENCODER_TIMER TIM12 -#define ROTARY_ENCODER_TIMER_IRQn TIM8_BRK_TIM12_IRQn -#define ROTARY_ENCODER_TIMER_IRQHandler TIM8_BRK_TIM12_IRQHandler -#else -#define ROTARY_ENCODER_RCC_APB1Periph 0 +#define ROTARY_ENCODER_TIMER TIM13 +#define ROTARY_ENCODER_TIMER_IRQn TIM8_UP_TIM13_IRQn +#define ROTARY_ENCODER_TIMER_IRQHandler TIM8_UP_TIM13_IRQHandler #endif // SPI NOR Flash @@ -644,8 +641,13 @@ #define EXTMODULE_RX_GPIO_AF_USART GPIO_AF_USART6 #define EXTMODULE_TIMER TIM8 #define EXTMODULE_TIMER_Channel LL_TIM_CHANNEL_CH1 +#if defined(RADIO_NB4P) +#define EXTMODULE_TIMER_IRQn TIM5_IRQn +#define EXTMODULE_TIMER_IRQHandler TIM5_IRQHandler +#else #define EXTMODULE_TIMER_IRQn TIM8_UP_TIM13_IRQn #define EXTMODULE_TIMER_IRQHandler TIM8_UP_TIM13_IRQHandler +#endif #define EXTMODULE_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) #define EXTMODULE_TIMER_TX_GPIO_AF LL_GPIO_AF_3 //USART