diff --git a/cmake/Macros.cmake b/cmake/Macros.cmake index d116cf2f868..2e781b93feb 100644 --- a/cmake/Macros.cmake +++ b/cmake/Macros.cmake @@ -130,6 +130,8 @@ function(AddHWGenTarget input template output) COMMAND ${GEN_JSON} > ${output} DEPENDS ${INPUT_JSON} ${TEMPLATE} ${GEN_PY_DEPS} ${CMAKE_BINARY_DIR}/CMakeCache.txt ) + + add_custom_target(${template} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${output}) endfunction() macro(AddHeadersSources) diff --git a/companion/src/firmwares/boardjson.cpp b/companion/src/firmwares/boardjson.cpp index ea02fb2f9e2..b2e62f9db8a 100644 --- a/companion/src/firmwares/boardjson.cpp +++ b/companion/src/firmwares/boardjson.cpp @@ -1226,32 +1226,39 @@ bool BoardJson::loadFile(Board::Type board, QString hwdefn, InputsTable * inputs if (obj.value("display").isObject()) { const QJsonObject &o = obj.value("display").toObject(); - display.w = o.value("w").toInt(); - display.h = o.value("h").toInt(); - display.phys_w = o.value("phys_w").toInt(); - display.phys_h = o.value("phys_h").toInt(); - display.depth = o.value("depth").toInt(); - display.color = o.value("color").toInt(); - display.oled = o.value("oled").toInt(); - display.backlight_color = o.value("backlight_color").toInt(); + display.w = o.value("lcd_w").toInt(); + display.h = o.value("lcd_h").toInt(); + display.phys_w = o.value("lcd_phys_w").toInt(); + display.phys_h = o.value("lcd_phys_h").toInt(); + display.depth = o.value("lcd_depth").toInt(); + display.color = display.depth == 16 ? 1 : 0; + display.oled = o.value("oled_screen").toBool(); } - if (obj.value("custom_switches").isObject()) { - const QJsonObject &o = obj.value("custom_switches").toObject(); + if (obj.value("backlight").isObject()) { + const QJsonObject &o = obj.value("backlight").toObject(); - cfs.rgb_led = o.value("rgb_led").toInt(); - cfs.groups = o.value("groups").toInt(); + display.backlight_color = o.value("has_backlight_color").toBool(); + } + + if (obj.value("leds").isObject()) { + const QJsonObject &o = obj.value("leds").toObject(); + + int cfs_led_strip_length = o.value("cfs_led_strip_length").toInt(); + int cfs_leds_per_switch = o.value("cfs_leds_per_switch").toInt(); + cfs.groups = cfs_leds_per_switch ? cfs_led_strip_length / (2 * cfs_leds_per_switch) : 0; + cfs.rgb_led = cfs.groups > 0; + hardware.has_bling_leds = o.value("bling_led_strip_length").toInt(); } if (obj.value("hardware").isObject()) { const QJsonObject &o = obj.value("hardware").toObject(); - hardware.has_audio_mute = o.value("has_audio_mute").toInt(); - hardware.has_bling_leds = o.value("has_bling_leds").toInt(); - hardware.has_ext_module_support = o.value("has_ext_module_support").toInt(); - hardware.has_int_module_support = o.value("has_int_module_support").toInt(); + hardware.has_audio_mute = o.value("has_audio_mute").toBool(); + hardware.has_ext_module_support = o.value("has_ext_module_support").toBool(); + hardware.has_int_module_support = o.value("has_int_module_support").toBool(); hardware.sport_max_baudrate = o.value("sport_max_baudrate").toInt(); - hardware.surface = o.value("surface").toInt(); + hardware.surface = o.value("surface").toBool(); hardware.cpu = o.value("cpu").toString().toStdString(); hardware.cpu_type = o.value("cpu_type").toString().toStdString(); } diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 8c66a614752..d38b54e9fa9 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -124,6 +124,29 @@ add_definitions( set(HW_DESC_JSON ${FLAVOUR}.json) +# Generate files from radio JSON +AddHWGenTarget(${HW_DESC_JSON} hal_settings hal_settings.h) + +AddHWGenTarget(${HW_DESC_JSON} hal_keys hal_keys.inc) +AddHWGenTarget(${HW_DESC_JSON} hal_adc_inputs hal_adc_inputs.inc) + +AddHWGenTarget(${HW_DESC_JSON} yaml_inputs yaml_inputs.inc) + +AddHWGenTarget(${HW_DESC_JSON} lua_inputs lua_inputs.inc) +AddHWGenTarget(${HW_DESC_JSON} lua_mixsrc lua_mixsrc.inc) +AddHWGenTarget(${HW_DESC_JSON} lua_keys lua_keys.inc) + +AddHWGenTarget(${HW_DESC_JSON} stm32_keys stm32_keys.inc) +AddHWGenTarget(${HW_DESC_JSON} stm32_switches stm32_switches.inc) +AddHWGenTarget(${HW_DESC_JSON} stm32_adc_inputs stm32_adc_inputs.inc) +AddHWGenTarget(${HW_DESC_JSON} stm32_pwm_inputs stm32_pwm_inputs.inc) + +AddHWGenTarget(${HW_DESC_JSON} simu_keys simu_keys.inc) +AddHWGenTarget(${HW_DESC_JSON} simu_switches simu_switches.inc) + +add_dependencies(board hal_settings hal_keys hal_adc_inputs stm32_keys stm32_switches stm32_adc_inputs stm32_pwm_inputs yaml_inputs lua_inputs lua_mixsrc lua_keys) +add_dependencies(board_bl hal_settings hal_keys stm32_keys) + include(hal/CMakeLists.txt) add_subdirectory(bitmaps) diff --git a/radio/src/boards/generic_stm32/CMakeLists.txt b/radio/src/boards/generic_stm32/CMakeLists.txt index e5c3dd01553..67c3a70c00f 100644 --- a/radio/src/boards/generic_stm32/CMakeLists.txt +++ b/radio/src/boards/generic_stm32/CMakeLists.txt @@ -1,16 +1,6 @@ -# Generate hardware struct defs -AddHWGenTarget(${HW_DESC_JSON} stm32_keys stm32_keys.inc) -AddHWGenTarget(${HW_DESC_JSON} stm32_switches stm32_switches.inc) -AddHWGenTarget(${HW_DESC_JSON} stm32_adc_inputs stm32_adc_inputs.inc) -AddHWGenTarget(${HW_DESC_JSON} stm32_pwm_inputs stm32_pwm_inputs.inc) -AddHWGenTarget(${HW_DESC_JSON} hal_adc_inputs hal_adc_inputs.inc) - # Dependencies common to bootloader and firmware set(MINIMAL_BOARD_LIB_SRC - ${RADIO_SRC_DIR}/boards/hw_defs/${HW_DESC_JSON} - ${CMAKE_CURRENT_BINARY_DIR}/stm32_keys.inc - boards/generic_stm32/inputs.cpp boards/generic_stm32/i2c_bus.cpp boards/generic_stm32/bl_keys.cpp @@ -19,11 +9,6 @@ set(MINIMAL_BOARD_LIB_SRC # Dependencies only used in firmware set(BOARD_LIB_SRC - ${CMAKE_CURRENT_BINARY_DIR}/stm32_switches.inc - ${CMAKE_CURRENT_BINARY_DIR}/stm32_adc_inputs.inc - ${CMAKE_CURRENT_BINARY_DIR}/stm32_pwm_inputs.inc - ${CMAKE_CURRENT_BINARY_DIR}/hal_adc_inputs.inc - boards/generic_stm32/module_ports.cpp boards/generic_stm32/trainer_ports.cpp boards/generic_stm32/sport_update.cpp @@ -38,6 +23,7 @@ set(BOARD_LIB_SRC ) add_library(minimal_board_lib OBJECT EXCLUDE_FROM_ALL ${MINIMAL_BOARD_LIB_SRC}) +add_dependencies(minimal_board_lib stm32_keys) add_library(board_lib OBJECT EXCLUDE_FROM_ALL ${BOARD_LIB_SRC}) add_dependencies(board_lib minimal_board_lib) diff --git a/radio/src/boards/hw_defs/boxer.json b/radio/src/boards/hw_defs/boxer.json index c632f83d5e2..578c5d531de 100644 --- a/radio/src/boards/hw_defs/boxer.json +++ b/radio/src/boards/hw_defs/boxer.json @@ -307,27 +307,52 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 0, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "lcd_vertical_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_bdtr": "TIM_BDTR_MOE" + }, + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 13)", + "led_green_gpio": "GPIO_PIN(GPIOA, 7)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 2)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F407xG", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 3)", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer": "TIM2", + "haptic_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "haptic_counter_register": "HAPTIC_TIMER->CCR2", + "haptic_ccmr1": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_ccer": "TIM_CCER_CC2E" } } diff --git a/radio/src/boards/hw_defs/bumblebee.json b/radio/src/boards/hw_defs/bumblebee.json index 7040bf08d1b..e552ec0daeb 100644 --- a/radio/src/boards/hw_defs/bumblebee.json +++ b/radio/src/boards/hw_defs/bumblebee.json @@ -376,27 +376,54 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 1, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "oled_screen": true, + "lcd_horizontal_invert": true, + "lcd_vertical_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 3 + "backlight": { + "backlight_bdtr": "TIM_BDTR_MOE" + }, + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOC, 5)", + "led_green_gpio": "GPIO_PIN(GPIOG, 1)", + "led_blue_gpio": "GPIO_PIN(GPIOC, 4)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F407xG", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 3)", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer": "TIM2", + "haptic_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "haptic_counter_register": "HAPTIC_TIMER->CCR2", + "haptic_ccmr1": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_ccer": "TIM_CCER_CC2E" } } diff --git a/radio/src/boards/hw_defs/commando8.json b/radio/src/boards/hw_defs/commando8.json index 132c798a334..4b38465b24f 100644 --- a/radio/src/boards/hw_defs/commando8.json +++ b/radio/src/boards/hw_defs/commando8.json @@ -256,27 +256,49 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 0, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "lcd_vertical_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOC, 2)", + "led_green_gpio": "GPIO_PIN(GPIOC, 0)", + "led_blue_gpio": "GPIO_PIN(GPIOC, 1)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F407xE", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 8)", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer": "TIM10", + "haptic_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "haptic_counter_register": "HAPTIC_TIMER->CCR1", + "haptic_ccmr1": "TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2", + "haptic_ccer": "TIM_CCER_CC1E" } } diff --git a/radio/src/boards/hw_defs/el18.json b/radio/src/boards/hw_defs/el18.json index b853a0598ef..87c4d55e060 100644 --- a/radio/src/boards/hw_defs/el18.json +++ b/radio/src/boards/hw_defs/el18.json @@ -321,27 +321,49 @@ } ], "display": { - "w": 320, - "h": 480, - "phys_w": 320, - "phys_h": 480, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 320, + "lcd_h": 480, + "lcd_phys_w": 320, + "lcd_phys_h": 480, + "lcd_depth": 16, + "ltdc_irq_prio": 4, + "dma_screen_irq_prio": 6 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_gpio": "GPIO_PIN(GPIOA, 15)", + "backlight_timer": "TIM2", + "backlight_gpio_af": "GPIO_AF1", + "backlight_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F429xI", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOA, 8)", + "haptic_gpio_timer": "TIM1", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer_output_enable": "TIM_CCER_CC1E | TIM_CCER_CC1NE", + "haptic_timer_mode": "TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1PE", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR1" } } diff --git a/radio/src/boards/hw_defs/f16.json b/radio/src/boards/hw_defs/f16.json index ee4dc9dca63..ae80ad34e0d 100644 --- a/radio/src/boards/hw_defs/f16.json +++ b/radio/src/boards/hw_defs/f16.json @@ -415,27 +415,50 @@ } ], "display": { - "w": 480, - "h": 272, - "phys_w": 480, - "phys_h": 272, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 480, + "lcd_h": 272, + "lcd_phys_w": 480, + "lcd_phys_h": 272, + "lcd_depth": 16, + "lcd_vertical_invert": true, + "ltdc_irq_prio": 4, + "dma_screen_irq_prio": 6 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 2)", + "led_green_gpio": "GPIO_PIN(GPIOE, 4)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 5)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F429xI", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM13", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_UP_TIM13_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_UP_TIM13_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOE, 6)", + "haptic_gpio_timer": "TIM9", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer_output_enable": "TIM_CCER_CC2E", + "haptic_timer_mode": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR2" } } diff --git a/radio/src/boards/hw_defs/gx12.json b/radio/src/boards/hw_defs/gx12.json index db423db05f5..95e5dfa7c2c 100644 --- a/radio/src/boards/hw_defs/gx12.json +++ b/radio/src/boards/hw_defs/gx12.json @@ -417,27 +417,70 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 1, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "oled_screen": true, + "lcd_horizontal_invert": true }, - "custom_switches": { - "rgb_led": 1, - "groups": 4 + "backlight": { + "backlight_bdtr": "TIM_BDTR_MOE" + }, + "leds": { + "led_strip_length": 8, + "bling_led_strip_start": 0, + "bling_led_strip_length": 0, + "cfs_led_strip_start": 0, + "cfs_led_strip_length": 8, + "cfs_leds_per_switch": 1, + "led_strip_gpio": "GPIO_PIN(GPIOA, 8)", + "led_strip_gpio_af": "LL_GPIO_AF_1", + "led_strip_timer": "TIM1", + "led_strip_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "led_strip_timer_channel": "LL_TIM_CHANNEL_CH1", + "led_strip_timer_dma": "DMA2", + "led_strip_timer_dma_channel": "LL_DMA_CHANNEL_6", + "led_strip_timer_dma_stream": "LL_DMA_STREAM_5", + "led_strip_timer_dma_irqn": "DMA2_Stream5_IRQn", + "led_strip_timer_dma_irqhandler": "DMA2_Stream5_IRQHandler", + "led_strip_refresh_period": 50, + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 13)", + "led_green_gpio": "GPIO_PIN(GPIOA, 7)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 2)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F407xG", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 3)", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer": "TIM2", + "haptic_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "haptic_counter_register": "HAPTIC_TIMER->CCR2", + "haptic_ccmr1": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_ccer": "TIM_CCER_CC2E" } } diff --git a/radio/src/boards/hw_defs/lr3pro.json b/radio/src/boards/hw_defs/lr3pro.json index 9991bacf54d..12ae15c6b02 100644 --- a/radio/src/boards/hw_defs/lr3pro.json +++ b/radio/src/boards/hw_defs/lr3pro.json @@ -236,27 +236,51 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 1, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "oled_screen": true, + "lcd_horizontal_invert": true, + "lcd_vertical_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOC, 5)", + "led_green_gpio": "GPIO_PIN(GPIOC, 4)", + "led_blue_gpio": "GPIO_PIN(GPIOB, 1)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F205xE", "cpu_type": "STM32F2" + }, + "timers": { + "cpu_freq": 120000000, + "peri1_frequency": 30000000, + "peri2_frequency": 60000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 8)", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer": "TIM10", + "haptic_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "haptic_counter_register": "HAPTIC_TIMER->CCR1", + "haptic_ccmr1": "TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2", + "haptic_ccer": "TIM_CCER_CC1E" } } diff --git a/radio/src/boards/hw_defs/mt12.json b/radio/src/boards/hw_defs/mt12.json index 6b9d001e687..05c1264f95c 100644 --- a/radio/src/boards/hw_defs/mt12.json +++ b/radio/src/boards/hw_defs/mt12.json @@ -285,27 +285,67 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 0, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "lcd_vertical_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_bdtr": "TIM_BDTR_MOE" + }, + "leds": { + "led_strip_length": 7, + "bling_led_strip_start": 0, + "bling_led_strip_length": 7, + "led_strip_gpio": "GPIO_PIN(GPIOA, 8)", + "led_strip_gpio_af": "LL_GPIO_AF_1", + "led_strip_timer": "TIM1", + "led_strip_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "led_strip_timer_channel": "LL_TIM_CHANNEL_CH1", + "led_strip_timer_dma": "DMA2", + "led_strip_timer_dma_channel": "LL_DMA_CHANNEL_6", + "led_strip_timer_dma_stream": "LL_DMA_STREAM_5", + "led_strip_timer_dma_irqn": "DMA2_Stream5_IRQn", + "led_strip_timer_dma_irqhandler": "DMA2_Stream5_IRQHandler", + "led_strip_refresh_period": 50, + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 13)", + "led_green_gpio": "GPIO_PIN(GPIOA, 7)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 2)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 7, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 1, + "surface": true, "cpu": "STM32F407xG", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 3)", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer": "TIM2", + "haptic_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "haptic_counter_register": "HAPTIC_TIMER->CCR2", + "haptic_ccmr1": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_ccer": "TIM_CCER_CC2E" } } diff --git a/radio/src/boards/hw_defs/nb4p.json b/radio/src/boards/hw_defs/nb4p.json index 17d7a725c5a..0c47b12de6c 100644 --- a/radio/src/boards/hw_defs/nb4p.json +++ b/radio/src/boards/hw_defs/nb4p.json @@ -148,27 +148,86 @@ } ], "display": { - "w": 320, - "h": 480, - "phys_w": 320, - "phys_h": 480, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 320, + "lcd_h": 480, + "lcd_phys_w": 320, + "lcd_phys_h": 480, + "lcd_depth": 16, + "ltdc_irq_prio": 4, + "dma_screen_irq_prio": 6 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_gpio": "GPIO_PIN(GPIOA, 15)", + "backlight_timer": "TIM2", + "backlight_gpio_af": "GPIO_AF1", + "backlight_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)" + }, + "leds": { + "led_strip_length": 4, + "bling_led_strip_start": 0, + "bling_led_strip_length": 4, + "led_strip_gpio": "GPIO_PIN(GPIOH, 12)", + "led_strip_gpio_af": "LL_GPIO_AF_2", + "led_strip_timer": "TIM5", + "led_strip_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "led_strip_timer_channel": "LL_TIM_CHANNEL_CH3", + "led_strip_timer_dma": "DMA1", + "led_strip_timer_dma_channel": "LL_DMA_CHANNEL_6", + "led_strip_timer_dma_stream": "LL_DMA_STREAM_0", + "led_strip_timer_dma_irqn": "DMA1_Stream0_IRQn", + "led_strip_timer_dma_irqhandler": "DMA1_Stream0_IRQHandler", + "led_strip_refresh_period": 50, + "status_leds": true }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 4, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F429xI", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "rotenc": { + "rotary_encoder_gpio": "GPIOH", + "rotary_encoder_gpio_pin_a": "LL_GPIO_PIN_11", + "rotary_encoder_gpio_pin_b": "LL_GPIO_PIN_10", + "rotary_encoder_position": "((ROTARY_ENCODER_GPIO->IDR >> 10) & 0x03)", + "rotary_encoder_exti_line1": "LL_EXTI_LINE_11", + "rotary_encoder_exti_line2": "LL_EXTI_LINE_10", + "exti": [ + { + "irq": "EXTI15_10_IRQ", + "priority": 5 + } + ], + "rotary_encoder_exti_port": "LL_SYSCFG_EXTI_PORTH", + "rotary_encoder_exti_sys_line1": "LL_SYSCFG_EXTI_LINE11", + "rotary_encoder_exti_sys_line2": "LL_SYSCFG_EXTI_LINE10", + "rotary_encoder_timer": "TIM13", + "rotary_encoder_timer_irqn": "TIM8_UP_TIM13_IRQn", + "rotary_encoder_timer_irqhandler": "TIM8_UP_TIM13_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 0)", + "haptic_gpio_timer": "TIM1", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer_output_enable": "TIM_CCER_CC2NE", + "haptic_timer_mode": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2PE", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR2" } } diff --git a/radio/src/boards/hw_defs/nv14.json b/radio/src/boards/hw_defs/nv14.json index f7ed73bf164..62008f88035 100644 --- a/radio/src/boards/hw_defs/nv14.json +++ b/radio/src/boards/hw_defs/nv14.json @@ -321,27 +321,49 @@ } ], "display": { - "w": 320, - "h": 480, - "phys_w": 320, - "phys_h": 480, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 320, + "lcd_h": 480, + "lcd_phys_w": 320, + "lcd_phys_h": 480, + "lcd_depth": 16, + "ltdc_irq_prio": 4, + "dma_screen_irq_prio": 6 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_gpio": "GPIO_PIN(GPIOA, 15)", + "backlight_timer": "TIM2", + "backlight_gpio_af": "GPIO_AF1", + "backlight_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F429xI", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOA, 8)", + "haptic_gpio_timer": "TIM1", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer_output_enable": "TIM_CCER_CC1E | TIM_CCER_CC1NE", + "haptic_timer_mode": "TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1PE", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR1" } } diff --git a/radio/src/boards/hw_defs/pa01.json b/radio/src/boards/hw_defs/pa01.json index f6b9563b761..3af341b024b 100644 --- a/radio/src/boards/hw_defs/pa01.json +++ b/radio/src/boards/hw_defs/pa01.json @@ -284,27 +284,88 @@ } ], "display": { - "w": 320, - "h": 240, - "phys_w": 320, - "phys_h": 240, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 320, + "lcd_h": 240, + "lcd_phys_w": 320, + "lcd_phys_h": 240, + "lcd_depth": 16 }, - "custom_switches": { - "rgb_led": 1, - "groups": 2 + "backlight": { + "backlight_gpio": "GPIO_PIN(GPIOB, 3)", + "backlight_timer": "TIM2", + "backlight_gpio_af": "GPIO_AF1", + "backlight_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)" + }, + "leds": { + "led_strip_length": 14, + "bling_led_strip_start": 10, + "bling_led_strip_length": 4, + "cfs_led_strip_start": 0, + "cfs_led_strip_length": 8, + "cfs_leds_per_switch": 2, + "led_strip_gpio": "GPIO_PIN(GPIOF, 6)", + "led_strip_gpio_af": "LL_GPIO_AF_1", + "led_strip_timer": "TIM16", + "led_strip_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "led_strip_timer_channel": "LL_TIM_CHANNEL_CH1", + "led_strip_timer_dma": "DMA1", + "led_strip_timer_dma_channel": "LL_DMAMUX1_REQ_TIM16_UP", + "led_strip_timer_dma_stream": "LL_DMA_STREAM_0", + "led_strip_timer_dma_irqn": "DMA1_Stream0_IRQn", + "led_strip_timer_dma_irqhandler": "DMA1_Stream0_IRQHandler", + "led_strip_refresh_period": 50, + "status_leds": true }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 4, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32H750xB", "cpu_type": "STM32H7" + }, + "timers": { + "cpu_freq": 400000000, + "peri1_frequency": 100000000, + "peri2_frequency": 100000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "imu": { + "imu_i2c_bus": "I2C_Bus_2", + "imu_i2c_address": "0x6A" + }, + "rotenc": { + "rotary_encoder_gpio": "GPIOA", + "rotary_encoder_gpio_pin_a": "LL_GPIO_PIN_6", + "rotary_encoder_gpio_pin_b": "LL_GPIO_PIN_7", + "rotary_encoder_position": "((ROTARY_ENCODER_GPIO->IDR >> 6) & 0x03)", + "rotary_encoder_exti_line1": "LL_EXTI_LINE_6", + "rotary_encoder_exti_line2": "LL_EXTI_LINE_7", + "exti": [ + { + "irq": "EXTI9_5_IRQ", + "priority": 5 + } + ], + "rotary_encoder_exti_port": "LL_SYSCFG_EXTI_PORTA", + "rotary_encoder_exti_sys_line1": "LL_SYSCFG_EXTI_LINE6", + "rotary_encoder_exti_sys_line2": "LL_SYSCFG_EXTI_LINE7", + "rotary_encoder_timer": "TIM17", + "rotary_encoder_timer_irqn": "TIM17_IRQn", + "rotary_encoder_timer_irqhandler": "TIM17_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOA, 15)", + "haptic_gpio_timer": "TIM2", + "haptic_gpio_af": "GPIO_AF1" } } diff --git a/radio/src/boards/hw_defs/pl18.json b/radio/src/boards/hw_defs/pl18.json index 1be590ac6ae..0d3708f261e 100644 --- a/radio/src/boards/hw_defs/pl18.json +++ b/radio/src/boards/hw_defs/pl18.json @@ -292,27 +292,65 @@ } ], "display": { - "w": 480, - "h": 320, - "phys_w": 320, - "phys_h": 480, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 480, + "lcd_h": 320, + "lcd_phys_w": 320, + "lcd_phys_h": 480, + "lcd_depth": 16, + "ltdc_irq_prio": 4, + "dma_screen_irq_prio": 6 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_gpio": "GPIO_PIN(GPIOA, 15)", + "backlight_timer": "TIM2", + "backlight_gpio_af": "GPIO_AF1", + "backlight_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)" + }, + "leds": { + "led_strip_length": 4, + "bling_led_strip_start": 0, + "bling_led_strip_length": 4, + "led_strip_gpio": "GPIO_PIN(GPIOH, 12)", + "led_strip_gpio_af": "LL_GPIO_AF_2", + "led_strip_timer": "TIM5", + "led_strip_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "led_strip_timer_channel": "LL_TIM_CHANNEL_CH3", + "led_strip_timer_dma": "DMA1", + "led_strip_timer_dma_channel": "LL_DMA_CHANNEL_6", + "led_strip_timer_dma_stream": "LL_DMA_STREAM_0", + "led_strip_timer_dma_irqn": "DMA1_Stream0_IRQn", + "led_strip_timer_dma_irqhandler": "DMA1_Stream0_IRQHandler", + "led_strip_refresh_period": 50, + "status_leds": true }, "hardware": { - "has_audio_mute": 0, - "has_bling_leds": 4, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F429xI", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOA, 8)", + "haptic_gpio_timer": "TIM1", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer_output_enable": "TIM_CCER_CC1E | TIM_CCER_CC1NE", + "haptic_timer_mode": "TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1PE", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR1" } } diff --git a/radio/src/boards/hw_defs/pl18ev.json b/radio/src/boards/hw_defs/pl18ev.json index 3b735b429e0..9a3a9b2b993 100644 --- a/radio/src/boards/hw_defs/pl18ev.json +++ b/radio/src/boards/hw_defs/pl18ev.json @@ -336,27 +336,65 @@ } ], "display": { - "w": 480, - "h": 320, - "phys_w": 320, - "phys_h": 480, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 480, + "lcd_h": 320, + "lcd_phys_w": 320, + "lcd_phys_h": 480, + "lcd_depth": 16, + "ltdc_irq_prio": 4, + "dma_screen_irq_prio": 6 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_gpio": "GPIO_PIN(GPIOA, 15)", + "backlight_timer": "TIM2", + "backlight_gpio_af": "GPIO_AF1", + "backlight_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)" + }, + "leds": { + "led_strip_length": 4, + "bling_led_strip_start": 0, + "bling_led_strip_length": 4, + "led_strip_gpio": "GPIO_PIN(GPIOH, 12)", + "led_strip_gpio_af": "LL_GPIO_AF_2", + "led_strip_timer": "TIM5", + "led_strip_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "led_strip_timer_channel": "LL_TIM_CHANNEL_CH3", + "led_strip_timer_dma": "DMA1", + "led_strip_timer_dma_channel": "LL_DMA_CHANNEL_6", + "led_strip_timer_dma_stream": "LL_DMA_STREAM_0", + "led_strip_timer_dma_irqn": "DMA1_Stream0_IRQn", + "led_strip_timer_dma_irqhandler": "DMA1_Stream0_IRQHandler", + "led_strip_refresh_period": 50, + "status_leds": true }, "hardware": { - "has_audio_mute": 0, - "has_bling_leds": 4, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F429xI", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOA, 8)", + "haptic_gpio_timer": "TIM1", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer_output_enable": "TIM_CCER_CC1E | TIM_CCER_CC1NE", + "haptic_timer_mode": "TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1PE", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR1" } } diff --git a/radio/src/boards/hw_defs/pl18u.json b/radio/src/boards/hw_defs/pl18u.json index 90817a7b144..7171cbbc124 100644 --- a/radio/src/boards/hw_defs/pl18u.json +++ b/radio/src/boards/hw_defs/pl18u.json @@ -307,27 +307,66 @@ } ], "display": { - "w": 480, - "h": 320, - "phys_w": 320, - "phys_h": 480, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 480, + "lcd_h": 320, + "lcd_phys_w": 320, + "lcd_phys_h": 480, + "lcd_depth": 16, + "ltdc_irq_prio": 4, + "dma_screen_irq_prio": 6 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_gpio": "GPIO_PIN(GPIOA, 15)", + "backlight_timer": "TIM2", + "backlight_gpio_af": "GPIO_AF1", + "backlight_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)" + }, + "leds": { + "led_strip_length": 4, + "bling_led_strip_start": 0, + "bling_led_strip_length": 4, + "led_strip_gpio": "GPIO_PIN(GPIOH, 12)", + "led_strip_gpio_af": "LL_GPIO_AF_2", + "led_strip_timer": "TIM5", + "led_strip_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "led_strip_timer_channel": "LL_TIM_CHANNEL_CH3", + "led_strip_timer_dma": "DMA1", + "led_strip_timer_dma_channel": "LL_DMA_CHANNEL_6", + "led_strip_timer_dma_stream": "LL_DMA_STREAM_0", + "led_strip_timer_dma_irqn": "DMA1_Stream0_IRQn", + "led_strip_timer_dma_irqhandler": "DMA1_Stream0_IRQHandler", + "led_strip_refresh_period": 50, + "status_leds": true }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 4, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F429xI", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOA, 8)", + "haptic_gpio_timer": "TIM1", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer_output_enable": "TIM_CCER_CC1E | TIM_CCER_CC1NE", + "haptic_timer_mode": "TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1PE", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR1" } } diff --git a/radio/src/boards/hw_defs/pocket.json b/radio/src/boards/hw_defs/pocket.json index f965d84be6a..f74a509a813 100644 --- a/radio/src/boards/hw_defs/pocket.json +++ b/radio/src/boards/hw_defs/pocket.json @@ -270,27 +270,52 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 0, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "lcd_vertical_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_bdtr": "TIM_BDTR_MOE" + }, + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 13)", + "led_green_gpio": "GPIO_PIN(GPIOE, 2)", + "led_blue_gpio": "GPIO_PIN(GPIOA, 7)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F407xE", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 3)", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer": "TIM2", + "haptic_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "haptic_counter_register": "HAPTIC_TIMER->CCR2", + "haptic_ccmr1": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_ccer": "TIM_CCER_CC2E" } } diff --git a/radio/src/boards/hw_defs/st16.json b/radio/src/boards/hw_defs/st16.json index 05b8cafaa9a..b705dd88d04 100644 --- a/radio/src/boards/hw_defs/st16.json +++ b/radio/src/boards/hw_defs/st16.json @@ -384,27 +384,98 @@ } ], "display": { - "w": 480, - "h": 320, - "phys_w": 320, - "phys_h": 480, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 480, + "lcd_h": 320, + "lcd_phys_w": 320, + "lcd_phys_h": 480, + "lcd_depth": 16, + "ltdc_irq_prio": 4, + "dma_screen_irq_prio": 6 }, - "custom_switches": { - "rgb_led": 1, - "groups": 3 + "backlight": { + "backlight_gpio": "GPIO_PIN(GPIOC, 6)", + "backlight_timer": "TIM3", + "backlight_gpio_af": "GPIO_AF2", + "backlight_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)" + }, + "leds": { + "led_strip_length": 24, + "bling_led_strip_start": 0, + "bling_led_strip_length": 12, + "cfs_led_strip_start": 12, + "cfs_led_strip_length": 12, + "cfs_leds_per_switch": 2, + "led_strip_gpio": "GPIO_PIN(GPIOA, 15)", + "led_strip_gpio_af": "LL_GPIO_AF_1", + "led_strip_timer": "TIM2", + "led_strip_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "led_strip_timer_channel": "LL_TIM_CHANNEL_CH1", + "led_strip_timer_dma": "DMA1", + "led_strip_timer_dma_channel": "LL_DMAMUX1_REQ_TIM2_UP", + "led_strip_timer_dma_stream": "LL_DMA_STREAM_0", + "led_strip_timer_dma_irqn": "DMA1_Stream0_IRQn", + "led_strip_timer_dma_irqhandler": "DMA1_Stream0_IRQHandler", + "led_strip_refresh_period": 50, + "status_leds": true }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 12, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32H750xB", "cpu_type": "STM32H7" + }, + "timers": { + "cpu_freq": 400000000, + "peri1_frequency": 100000000, + "peri2_frequency": 100000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "imu": { + "imu_i2c_bus": "I2C_Bus_1", + "imu_i2c_address": "0x6A" + }, + "rotenc": { + "rotary_encoder_inverted": true, + "rotary_encoder_gpio": "GPIOG", + "rotary_encoder_gpio_pin_a": "LL_GPIO_PIN_2", + "rotary_encoder_gpio_pin_b": "LL_GPIO_PIN_3", + "rotary_encoder_position": "((ROTARY_ENCODER_GPIO->IDR >> 2) & 0x03)", + "rotary_encoder_exti_line1": "LL_EXTI_LINE_2", + "rotary_encoder_exti_line2": "LL_EXTI_LINE_3", + "exti": [ + { + "irq": "EXTI2_IRQ", + "priority": 5 + }, + { + "irq": "EXTI3_IRQ", + "priority": 5 + } + ], + "rotary_encoder_exti_port": "LL_SYSCFG_EXTI_PORTG", + "rotary_encoder_exti_sys_line1": "LL_SYSCFG_EXTI_LINE2", + "rotary_encoder_exti_sys_line2": "LL_SYSCFG_EXTI_LINE3", + "rotary_encoder_timer": "TIM17", + "rotary_encoder_timer_irqn": "TIM17_IRQn", + "rotary_encoder_timer_irqhandler": "TIM17_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 5)", + "haptic_gpio_timer": "TIM3", + "haptic_gpio_af": "GPIO_AF2", + "haptic_timer_output_enable": "TIM_CCER_CC2E | TIM_CCER_CC2NE", + "haptic_timer_mode": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2PE", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR2" } } diff --git a/radio/src/boards/hw_defs/t12.json b/radio/src/boards/hw_defs/t12.json index 85e3a903e71..ee2ceb1ad2c 100644 --- a/radio/src/boards/hw_defs/t12.json +++ b/radio/src/boards/hw_defs/t12.json @@ -312,27 +312,49 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 0, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "lcd_vertical_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOC, 5)", + "led_green_gpio": "GPIO_PIN(GPIOC, 4)", + "led_blue_gpio": "GPIO_PIN(GPIOB, 1)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F205xE", "cpu_type": "STM32F2" + }, + "timers": { + "cpu_freq": 120000000, + "peri1_frequency": 30000000, + "peri2_frequency": 60000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 8)", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer": "TIM10", + "haptic_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "haptic_counter_register": "HAPTIC_TIMER->CCR1", + "haptic_ccmr1": "TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2", + "haptic_ccer": "TIM_CCER_CC1E" } } diff --git a/radio/src/boards/hw_defs/t12max.json b/radio/src/boards/hw_defs/t12max.json index 575854e0b4f..e0a3146237f 100644 --- a/radio/src/boards/hw_defs/t12max.json +++ b/radio/src/boards/hw_defs/t12max.json @@ -270,27 +270,52 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 0, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "lcd_vertical_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_bdtr": "TIM_BDTR_MOE" + }, + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 2)", + "led_green_gpio": "GPIO_PIN(GPIOA, 7)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 13)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F407xG", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 3)", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer": "TIM2", + "haptic_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "haptic_counter_register": "HAPTIC_TIMER->CCR2", + "haptic_ccmr1": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_ccer": "TIM_CCER_CC2E" } } diff --git a/radio/src/boards/hw_defs/t14.json b/radio/src/boards/hw_defs/t14.json index 1c82eff9155..2600c553d9c 100644 --- a/radio/src/boards/hw_defs/t14.json +++ b/radio/src/boards/hw_defs/t14.json @@ -270,27 +270,67 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 1, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "oled_screen": true, + "lcd_horizontal_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_bdtr": "TIM_BDTR_MOE" + }, + "leds": { + "led_strip_length": 1, + "bling_led_strip_start": 0, + "bling_led_strip_length": 1, + "led_strip_gpio": "GPIO_PIN(GPIOA, 10)", + "led_strip_gpio_af": "LL_GPIO_AF_1", + "led_strip_timer": "TIM1", + "led_strip_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "led_strip_timer_channel": "LL_TIM_CHANNEL_CH3", + "led_strip_timer_dma": "DMA2", + "led_strip_timer_dma_channel": "LL_DMA_CHANNEL_6", + "led_strip_timer_dma_stream": "LL_DMA_STREAM_5", + "led_strip_timer_dma_irqn": "DMA2_Stream5_IRQn", + "led_strip_timer_dma_irqhandler": "DMA2_Stream5_IRQHandler", + "led_strip_refresh_period": 50, + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 2)", + "led_green_gpio": "GPIO_PIN(GPIOA, 7)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 13)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 1, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F407xG", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 3)", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer": "TIM2", + "haptic_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "haptic_counter_register": "HAPTIC_TIMER->CCR2", + "haptic_ccmr1": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_ccer": "TIM_CCER_CC2E" } } diff --git a/radio/src/boards/hw_defs/t15.json b/radio/src/boards/hw_defs/t15.json index 8640d9f9296..c85848bec1a 100644 --- a/radio/src/boards/hw_defs/t15.json +++ b/radio/src/boards/hw_defs/t15.json @@ -350,27 +350,49 @@ } ], "display": { - "w": 480, - "h": 320, - "phys_w": 480, - "phys_h": 320, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 480, + "lcd_h": 320, + "lcd_phys_w": 480, + "lcd_phys_h": 320, + "lcd_depth": 16, + "ltdc_irq_prio": 4, + "dma_screen_irq_prio": 6 }, - "custom_switches": { - "rgb_led": 0, - "groups": 3 + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOI, 14)", + "led_green_gpio": "GPIO_PIN(GPIOC, 13)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 3)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F429xI", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM13", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_UP_TIM13_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_UP_TIM13_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOA, 5)", + "haptic_gpio_timer": "TIM2", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer_output_enable": "TIM_CCER_CC1E | TIM_CCER_CC1NE", + "haptic_timer_mode": "TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1PE", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR1" } } diff --git a/radio/src/boards/hw_defs/t15pro.json b/radio/src/boards/hw_defs/t15pro.json index e259a1699e8..eec54138819 100644 --- a/radio/src/boards/hw_defs/t15pro.json +++ b/radio/src/boards/hw_defs/t15pro.json @@ -354,27 +354,95 @@ } ], "display": { - "w": 480, - "h": 320, - "phys_w": 480, - "phys_h": 320, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 480, + "lcd_h": 320, + "lcd_phys_w": 480, + "lcd_phys_h": 320, + "lcd_depth": 16, + "ltdc_irq_prio": 4, + "dma_screen_irq_prio": 6 }, - "custom_switches": { - "rgb_led": 1, - "groups": 3 + "backlight": { + "backlight_gpio": "GPIO_PIN(GPIOA, 5)", + "backlight_timer": "TIM2", + "backlight_timer_channel": "LL_TIM_CHANNEL_CH1", + "backlight_gpio_af": "GPIO_AF1", + "backlight_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)" + }, + "leds": { + "led_strip_length": 7, + "bling_led_strip_start": 6, + "bling_led_strip_length": 1, + "cfs_led_strip_start": 0, + "cfs_led_strip_length": 6, + "cfs_leds_per_switch": 1, + "led_strip_gpio": "GPIO_PIN(GPIOA, 10)", + "led_strip_gpio_af": "LL_GPIO_AF_1", + "led_strip_timer": "TIM1", + "led_strip_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "led_strip_timer_channel": "LL_TIM_CHANNEL_CH3", + "led_strip_timer_dma": "DMA1", + "led_strip_timer_dma_channel": "LL_DMAMUX1_REQ_TIM1_UP", + "led_strip_timer_dma_stream": "LL_DMA_STREAM_0", + "led_strip_timer_dma_irqn": "DMA1_Stream0_IRQn", + "led_strip_timer_dma_irqhandler": "DMA1_Stream0_IRQHandler", + "led_strip_refresh_period": 50, + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOA, 8)", + "led_green_gpio": "GPIO_PIN(GPIOJ, 13)", + "led_blue_gpio": "GPIO_PIN(GPIOG, 7)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 1, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32H750xB", "cpu_type": "STM32H7" + }, + "timers": { + "cpu_freq": 480000000, + "peri1_frequency": 120000000, + "peri2_frequency": 120000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "rotenc": { + "rotary_encoder_gpio_a": "GPIOA", + "rotary_encoder_gpio_pin_a": "LL_GPIO_PIN_6", + "rotary_encoder_gpio_b": "GPIOA", + "rotary_encoder_gpio_pin_b": "LL_GPIO_PIN_7", + "rotary_encoder_position": "(((ROTARY_ENCODER_GPIO_A->IDR >> 6) & 0x01)|((ROTARY_ENCODER_GPIO_B->IDR >> 6) & 0x02))", + "rotary_encoder_exti_line1": "LL_EXTI_LINE_6", + "rotary_encoder_exti_line2": "LL_EXTI_LINE_7", + "exti": [ + { + "irq": "EXTI9_5_IRQ", + "priority": 9 + } + ], + "rotary_encoder_exti_port_a": "LL_SYSCFG_EXTI_PORTA", + "rotary_encoder_exti_port_b": "LL_SYSCFG_EXTI_PORTA", + "rotary_encoder_exti_sys_line1": "LL_SYSCFG_EXTI_LINE6", + "rotary_encoder_exti_sys_line2": "LL_SYSCFG_EXTI_LINE7", + "rotary_encoder_timer": "TIM17", + "rotary_encoder_timer_irqn": "TIM17_IRQn", + "rotary_encoder_timer_irqhandler": "TIM17_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOE, 6)", + "haptic_gpio_timer": "TIM15", + "haptic_gpio_af": "GPIO_AF4", + "haptic_timer_output_enable": "TIM_CCER_CC2E | TIM_CCER_CC2NE", + "haptic_timer_mode": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2PE", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR2" } } diff --git a/radio/src/boards/hw_defs/t16.json b/radio/src/boards/hw_defs/t16.json index ad6b59bbc40..d57a5eb7fb4 100644 --- a/radio/src/boards/hw_defs/t16.json +++ b/radio/src/boards/hw_defs/t16.json @@ -429,27 +429,50 @@ } ], "display": { - "w": 480, - "h": 272, - "phys_w": 480, - "phys_h": 272, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 480, + "lcd_h": 272, + "lcd_phys_w": 480, + "lcd_phys_h": 272, + "lcd_depth": 16, + "lcd_vertical_invert": true, + "ltdc_irq_prio": 4, + "dma_screen_irq_prio": 6 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 2)", + "led_green_gpio": "GPIO_PIN(GPIOE, 4)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 5)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F429xI", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM13", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_UP_TIM13_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_UP_TIM13_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOE, 6)", + "haptic_gpio_timer": "TIM9", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer_output_enable": "TIM_CCER_CC2E", + "haptic_timer_mode": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR2" } } diff --git a/radio/src/boards/hw_defs/t18.json b/radio/src/boards/hw_defs/t18.json index 436a336f76c..031d372eb64 100644 --- a/radio/src/boards/hw_defs/t18.json +++ b/radio/src/boards/hw_defs/t18.json @@ -431,27 +431,49 @@ } ], "display": { - "w": 480, - "h": 272, - "phys_w": 480, - "phys_h": 272, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 480, + "lcd_h": 272, + "lcd_phys_w": 480, + "lcd_phys_h": 272, + "lcd_depth": 16, + "ltdc_irq_prio": 4, + "dma_screen_irq_prio": 6 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 2)", + "led_green_gpio": "GPIO_PIN(GPIOE, 4)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 5)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F429xI", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM13", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_UP_TIM13_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_UP_TIM13_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOE, 6)", + "haptic_gpio_timer": "TIM9", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer_output_enable": "TIM_CCER_CC2E", + "haptic_timer_mode": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR2" } } diff --git a/radio/src/boards/hw_defs/t20.json b/radio/src/boards/hw_defs/t20.json index 485d7d64e1b..74f20a25024 100644 --- a/radio/src/boards/hw_defs/t20.json +++ b/radio/src/boards/hw_defs/t20.json @@ -509,27 +509,51 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 1, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "oled_screen": true, + "lcd_horizontal_invert": true, + "lcd_vertical_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 3 + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOC, 5)", + "led_green_gpio": "GPIO_PIN(GPIOG, 1)", + "led_blue_gpio": "GPIO_PIN(GPIOC, 4)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F407xE", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 8)", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer": "TIM10", + "haptic_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "haptic_counter_register": "HAPTIC_TIMER->CCR1", + "haptic_ccmr1": "TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2", + "haptic_ccer": "TIM_CCER_CC1E" } } diff --git a/radio/src/boards/hw_defs/t20v2.json b/radio/src/boards/hw_defs/t20v2.json index 0cd2f349ac3..b6c26181795 100644 --- a/radio/src/boards/hw_defs/t20v2.json +++ b/radio/src/boards/hw_defs/t20v2.json @@ -509,27 +509,54 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 1, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "oled_screen": true, + "lcd_horizontal_invert": true, + "lcd_vertical_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 3 + "backlight": { + "backlight_bdtr": "TIM_BDTR_MOE" + }, + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOC, 5)", + "led_green_gpio": "GPIO_PIN(GPIOG, 1)", + "led_blue_gpio": "GPIO_PIN(GPIOC, 4)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F407xG", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 3)", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer": "TIM2", + "haptic_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "haptic_counter_register": "HAPTIC_TIMER->CCR2", + "haptic_ccmr1": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_ccer": "TIM_CCER_CC2E" } } diff --git a/radio/src/boards/hw_defs/t22.json b/radio/src/boards/hw_defs/t22.json index be41fffa575..d089261c862 100644 --- a/radio/src/boards/hw_defs/t22.json +++ b/radio/src/boards/hw_defs/t22.json @@ -463,27 +463,87 @@ } ], "display": { - "w": 480, - "h": 320, - "phys_w": 320, - "phys_h": 480, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 480, + "lcd_h": 320, + "lcd_phys_w": 320, + "lcd_phys_h": 480, + "lcd_depth": 16 }, - "custom_switches": { - "rgb_led": 1, - "groups": 3 + "leds": { + "led_strip_length": 7, + "bling_led_strip_start": 6, + "bling_led_strip_length": 1, + "cfs_led_strip_start": 0, + "cfs_led_strip_length": 6, + "cfs_leds_per_switch": 1, + "led_strip_gpio": "GPIO_PIN(GPIOA, 10)", + "led_strip_gpio_af": "LL_GPIO_AF_1", + "led_strip_timer": "TIM1", + "led_strip_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "led_strip_timer_channel": "LL_TIM_CHANNEL_CH3", + "led_strip_timer_dma": "DMA1", + "led_strip_timer_dma_channel": "LL_DMAMUX1_REQ_TIM1_UP", + "led_strip_timer_dma_stream": "LL_DMA_STREAM_0", + "led_strip_timer_dma_irqn": "DMA1_Stream0_IRQn", + "led_strip_timer_dma_irqhandler": "DMA1_Stream0_IRQHandler", + "led_strip_refresh_period": 50, + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOB, 15)", + "led_red2_gpio": "GPIO_PIN(GPIOJ, 12)", + "led_green_gpio": "GPIO_PIN(GPIOB, 13)", + "led_blue_gpio": "GPIO_PIN(GPIOB, 12)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 1, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32H750xB", "cpu_type": "STM32H7" + }, + "timers": { + "cpu_freq": 480000000, + "peri1_frequency": 120000000, + "peri2_frequency": 120000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "rotenc": { + "rotary_encoder_gpio_a": "GPIOA", + "rotary_encoder_gpio_pin_a": "LL_GPIO_PIN_6", + "rotary_encoder_gpio_b": "GPIOA", + "rotary_encoder_gpio_pin_b": "LL_GPIO_PIN_7", + "rotary_encoder_position": "(((ROTARY_ENCODER_GPIO_A->IDR >> 6) & 0x01)|((ROTARY_ENCODER_GPIO_B->IDR >> 6) & 0x02))", + "rotary_encoder_exti_line1": "LL_EXTI_LINE_6", + "rotary_encoder_exti_line2": "LL_EXTI_LINE_7", + "exti": [ + { + "irq": "EXTI9_5_IRQ", + "priority": 9 + } + ], + "rotary_encoder_exti_port_a": "LL_SYSCFG_EXTI_PORTA", + "rotary_encoder_exti_port_b": "LL_SYSCFG_EXTI_PORTA", + "rotary_encoder_exti_sys_line1": "LL_SYSCFG_EXTI_LINE6", + "rotary_encoder_exti_sys_line2": "LL_SYSCFG_EXTI_LINE7", + "rotary_encoder_timer": "TIM17", + "rotary_encoder_timer_irqn": "TIM17_IRQn", + "rotary_encoder_timer_irqhandler": "TIM17_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOE, 6)", + "haptic_gpio_timer": "TIM15", + "haptic_gpio_af": "GPIO_AF4", + "haptic_timer_output_enable": "TIM_CCER_CC2E | TIM_CCER_CC2NE", + "haptic_timer_mode": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2PE", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR2" } } diff --git a/radio/src/boards/hw_defs/t8.json b/radio/src/boards/hw_defs/t8.json index 3489f713c45..f9daf48f79f 100644 --- a/radio/src/boards/hw_defs/t8.json +++ b/radio/src/boards/hw_defs/t8.json @@ -252,27 +252,48 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 0, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "lcd_vertical_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOC, 4)", + "led_green_gpio": "GPIO_PIN(GPIOB, 1)", + "led_blue_gpio": "GPIO_PIN(GPIOC, 5)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 0, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F205xE", "cpu_type": "STM32F2" + }, + "timers": { + "cpu_freq": 120000000, + "peri1_frequency": 30000000, + "peri2_frequency": 60000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 8)", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer": "TIM10", + "haptic_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "haptic_counter_register": "HAPTIC_TIMER->CCR1", + "haptic_ccmr1": "TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2", + "haptic_ccer": "TIM_CCER_CC1E" } } diff --git a/radio/src/boards/hw_defs/tlite.json b/radio/src/boards/hw_defs/tlite.json index 0f40cfc9388..112b10f4104 100644 --- a/radio/src/boards/hw_defs/tlite.json +++ b/radio/src/boards/hw_defs/tlite.json @@ -236,27 +236,49 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 0, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "lcd_vertical_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOC, 5)", + "led_green_gpio": "GPIO_PIN(GPIOB, 1)", + "led_blue_gpio": "GPIO_PIN(GPIOC, 4)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F205xE", "cpu_type": "STM32F2" + }, + "timers": { + "cpu_freq": 120000000, + "peri1_frequency": 30000000, + "peri2_frequency": 60000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 8)", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer": "TIM10", + "haptic_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "haptic_counter_register": "HAPTIC_TIMER->CCR1", + "haptic_ccmr1": "TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2", + "haptic_ccer": "TIM_CCER_CC1E" } } diff --git a/radio/src/boards/hw_defs/tpro.json b/radio/src/boards/hw_defs/tpro.json index bb88c752a29..5a75748bf39 100644 --- a/radio/src/boards/hw_defs/tpro.json +++ b/radio/src/boards/hw_defs/tpro.json @@ -342,27 +342,49 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 0, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "lcd_vertical_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 3 + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOC, 5)", + "led_green_gpio": "GPIO_PIN(GPIOB, 1)", + "led_blue_gpio": "GPIO_PIN(GPIOC, 4)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F205xE", "cpu_type": "STM32F2" + }, + "timers": { + "cpu_freq": 120000000, + "peri1_frequency": 30000000, + "peri2_frequency": 60000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 8)", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer": "TIM10", + "haptic_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "haptic_counter_register": "HAPTIC_TIMER->CCR1", + "haptic_ccmr1": "TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2", + "haptic_ccer": "TIM_CCER_CC1E" } } diff --git a/radio/src/boards/hw_defs/tpros.json b/radio/src/boards/hw_defs/tpros.json index 02e15a693ac..e5633eb992d 100644 --- a/radio/src/boards/hw_defs/tpros.json +++ b/radio/src/boards/hw_defs/tpros.json @@ -270,27 +270,54 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 1, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "oled_screen": true, + "lcd_horizontal_invert": true, + "lcd_vertical_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_bdtr": "TIM_BDTR_MOE" + }, + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 2)", + "led_green_gpio": "GPIO_PIN(GPIOA, 7)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 13)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F407xG", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 3)", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer": "TIM2", + "haptic_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "haptic_counter_register": "HAPTIC_TIMER->CCR2", + "haptic_ccmr1": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_ccer": "TIM_CCER_CC2E" } } diff --git a/radio/src/boards/hw_defs/tprov2.json b/radio/src/boards/hw_defs/tprov2.json index 2473a3b1daf..c17afc30ef9 100644 --- a/radio/src/boards/hw_defs/tprov2.json +++ b/radio/src/boards/hw_defs/tprov2.json @@ -370,27 +370,51 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 1, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "oled_screen": true, + "lcd_horizontal_invert": true, + "lcd_vertical_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 3 + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOC, 5)", + "led_green_gpio": "GPIO_PIN(GPIOB, 1)", + "led_blue_gpio": "GPIO_PIN(GPIOC, 4)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F407xE", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 8)", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer": "TIM10", + "haptic_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "haptic_counter_register": "HAPTIC_TIMER->CCR1", + "haptic_ccmr1": "TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2", + "haptic_ccer": "TIM_CCER_CC1E" } } diff --git a/radio/src/boards/hw_defs/tx12.json b/radio/src/boards/hw_defs/tx12.json index 287b88c9b36..dd3b474a8f3 100644 --- a/radio/src/boards/hw_defs/tx12.json +++ b/radio/src/boards/hw_defs/tx12.json @@ -322,27 +322,49 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 0, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "lcd_vertical_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOC, 5)", + "led_green_gpio": "GPIO_PIN(GPIOB, 1)", + "led_blue_gpio": "GPIO_PIN(GPIOC, 4)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F205xE", "cpu_type": "STM32F2" + }, + "timers": { + "cpu_freq": 120000000, + "peri1_frequency": 30000000, + "peri2_frequency": 60000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 8)", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer": "TIM10", + "haptic_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "haptic_counter_register": "HAPTIC_TIMER->CCR1", + "haptic_ccmr1": "TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2", + "haptic_ccer": "TIM_CCER_CC1E" } } diff --git a/radio/src/boards/hw_defs/tx12mk2.json b/radio/src/boards/hw_defs/tx12mk2.json index 308933a179d..63f23e4fc40 100644 --- a/radio/src/boards/hw_defs/tx12mk2.json +++ b/radio/src/boards/hw_defs/tx12mk2.json @@ -299,27 +299,52 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 0, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "lcd_vertical_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_bdtr": "TIM_BDTR_MOE" + }, + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 13)", + "led_green_gpio": "GPIO_PIN(GPIOA, 7)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 2)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F407xE", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 3)", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer": "TIM2", + "haptic_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "haptic_counter_register": "HAPTIC_TIMER->CCR2", + "haptic_ccmr1": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_ccer": "TIM_CCER_CC2E" } } diff --git a/radio/src/boards/hw_defs/tx15.json b/radio/src/boards/hw_defs/tx15.json index 11ce991a384..cd035f662bd 100644 --- a/radio/src/boards/hw_defs/tx15.json +++ b/radio/src/boards/hw_defs/tx15.json @@ -324,27 +324,111 @@ } ], "display": { - "w": 480, - "h": 320, - "phys_w": 320, - "phys_h": 480, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 480, + "lcd_h": 320, + "lcd_phys_w": 320, + "lcd_phys_h": 480, + "lcd_depth": 16, + "ltdc_irq_prio": 4, + "dma_screen_irq_prio": 6 }, - "custom_switches": { - "rgb_led": 1, - "groups": 3 + "backlight": { + "backlight_gpio": "GPIO_PIN(GPIOA, 10)", + "backlight_timer": "TIM1", + "backlight_timer_channel": "LL_TIM_CHANNEL_CH3", + "backlight_gpio_af": "GPIO_AF1", + "backlight_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)" + }, + "leds": { + "led_strip_length": 26, + "bling_led_strip_start": 6, + "bling_led_strip_length": 20, + "cfs_led_strip_start": 0, + "cfs_led_strip_length": 6, + "cfs_leds_per_switch": 1, + "led_strip_gpio": "GPIO_PIN(GPIOA, 0)", + "led_strip_gpio_af": "LL_GPIO_AF_1", + "led_strip_timer": "TIM2", + "led_strip_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "led_strip_timer_channel": "LL_TIM_CHANNEL_CH1", + "led_strip_timer_dma": "DMA1", + "led_strip_timer_dma_channel": "LL_DMAMUX1_REQ_TIM2_UP", + "led_strip_timer_dma_stream": "LL_DMA_STREAM_0", + "led_strip_timer_dma_irqn": "DMA1_Stream0_IRQn", + "led_strip_timer_dma_irqhandler": "DMA1_Stream0_IRQHandler", + "led_strip_refresh_period": 50, + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOI, 8)", + "led_green_gpio": "GPIO_PIN(GPIOI, 11)", + "led_blue_gpio": "GPIO_PIN(GPIOI, 10)" }, "hardware": { - "has_audio_mute": 0, - "has_bling_leds": 20, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32H750xB", "cpu_type": "STM32H7" + }, + "timers": { + "cpu_freq": 480000000, + "peri1_frequency": 120000000, + "peri2_frequency": 120000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "imu": { + "imu_i2c_bus": "I2C_Bus_1", + "imu_int_gpio": "GPIO_PIN(GPIOG, 13)", + "imu_invert_x": true, + "imu_invert_y": true, + "exti": [ + { + "irq": "EXTI15_10_IRQ", + "priority": 6 + } + ] + }, + "rotenc": { + "rotary_encoder_inverted": true, + "rotary_encoder_gpio_a": "GPIOI", + "rotary_encoder_gpio_pin_a": "LL_GPIO_PIN_7", + "rotary_encoder_gpio_b": "GPIOJ", + "rotary_encoder_gpio_pin_b": "LL_GPIO_PIN_8", + "rotary_encoder_position": "(((ROTARY_ENCODER_GPIO_A->IDR >> 7) & 0x01)|((ROTARY_ENCODER_GPIO_B->IDR >> 7) & 0x02))", + "rotary_encoder_exti_line1": "LL_EXTI_LINE_7", + "rotary_encoder_exti_line2": "LL_EXTI_LINE_8", + "exti": [ + { + "irq": "EXTI7_IRQ", + "priority": 5 + }, + { + "irq": "EXTI8_IRQ", + "priority": 5 + } + ], + "rotary_encoder_exti_port_a": "LL_SYSCFG_EXTI_PORTI", + "rotary_encoder_exti_port_b": "LL_SYSCFG_EXTI_PORTJ", + "rotary_encoder_exti_sys_line1": "LL_SYSCFG_EXTI_LINE7", + "rotary_encoder_exti_sys_line2": "LL_SYSCFG_EXTI_LINE8", + "rotary_encoder_timer": "TIM17", + "rotary_encoder_timer_irqn": "TIM17_IRQn", + "rotary_encoder_timer_irqhandler": "TIM17_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOC, 7)", + "haptic_gpio_timer": "TIM3", + "haptic_gpio_af": "GPIO_AF2", + "haptic_timer_output_enable": "TIM_CCER_CC2E | TIM_CCER_CC2NE", + "haptic_timer_mode": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2PE", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR2" } } diff --git a/radio/src/boards/hw_defs/tx16s.json b/radio/src/boards/hw_defs/tx16s.json index 524b953f975..2eaf411e2e0 100644 --- a/radio/src/boards/hw_defs/tx16s.json +++ b/radio/src/boards/hw_defs/tx16s.json @@ -437,27 +437,50 @@ } ], "display": { - "w": 480, - "h": 272, - "phys_w": 480, - "phys_h": 272, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 480, + "lcd_h": 272, + "lcd_phys_w": 480, + "lcd_phys_h": 272, + "lcd_depth": 16, + "lcd_vertical_invert": true, + "ltdc_irq_prio": 4, + "dma_screen_irq_prio": 6 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 2)", + "led_green_gpio": "GPIO_PIN(GPIOE, 4)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 5)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F429xI", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM13", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_UP_TIM13_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_UP_TIM13_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOE, 6)", + "haptic_gpio_timer": "TIM9", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer_output_enable": "TIM_CCER_CC2E", + "haptic_timer_mode": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR2" } } diff --git a/radio/src/boards/hw_defs/tx16smk3.json b/radio/src/boards/hw_defs/tx16smk3.json index 8ffb0d97dfc..8f0edf9c339 100644 --- a/radio/src/boards/hw_defs/tx16smk3.json +++ b/radio/src/boards/hw_defs/tx16smk3.json @@ -438,27 +438,111 @@ } ], "display": { - "w": 800, - "h": 480, - "phys_w": 800, - "phys_h": 480, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 800, + "lcd_h": 480, + "lcd_phys_w": 800, + "lcd_phys_h": 480, + "lcd_depth": 16, + "ltdc_irq_prio": 4, + "dma_screen_irq_prio": 6 }, - "custom_switches": { - "rgb_led": 1, - "groups": 3 + "backlight": { + "backlight_gpio": "GPIO_PIN(GPIOA, 10)", + "backlight_timer": "TIM1", + "backlight_timer_channel": "LL_TIM_CHANNEL_CH3", + "backlight_gpio_af": "GPIO_AF1", + "backlight_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)" + }, + "leds": { + "led_strip_length": 26, + "bling_led_strip_start": 6, + "bling_led_strip_length": 20, + "cfs_led_strip_start": 0, + "cfs_led_strip_length": 6, + "cfs_leds_per_switch": 1, + "led_strip_gpio": "GPIO_PIN(GPIOA, 0)", + "led_strip_gpio_af": "LL_GPIO_AF_1", + "led_strip_timer": "TIM2", + "led_strip_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "led_strip_timer_channel": "LL_TIM_CHANNEL_CH1", + "led_strip_timer_dma": "DMA1", + "led_strip_timer_dma_channel": "LL_DMAMUX1_REQ_TIM2_UP", + "led_strip_timer_dma_stream": "LL_DMA_STREAM_0", + "led_strip_timer_dma_irqn": "DMA1_Stream0_IRQn", + "led_strip_timer_dma_irqhandler": "DMA1_Stream0_IRQHandler", + "led_strip_refresh_period": 50, + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOI, 8)", + "led_green_gpio": "GPIO_PIN(GPIOI, 11)", + "led_blue_gpio": "GPIO_PIN(GPIOI, 10)" }, "hardware": { - "has_audio_mute": 0, - "has_bling_leds": 20, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32H750xB", "cpu_type": "STM32H7" + }, + "timers": { + "cpu_freq": 480000000, + "peri1_frequency": 120000000, + "peri2_frequency": 120000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "imu": { + "imu_i2c_bus": "I2C_Bus_2", + "imu_int_gpio": "GPIO_PIN(GPIOG, 13)", + "imu_invert_x": true, + "imu_invert_y": true, + "exti": [ + { + "irq": "EXTI15_10_IRQ", + "priority": 6 + } + ] + }, + "rotenc": { + "rotary_encoder_inverted": true, + "rotary_encoder_gpio_a": "GPIOI", + "rotary_encoder_gpio_pin_a": "LL_GPIO_PIN_7", + "rotary_encoder_gpio_b": "GPIOJ", + "rotary_encoder_gpio_pin_b": "LL_GPIO_PIN_8", + "rotary_encoder_position": "(((ROTARY_ENCODER_GPIO_A->IDR >> 7) & 0x01)|((ROTARY_ENCODER_GPIO_B->IDR >> 7) & 0x02))", + "rotary_encoder_exti_line1": "LL_EXTI_LINE_7", + "rotary_encoder_exti_line2": "LL_EXTI_LINE_8", + "exti": [ + { + "irq": "EXTI7_IRQ", + "priority": 5 + }, + { + "irq": "EXTI8_IRQ", + "priority": 5 + } + ], + "rotary_encoder_exti_port_a": "LL_SYSCFG_EXTI_PORTI", + "rotary_encoder_exti_port_b": "LL_SYSCFG_EXTI_PORTJ", + "rotary_encoder_exti_sys_line1": "LL_SYSCFG_EXTI_LINE7", + "rotary_encoder_exti_sys_line2": "LL_SYSCFG_EXTI_LINE8", + "rotary_encoder_timer": "TIM17", + "rotary_encoder_timer_irqn": "TIM17_IRQn", + "rotary_encoder_timer_irqhandler": "TIM17_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOC, 7)", + "haptic_gpio_timer": "TIM3", + "haptic_gpio_af": "GPIO_AF2", + "haptic_timer_output_enable": "TIM_CCER_CC2E | TIM_CCER_CC2NE", + "haptic_timer_mode": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2PE", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR2" } } diff --git a/radio/src/boards/hw_defs/v12.json b/radio/src/boards/hw_defs/v12.json index c5b5b2537f9..ac726ddfc50 100644 --- a/radio/src/boards/hw_defs/v12.json +++ b/radio/src/boards/hw_defs/v12.json @@ -333,27 +333,63 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 0, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "lcd_vertical_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_bdtr": "TIM_BDTR_MOE" + }, + "leds": { + "led_strip_length": 6, + "led_strip_gpio": "GPIO_PIN(GPIOA, 10)", + "led_strip_gpio_af": "LL_GPIO_AF_1", + "led_strip_timer": "TIM1", + "led_strip_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "led_strip_timer_channel": "LL_TIM_CHANNEL_CH3", + "led_strip_timer_dma": "DMA2", + "led_strip_timer_dma_channel": "LL_DMA_CHANNEL_6", + "led_strip_timer_dma_stream": "LL_DMA_STREAM_5", + "led_strip_timer_dma_irqn": "DMA2_Stream5_IRQn", + "led_strip_timer_dma_irqhandler": "DMA2_Stream5_IRQHandler", + "led_strip_refresh_period": 50, + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 13)", + "led_green_gpio": "GPIO_PIN(GPIOE, 14)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 2)" }, "hardware": { - "has_audio_mute": 0, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F407xG", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 3)", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer": "TIM2", + "haptic_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "haptic_counter_register": "HAPTIC_TIMER->CCR2", + "haptic_ccmr1": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_ccer": "TIM_CCER_CC2E" } } diff --git a/radio/src/boards/hw_defs/v14.json b/radio/src/boards/hw_defs/v14.json index f79d83c3893..29efa82b553 100644 --- a/radio/src/boards/hw_defs/v14.json +++ b/radio/src/boards/hw_defs/v14.json @@ -333,27 +333,66 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 1, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "oled_screen": true, + "lcd_horizontal_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_bdtr": "TIM_BDTR_MOE" + }, + "leds": { + "led_strip_length": 38, + "bling_led_strip_start": 6, + "bling_led_strip_length": 32, + "led_strip_gpio": "GPIO_PIN(GPIOA, 10)", + "led_strip_gpio_af": "LL_GPIO_AF_1", + "led_strip_timer": "TIM1", + "led_strip_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "led_strip_timer_channel": "LL_TIM_CHANNEL_CH3", + "led_strip_timer_dma": "DMA2", + "led_strip_timer_dma_channel": "LL_DMA_CHANNEL_6", + "led_strip_timer_dma_stream": "LL_DMA_STREAM_5", + "led_strip_timer_dma_irqn": "DMA2_Stream5_IRQn", + "led_strip_timer_dma_irqhandler": "DMA2_Stream5_IRQHandler", + "led_strip_refresh_period": 50, + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 13)", + "led_green_gpio": "GPIO_PIN(GPIOE, 14)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 2)" }, "hardware": { - "has_audio_mute": 0, - "has_bling_leds": 32, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F407xG", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 3)", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer": "TIM2", + "haptic_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "haptic_counter_register": "HAPTIC_TIMER->CCR2", + "haptic_ccmr1": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_ccer": "TIM_CCER_CC2E" } } diff --git a/radio/src/boards/hw_defs/v16.json b/radio/src/boards/hw_defs/v16.json index 3170004fe4d..901daabc4f0 100644 --- a/radio/src/boards/hw_defs/v16.json +++ b/radio/src/boards/hw_defs/v16.json @@ -435,27 +435,63 @@ } ], "display": { - "w": 480, - "h": 272, - "phys_w": 480, - "phys_h": 272, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 480, + "lcd_h": 272, + "lcd_phys_w": 480, + "lcd_phys_h": 272, + "lcd_depth": 16, + "ltdc_irq_prio": 4, + "dma_screen_irq_prio": 6 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "leds": { + "led_strip_length": 40, + "bling_led_strip_start": 6, + "bling_led_strip_length": 34, + "led_strip_gpio": "GPIO_PIN(GPIOA, 10)", + "led_strip_gpio_af": "LL_GPIO_AF_1", + "led_strip_timer": "TIM1", + "led_strip_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "led_strip_timer_channel": "LL_TIM_CHANNEL_CH3", + "led_strip_timer_dma": "DMA2", + "led_strip_timer_dma_channel": "LL_DMA_CHANNEL_6", + "led_strip_timer_dma_stream": "LL_DMA_STREAM_5", + "led_strip_timer_dma_irqn": "DMA2_Stream5_IRQn", + "led_strip_timer_dma_irqhandler": "DMA2_Stream5_IRQHandler", + "led_strip_refresh_period": 50, + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 2)", + "led_green_gpio": "GPIO_PIN(GPIOE, 4)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 5)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 34, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F429xI", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM13", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_UP_TIM13_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_UP_TIM13_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOE, 6)", + "haptic_gpio_timer": "TIM9", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer_output_enable": "TIM_CCER_CC2E", + "haptic_timer_mode": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR2" } } diff --git a/radio/src/boards/hw_defs/x10.json b/radio/src/boards/hw_defs/x10.json index 9f188f4d338..2b2660eebe8 100644 --- a/radio/src/boards/hw_defs/x10.json +++ b/radio/src/boards/hw_defs/x10.json @@ -435,27 +435,49 @@ } ], "display": { - "w": 480, - "h": 272, - "phys_w": 480, - "phys_h": 272, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 480, + "lcd_h": 272, + "lcd_phys_w": 480, + "lcd_phys_h": 272, + "lcd_depth": 16, + "lcd_vertical_invert": true, + "ltdc_irq_prio": 4, + "dma_screen_irq_prio": 6 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 2)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 5)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 250000, - "surface": 0, "cpu": "STM32F429xI", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM13", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_UP_TIM13_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_UP_TIM13_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOE, 6)", + "haptic_gpio_timer": "TIM9", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer_output_enable": "TIM_CCER_CC2E", + "haptic_timer_mode": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR2" } } diff --git a/radio/src/boards/hw_defs/x10express.json b/radio/src/boards/hw_defs/x10express.json index 9f188f4d338..2b2660eebe8 100644 --- a/radio/src/boards/hw_defs/x10express.json +++ b/radio/src/boards/hw_defs/x10express.json @@ -435,27 +435,49 @@ } ], "display": { - "w": 480, - "h": 272, - "phys_w": 480, - "phys_h": 272, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 480, + "lcd_h": 272, + "lcd_phys_w": 480, + "lcd_phys_h": 272, + "lcd_depth": 16, + "lcd_vertical_invert": true, + "ltdc_irq_prio": 4, + "dma_screen_irq_prio": 6 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 2)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 5)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 250000, - "surface": 0, "cpu": "STM32F429xI", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM13", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_UP_TIM13_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_UP_TIM13_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOE, 6)", + "haptic_gpio_timer": "TIM9", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer_output_enable": "TIM_CCER_CC2E", + "haptic_timer_mode": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR2" } } diff --git a/radio/src/boards/hw_defs/x12s.json b/radio/src/boards/hw_defs/x12s.json index 06e02f7daea..23be1bce60e 100644 --- a/radio/src/boards/hw_defs/x12s.json +++ b/radio/src/boards/hw_defs/x12s.json @@ -428,27 +428,45 @@ } ], "display": { - "w": 480, - "h": 272, - "phys_w": 480, - "phys_h": 272, - "depth": 16, - "color": 1, - "oled": 0, - "backlight_color": 0 + "lcd_w": 480, + "lcd_h": 272, + "lcd_phys_w": 480, + "lcd_phys_h": 272, + "lcd_depth": 16, + "ltdc_irq_prio": 4, + "dma_screen_irq_prio": 6 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "leds": { + "status_leds": true }, "hardware": { - "has_audio_mute": 0, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 250000, - "surface": 0, "cpu": "STM32F429xI", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM13", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_UP_TIM13_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_UP_TIM13_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOA, 2)", + "haptic_gpio_timer": "TIM9", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer_output_enable": "TIM_CCER_CC1E", + "haptic_timer_mode": "TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2", + "haptic_timer_compare_value": "HAPTIC_GPIO_TIMER->CCR1" } } diff --git a/radio/src/boards/hw_defs/x7.json b/radio/src/boards/hw_defs/x7.json index 3678ba3e429..9c70904dd2a 100644 --- a/radio/src/boards/hw_defs/x7.json +++ b/radio/src/boards/hw_defs/x7.json @@ -302,27 +302,47 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 0, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOC, 5)", + "led_green_gpio": "GPIO_PIN(GPIOC, 4)", + "led_blue_gpio": "GPIO_PIN(GPIOB, 1)" }, "hardware": { - "has_audio_mute": 0, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 250000, - "surface": 0, "cpu": "STM32F205xE", "cpu_type": "STM32F2" + }, + "timers": { + "cpu_freq": 120000000, + "peri1_frequency": 30000000, + "peri2_frequency": 60000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 8)", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer": "TIM10", + "haptic_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "haptic_counter_register": "HAPTIC_TIMER->CCR1", + "haptic_ccmr1": "TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2", + "haptic_ccer": "TIM_CCER_CC1E" } } diff --git a/radio/src/boards/hw_defs/x7access.json b/radio/src/boards/hw_defs/x7access.json index 1c56aa292bd..9185f5868ee 100644 --- a/radio/src/boards/hw_defs/x7access.json +++ b/radio/src/boards/hw_defs/x7access.json @@ -288,27 +288,46 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 0, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOC, 4)", + "led_blue_gpio": "GPIO_PIN(GPIOB, 1)" }, "hardware": { - "has_audio_mute": 0, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F407xE", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOA, 10)", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer": "TIM1", + "haptic_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "haptic_counter_register": "HAPTIC_TIMER->CCR3", + "haptic_ccmr2": "TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2", + "haptic_ccer": "TIM_CCER_CC3E" } } diff --git a/radio/src/boards/hw_defs/x9d+.json b/radio/src/boards/hw_defs/x9d+.json index c1432a45b0d..38faffdee01 100644 --- a/radio/src/boards/hw_defs/x9d+.json +++ b/radio/src/boards/hw_defs/x9d+.json @@ -355,27 +355,43 @@ } ], "display": { - "w": 212, - "h": 64, - "phys_w": 212, - "phys_h": 64, - "depth": 4, - "color": 0, - "oled": 0, - "backlight_color": 1 + "lcd_w": 212, + "lcd_h": 64, + "lcd_phys_w": 212, + "lcd_phys_h": 64, + "lcd_depth": 4 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "has_backlight_color": true }, "hardware": { - "has_audio_mute": 0, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 0, + "has_ext_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F205xE", "cpu_type": "STM32F2" + }, + "timers": { + "cpu_freq": 120000000, + "peri1_frequency": 30000000, + "peri2_frequency": 60000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 8)", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer": "TIM10", + "haptic_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "haptic_counter_register": "HAPTIC_TIMER->CCR1", + "haptic_ccmr1": "TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2", + "haptic_ccer": "TIM_CCER_CC1E" } } diff --git a/radio/src/boards/hw_defs/x9d+2019.json b/radio/src/boards/hw_defs/x9d+2019.json index eef3abf5a0c..bd99ff18156 100644 --- a/radio/src/boards/hw_defs/x9d+2019.json +++ b/radio/src/boards/hw_defs/x9d+2019.json @@ -343,27 +343,49 @@ } ], "display": { - "w": 212, - "h": 64, - "phys_w": 212, - "phys_h": 64, - "depth": 4, - "color": 0, - "oled": 0, - "backlight_color": 1 + "lcd_w": 212, + "lcd_h": 64, + "lcd_phys_w": 212, + "lcd_phys_h": 64, + "lcd_depth": 4 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "has_backlight_color": true + }, + "leds": { + "status_leds": true, + "gpio_led_gpio_on": "gpio_clear", + "gpio_led_gpio_off": "gpio_set", + "led_red_gpio": "GPIO_PIN(GPIOA, 13)" }, "hardware": { - "has_audio_mute": 0, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 0, + "has_ext_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F407xE", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOA, 10)", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer": "TIM1", + "haptic_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "haptic_counter_register": "HAPTIC_TIMER->CCR3", + "haptic_ccmr2": "TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2", + "haptic_ccer": "TIM_CCER_CC3E" } } diff --git a/radio/src/boards/hw_defs/x9d.json b/radio/src/boards/hw_defs/x9d.json index 89056ea4b4b..45e5de657b9 100644 --- a/radio/src/boards/hw_defs/x9d.json +++ b/radio/src/boards/hw_defs/x9d.json @@ -344,27 +344,33 @@ } ], "display": { - "w": 212, - "h": 64, - "phys_w": 212, - "phys_h": 64, - "depth": 4, - "color": 0, - "oled": 0, - "backlight_color": 0 - }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "lcd_w": 212, + "lcd_h": 64, + "lcd_phys_w": 212, + "lcd_phys_h": 64, + "lcd_depth": 4 }, "hardware": { - "has_audio_mute": 0, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 0, + "has_ext_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F205xE", "cpu_type": "STM32F2" + }, + "timers": { + "cpu_freq": 120000000, + "peri1_frequency": 30000000, + "peri2_frequency": 60000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_gpio": "GPIO_PIN(GPIOC, 14)" } } diff --git a/radio/src/boards/hw_defs/x9e.json b/radio/src/boards/hw_defs/x9e.json index 9b016edcf4c..443ded67cf8 100644 --- a/radio/src/boards/hw_defs/x9e.json +++ b/radio/src/boards/hw_defs/x9e.json @@ -547,27 +547,43 @@ } ], "display": { - "w": 212, - "h": 64, - "phys_w": 212, - "phys_h": 64, - "depth": 4, - "color": 0, - "oled": 0, - "backlight_color": 1 + "lcd_w": 212, + "lcd_h": 64, + "lcd_phys_w": 212, + "lcd_phys_h": 64, + "lcd_depth": 4 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "has_backlight_color": true }, "hardware": { - "has_audio_mute": 0, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 0, + "has_ext_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F407xE", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 8)", + "haptic_gpio_af": "GPIO_AF3", + "haptic_timer": "TIM10", + "haptic_timer_freq": "(PERI2_FREQUENCY * TIMER_MULT_APB2)", + "haptic_counter_register": "HAPTIC_TIMER->CCR1", + "haptic_ccmr1": "TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2", + "haptic_ccer": "TIM_CCER_CC1E" } } diff --git a/radio/src/boards/hw_defs/x9lite.json b/radio/src/boards/hw_defs/x9lite.json index 37b358cb441..ce5fdde13c7 100644 --- a/radio/src/boards/hw_defs/x9lite.json +++ b/radio/src/boards/hw_defs/x9lite.json @@ -247,27 +247,50 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 0, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_bdtr": "TIM_BDTR_MOE" + }, + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 5)", + "led_green_gpio": "GPIO_PIN(GPIOE, 4)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 6)" }, "hardware": { - "has_audio_mute": 0, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 250000, - "surface": 0, "cpu": "STM32F205xE", "cpu_type": "STM32F2" + }, + "timers": { + "cpu_freq": 120000000, + "peri1_frequency": 30000000, + "peri2_frequency": 60000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 3)", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer": "TIM2", + "haptic_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "haptic_counter_register": "HAPTIC_TIMER->CCR2", + "haptic_ccmr1": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_ccer": "TIM_CCER_CC2E" } } diff --git a/radio/src/boards/hw_defs/x9lites.json b/radio/src/boards/hw_defs/x9lites.json index cab935be9c9..78d75f43b52 100644 --- a/radio/src/boards/hw_defs/x9lites.json +++ b/radio/src/boards/hw_defs/x9lites.json @@ -275,27 +275,49 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 0, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_bdtr": "TIM_BDTR_MOE" + }, + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 5)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 6)" }, "hardware": { - "has_audio_mute": 0, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 250000, - "surface": 0, "cpu": "STM32F205xE", "cpu_type": "STM32F2" + }, + "timers": { + "cpu_freq": 120000000, + "peri1_frequency": 30000000, + "peri2_frequency": 60000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 3)", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer": "TIM2", + "haptic_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "haptic_counter_register": "HAPTIC_TIMER->CCR2", + "haptic_ccmr1": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_ccer": "TIM_CCER_CC2E" } } diff --git a/radio/src/boards/hw_defs/xlite.json b/radio/src/boards/hw_defs/xlite.json index ec1e33fb61b..99b2461421e 100644 --- a/radio/src/boards/hw_defs/xlite.json +++ b/radio/src/boards/hw_defs/xlite.json @@ -253,27 +253,52 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 0, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_bdtr": "TIM_BDTR_MOE" + }, + "leds": { + "status_leds": true, + "gpio_led_gpio_on": "gpio_clear", + "gpio_led_gpio_off": "gpio_set", + "led_red_gpio": "GPIO_PIN(GPIOE, 4)", + "led_green_gpio": "GPIO_PIN(GPIOE, 5)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 6)" }, "hardware": { - "has_audio_mute": 0, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 250000, - "surface": 0, "cpu": "STM32F205xE", "cpu_type": "STM32F2" + }, + "timers": { + "cpu_freq": 120000000, + "peri1_frequency": 30000000, + "peri2_frequency": 60000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 3)", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer": "TIM2", + "haptic_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "haptic_counter_register": "HAPTIC_TIMER->CCR2", + "haptic_ccmr1": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_ccer": "TIM_CCER_CC2E" } } diff --git a/radio/src/boards/hw_defs/xlites.json b/radio/src/boards/hw_defs/xlites.json index 0a698390874..9a7246e0685 100644 --- a/radio/src/boards/hw_defs/xlites.json +++ b/radio/src/boards/hw_defs/xlites.json @@ -281,27 +281,51 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 0, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1 }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_bdtr": "TIM_BDTR_MOE" + }, + "leds": { + "status_leds": true, + "gpio_led_gpio_on": "gpio_clear", + "gpio_led_gpio_off": "gpio_set", + "led_red_gpio": "GPIO_PIN(GPIOE, 4)", + "led_blue_gpio": "GPIO_PIN(GPIOE, 6)" }, "hardware": { - "has_audio_mute": 0, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 250000, - "surface": 0, "cpu": "STM32F205xE", "cpu_type": "STM32F2" + }, + "timers": { + "cpu_freq": 120000000, + "peri1_frequency": 30000000, + "peri2_frequency": 60000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 3)", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer": "TIM2", + "haptic_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "haptic_counter_register": "HAPTIC_TIMER->CCR2", + "haptic_ccmr1": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_ccer": "TIM_CCER_CC2E" } } diff --git a/radio/src/boards/hw_defs/zorro.json b/radio/src/boards/hw_defs/zorro.json index 93b405fc34b..cf71f58d053 100644 --- a/radio/src/boards/hw_defs/zorro.json +++ b/radio/src/boards/hw_defs/zorro.json @@ -323,27 +323,52 @@ } ], "display": { - "w": 128, - "h": 64, - "phys_w": 128, - "phys_h": 64, - "depth": 1, - "color": 0, - "oled": 0, - "backlight_color": 0 + "lcd_w": 128, + "lcd_h": 64, + "lcd_phys_w": 128, + "lcd_phys_h": 64, + "lcd_depth": 1, + "lcd_vertical_invert": true }, - "custom_switches": { - "rgb_led": 0, - "groups": 0 + "backlight": { + "backlight_bdtr": "TIM_BDTR_MOE" + }, + "leds": { + "status_leds": true, + "led_red_gpio": "GPIO_PIN(GPIOE, 13)", + "led_green_gpio": "GPIO_PIN(GPIOE, 2)", + "led_blue_gpio": "GPIO_PIN(GPIOA, 7)" }, "hardware": { - "has_audio_mute": 1, - "has_bling_leds": 0, - "has_ext_module_support": 1, - "has_int_module_support": 1, + "has_audio_mute": true, + "has_ext_module_support": true, + "has_int_module_support": true, "sport_max_baudrate": 400000, - "surface": 0, "cpu": "STM32F407xE", "cpu_type": "STM32F4" + }, + "timers": { + "cpu_freq": 168000000, + "peri1_frequency": 42000000, + "peri2_frequency": 84000000, + "timer_mult_apb1": 2, + "timer_mult_apb2": 2, + "ms_timer": "TIM14", + "ms_timer_irqn": "TIM8_TRG_COM_TIM14_IRQn", + "ms_timer_irqhandler": "TIM8_TRG_COM_TIM14_IRQHandler", + "mixer_scheduler_timer": "TIM12", + "mixer_scheduler_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "mixer_scheduler_timer_irqn": "TIM8_BRK_TIM12_IRQn", + "mixer_scheduler_timer_irqhandler": "TIM8_BRK_TIM12_IRQHandler" + }, + "haptic": { + "haptic_pwm": true, + "haptic_gpio": "GPIO_PIN(GPIOB, 3)", + "haptic_gpio_af": "GPIO_AF1", + "haptic_timer": "TIM2", + "haptic_timer_freq": "(PERI1_FREQUENCY * TIMER_MULT_APB1)", + "haptic_counter_register": "HAPTIC_TIMER->CCR2", + "haptic_ccmr1": "TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2", + "haptic_ccer": "TIM_CCER_CC2E" } } diff --git a/radio/src/bootloader/CMakeLists.txt b/radio/src/bootloader/CMakeLists.txt index 05e443e43e0..25d5aa39c36 100644 --- a/radio/src/bootloader/CMakeLists.txt +++ b/radio/src/bootloader/CMakeLists.txt @@ -1,11 +1,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) -# AddHardwareDefTarget(${HW_DESC_JSON}) -AddHWGenTarget(${HW_DESC_JSON} hal_keys hal_keys.inc) - set(BOOTLOADER_SRC ${BOOTLOADER_SRC} - ${CMAKE_CURRENT_BINARY_DIR}/hal_keys.inc ${RADIO_SRC_DIR}/os/time_nortos.cpp ${RADIO_SRC_DIR}/os/sleep_nortos.cpp ${RADIO_SRC_DIR}/keys.cpp diff --git a/radio/src/cfn_sort.cpp b/radio/src/cfn_sort.cpp index 49d43bdaddf..936ef2f0018 100644 --- a/radio/src/cfn_sort.cpp +++ b/radio/src/cfn_sort.cpp @@ -25,7 +25,7 @@ Functions cfn_sorted[] = { #if defined(TRANSLATIONS_CN) -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN /* 背光 */ FUNC_BACKLIGHT, #endif /* 播放背景音乐 */ FUNC_BACKGND_MUSIC, @@ -45,7 +45,7 @@ Functions cfn_sorted[] = { /* 禁用触摸 */ FUNC_DISABLE_TOUCH, #endif /* 竞速模式 */ FUNC_RACING_MODE, -#if defined(OLED_SCREEN) +#if OLED_SCREEN /* 亮度 */ FUNC_BACKLIGHT, #endif /* 模块对频 */ FUNC_BIND, @@ -77,7 +77,7 @@ Functions cfn_sorted[] = { /* Hudba */ FUNC_BACKGND_MUSIC, /* Hudba pauza */ FUNC_BACKGND_MUSIC_PAUSE, /* Insta-Trim */ FUNC_INSTANT_TRIM, -#if defined(OLED_SCREEN) +#if OLED_SCREEN /* Jas */ FUNC_BACKLIGHT, #endif /* Kontrola dosahu */ FUNC_RANGECHECK, @@ -89,7 +89,7 @@ Functions cfn_sorted[] = { /* ModuleBind */ FUNC_BIND, /* Nastav */ FUNC_ADJUST_GVAR, /* Nastavit Failsafe */ FUNC_SET_FAILSAFE, -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN /* Podsvětlení */ FUNC_BACKLIGHT, #endif /* Přehrát wav */ FUNC_PLAY_TRACK, @@ -112,7 +112,7 @@ Functions cfn_sorted[] = { /* Změna */ FUNC_SET_TIMER, #elif defined(TRANSLATIONS_DA) /* Afstand kontrol */ FUNC_RANGECHECK, -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN /* Baggrund lys */ FUNC_BACKLIGHT, #endif /* Baggrund musik */ FUNC_BACKGND_MUSIC, @@ -134,7 +134,7 @@ Functions cfn_sorted[] = { /* RGB lys */ FUNC_RGB_LED, /* Ræs tilstand */ FUNC_RACING_MODE, /* SD Log */ FUNC_LOGS, -#if defined(OLED_SCREEN) +#if OLED_SCREEN /* Skarphed */ FUNC_BACKLIGHT, #endif /* Skærm klip */ FUNC_SCREENSHOT, @@ -159,7 +159,7 @@ Functions cfn_sorted[] = { /* Datei abspielen */ FUNC_PLAY_TRACK, /* Haptik */ FUNC_HAPTIC, /* Hauptseite anzeigen */ FUNC_SET_SCREEN, -#if defined(OLED_SCREEN) +#if OLED_SCREEN /* Helligkeit */ FUNC_BACKLIGHT, #endif /* Inst. Trim */ FUNC_INSTANT_TRIM, @@ -167,7 +167,7 @@ Functions cfn_sorted[] = { /* Kein Touch */ FUNC_DISABLE_TOUCH, #endif /* Lautstr. */ FUNC_VOLUME, -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN /* LCD Licht */ FUNC_BACKLIGHT, #endif #if defined(VIDEO_SWITCH) @@ -202,7 +202,7 @@ Functions cfn_sorted[] = { /* Audio Amp Off */ FUNC_DISABLE_AUDIO_AMP, /* BgMúsica */ FUNC_BACKGND_MUSIC, /* BgMúsica|| */ FUNC_BACKGND_MUSIC_PAUSE, -#if defined(OLED_SCREEN) +#if OLED_SCREEN /* Brillo */ FUNC_BACKLIGHT, #endif /* Captura */ FUNC_SCREENSHOT, @@ -216,7 +216,7 @@ Functions cfn_sorted[] = { /* LCD to Video */ FUNC_LCD_TO_VIDEO, #endif /* Lua Script */ FUNC_PLAY_SCRIPT, -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN /* Luz Fondo */ FUNC_BACKLIGHT, #endif #if defined(COLORLCD) @@ -242,14 +242,14 @@ Functions cfn_sorted[] = { #elif defined(TRANSLATIONS_FI) /* Adjust */ FUNC_ADJUST_GVAR, /* Audio Amp Off */ FUNC_DISABLE_AUDIO_AMP, -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN /* Backlight */ FUNC_BACKLIGHT, #endif /* BgMusic */ FUNC_BACKGND_MUSIC, /* BgMusic || */ FUNC_BACKGND_MUSIC_PAUSE, /* Haptic */ FUNC_HAPTIC, /* Inst. Trim */ FUNC_INSTANT_TRIM, -#if defined(OLED_SCREEN) +#if OLED_SCREEN /* Kirkkaus */ FUNC_BACKLIGHT, #endif #if defined(VIDEO_SWITCH) @@ -297,7 +297,7 @@ Functions cfn_sorted[] = { #endif /* Lire valeur */ FUNC_PLAY_VALUE, /* Logs SD */ FUNC_LOGS, -#if defined(OLED_SCREEN) +#if OLED_SCREEN /* Luminosité */ FUNC_BACKLIGHT, #endif /* Musique */ FUNC_BACKGND_MUSIC, @@ -313,7 +313,7 @@ Functions cfn_sorted[] = { /* Règle Failsafe */ FUNC_SET_FAILSAFE, /* Remise à 0 */ FUNC_RESET, /* Remplace */ FUNC_OVERRIDE_CHANNEL, -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN /* Rétroécl. */ FUNC_BACKLIGHT, #endif /* RGB leds */ FUNC_RGB_LED, @@ -348,14 +348,14 @@ Functions cfn_sorted[] = { /* Set */ FUNC_SET_TIMER, /* SetFailsafe */ FUNC_SET_FAILSAFE, /* Vario */ FUNC_VARIO, -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN /* אור אחורי */ FUNC_BACKLIGHT, #endif /* איפוס */ FUNC_RESET, #if defined(DEBUG) /* בדיקה */ FUNC_TEST, #endif -#if defined(OLED_SCREEN) +#if OLED_SCREEN /* בהירות */ FUNC_BACKLIGHT, #endif /* הגדרת מסך ראשי */ FUNC_SET_SCREEN, @@ -383,7 +383,7 @@ Functions cfn_sorted[] = { /* Leds RGB */ FUNC_RGB_LED, /* Leggi Valore */ FUNC_PLAY_VALUE, /* Log scheda SD */ FUNC_LOGS, -#if defined(OLED_SCREEN) +#if OLED_SCREEN /* Luminosità */ FUNC_BACKLIGHT, #endif /* Maestro */ FUNC_TRAINER, @@ -395,7 +395,7 @@ Functions cfn_sorted[] = { #endif /* RangeCheck */ FUNC_RANGECHECK, /* Regola */ FUNC_ADJUST_GVAR, -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN /* Retroillum. */ FUNC_BACKLIGHT, #endif /* Screenshot */ FUNC_SCREENSHOT, @@ -434,7 +434,7 @@ Functions cfn_sorted[] = { #endif /* トレーナー */ FUNC_TRAINER, /* バイブレート */ FUNC_HAPTIC, -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN /* バックライト */ FUNC_BACKLIGHT, #endif /* バリオ */ FUNC_VARIO, @@ -445,7 +445,7 @@ Functions cfn_sorted[] = { /* レンジチェック */ FUNC_RANGECHECK, /* 音源再生 */ FUNC_PLAY_TRACK, /* 画面キャプチャ */ FUNC_SCREENSHOT, -#if defined(OLED_SCREEN) +#if OLED_SCREEN /* 輝度 */ FUNC_BACKLIGHT, #endif /* 再生値 */ FUNC_PLAY_VALUE, @@ -467,12 +467,12 @@ Functions cfn_sorted[] = { /* 메인 화면 설정 */ FUNC_SET_SCREEN, /* 모듈 바인딩 */ FUNC_BIND, /* 바리오 */ FUNC_VARIO, -#if defined(OLED_SCREEN) +#if OLED_SCREEN /* 밝기 */ FUNC_BACKLIGHT, #endif /* 배경 음악 */ FUNC_BACKGND_MUSIC, /* 배경 음악 일시정지 */ FUNC_BACKGND_MUSIC_PAUSE, -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN /* 백라이트 */ FUNC_BACKLIGHT, #endif /* 볼륨 */ FUNC_VOLUME, @@ -499,14 +499,14 @@ Functions cfn_sorted[] = { /* 페일세이프 설정 */ FUNC_SET_FAILSAFE, #elif defined(TRANSLATIONS_NL) /* Audio Amp Off */ FUNC_DISABLE_AUDIO_AMP, -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN /* Backlight */ FUNC_BACKLIGHT, #endif /* BgMusic */ FUNC_BACKGND_MUSIC, /* BgMusic || */ FUNC_BACKGND_MUSIC_PAUSE, /* Geluid */ FUNC_PLAY_SOUND, /* Haptic */ FUNC_HAPTIC, -#if defined(OLED_SCREEN) +#if OLED_SCREEN /* Helderheid */ FUNC_BACKLIGHT, #endif /* Inst. Trim */ FUNC_INSTANT_TRIM, @@ -547,7 +547,7 @@ Functions cfn_sorted[] = { /* GrajŚcieżk */ FUNC_PLAY_TRACK, /* GrajWartoś */ FUNC_PLAY_VALUE, /* Inst-Trim */ FUNC_INSTANT_TRIM, -#if defined(OLED_SCREEN) +#if OLED_SCREEN /* Jasność */ FUNC_BACKLIGHT, #endif #if defined(VIDEO_SWITCH) @@ -560,7 +560,7 @@ Functions cfn_sorted[] = { #if defined(COLORLCD) /* No Touch */ FUNC_DISABLE_TOUCH, #endif -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN /* Podświetl */ FUNC_BACKLIGHT, #endif #if defined(FUNCTION_SWITCHES) @@ -589,7 +589,7 @@ Functions cfn_sorted[] = { /* BgMusica */ FUNC_BACKGND_MUSIC, /* BgMusica || */ FUNC_BACKGND_MUSIC_PAUSE, /* BindMódulo */ FUNC_BIND, -#if defined(OLED_SCREEN) +#if OLED_SCREEN /* Brilho */ FUNC_BACKLIGHT, #endif /* Capt. Tela */ FUNC_SCREENSHOT, @@ -601,7 +601,7 @@ Functions cfn_sorted[] = { #endif /* Leds RGB */ FUNC_RGB_LED, /* Logs SD */ FUNC_LOGS, -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN /* LuzFundo */ FUNC_BACKLIGHT, #endif /* ModCorrida */ FUNC_RACING_MODE, @@ -651,10 +651,10 @@ Functions cfn_sorted[] = { #endif /* Настройка */ FUNC_ADJUST_GVAR, /* Оменить */ FUNC_OVERRIDE_CHANNEL, -#if defined(OLED_SCREEN) +#if OLED_SCREEN /* Подсветка */ FUNC_BACKLIGHT, #endif -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN /* Подсветка */ FUNC_BACKLIGHT, #endif /* Пров диапаз */ FUNC_RANGECHECK, @@ -671,7 +671,7 @@ Functions cfn_sorted[] = { /* Установ */ FUNC_SET_TIMER, #elif defined(TRANSLATIONS_SE) /* Audioförstärkare av */ FUNC_DISABLE_AUDIO_AMP, -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN /* Belysning */ FUNC_BACKLIGHT, #endif #if defined(COLORLCD) @@ -682,7 +682,7 @@ Functions cfn_sorted[] = { #if defined(VIDEO_SWITCH) /* LCD till Video */ FUNC_LCD_TO_VIDEO, #endif -#if defined(OLED_SCREEN) +#if OLED_SCREEN /* Ljusstyrka */ FUNC_BACKLIGHT, #endif /* Logga data */ FUNC_LOGS, @@ -719,7 +719,7 @@ Functions cfn_sorted[] = { #endif /* RGB LED 燈 */ FUNC_RGB_LED, /* Vario傳感器 */ FUNC_VARIO, -#if defined(OLED_SCREEN) +#if OLED_SCREEN /* 亮度 */ FUNC_BACKLIGHT, #endif /* 修改全局變量GV值 */ FUNC_ADJUST_GVAR, @@ -744,7 +744,7 @@ Functions cfn_sorted[] = { /* 禁用觸摸 */ FUNC_DISABLE_TOUCH, #endif /* 競速模式 */ FUNC_RACING_MODE, -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN /* 背光 */ FUNC_BACKLIGHT, #endif /* 記錄日誌LOG */ FUNC_LOGS, @@ -770,7 +770,7 @@ Functions cfn_sorted[] = { /* Налашт. */ FUNC_ADJUST_GVAR, /* Перевизнач. */ FUNC_OVERRIDE_CHANNEL, /* ПеревірДіап. */ FUNC_RANGECHECK, -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN /* Підсвіт. */ FUNC_BACKLIGHT, #endif /* Підсил. вимк. */ FUNC_DISABLE_AUDIO_AMP, @@ -786,7 +786,7 @@ Functions cfn_sorted[] = { /* Тренер */ FUNC_TRAINER, /* Фон.Муз. */ FUNC_BACKGND_MUSIC, /* Фон.Муз. || */ FUNC_BACKGND_MUSIC_PAUSE, -#if defined(OLED_SCREEN) +#if OLED_SCREEN /* Яскравість */ FUNC_BACKLIGHT, #endif #if defined(VIDEO_SWITCH) @@ -801,12 +801,12 @@ Functions cfn_sorted[] = { #else /* Adjust */ FUNC_ADJUST_GVAR, /* Audio Amp Off */ FUNC_DISABLE_AUDIO_AMP, -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN /* Backlight */ FUNC_BACKLIGHT, #endif /* BgMusic */ FUNC_BACKGND_MUSIC, /* BgMusic || */ FUNC_BACKGND_MUSIC_PAUSE, -#if defined(OLED_SCREEN) +#if OLED_SCREEN /* Brightness */ FUNC_BACKLIGHT, #endif /* Haptic */ FUNC_HAPTIC, diff --git a/radio/src/datastructs_private.h b/radio/src/datastructs_private.h index 00785562ff2..47ecd9cf49d 100644 --- a/radio/src/datastructs_private.h +++ b/radio/src/datastructs_private.h @@ -1181,7 +1181,7 @@ PACK(struct RadioData { NOBACKUP(uint8_t getBrightness() const { -#if defined(OLED_SCREEN) +#if OLED_SCREEN return contrast; #else return backlightBright; diff --git a/radio/src/edgetx.cpp b/radio/src/edgetx.cpp index c82a0718a8b..e856137cacc 100644 --- a/radio/src/edgetx.cpp +++ b/radio/src/edgetx.cpp @@ -607,7 +607,7 @@ void calcBacklightValue(int16_t source) #if defined(COLORLCD) requiredBacklightBright = BACKLIGHT_LEVEL_MAX - (g_eeGeneral.blOffBright + ((1024 + raw) * ((BACKLIGHT_LEVEL_MAX - g_eeGeneral.backlightBright) - g_eeGeneral.blOffBright) / 2048)); -#elif defined(OLED_SCREEN) +#elif OLED_SCREEN requiredBacklightBright = (raw + 1024) * 254 / 2048; #else requiredBacklightBright = (1024 - raw) * 100 / 2048; diff --git a/radio/src/edgetx.h b/radio/src/edgetx.h index 3e84b3bedff..80eb1fb0321 100644 --- a/radio/src/edgetx.h +++ b/radio/src/edgetx.h @@ -568,7 +568,7 @@ constexpr uint8_t OPENTX_START_NO_SPLASH = 0x01; constexpr uint8_t OPENTX_START_NO_CALIBRATION = 0x02; constexpr uint8_t OPENTX_START_NO_CHECKS = 0x04; -#if defined(STATUS_LEDS) +#if STATUS_LEDS #define LED_ERROR_BEGIN() ledRed() // Green "ready to use" if available, unless overridden by user or mfg preference #if !defined(POWER_LED_BLUE) && (defined(LED_GREEN_GPIO) || defined(LED_STRIP_GPIO)) diff --git a/radio/src/functions.cpp b/radio/src/functions.cpp index 37a6933fa83..d998a72941c 100644 --- a/radio/src/functions.cpp +++ b/radio/src/functions.cpp @@ -546,7 +546,7 @@ const char* funcGetLabel(uint8_t func) case FUNC_LOGS: return STR_SF_LOGS; case FUNC_BACKLIGHT: -#if defined(OLED_SCREEN) +#if OLED_SCREEN return STR_BRIGHTNESS; #else return STR_SF_BACKLIGHT; diff --git a/radio/src/gui/128x64/lcd.cpp b/radio/src/gui/128x64/lcd.cpp index 5597cb8f85e..0497e4653a3 100644 --- a/radio/src/gui/128x64/lcd.cpp +++ b/radio/src/gui/128x64/lcd.cpp @@ -319,7 +319,7 @@ void lcdSetContrast(bool useDefault) { #if defined(BOOT) lcdSetRefVolt(LCD_CONTRAST_DEFAULT); -#elif defined(OLED_SCREEN) +#elif OLED_SCREEN // Handled by brightness feature if (useDefault) lcdSetRefVolt(LCD_CONTRAST_DEFAULT); diff --git a/radio/src/gui/128x64/radio_setup.cpp b/radio/src/gui/128x64/radio_setup.cpp index 8fb4112afd6..c6c39279a10 100644 --- a/radio/src/gui/128x64/radio_setup.cpp +++ b/radio/src/gui/128x64/radio_setup.cpp @@ -555,9 +555,9 @@ void menuRadioSetup(event_t event) if(attr) g_eeGeneral.inactivityTimer = checkIncDec(event, g_eeGeneral.inactivityTimer, 0, 250, EE_GENERAL); //0..250minutes break; -#if defined(BACKLIGHT_GPIO) || defined(OLED_SCREEN) +#if defined(BACKLIGHT_GPIO) || OLED_SCREEN case ITEM_RADIO_SETUP_BACKLIGHT_LABEL: -#if defined(OLED_SCREEN) +#if OLED_SCREEN lcdDrawTextAlignedLeft(y, STR_BRIGHTNESS); #else lcdDrawTextAlignedLeft(y, STR_BACKLIGHT_LABEL); @@ -581,7 +581,7 @@ void menuRadioSetup(event_t event) case ITEM_RADIO_SETUP_BRIGHTNESS: lcdDrawTextIndented(y, STR_BRIGHTNESS); -#if defined(OLED_SCREEN) +#if OLED_SCREEN lcdDrawNumber(LCD_W-2, y, g_eeGeneral.contrast, attr|RIGHT); if (attr) { CHECK_INCDEC_GENVAR(event, g_eeGeneral.contrast, LCD_CONTRAST_MIN, LCD_CONTRAST_MAX); @@ -610,7 +610,7 @@ void menuRadioSetup(event_t event) break; #endif -#if !defined(OLED_SCREEN) +#if !OLED_SCREEN case ITEM_RADIO_SETUP_CONTRAST: lcdDrawTextIndented(y, STR_CONTRAST); lcdDrawNumber(LCD_W-2, y, g_eeGeneral.contrast, attr|RIGHT); diff --git a/radio/src/gui/212x64/radio_setup.cpp b/radio/src/gui/212x64/radio_setup.cpp index b373c082f69..454606ddfef 100644 --- a/radio/src/gui/212x64/radio_setup.cpp +++ b/radio/src/gui/212x64/radio_setup.cpp @@ -43,6 +43,12 @@ int8_t slider_5pos(coord_t y, int8_t value, event_t event, uint8_t attr, const c return editChoice(RADIO_SETUP_2ND_COLUMN, y, title, nullptr, value, -2, +2, attr, event, INDENT_WIDTH); } +#if HAS_BACKLIGHT_COLOR + #define CASE_HAS_BACKLIGHT_COLOR(x) x, +#else + #define CASE_HAS_BACKLIGHT_COLOR(x) +#endif + enum MenuRadioSetupItems { CASE_RTCLOCK(ITEM_RADIO_SETUP_DATE) CASE_RTCLOCK(ITEM_RADIO_SETUP_TIME) @@ -80,7 +86,7 @@ enum MenuRadioSetupItems { ITEM_RADIO_SETUP_BACKLIGHT_DELAY, ITEM_RADIO_SETUP_BRIGHTNESS, ITEM_RADIO_SETUP_CONTRAST, - CASE_PCBX9E_PCBX9DP(ITEM_RADIO_SETUP_BACKLIGHT_COLOR) + CASE_HAS_BACKLIGHT_COLOR(ITEM_RADIO_SETUP_BACKLIGHT_COLOR) ITEM_RADIO_SETUP_BACKLIGHT_SOURCE, ITEM_RADIO_SETUP_BACKLIGHT_SOURCE_OVERRIDE, ITEM_RADIO_SETUP_FLASH_BEEP, @@ -224,7 +230,7 @@ void menuRadioSetup(event_t event) 0, // backlight delay 0, // brightness 0, // contrast - CASE_PCBX9E_PCBX9DP(0) // backlight color + CASE_HAS_BACKLIGHT_COLOR(0) // backlight color 0, // backlight control BACKLIGHT_WARNING_ROW(LABEL(0)), // backlight control override warning 0, // flash beep @@ -585,7 +591,7 @@ void menuRadioSetup(event_t event) } break; -#if defined(PCBX9DP) || defined(PCBX9E) +#if HAS_BACKLIGHT_COLOR case ITEM_RADIO_SETUP_BACKLIGHT_COLOR: lcdDrawTextIndented(y, STR_BLCOLOR); drawSlider(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.backlightColor, 20, attr); diff --git a/radio/src/gui/colorlcd/boot_lcd.cpp b/radio/src/gui/colorlcd/boot_lcd.cpp index 0ce2ca9d55f..4cad2268e0b 100644 --- a/radio/src/gui/colorlcd/boot_lcd.cpp +++ b/radio/src/gui/colorlcd/boot_lcd.cpp @@ -94,7 +94,7 @@ static void init_lvgl_disp_drv() disp_drv.ver_res = LCD_H; /*Set the vertical resolution in pixels*/ disp_drv.full_refresh = 0; -#if !defined(LCD_VERTICAL_INVERT) +#if !LCD_VERTICAL_INVERT disp_drv.direct_mode = 1; #elif defined(RADIO_F16) disp_drv.direct_mode = (hardwareOptions.pcbrev > 0) ? 1 : 0; diff --git a/radio/src/gui/colorlcd/lcd.cpp b/radio/src/gui/colorlcd/lcd.cpp index e554305167a..b4eb7c946d9 100644 --- a/radio/src/gui/colorlcd/lcd.cpp +++ b/radio/src/gui/colorlcd/lcd.cpp @@ -71,7 +71,7 @@ static lv_disp_drv_t* refr_disp = nullptr; static void flushLcd(lv_disp_drv_t* disp_drv, const lv_area_t* area, lv_color_t* color_p) { -#if !defined(LCD_VERTICAL_INVERT) || defined(RADIO_F16) +#if !LCD_VERTICAL_INVERT || defined(RADIO_F16) #if defined(RADIO_F16) if (hardwareOptions.pcbrev > 0) #endif @@ -126,7 +126,7 @@ static void init_lvgl_disp_drv() disp_drv.ver_res = LCD_H; /*Set the vertical resolution in pixels*/ disp_drv.full_refresh = 0; -#if !defined(LCD_VERTICAL_INVERT) +#if !LCD_VERTICAL_INVERT disp_drv.direct_mode = 1; #elif defined(RADIO_F16) disp_drv.direct_mode = (hardwareOptions.pcbrev > 0) ? 1 : 0; diff --git a/radio/src/gui/common/stdlcd/feature_control.h b/radio/src/gui/common/stdlcd/feature_control.h index 9aeda6d4fe7..817c21db3c5 100644 --- a/radio/src/gui/common/stdlcd/feature_control.h +++ b/radio/src/gui/common/stdlcd/feature_control.h @@ -35,13 +35,13 @@ #define CASE_IMU(x) #endif -#if defined(OLED_SCREEN) +#if OLED_SCREEN #define CASE_CONTRAST(x) #else #define CASE_CONTRAST(x) x, #endif -#if defined(BACKLIGHT_GPIO) || defined(OLED_SCREEN) +#if defined(BACKLIGHT_GPIO) || OLED_SCREEN #define CASE_BACKLIGHT(x) x, #else #define CASE_BACKLIGHT(x) @@ -119,10 +119,4 @@ #define CASE_LUA_MODEL_SCRIPTS(x) #endif -#if defined(PCBX9DP) || defined(PCBX9E) - #define CASE_PCBX9E_PCBX9DP(x) x, -#else - #define CASE_PCBX9E_PCBX9DP(x) -#endif - #define CASE_SPLASH_PARAM(x) x, diff --git a/radio/src/gui/common/stdlcd/radio_hardware.cpp b/radio/src/gui/common/stdlcd/radio_hardware.cpp index 7c3c6c09c70..5c0169ba6e5 100644 --- a/radio/src/gui/common/stdlcd/radio_hardware.cpp +++ b/radio/src/gui/common/stdlcd/radio_hardware.cpp @@ -95,7 +95,7 @@ enum { ITEM_RADIO_HARDWARE_JITTER_FILTER, ITEM_RADIO_HARDWARE_RAS, ITEM_RADIO_HARDWARE_SPORT_UPDATE_POWER, -#if (defined(BACKLIGHT_GPIO) || defined(OLED_SCREEN)) && (LCD_W == 128) +#if (defined(BACKLIGHT_GPIO) || OLED_SCREEN) && (LCD_W == 128) ITEM_RADIO_HARDWARE_SCREEN_LABEL, ITEM_RADIO_HARDWARE_SCREEN_INVERT, #endif @@ -367,7 +367,7 @@ static void _init_menu_tab_array(uint8_t* tab, size_t len) tab[ITEM_RADIO_HARDWARE_SPORT_UPDATE_POWER] = HIDDEN_ROW; } -#if (defined(BACKLIGHT_GPIO) || defined(OLED_SCREEN)) && (LCD_W == 128) +#if (defined(BACKLIGHT_GPIO) || OLED_SCREEN) && (LCD_W == 128) tab[ITEM_RADIO_HARDWARE_SCREEN_LABEL] = READONLY_ROW; tab[ITEM_RADIO_HARDWARE_SCREEN_INVERT] = 0; #endif @@ -612,7 +612,7 @@ void menuRadioHardware(event_t event) } break; -#if (defined(BACKLIGHT_GPIO) || defined(OLED_SCREEN)) && (LCD_W == 128) +#if (defined(BACKLIGHT_GPIO) || OLED_SCREEN) && (LCD_W == 128) case ITEM_RADIO_HARDWARE_SCREEN_LABEL: lcdDrawTextAlignedLeft(y, STR_SCREEN); break; diff --git a/radio/src/gui/screenshot.cpp b/radio/src/gui/screenshot.cpp index 8a3f1999b28..d68e887b5ce 100644 --- a/radio/src/gui/screenshot.cpp +++ b/radio/src/gui/screenshot.cpp @@ -167,7 +167,7 @@ const uint8_t BMP_HEADER[] = { /* important colors */ 0x00, 0x00, 0x00, 0x00, #if !defined(COLORLCD) /* grayscale palette */ -#if defined(OLED_SCREEN) +#if OLED_SCREEN 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x00, 0x22, 0x22, 0x22, 0x00, 0x33, 0x33, 0x33, 0x00, 0x44, 0x44, 0x44, 0x00, 0x55, 0x55, 0x55, 0x00, 0x66, 0x66, 0x66, 0x00, 0x77, 0x77, 0x77, 0x00, 0x88, 0x88, 0x88, 0x00, 0x99, 0x99, 0x99, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0xbb, 0xbb, 0xbb, 0x00, diff --git a/radio/src/hal/CMakeLists.txt b/radio/src/hal/CMakeLists.txt index 589d1e8cdb8..7e4ed1485a3 100644 --- a/radio/src/hal/CMakeLists.txt +++ b/radio/src/hal/CMakeLists.txt @@ -1,12 +1,5 @@ -AddHWGenTarget(${HW_DESC_JSON} hal_keys hal_keys.inc) -# add_library(hal_keys OBJECT EXCLUDE_FROM_ALL -# ${CMAKE_CURRENT_BINARY_DIR}/hal_keys.inc -# hal/key_driver.cpp -# ) - set(SRC ${SRC} - ${CMAKE_CURRENT_BINARY_DIR}/hal_keys.inc hal/key_driver.cpp hal/module_port.cpp hal/adc_driver.cpp diff --git a/radio/src/lua/CMakeLists.txt b/radio/src/lua/CMakeLists.txt index 787c8ee8da7..47e576c8a11 100644 --- a/radio/src/lua/CMakeLists.txt +++ b/radio/src/lua/CMakeLists.txt @@ -27,21 +27,6 @@ set(SRC ${SRC} lua/lua_event.cpp ) -AddHWGenTarget(${HW_DESC_JSON} lua_inputs lua_inputs.inc) -AddHWGenTarget(${HW_DESC_JSON} lua_mixsrc lua_mixsrc.inc) -AddHWGenTarget(${HW_DESC_JSON} lua_keys lua_keys.inc) - -set(SRC ${SRC} - ${CMAKE_CURRENT_BINARY_DIR}/lua_inputs.inc - ${CMAKE_CURRENT_BINARY_DIR}/lua_mixsrc.inc - ${CMAKE_CURRENT_BINARY_DIR}/lua_keys.inc -) - -# helper target for testing purposes -add_custom_target(lua_inputs DEPENDS ${HW_DESC_JSON} lua_inputs.inc) -add_custom_target(lua_mixsrc DEPENDS ${HW_DESC_JSON} lua_mixsrc.inc) -add_custom_target(lua_keys DEPENDS ${HW_DESC_JSON} lua_keys.inc) - if(GUI_DIR STREQUAL colorlcd) set(SRC ${SRC} lua/api_colorlcd.cpp lua/api_colorlcd_lvgl.cpp lua/widgets.cpp) else() diff --git a/radio/src/lua/api_general.cpp b/radio/src/lua/api_general.cpp index dddda874642..faf23a44d07 100644 --- a/radio/src/lua/api_general.cpp +++ b/radio/src/lua/api_general.cpp @@ -2897,6 +2897,7 @@ static int luaGetTrainerStatus(lua_State * L) // To simplify code below #if !defined(BLING_LED_STRIP_LENGTH) + #define BLING_LED_STRIP_START 0 #define BLING_LED_STRIP_LENGTH 0 #endif #if !defined(CFS_LED_STRIP_LENGTH) diff --git a/radio/src/storage/yaml/CMakeLists.txt b/radio/src/storage/yaml/CMakeLists.txt index 68fbf9bb7fd..8f3bdbca3dc 100644 --- a/radio/src/storage/yaml/CMakeLists.txt +++ b/radio/src/storage/yaml/CMakeLists.txt @@ -101,10 +101,3 @@ add_custom_target(yaml_data ${RADIO_DIRECTORY}/src/myeeprom.h ${RADIO_DIRECTORY}/util/generate_yaml.py ) - -AddHWGenTarget(${HW_DESC_JSON} yaml_inputs yaml_inputs.inc) -set(SRC ${SRC} ${CMAKE_CURRENT_BINARY_DIR}/yaml_inputs.inc) - -# helper target for testing purposes -add_custom_target(yaml_inputs DEPENDS ${HW_DESC_JSON} yaml_inputs.inc) - diff --git a/radio/src/targets/common/arm/stm32/CMakeLists.txt b/radio/src/targets/common/arm/stm32/CMakeLists.txt index c5beb411617..03c0d61381b 100644 --- a/radio/src/targets/common/arm/stm32/CMakeLists.txt +++ b/radio/src/targets/common/arm/stm32/CMakeLists.txt @@ -128,6 +128,8 @@ if(NOT NATIVE_BUILD) ${STM32_DRIVER_DIR}/stm32_i2c_driver.cpp ) + add_dependencies(stm32_drivers hal_settings) + set(FIRMWARE_SRC ${FIRMWARE_SRC} $) set(FIRMWARE_SRC ${FIRMWARE_SRC} $) diff --git a/radio/src/targets/common/arm/stm32/rotary_encoder_driver.cpp b/radio/src/targets/common/arm/stm32/rotary_encoder_driver.cpp index a8658dec3e5..76831c135ac 100644 --- a/radio/src/targets/common/arm/stm32/rotary_encoder_driver.cpp +++ b/radio/src/targets/common/arm/stm32/rotary_encoder_driver.cpp @@ -85,7 +85,7 @@ void rotaryEncoderCheck() }; #endif - uint8_t pins = ROTARY_ENCODER_POSITION(); + uint8_t pins = ROTARY_ENCODER_POSITION; // No change - do nothing if (pins == lastPins) { @@ -230,7 +230,7 @@ void rotaryEncoderInit() NVIC_SetPriority(ROTARY_ENCODER_TIMER_IRQn, 7); // Get initial position - lastPins = ROTARY_ENCODER_POSITION(); + lastPins = ROTARY_ENCODER_POSITION; skipUntilDetent = !ON_DETENT(lastPins); } diff --git a/radio/src/targets/horus/board.cpp b/radio/src/targets/horus/board.cpp index 04308fd289e..bbe71bb0a48 100644 --- a/radio/src/targets/horus/board.cpp +++ b/radio/src/targets/horus/board.cpp @@ -266,7 +266,7 @@ void boardOff() rgbLedClearAll(); #endif -#if defined(STATUS_LEDS) && !defined(BOOT) +#if STATUS_LEDS && !defined(BOOT) ledOff(); #endif backlightEnable(0); diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index 4ba08f6f501..ac93332d46e 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -21,11 +21,7 @@ #pragma once -#define CPU_FREQ 168000000 -#define PERI1_FREQUENCY 42000000 -#define PERI2_FREQUENCY 84000000 -#define TIMER_MULT_APB1 2 -#define TIMER_MULT_APB2 2 +#include "hal_settings.h" #define TELEMETRY_EXTI_PRIO 0 // required for soft serial @@ -33,7 +29,7 @@ #define ROTARY_ENCODER_GPIO GPIOH #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_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 #if !defined(USE_EXTI15_10_IRQ) @@ -143,22 +139,6 @@ #pragma message "PCBREV_TOUCH_PULL_TYPE not defined, defaulting to GPIO_IN_PD" #endif -// Led -#define STATUS_LEDS -#if defined(PCBX12S) - #define LED_GPIO GPIO_PIN(GPIOI, 5) // PI.05 -#elif defined(RADIO_T15) - #define LED_RED_GPIO GPIO_PIN(GPIOI, 14) //PI.14 - #define LED_GREEN_GPIO GPIO_PIN(GPIOC, 13) //PC.13 - #define LED_BLUE_GPIO GPIO_PIN(GPIOE, 3) //PE.03 -#elif defined(PCBX10) - #define LED_RED_GPIO GPIO_PIN(GPIOE, 2) // PE.02 - #if !defined(MANUFACTURER_FRSKY) // no green on X10/X10 Express - #define LED_GREEN_GPIO GPIO_PIN(GPIOE, 4) // PE.04 - #endif - #define LED_BLUE_GPIO GPIO_PIN(GPIOE, 5) // PE.05 -#endif - // Customisable switches leds #if defined(RADIO_T15) #define FSLED_GPIO_PIN_1 GPIO_PIN(GPIOA, 15) //PA.15 @@ -300,19 +280,12 @@ #define LCD_SPI_SCK_GPIO_PIN LL_GPIO_PIN_2 // PE.02 #define LCD_SPI_MISO_GPIO_PIN LL_GPIO_PIN_5 // PE.05 #define LCD_SPI_MOSI_GPIO_PIN LL_GPIO_PIN_6 // PE.06 - #define LTDC_IRQ_PRIO 4 - #define DMA_SCREEN_IRQ_PRIO 6 #else #if defined(PCBX12S) #define LCD_GPIO_NRST GPIO_PIN(GPIOF, 10) // PF.10 #elif defined(PCBX10) #define LCD_GPIO_NRST GPIO_PIN(GPIOI, 10) // PI.10 #endif -#if defined(PCBX10) && !defined(RADIO_T18) && !defined(RADIO_V16) - #define LCD_VERTICAL_INVERT -#endif -#define LTDC_IRQ_PRIO 4 -#define DMA_SCREEN_IRQ_PRIO 6 #endif // Backlight @@ -501,28 +474,7 @@ #endif // Haptic -#define HAPTIC_PWM -#if defined(PCBX12S) - #define HAPTIC_GPIO GPIO_PIN(GPIOA, 2) // PA.02 - #define HAPTIC_GPIO_TIMER TIM9 - #define HAPTIC_GPIO_AF GPIO_AF3 - #define HAPTIC_TIMER_OUTPUT_ENABLE TIM_CCER_CC1E - #define HAPTIC_TIMER_MODE TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 - #define HAPTIC_TIMER_COMPARE_VALUE HAPTIC_GPIO_TIMER->CCR1 -#elif defined(RADIO_T15) // TIM2_CH1 - #define HAPTIC_GPIO GPIO_PIN(GPIOA, 5) // PA.05 - #define HAPTIC_GPIO_TIMER TIM2 - #define HAPTIC_GPIO_AF GPIO_AF1 - #define HAPTIC_TIMER_OUTPUT_ENABLE TIM_CCER_CC1E | TIM_CCER_CC1NE; - #define HAPTIC_TIMER_MODE TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1PE - #define HAPTIC_TIMER_COMPARE_VALUE HAPTIC_GPIO_TIMER->CCR1 -#elif defined(PCBX10) - #define HAPTIC_GPIO GPIO_PIN(GPIOE, 6) // PE.06 - #define HAPTIC_GPIO_TIMER TIM9 - #define HAPTIC_GPIO_AF GPIO_AF3 - #define HAPTIC_TIMER_OUTPUT_ENABLE TIM_CCER_CC2E - #define HAPTIC_TIMER_MODE TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 - #define HAPTIC_TIMER_COMPARE_VALUE HAPTIC_GPIO_TIMER->CCR2 +#if !defined(PCBX12S) && !defined(RADIO_T15) && defined(PCBX10) // FlySky Hall Sticks #define FLYSKY_HALL_SERIAL_USART UART4 #define FLYSKY_HALL_DMA_Channel LL_DMA_CHANNEL_4 @@ -534,24 +486,6 @@ #define FLYSKY_HALL_DMA_Stream_TX LL_DMA_STREAM_4 #endif -#if defined(RADIO_V16) - // LED Strip - #define LED_STRIP_LENGTH 40 - #define BLING_LED_STRIP_START 6 - #define BLING_LED_STRIP_LENGTH 34 - #define LED_STRIP_GPIO GPIO_PIN(GPIOA, 10) // PA.10 / TIM1_CH3 - #define LED_STRIP_GPIO_AF LL_GPIO_AF_1 // TIM1/2 - #define LED_STRIP_TIMER TIM1 - #define LED_STRIP_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) - #define LED_STRIP_TIMER_CHANNEL LL_TIM_CHANNEL_CH3 - #define LED_STRIP_TIMER_DMA DMA2 - #define LED_STRIP_TIMER_DMA_CHANNEL LL_DMA_CHANNEL_6 - #define LED_STRIP_TIMER_DMA_STREAM LL_DMA_STREAM_5 - #define LED_STRIP_TIMER_DMA_IRQn DMA2_Stream5_IRQn - #define LED_STRIP_TIMER_DMA_IRQHandler DMA2_Stream5_IRQHandler - #define LED_STRIP_REFRESH_PERIOD 50 //ms -#endif - // Internal PXX1 Module: // -> let's assume all internal XJT modules used are either X10 or X12S type #define EXTERNAL_ANTENNA @@ -691,17 +625,6 @@ #define TRAINER_MODULE_CPPM_GPIO_AF LL_GPIO_AF_2 #endif -// Millisecond timer -#define MS_TIMER TIM14 -#define MS_TIMER_IRQn TIM8_TRG_COM_TIM14_IRQn -#define MS_TIMER_IRQHandler TIM8_TRG_COM_TIM14_IRQHandler - -// Mixer scheduler timer -#define MIXER_SCHEDULER_TIMER TIM13 -#define MIXER_SCHEDULER_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) -#define MIXER_SCHEDULER_TIMER_IRQn TIM8_UP_TIM13_IRQn -#define MIXER_SCHEDULER_TIMER_IRQHandler TIM8_UP_TIM13_IRQHandler - // Bluetooth #define STORAGE_BLUETOOTH #if defined(BLUETOOTH) @@ -744,15 +667,3 @@ // SDRAM #define SDRAM_BANK2 - -#if defined(RADIO_T15) -#define LCD_W 480 -#define LCD_H 320 -#else -#define LCD_W 480 -#define LCD_H 272 -#endif - -#define LCD_PHYS_H LCD_H -#define LCD_PHYS_W LCD_W -#define LCD_DEPTH 16 diff --git a/radio/src/targets/horus/lcd_driver.cpp b/radio/src/targets/horus/lcd_driver.cpp index c6aab824fe3..724808e0c54 100644 --- a/radio/src/targets/horus/lcd_driver.cpp +++ b/radio/src/targets/horus/lcd_driver.cpp @@ -58,7 +58,7 @@ static LTDC_HandleTypeDef hltdc; static void* initialFrameBuffer = nullptr; -#if defined(LCD_VERTICAL_INVERT) +#if LCD_VERTICAL_INVERT typedef uint16_t pixel_t; static pixel_t _LCD_BUF_1[DISPLAY_BUFFER_SIZE] __SDRAM; static pixel_t _LCD_BUF_2[DISPLAY_BUFFER_SIZE] __SDRAM; @@ -137,7 +137,7 @@ static void _update_frame_buffer_addr(uint16_t* addr) static void startLcdRefresh(lv_disp_drv_t *disp_drv, uint16_t *buffer, const rect_t ©_area) { -#if defined(LCD_VERTICAL_INVERT) +#if LCD_VERTICAL_INVERT #if defined(RADIO_F16) if(hardwareOptions.pcbrev > 0) { // Direct mode @@ -382,7 +382,7 @@ void LCD_LayerInit() layer.ImageHeight = LCD_PHYS_H; /* Start Address configuration : the LCD Frame buffer is defined on SDRAM w/ Offset */ -#if defined(LCD_VERTICAL_INVERT) +#if LCD_VERTICAL_INVERT intptr_t layer_address; #if defined(RADIO_F16) if (hardwareOptions.pcbrev > 0) @@ -423,7 +423,7 @@ void LCD_Init(void) extern "C" void lcdInit() { -#if defined(LCD_VERTICAL_INVERT) +#if LCD_VERTICAL_INVERT // Clear buffer first memset(_LCD_BUF_1, 0, sizeof(_LCD_BUF_1)); memset(_LCD_BUF_2, 0, sizeof(_LCD_BUF_2)); diff --git a/radio/src/targets/pa01/hal.h b/radio/src/targets/pa01/hal.h index 0b11d2a8e77..1524f14ccb8 100644 --- a/radio/src/targets/pa01/hal.h +++ b/radio/src/targets/pa01/hal.h @@ -22,12 +22,7 @@ #ifndef _HAL_H_ #define _HAL_H_ -#define CPU_FREQ 400000000 - -#define PERI1_FREQUENCY 100000000 -#define PERI2_FREQUENCY 100000000 -#define TIMER_MULT_APB1 2 -#define TIMER_MULT_APB2 2 +#include "hal_settings.h" /* Timers Allocation: * TIM3 = Haptic / Backlight @@ -107,12 +102,6 @@ #define LCD_SPI_MISO GPIO_PIN(GPIOG, 9) #define LCD_SPI_BAUD 50000000 -// Backlight -#define BACKLIGHT_GPIO GPIO_PIN(GPIOB, 03) // TIM2_CH2 -#define BACKLIGHT_TIMER TIM2 -#define BACKLIGHT_GPIO_AF GPIO_AF1 -#define BACKLIGHT_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) - // QSPI Flash #define QSPI_MAX_FREQ 80000000U // 80 MHz #define QSPI_CLK_GPIO GPIO_PIN(GPIOB, 2) @@ -172,13 +161,6 @@ #define I2C_B2_GPIO_AF LL_GPIO_AF_4 #define I2C_B2_CLK_RATE 400000 - -// Haptic: TIM3_CH2 -#define HAPTIC_PWM -#define HAPTIC_GPIO GPIO_PIN(GPIOA, 15) // PA.15 -#define HAPTIC_GPIO_TIMER TIM2 -#define HAPTIC_GPIO_AF GPIO_AF1 - // Flysky Hall Stick #define FLYSKY_HALL_SERIAL_USART USART2 @@ -191,30 +173,6 @@ #define FLYSKY_HALL_DMA_Stream_TX LL_DMA_STREAM_4 #define FLYSKY_HALL_DMA_Channel LL_DMAMUX1_REQ_USART2_RX -// TODO LED Strip PF.06 - -// LED Strip -#define LED_STRIP_LENGTH 14 -#define BLING_LED_STRIP_START 10 -#define BLING_LED_STRIP_LENGTH 4 -#define CFS_LED_STRIP_START 0 -#define CFS_LED_STRIP_LENGTH 8 -#define CFS_LEDS_PER_SWITCH 2 -#define LED_STRIP_GPIO GPIO_PIN(GPIOF, 06) // PF.06 / TIM16_CH1 -#define LED_STRIP_GPIO_AF LL_GPIO_AF_1 // TIM1/2/16/17 -#define LED_STRIP_TIMER TIM16 -#define LED_STRIP_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) -#define LED_STRIP_TIMER_CHANNEL LL_TIM_CHANNEL_CH1 -#define LED_STRIP_TIMER_DMA DMA1 -#define LED_STRIP_TIMER_DMA_CHANNEL LL_DMAMUX1_REQ_TIM16_UP -#define LED_STRIP_TIMER_DMA_STREAM LL_DMA_STREAM_0 -#define LED_STRIP_TIMER_DMA_IRQn DMA1_Stream0_IRQn -#define LED_STRIP_TIMER_DMA_IRQHandler DMA1_Stream0_IRQHandler -#define LED_STRIP_REFRESH_PERIOD 50 //ms -#define RGB_LED_OFFSET 10 - -#define STATUS_LEDS - #define LED_CHARGING_START 0 #define LED_CHARGING_END 13 @@ -286,48 +244,4 @@ #define TOUCH_I2C_BUS I2C_Bus_1 #define TOUCH_I2C_CLK_RATE 100000 - -// Rotary Encoder -#define ROTARY_ENCODER_NAVIGATION -#define ROTARY_ENCODER_GPIO GPIOA -#define ROTARY_ENCODER_GPIO_PIN_A LL_GPIO_PIN_6 // PA.06 -#define ROTARY_ENCODER_GPIO_PIN_B LL_GPIO_PIN_7 // PA.07 -#define ROTARY_ENCODER_POSITION() ((ROTARY_ENCODER_GPIO->IDR >> 6) & 0x03) -#define ROTARY_ENCODER_EXTI_LINE1 LL_EXTI_LINE_6 -#define ROTARY_ENCODER_EXTI_LINE2 LL_EXTI_LINE_7 -// port extender interrupt -#if !defined(USE_EXTI9_5_IRQ) - #define USE_EXTI9_5_IRQ - #define EXTI9_5_IRQ_Priority 5 -#endif -#define ROTARY_ENCODER_EXTI_PORT LL_SYSCFG_EXTI_PORTA -#define ROTARY_ENCODER_EXTI_SYS_LINE1 LL_SYSCFG_EXTI_LINE6 -#define ROTARY_ENCODER_EXTI_SYS_LINE2 LL_SYSCFG_EXTI_LINE7 -#define ROTARY_ENCODER_TIMER TIM17 -#define ROTARY_ENCODER_TIMER_IRQn TIM17_IRQn -#define ROTARY_ENCODER_TIMER_IRQHandler TIM17_IRQHandler - -// Millisecond timer -#define MS_TIMER TIM14 -#define MS_TIMER_IRQn TIM8_TRG_COM_TIM14_IRQn -#define MS_TIMER_IRQHandler TIM8_TRG_COM_TIM14_IRQHandler - -// Mixer scheduler timer -#define MIXER_SCHEDULER_TIMER TIM12 -#define MIXER_SCHEDULER_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) -#define MIXER_SCHEDULER_TIMER_IRQn TIM8_BRK_TIM12_IRQn -#define MIXER_SCHEDULER_TIMER_IRQHandler TIM8_BRK_TIM12_IRQHandler - -// IMU / Gyro -#define IMU_I2C_BUS I2C_Bus_2 -#define IMU_I2C_ADDRESS 0x6A - -#define LCD_W 320 -#define LCD_H 240 - -#define LCD_PHYS_W LCD_W -#define LCD_PHYS_H LCD_H - -#define LCD_DEPTH 16 - #endif // _HAL_H_ diff --git a/radio/src/targets/pl18/CMakeLists.txt b/radio/src/targets/pl18/CMakeLists.txt index 4fe0c4a3ada..137c1620106 100644 --- a/radio/src/targets/pl18/CMakeLists.txt +++ b/radio/src/targets/pl18/CMakeLists.txt @@ -203,7 +203,6 @@ add_dependencies(board_bl ${BITMAPS_TARGET}) if(PCBREV STREQUAL NB4P) target_sources(board_bl PUBLIC - ${CMAKE_CURRENT_BINARY_DIR}/stm32_adc_inputs.inc boards/generic_stm32/analog_inputs.cpp ) endif() diff --git a/radio/src/targets/pl18/hal.h b/radio/src/targets/pl18/hal.h index 3b453937e6d..79d763454fb 100644 --- a/radio/src/targets/pl18/hal.h +++ b/radio/src/targets/pl18/hal.h @@ -21,13 +21,7 @@ #pragma once -#define CPU_FREQ 168000000 - -// HSI is at 168Mhz (over-drive is not enabled!) -#define PERI1_FREQUENCY 42000000 -#define PERI2_FREQUENCY 84000000 -#define TIMER_MULT_APB1 2 -#define TIMER_MULT_APB2 2 +#include "hal_settings.h" /* Timers Allocation: * TIM1 = Haptic @@ -252,41 +246,11 @@ #define LCD_SPI_SCK_GPIO GPIO_PIN(GPIOE, 2) // PE.02 #define LCD_SPI_MISO_GPIO GPIO_PIN(GPIOE, 5) // PE.05 #define LCD_SPI_MOSI_GPIO GPIO_PIN(GPIOE, 6) // PE.06 -#define LTDC_IRQ_PRIO 4 -#define DMA_SCREEN_IRQ_PRIO 6 - -// Backlight -// TODO TIM3, TIM8, TIM14, review the channel in backlight_driver.cpp according to the chosen timer -#define BACKLIGHT_RCC_APB2Periph 0 -#define BACKLIGHT_GPIO GPIO_PIN(GPIOA, 15) // PA.15 -#define BACKLIGHT_TIMER TIM2 -#define BACKLIGHT_GPIO_AF GPIO_AF1 -#define BACKLIGHT_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) //used in BOOTLOADER #define SERIAL_RCC_AHB1Periph 0 #define SERIAL_RCC_APB1Periph 0 -#if defined(RADIO_NB4P) -// Rotary Encoder -#define ROTARY_ENCODER_GPIO GPIOH -#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 -#if !defined(USE_EXTI15_10_IRQ) - #define USE_EXTI15_10_IRQ - #define EXTI15_10_IRQ_Priority 5 -#endif -#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 TIM13 -#define ROTARY_ENCODER_TIMER_IRQn TIM8_UP_TIM13_IRQn -#define ROTARY_ENCODER_TIMER_IRQHandler TIM8_UP_TIM13_IRQHandler -#endif - #if defined(RADIO_NV14_FAMILY) || defined(RADIO_PL18U) // SD card #if defined(RADIO_PL18U) @@ -389,25 +353,6 @@ #define EXTI9_5_IRQ_Priority 9 #endif -// Haptic: TIM1_CH1 -#if defined(RADIO_NB4P) -#define HAPTIC_PWM -#define HAPTIC_GPIO GPIO_PIN(GPIOB, 0) // PB.00 -#define HAPTIC_GPIO_TIMER TIM1 -#define HAPTIC_GPIO_AF GPIO_AF1 -#define HAPTIC_TIMER_OUTPUT_ENABLE TIM_CCER_CC2NE -#define HAPTIC_TIMER_MODE TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2PE -#define HAPTIC_TIMER_COMPARE_VALUE HAPTIC_GPIO_TIMER->CCR2 -#else -#define HAPTIC_PWM -#define HAPTIC_GPIO GPIO_PIN(GPIOA, 8) // PA.08 -#define HAPTIC_GPIO_TIMER TIM1 -#define HAPTIC_GPIO_AF GPIO_AF1 -#define HAPTIC_TIMER_OUTPUT_ENABLE TIM_CCER_CC1E | TIM_CCER_CC1NE -#define HAPTIC_TIMER_MODE TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1PE -#define HAPTIC_TIMER_COMPARE_VALUE HAPTIC_GPIO_TIMER->CCR1 -#endif - // Flysky Hall Stick #define FLYSKY_HALL_SERIAL_USART UART4 #define FLYSKY_HALL_DMA_Channel LL_DMA_CHANNEL_4 @@ -424,26 +369,6 @@ #define FLYSKY_HALL_DMA_Stream_RX LL_DMA_STREAM_2 #define FLYSKY_HALL_DMA_Stream_TX LL_DMA_STREAM_4 -// LED Strip -#if !defined(RADIO_NV14_FAMILY) - #define LED_STRIP_LENGTH 4 - #define BLING_LED_STRIP_START 0 - #define BLING_LED_STRIP_LENGTH 4 - #define LED_STRIP_GPIO GPIO_PIN(GPIOH, 12) // PH.12 / TIM5_CH3 - #define LED_STRIP_GPIO_AF LL_GPIO_AF_2 // TIM3/4/5 - #define LED_STRIP_TIMER TIM5 - #define LED_STRIP_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) - #define LED_STRIP_TIMER_CHANNEL LL_TIM_CHANNEL_CH3 - #define LED_STRIP_TIMER_DMA DMA1 - #define LED_STRIP_TIMER_DMA_CHANNEL LL_DMA_CHANNEL_6 - #define LED_STRIP_TIMER_DMA_STREAM LL_DMA_STREAM_0 - #define LED_STRIP_TIMER_DMA_IRQn DMA1_Stream0_IRQn - #define LED_STRIP_TIMER_DMA_IRQHandler DMA1_Stream0_IRQHandler - #define LED_STRIP_REFRESH_PERIOD 50 //ms - - #define STATUS_LEDS -#endif - // Internal Module #if defined(RADIO_PL18) || defined(RADIO_PL18U) #if defined(RADIO_PL18U) @@ -603,34 +528,8 @@ #define BT_CMD_MODE_GPIO GPIO_PIN(GPIOH, 6) // PH.06 #endif -// Millisecond timer -#define MS_TIMER TIM14 -#define MS_TIMER_IRQn TIM8_TRG_COM_TIM14_IRQn -#define MS_TIMER_IRQHandler TIM8_TRG_COM_TIM14_IRQHandler - -// Mixer scheduler timer -#define MIXER_SCHEDULER_TIMER TIM12 -#define MIXER_SCHEDULER_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) -#define MIXER_SCHEDULER_TIMER_IRQn TIM8_BRK_TIM12_IRQn -#define MIXER_SCHEDULER_TIMER_IRQHandler TIM8_BRK_TIM12_IRQHandler - // SDRAM #define SDRAM_BANK1 #if defined(RADIO_PL18U) #define SDRAM_32MB #endif - -// LCD Settings -#if defined(RADIO_NB4P) || defined(RADIO_NV14_FAMILY) - #define LCD_W 320 - #define LCD_H 480 -#else - #define LCD_W 480 - #define LCD_H 320 -#endif - -#define LCD_PHYS_W 320 -#define LCD_PHYS_H 480 - -#define LCD_DEPTH 16 -#define LCD_CONTRAST_DEFAULT 20 diff --git a/radio/src/targets/simu/CMakeLists.txt b/radio/src/targets/simu/CMakeLists.txt index 0f71244e720..8394c20b501 100644 --- a/radio/src/targets/simu/CMakeLists.txt +++ b/radio/src/targets/simu/CMakeLists.txt @@ -40,17 +40,6 @@ set(SIMU_DRIVERS abnormal_reboot.cpp ) -set(HW_DESC_JSON ${FLAVOUR}.json) -AddHWGenTarget(${HW_DESC_JSON} simu_keys simu_keys.inc) -AddHWGenTarget(${HW_DESC_JSON} simu_switches simu_switches.inc) -AddHWGenTarget(${HW_DESC_JSON} hal_adc_inputs hal_adc_inputs.inc) - -set(SIMU_DRIVERS ${SIMU_DRIVERS} - ${CMAKE_CURRENT_BINARY_DIR}/simu_keys.inc - ${CMAKE_CURRENT_BINARY_DIR}/simu_switches.inc - ${CMAKE_CURRENT_BINARY_DIR}/hal_adc_inputs.inc -) - include_directories(${CMAKE_CURRENT_BINARY_DIR}) # Pack all simu driver sources into an object lib @@ -58,6 +47,8 @@ add_library(simu_drivers OBJECT EXCLUDE_FROM_ALL ${SIMU_DRIVERS} ) +add_dependencies(simu_drivers simu_keys simu_switches hal_settings hal_keys hal_adc_inputs lua_inputs lua_mixsrc lua_keys yaml_inputs) + get_property(SIMU_SRC_OPTIONS TARGET radiolib_native PROPERTY INTERFACE_COMPILE_OPTIONS diff --git a/radio/src/targets/simu/simulcd.cpp b/radio/src/targets/simu/simulcd.cpp index 8530bae2ab1..1f331c18807 100644 --- a/radio/src/targets/simu/simulcd.cpp +++ b/radio/src/targets/simu/simulcd.cpp @@ -53,7 +53,7 @@ void lcdRefresh() #include -#if defined(LCD_VERTICAL_INVERT) +#if LCD_VERTICAL_INVERT static pixel_t _LCD_BUF1[DISPLAY_BUFFER_SIZE] __SDRAM; static pixel_t _LCD_BUF2[DISPLAY_BUFFER_SIZE] __SDRAM; @@ -98,7 +98,7 @@ pixel_t* simuLcdBuf = nullptr; static void simuRefreshLcd(lv_disp_drv_t * disp_drv, uint16_t *buffer, const rect_t& copy_area) { -#if !defined(LCD_VERTICAL_INVERT) // rename into "Use direct mode" ??? +#if !LCD_VERTICAL_INVERT // rename into "Use direct mode" ??? // Direct mode: driver flush is called on final LVGL flush // simply set LVGL's buffer as our current frame buffer @@ -162,7 +162,7 @@ void lcdSetInitalFrameBuffer(void*) {} void lcdInit() { -#if defined(LCD_VERTICAL_INVERT) +#if LCD_VERTICAL_INVERT memset(_LCD_BUF1, 0, sizeof(_LCD_BUF1)); memset(_LCD_BUF2, 0, sizeof(_LCD_BUF2)); #endif diff --git a/radio/src/targets/st16/hal.h b/radio/src/targets/st16/hal.h index 3f00d817d29..d63d2fc584a 100644 --- a/radio/src/targets/st16/hal.h +++ b/radio/src/targets/st16/hal.h @@ -36,13 +36,7 @@ // - Ext. Mod. TIM4_UP: DMA2 stream 6 // - -#define CPU_FREQ 400000000 - -#define PERI1_FREQUENCY 100000000 -#define PERI2_FREQUENCY 100000000 -#define TIMER_MULT_APB1 2 -#define TIMER_MULT_APB2 2 +#include "hal_settings.h" #define ADC_VREF_PREC2 329 @@ -126,14 +120,6 @@ #define LCD_SPI_GPIO GPIOE #define LCD_SPI_SCK_GPIO_PIN LL_GPIO_PIN_4 // PE.04 #define LCD_SPI_MOSI_GPIO_PIN LL_GPIO_PIN_3 // PE.03 -#define LTDC_IRQ_PRIO 4 -#define DMA_SCREEN_IRQ_PRIO 6 - -// Backlight -#define BACKLIGHT_GPIO GPIO_PIN(GPIOC, 06) // TIM3_CH1 -#define BACKLIGHT_TIMER TIM3 -#define BACKLIGHT_GPIO_AF GPIO_AF2 -#define BACKLIGHT_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) // QSPI Flash #define QSPI_MAX_FREQ 80000000U // 80 MHz @@ -206,15 +192,6 @@ #define I2C_B2_GPIO_AF LL_GPIO_AF_4 #define I2C_B2_CLK_RATE 400000 -// Haptic: TIM3_CH2 -#define HAPTIC_PWM -#define HAPTIC_GPIO GPIO_PIN(GPIOB, 5) // PB.05 -#define HAPTIC_GPIO_TIMER TIM3 -#define HAPTIC_GPIO_AF GPIO_AF2 -#define HAPTIC_TIMER_OUTPUT_ENABLE TIM_CCER_CC2E | TIM_CCER_CC2NE; -#define HAPTIC_TIMER_MODE TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2PE -#define HAPTIC_TIMER_COMPARE_VALUE HAPTIC_GPIO_TIMER->CCR2 - // Flysky Hall Stick #define FLYSKY_HALL_SERIAL_USART USART2 @@ -227,25 +204,6 @@ #define FLYSKY_HALL_DMA_Stream_TX LL_DMA_STREAM_4 #define FLYSKY_HALL_DMA_Channel LL_DMAMUX1_REQ_USART2_RX -// LED Strip -#define LED_STRIP_LENGTH 24 -#define BLING_LED_STRIP_START 0 -#define BLING_LED_STRIP_LENGTH 12 -#define CFS_LED_STRIP_START 12 -#define CFS_LED_STRIP_LENGTH 12 -#define CFS_LEDS_PER_SWITCH 2 -#define LED_STRIP_GPIO GPIO_PIN(GPIOA, 15) // PA.15 / TIM2_CH1 -#define LED_STRIP_GPIO_AF LL_GPIO_AF_1 // TIM1/2/16/17 -#define LED_STRIP_TIMER TIM2 -#define LED_STRIP_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) -#define LED_STRIP_TIMER_CHANNEL LL_TIM_CHANNEL_CH1 -#define LED_STRIP_TIMER_DMA DMA1 -#define LED_STRIP_TIMER_DMA_CHANNEL LL_DMAMUX1_REQ_TIM2_UP -#define LED_STRIP_TIMER_DMA_STREAM LL_DMA_STREAM_0 -#define LED_STRIP_TIMER_DMA_IRQn DMA1_Stream0_IRQn -#define LED_STRIP_TIMER_DMA_IRQHandler DMA1_Stream0_IRQHandler -#define LED_STRIP_REFRESH_PERIOD 50 //ms -#define STATUS_LEDS #define LED_CHARGING_START 12 #define LED_CHARGING_END 23 @@ -332,50 +290,3 @@ #define USE_EXTI15_10_IRQ #define EXTI15_10_IRQ_Priority 5 #endif - -#define IMU_I2C_BUS I2C_Bus_1 -#define IMU_I2C_ADDRESS 0x6A - -//ROTARY emulation for trims as buttons -#define ROTARY_ENCODER_NAVIGATION -// Rotary Encoder -#define ROTARY_ENCODER_INVERTED -#define ROTARY_ENCODER_GPIO GPIOG -#define ROTARY_ENCODER_GPIO_PIN_A LL_GPIO_PIN_2 // PG.02 -#define ROTARY_ENCODER_GPIO_PIN_B LL_GPIO_PIN_3 // PG.03 -#define ROTARY_ENCODER_POSITION() ((ROTARY_ENCODER_GPIO->IDR >> 2) & 0x03) -#define ROTARY_ENCODER_EXTI_LINE1 LL_EXTI_LINE_2 -#define ROTARY_ENCODER_EXTI_LINE2 LL_EXTI_LINE_3 -#if !defined(USE_EXTI2_IRQ) - #define USE_EXTI2_IRQ - #define EXTI2_IRQ_Priority 5 -#endif -#if !defined(USE_EXTI3_IRQ) - #define USE_EXTI3_IRQ - #define EXTI3_IRQ_Priority 5 -#endif -#define ROTARY_ENCODER_EXTI_PORT LL_SYSCFG_EXTI_PORTG -#define ROTARY_ENCODER_EXTI_SYS_LINE1 LL_SYSCFG_EXTI_LINE2 -#define ROTARY_ENCODER_EXTI_SYS_LINE2 LL_SYSCFG_EXTI_LINE3 -#define ROTARY_ENCODER_TIMER TIM17 -#define ROTARY_ENCODER_TIMER_IRQn TIM17_IRQn -#define ROTARY_ENCODER_TIMER_IRQHandler TIM17_IRQHandler - -// Millisecond timer -#define MS_TIMER TIM14 -#define MS_TIMER_IRQn TIM8_TRG_COM_TIM14_IRQn -#define MS_TIMER_IRQHandler TIM8_TRG_COM_TIM14_IRQHandler - -// Mixer scheduler timer -#define MIXER_SCHEDULER_TIMER TIM12 -#define MIXER_SCHEDULER_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) -#define MIXER_SCHEDULER_TIMER_IRQn TIM8_BRK_TIM12_IRQn -#define MIXER_SCHEDULER_TIMER_IRQHandler TIM8_BRK_TIM12_IRQHandler - -#define LCD_W 480 -#define LCD_H 320 - -#define LCD_PHYS_W LCD_H -#define LCD_PHYS_H LCD_W - -#define LCD_DEPTH 16 diff --git a/radio/src/targets/t15pro/hal.h b/radio/src/targets/t15pro/hal.h index a8b5804a0c9..dabf0f06e00 100644 --- a/radio/src/targets/t15pro/hal.h +++ b/radio/src/targets/t15pro/hal.h @@ -66,12 +66,7 @@ USART6: EXTMODULE_USART #ifndef _HAL_H_ #define _HAL_H_ -#define CPU_FREQ 480000000 - -#define PERI1_FREQUENCY 120000000 -#define PERI2_FREQUENCY 120000000 -#define TIMER_MULT_APB1 2 -#define TIMER_MULT_APB2 2 +#include "hal_settings.h" // Keys #define KEYS_GPIO_REG_PAGEDN GPIOI @@ -112,69 +107,6 @@ USART6: EXTMODULE_USART #define TRIMS_GPIO_REG_RVU GPIOB #define TRIMS_GPIO_PIN_RVU LL_GPIO_PIN_15 -// Switches -#define SWITCHES_GPIO_REG_A_H GPIOB -#define SWITCHES_GPIO_PIN_A_H LL_GPIO_PIN_0 // PB.00 -#define SWITCHES_GPIO_REG_A_L GPIOC -#define SWITCHES_GPIO_PIN_A_L LL_GPIO_PIN_4 // PC.04 -#define SWITCHES_A_INVERTED - -#define SWITCHES_GPIO_REG_B_H GPIOD -#define SWITCHES_GPIO_PIN_B_H LL_GPIO_PIN_4 // PD.04 -#define SWITCHES_GPIO_REG_B_L GPIOJ -#define SWITCHES_GPIO_PIN_B_L LL_GPIO_PIN_7 // PJ.07 -#define SWITCHES_B_INVERTED - -#define SWITCHES_GPIO_REG_C_H GPIOH -#define SWITCHES_GPIO_PIN_C_H LL_GPIO_PIN_3 // PH.03 -#define SWITCHES_GPIO_REG_C_L GPIOJ -#define SWITCHES_GPIO_PIN_C_L LL_GPIO_PIN_0 // PJ.00 -#define SWITCHES_C_INVERTED - -#define SWITCHES_GPIO_REG_D_H GPIOJ -#define SWITCHES_GPIO_PIN_D_H LL_GPIO_PIN_14 // PJ.14 -#define SWITCHES_GPIO_REG_D_L GPIOH -#define SWITCHES_GPIO_PIN_D_L LL_GPIO_PIN_15 // PH.15 -#define SWITCHES_D_INVERTED - -#define SWITCHES_GPIO_REG_E GPIOE -#define SWITCHES_GPIO_PIN_E LL_GPIO_PIN_5 // PE.05 - -#define SWITCHES_GPIO_REG_F GPIOA -#define SWITCHES_GPIO_PIN_F LL_GPIO_PIN_15 // PA.15 - -// function switches -//SW1 -#define FUNCTION_SWITCH_1 SG -#define SWITCHES_GPIO_REG_G GPIOH -#define SWITCHES_GPIO_PIN_G LL_GPIO_PIN_11 // PH.11 -#define SWITCHES_G_CFS_IDX 0 -//SW2 -#define FUNCTION_SWITCH_2 SH -#define SWITCHES_GPIO_REG_H GPIOH -#define SWITCHES_GPIO_PIN_H LL_GPIO_PIN_9 // PH.09 -#define SWITCHES_H_CFS_IDX 1 -//SW3 -#define FUNCTION_SWITCH_3 SI -#define SWITCHES_GPIO_REG_I GPIOH -#define SWITCHES_GPIO_PIN_I LL_GPIO_PIN_10 // PH.10 -#define SWITCHES_I_CFS_IDX 2 -//SW4 -#define FUNCTION_SWITCH_4 SJ -#define SWITCHES_GPIO_REG_J GPIOH -#define SWITCHES_GPIO_PIN_J LL_GPIO_PIN_13 // PH.123 -#define SWITCHES_J_CFS_IDX 3 -//SW5 -#define FUNCTION_SWITCH_5 SK -#define SWITCHES_GPIO_REG_K GPIOH -#define SWITCHES_GPIO_PIN_K LL_GPIO_PIN_14 // PH.14 -#define SWITCHES_K_CFS_IDX 4 -//SW6 -#define FUNCTION_SWITCH_6 SL -#define SWITCHES_GPIO_REG_L GPIOH -#define SWITCHES_GPIO_PIN_L LL_GPIO_PIN_12 // PH.12 -#define SWITCHES_L_CFS_IDX 5 - // ADC #define ADC_GPIO_PIN_STICK_LH LL_GPIO_PIN_0 // PA.00 ADC1_INP16 #define ADC_GPIO_PIN_STICK_LV LL_GPIO_PIN_3 // PA.03 ADC12_INP15 @@ -270,19 +202,10 @@ USART6: EXTMODULE_USART #define LCD_SPI_SCK_GPIO_PIN LL_GPIO_PIN_3 #define LCD_SPI_MISO_GPIO_PIN LL_GPIO_PIN_4 #define LCD_SPI_MOSI_GPIO_PIN LL_GPIO_PIN_5 -#define LTDC_IRQ_PRIO 4 -#define DMA_SCREEN_IRQ_PRIO 6 #define LCD_NRST_GPIO GPIOI #define LCD_NRST_GPIO_PIN LL_GPIO_PIN_15 -// Backlight -#define BACKLIGHT_GPIO GPIO_PIN(GPIOA, 5) // TIM2_CH1 -#define BACKLIGHT_TIMER TIM2 -#define BACKLIGHT_TIMER_CHANNEL LL_TIM_CHANNEL_CH1 -#define BACKLIGHT_GPIO_AF GPIO_AF1 -#define BACKLIGHT_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) - // QSPI Flash #define QSPI_CLK_GPIO GPIO_PIN(GPIOF, 10) #define QSPI_CLK_GPIO_AF GPIO_AF9 @@ -334,41 +257,6 @@ USART6: EXTMODULE_USART #define I2C_B2_GPIO_AF LL_GPIO_AF_4 #define I2C_B2_CLK_RATE 400000 -// Haptic -#define HAPTIC_PWM -#define HAPTIC_GPIO GPIO_PIN(GPIOE, 6) // TIM15_CH2 -#define HAPTIC_GPIO_TIMER TIM15 -#define HAPTIC_GPIO_AF GPIO_AF4 -#define HAPTIC_TIMER_OUTPUT_ENABLE TIM_CCER_CC2E | TIM_CCER_CC2NE; -#define HAPTIC_TIMER_MODE TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2PE -#define HAPTIC_TIMER_COMPARE_VALUE HAPTIC_GPIO_TIMER->CCR2 - -// LED Strip -#define LED_STRIP_LENGTH 7 // 6POS + 1 common (many leds in //) -#define BLING_LED_STRIP_START 6 -#define BLING_LED_STRIP_LENGTH 1 -#define CFS_LED_STRIP_START 0 -#define CFS_LED_STRIP_LENGTH 6 -#define CFS_LEDS_PER_SWITCH 1 -#define LED_STRIP_GPIO GPIO_PIN(GPIOA, 10) // PA.00 / TIM1_CH3 -#define LED_STRIP_GPIO_AF LL_GPIO_AF_1 // TIM1_CH3 -#define LED_STRIP_TIMER TIM1 -#define LED_STRIP_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) -#define LED_STRIP_TIMER_CHANNEL LL_TIM_CHANNEL_CH3 -#define LED_STRIP_TIMER_DMA DMA1 -#define LED_STRIP_TIMER_DMA_CHANNEL LL_DMAMUX1_REQ_TIM1_UP -#define LED_STRIP_TIMER_DMA_STREAM LL_DMA_STREAM_0 -#define LED_STRIP_TIMER_DMA_IRQn DMA1_Stream0_IRQn -#define LED_STRIP_TIMER_DMA_IRQHandler DMA1_Stream0_IRQHandler -#define LED_STRIP_REFRESH_PERIOD 50 //ms - -#define STATUS_LEDS -#define GPIO_LED_GPIO_ON gpio_set -#define GPIO_LED_GPIO_OFF gpio_clear -#define LED_RED_GPIO GPIO_PIN(GPIOA, 8) -#define LED_GREEN_GPIO GPIO_PIN(GPIOJ, 13) -#define LED_BLUE_GPIO GPIO_PIN(GPIOG, 7) - // Internal Module #define INTMODULE_PWR_GPIO GPIO_PIN(GPIOI, 1) #define INTMODULE_BOOTCMD_GPIO GPIO_PIN(GPIOD, 7) @@ -449,53 +337,6 @@ USART6: EXTMODULE_USART #define EXTI15_10_IRQ_Priority 9 #endif -//ROTARY emulation for trims as buttons -#define ROTARY_ENCODER_NAVIGATION -// Rotary Encoder -#define ROTARY_ENCODER_GPIO_A GPIOA -#define ROTARY_ENCODER_GPIO_PIN_A LL_GPIO_PIN_6 -#define ROTARY_ENCODER_GPIO_B GPIOA -#define ROTARY_ENCODER_GPIO_PIN_B LL_GPIO_PIN_7 -#define ROTARY_ENCODER_POSITION() (((ROTARY_ENCODER_GPIO_A->IDR >> 6) & 0x01)|((ROTARY_ENCODER_GPIO_B->IDR >> 6) & 0x02)) -#define ROTARY_ENCODER_EXTI_LINE1 LL_EXTI_LINE_6 -#define ROTARY_ENCODER_EXTI_LINE2 LL_EXTI_LINE_7 -#if !defined(USE_EXTI9_5_IRQ) - #define USE_EXTI9_5_IRQ - #define EXTI9_5_IRQ_Priority 9 -#endif -#define ROTARY_ENCODER_EXTI_PORT_A LL_SYSCFG_EXTI_PORTA -#define ROTARY_ENCODER_EXTI_PORT_B LL_SYSCFG_EXTI_PORTA -#define ROTARY_ENCODER_EXTI_SYS_LINE1 LL_SYSCFG_EXTI_LINE6 -#define ROTARY_ENCODER_EXTI_SYS_LINE2 LL_SYSCFG_EXTI_LINE7 -#define ROTARY_ENCODER_TIMER TIM17 -#define ROTARY_ENCODER_TIMER_IRQn TIM17_IRQn -#define ROTARY_ENCODER_TIMER_IRQHandler TIM17_IRQHandler - -// Millisecond timer -#define MS_TIMER TIM14 -#define MS_TIMER_IRQn TIM8_TRG_COM_TIM14_IRQn -#define MS_TIMER_IRQHandler TIM8_TRG_COM_TIM14_IRQHandler - -// Mixer scheduler timer -#define MIXER_SCHEDULER_TIMER TIM12 -#define MIXER_SCHEDULER_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) -#define MIXER_SCHEDULER_TIMER_IRQn TIM8_BRK_TIM12_IRQn -#define MIXER_SCHEDULER_TIMER_IRQHandler TIM8_BRK_TIM12_IRQHandler - -#define LANDSCAPE_LCD true -#define PORTRAIT_LCD false -#define LANDSCAPE_LCD_SML false -#define LANDSCAPE_LCD_STD true -#define LANDSCAPE_LCD_LRG false - -#define LCD_W 480 -#define LCD_H 320 - -#define LCD_PHYS_W LCD_W -#define LCD_PHYS_H LCD_H - -#define LCD_DEPTH 16 - #define LSE_DRIVE_STRENGTH RCC_LSEDRIVE_HIGH #endif // _HAL_H_ diff --git a/radio/src/targets/t22/hal.h b/radio/src/targets/t22/hal.h index d08c36c8519..c1db554e374 100644 --- a/radio/src/targets/t22/hal.h +++ b/radio/src/targets/t22/hal.h @@ -59,12 +59,7 @@ TIM17: ROTARY_ENCODER_TIMER #ifndef _HAL_H_ #define _HAL_H_ -#define CPU_FREQ 480000000 - -#define PERI1_FREQUENCY 120000000 -#define PERI2_FREQUENCY 120000000 -#define TIMER_MULT_APB1 2 -#define TIMER_MULT_APB2 2 +#include "hal_settings.h" #define ADC_VREF_PREC2 330 @@ -179,15 +174,6 @@ TIM17: ROTARY_ENCODER_TIMER #define I2C_B2_GPIO_AF LL_GPIO_AF_4 #define I2C_B2_CLK_RATE 400000 -// Haptic -#define HAPTIC_PWM -#define HAPTIC_GPIO GPIO_PIN(GPIOE, 6) // TIM15_CH2 -#define HAPTIC_GPIO_TIMER TIM15 -#define HAPTIC_GPIO_AF GPIO_AF4 -#define HAPTIC_TIMER_OUTPUT_ENABLE TIM_CCER_CC2E | TIM_CCER_CC2NE; -#define HAPTIC_TIMER_MODE TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2PE -#define HAPTIC_TIMER_COMPARE_VALUE HAPTIC_GPIO_TIMER->CCR2 - // Flysky Hall Stick #define FLYSKY_HALL_SERIAL_USART USART3 #define FLYSKY_HALL_SERIAL_TX_GPIO GPIO_PIN(GPIOB, 10) @@ -197,33 +183,6 @@ TIM17: ROTARY_ENCODER_TIMER #define FLYSKY_HALL_DMA_Stream_RX LL_DMA_STREAM_2 #define FLYSKY_HALL_DMA_Channel LL_DMAMUX1_REQ_USART3_RX -// LED Strip -#define LED_STRIP_LENGTH 7 // 6POS + 1 common (many leds in //) -#define BLING_LED_STRIP_START 6 -#define BLING_LED_STRIP_LENGTH 1 -#define CFS_LED_STRIP_START 0 -#define CFS_LED_STRIP_LENGTH 6 -#define CFS_LEDS_PER_SWITCH 1 -#define LED_STRIP_GPIO GPIO_PIN(GPIOA, 10) // PA.00 / TIM1_CH3 -#define LED_STRIP_GPIO_AF LL_GPIO_AF_1 // TIM1_CH3 -#define LED_STRIP_TIMER TIM1 -#define LED_STRIP_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) -#define LED_STRIP_TIMER_CHANNEL LL_TIM_CHANNEL_CH3 -#define LED_STRIP_TIMER_DMA DMA1 -#define LED_STRIP_TIMER_DMA_CHANNEL LL_DMAMUX1_REQ_TIM1_UP -#define LED_STRIP_TIMER_DMA_STREAM LL_DMA_STREAM_0 -#define LED_STRIP_TIMER_DMA_IRQn DMA1_Stream0_IRQn -#define LED_STRIP_TIMER_DMA_IRQHandler DMA1_Stream0_IRQHandler -#define LED_STRIP_REFRESH_PERIOD 50 //ms - -#define STATUS_LEDS -#define GPIO_LED_GPIO_ON gpio_set -#define GPIO_LED_GPIO_OFF gpio_clear -#define LED_RED_GPIO GPIO_PIN(GPIOB, 15) -#define LED_RED2_GPIO GPIO_PIN(GPIOJ, 12) -#define LED_GREEN_GPIO GPIO_PIN(GPIOB, 13) -#define LED_BLUE_GPIO GPIO_PIN(GPIOB, 12) - // Internal Module #define INTMODULE_PWR_GPIO GPIO_PIN(GPIOI, 1) #define INTMODULE_BOOTCMD_GPIO GPIO_PIN(GPIOD, 7) @@ -304,53 +263,6 @@ TIM17: ROTARY_ENCODER_TIMER #define EXTI15_10_IRQ_Priority 9 #endif -//ROTARY emulation for trims as buttons -#define ROTARY_ENCODER_NAVIGATION -// Rotary Encoder -#define ROTARY_ENCODER_GPIO_A GPIOA -#define ROTARY_ENCODER_GPIO_PIN_A LL_GPIO_PIN_6 -#define ROTARY_ENCODER_GPIO_B GPIOA -#define ROTARY_ENCODER_GPIO_PIN_B LL_GPIO_PIN_7 -#define ROTARY_ENCODER_POSITION() (((ROTARY_ENCODER_GPIO_A->IDR >> 6) & 0x01)|((ROTARY_ENCODER_GPIO_B->IDR >> 6) & 0x02)) -#define ROTARY_ENCODER_EXTI_LINE1 LL_EXTI_LINE_6 -#define ROTARY_ENCODER_EXTI_LINE2 LL_EXTI_LINE_7 -#if !defined(USE_EXTI9_5_IRQ) - #define USE_EXTI9_5_IRQ - #define EXTI9_5_IRQ_Priority 9 -#endif -#define ROTARY_ENCODER_EXTI_PORT_A LL_SYSCFG_EXTI_PORTA -#define ROTARY_ENCODER_EXTI_PORT_B LL_SYSCFG_EXTI_PORTA -#define ROTARY_ENCODER_EXTI_SYS_LINE1 LL_SYSCFG_EXTI_LINE6 -#define ROTARY_ENCODER_EXTI_SYS_LINE2 LL_SYSCFG_EXTI_LINE7 -#define ROTARY_ENCODER_TIMER TIM17 -#define ROTARY_ENCODER_TIMER_IRQn TIM17_IRQn -#define ROTARY_ENCODER_TIMER_IRQHandler TIM17_IRQHandler - -// Millisecond timer -#define MS_TIMER TIM14 -#define MS_TIMER_IRQn TIM8_TRG_COM_TIM14_IRQn -#define MS_TIMER_IRQHandler TIM8_TRG_COM_TIM14_IRQHandler - -// Mixer scheduler timer -#define MIXER_SCHEDULER_TIMER TIM12 -#define MIXER_SCHEDULER_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) -#define MIXER_SCHEDULER_TIMER_IRQn TIM8_BRK_TIM12_IRQn -#define MIXER_SCHEDULER_TIMER_IRQHandler TIM8_BRK_TIM12_IRQHandler - -#define LANDSCAPE_LCD true -#define PORTRAIT_LCD false -#define LANDSCAPE_LCD_SML false -#define LANDSCAPE_LCD_STD true -#define LANDSCAPE_LCD_LRG false - -#define LCD_W 480 -#define LCD_H 320 - -#define LCD_PHYS_W LCD_W -#define LCD_PHYS_H LCD_H - -#define LCD_DEPTH 16 - #define LSE_DRIVE_STRENGTH RCC_LSEDRIVE_HIGH #endif // _HAL_H_ \ No newline at end of file diff --git a/radio/src/targets/taranis/CMakeLists.txt b/radio/src/targets/taranis/CMakeLists.txt index 300e2ae059f..d3033ce80c8 100644 --- a/radio/src/targets/taranis/CMakeLists.txt +++ b/radio/src/targets/taranis/CMakeLists.txt @@ -41,7 +41,6 @@ if(PCB STREQUAL X9E) set(BITMAPS_TARGET taranis_bitmaps) set(FONTS_TARGET taranis_fonts) set(LCD_DRIVER lcd_driver_spi.cpp) - set(STATUS_LEDS NO) set(BLUETOOTH YES) set(ROTARY_ENCODER YES) set(MODULE_SIZE_STD YES) @@ -64,7 +63,6 @@ elseif(PCB STREQUAL X9D+) set(CPU_TYPE_FULL STM32F407xE) set(PWR_BUTTON "PRESS" CACHE STRING "Pwr button type (PRESS/SWITCH)") add_definitions(-DSOFTWARE_VOLUME -DPWR_BUTTON_${PWR_BUTTON} -DHARDWARE_POWER_MANAGEMENT_UNIT) - set(STATUS_LEDS YES) set(PXX2 ON) set(PXX_FREQUENCY "HIGH") set(BLUETOOTH YES) @@ -77,7 +75,6 @@ elseif(PCB STREQUAL X9D+) set(FLAVOUR x9d+) set(CPU_TYPE_FULL STM32F205xE) set(AUX_SERIAL ON) - set(STATUS_LEDS NO) set(MODULE_SIZE_STD YES) endif() elseif(PCB STREQUAL X9D) @@ -92,7 +89,6 @@ elseif(PCB STREQUAL X9D) set(FONTS_TARGET taranis_fonts) set(LCD_DRIVER lcd_driver_aspi.cpp) set(AUX_SERIAL ON) - set(STATUS_LEDS NO) add_definitions(-DMANUFACTURER_FRSKY) set(MODULE_SIZE_STD YES) elseif(PCB STREQUAL X7) @@ -103,7 +99,6 @@ elseif(PCB STREQUAL X7) set(BITMAPS_TARGET 9x_bitmaps) set(FONTS_TARGET 9x_fonts_1bit) set(LCD_DRIVER lcd_driver_spi.cpp) - set(STATUS_LEDS YES) add_definitions(-DPCBX7 -DSOFTWARE_VOLUME) add_definitions(-DPWR_BUTTON_${PWR_BUTTON}) if(PCBREV STREQUAL T12) @@ -429,7 +424,6 @@ elseif(PCB STREQUAL X9LITE) set(BITMAPS_TARGET 9x_bitmaps) set(FONTS_TARGET 9x_fonts_1bit) set(LCD_DRIVER lcd_driver_spi.cpp) - set(STATUS_LEDS YES) set(ROTARY_ENCODER YES) add_definitions(-DMANUFACTURER_FRSKY) elseif(PCB STREQUAL X9LITES) @@ -449,7 +443,6 @@ elseif(PCB STREQUAL X9LITES) set(BITMAPS_TARGET 9x_bitmaps) set(FONTS_TARGET 9x_fonts_1bit) set(LCD_DRIVER lcd_driver_spi.cpp) - set(STATUS_LEDS YES) set(BLUETOOTH YES) set(ROTARY_ENCODER YES) add_definitions(-DMANUFACTURER_FRSKY) @@ -470,7 +463,6 @@ elseif(PCB STREQUAL XLITE) set(BITMAPS_TARGET 9x_bitmaps) set(FONTS_TARGET 9x_fonts_1bit) set(LCD_DRIVER lcd_driver_spi.cpp) - set(STATUS_LEDS YES) set(BLUETOOTH YES) add_definitions(-DMANUFACTURER_FRSKY) elseif(PCB STREQUAL XLITES) @@ -489,7 +481,6 @@ elseif(PCB STREQUAL XLITES) set(BITMAPS_TARGET 9x_bitmaps) set(FONTS_TARGET 9x_fonts_1bit) set(LCD_DRIVER lcd_driver_spi.cpp) - set(STATUS_LEDS YES) set(PXX2 ON) set(BLUETOOTH YES) set(IMU YES) diff --git a/radio/src/targets/taranis/board.cpp b/radio/src/targets/taranis/board.cpp index b66f6e384f9..ebb0427d3e1 100644 --- a/radio/src/targets/taranis/board.cpp +++ b/radio/src/targets/taranis/board.cpp @@ -163,7 +163,7 @@ void boardInit() pwrInit(); boardInitModulePorts(); -#if defined(STATUS_LEDS) +#if STATUS_LEDS ledInit(); #if !defined(POWER_LED_BLUE) ledBlue(); @@ -201,7 +201,7 @@ void boardInit() if (getBatteryVoltage() >= 780) setFSLedON(3); if (getBatteryVoltage() >= 820) setFSLedON(4); if (getBatteryVoltage() >= 842) setFSLedON(5); -#elif defined(STATUS_LEDS) +#elif STATUS_LEDS // Use Status LED to indicate battery charge level instead if (getBatteryVoltage() <= 660) ledRed(); // low discharge else if (getBatteryVoltage() <= 842) ledBlue(); // charging @@ -290,7 +290,7 @@ void boardOff() rgbLedClearAll(); #endif -#if defined(STATUS_LEDS) && !defined(BOOT) +#if STATUS_LEDS && !defined(BOOT) ledOff(); #endif diff --git a/radio/src/targets/taranis/board.h b/radio/src/targets/taranis/board.h index 7cecc6749e5..89146252010 100644 --- a/radio/src/targets/taranis/board.h +++ b/radio/src/targets/taranis/board.h @@ -181,7 +181,7 @@ void pwrResetHandler(); #define pwrForcePressed() false // Backlight driver -#if defined(OLED_SCREEN) +#if OLED_SCREEN #define BACKLIGHT_DISABLE() lcdSetRefVolt(0) #define BACKLIGHT_FORCED_ON 255 #else @@ -199,7 +199,7 @@ bool isBacklightEnabled(); void backlightEnable(uint8_t level, uint8_t color); #define BACKLIGHT_ENABLE() \ backlightEnable(currentBacklightBright, g_eeGeneral.backlightColor) -#elif defined(OLED_SCREEN) +#elif OLED_SCREEN #define BACKLIGHT_ENABLE() lcdSetRefVolt(currentBacklightBright) #else void backlightEnable(uint8_t level); @@ -255,7 +255,7 @@ void ledBlue(); #define LCD_CONTRAST_DEFAULT 25 #else #define IS_LCD_RESET_NEEDED() true -#if defined(OLED_SCREEN) +#if OLED_SCREEN #define LCD_CONTRAST_MIN 2 #define LCD_CONTRAST_MAX 254 #else @@ -269,7 +269,7 @@ void ledBlue(); #define LCD_BRIGHTNESS_DEFAULT 30 #endif -#if defined(OLED_SCREEN) +#if OLED_SCREEN #define LCD_CONTRAST_DEFAULT 254 // full brightness #elif defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_MT12) #define LCD_CONTRAST_DEFAULT 20 @@ -278,7 +278,7 @@ void ledBlue(); #else #define LCD_CONTRAST_DEFAULT 15 #endif -#if defined(OLED_SCREEN) +#if OLED_SCREEN // add offset 2px because driver (SH1106) of the 1.3 OLED is for a 132 display #define LCD_W_OFFSET 0x02 #endif diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index 764ea89991b..cb3fc88eabf 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -21,25 +21,7 @@ #pragma once -#if defined(STM32F413xx) - #define CPU_FREQ 100000000 - #define PERI1_FREQUENCY 50000000 - #define PERI2_FREQUENCY 100000000 - #define TIMER_MULT_APB1 1 - #define TIMER_MULT_APB2 1 -#elif defined(STM32F4) - #define CPU_FREQ 168000000 - #define PERI1_FREQUENCY 42000000 - #define PERI2_FREQUENCY 84000000 - #define TIMER_MULT_APB1 2 - #define TIMER_MULT_APB2 2 -#else - #define CPU_FREQ 120000000 - #define PERI1_FREQUENCY 30000000 - #define PERI2_FREQUENCY 60000000 - #define TIMER_MULT_APB1 2 - #define TIMER_MULT_APB2 2 -#endif +#include "hal_settings.h" #define TELEMETRY_EXTI_PRIO 0 // required for soft serial @@ -58,7 +40,7 @@ #define ROTARY_ENCODER_GPIO GPIOD #define ROTARY_ENCODER_GPIO_PIN_A LL_GPIO_PIN_12 // PD.12 #define ROTARY_ENCODER_GPIO_PIN_B LL_GPIO_PIN_13 // PD.13 - #define ROTARY_ENCODER_POSITION() (ROTARY_ENCODER_GPIO->IDR >> 12) & 0x03 + #define ROTARY_ENCODER_POSITION (ROTARY_ENCODER_GPIO->IDR >> 12) & 0x03 #define ROTARY_ENCODER_EXTI_LINE1 LL_EXTI_LINE_12 #define ROTARY_ENCODER_EXTI_LINE2 LL_EXTI_LINE_13 #define ROTARY_ENCODER_EXTI_PORT LL_SYSCFG_EXTI_PORTD @@ -74,7 +56,7 @@ #define ROTARY_ENCODER_GPIO GPIOE #define ROTARY_ENCODER_GPIO_PIN_A LL_GPIO_PIN_10 // PE.10 #define ROTARY_ENCODER_GPIO_PIN_B LL_GPIO_PIN_11 // PE.11 - #define ROTARY_ENCODER_POSITION() (((ROTARY_ENCODER_GPIO->IDR >> 9) & 0x02) + ((ROTARY_ENCODER_GPIO->IDR >> 11) & 0x01)) + #define ROTARY_ENCODER_POSITION (((ROTARY_ENCODER_GPIO->IDR >> 9) & 0x02) + ((ROTARY_ENCODER_GPIO->IDR >> 11) & 0x01)) #define ROTARY_ENCODER_EXTI_LINE1 LL_EXTI_LINE_10 #define ROTARY_ENCODER_EXTI_LINE2 LL_EXTI_LINE_11 #define ROTARY_ENCODER_EXTI_PORT LL_SYSCFG_EXTI_PORTE @@ -90,7 +72,7 @@ #define ROTARY_ENCODER_GPIO GPIOE #define ROTARY_ENCODER_GPIO_PIN_A LL_GPIO_PIN_9 // PE.09 #define ROTARY_ENCODER_GPIO_PIN_B LL_GPIO_PIN_11 // PE.11 - #define ROTARY_ENCODER_POSITION() (((ROTARY_ENCODER_GPIO->IDR >> 10) & 0x02) + ((ROTARY_ENCODER_GPIO->IDR >> 9) & 0x01)) + #define ROTARY_ENCODER_POSITION (((ROTARY_ENCODER_GPIO->IDR >> 10) & 0x02) + ((ROTARY_ENCODER_GPIO->IDR >> 9) & 0x01)) #define ROTARY_ENCODER_EXTI_LINE1 LL_EXTI_LINE_9 #define ROTARY_ENCODER_EXTI_LINE2 LL_EXTI_LINE_11 // ROTARY_ENCODER_EXTI_LINE1 IRQ @@ -111,7 +93,7 @@ #define ROTARY_ENCODER_GPIO GPIOE #define ROTARY_ENCODER_GPIO_PIN_A LL_GPIO_PIN_10 // PE.10 #define ROTARY_ENCODER_GPIO_PIN_B LL_GPIO_PIN_12 // PE.12 - #define ROTARY_ENCODER_POSITION() (((ROTARY_ENCODER_GPIO->IDR >> 12) & 0x01) + ((ROTARY_ENCODER_GPIO->IDR >> 9) & 0x02)) + #define ROTARY_ENCODER_POSITION (((ROTARY_ENCODER_GPIO->IDR >> 12) & 0x01) + ((ROTARY_ENCODER_GPIO->IDR >> 9) & 0x02)) #define ROTARY_ENCODER_EXTI_LINE1 LL_EXTI_LINE_10 #define ROTARY_ENCODER_EXTI_LINE2 LL_EXTI_LINE_12 #define ROTARY_ENCODER_EXTI_PORT LL_SYSCFG_EXTI_PORTE @@ -127,7 +109,7 @@ #define ROTARY_ENCODER_GPIO GPIOE #define ROTARY_ENCODER_GPIO_PIN_A LL_GPIO_PIN_9 // PE.9 #define ROTARY_ENCODER_GPIO_PIN_B LL_GPIO_PIN_10 // PE.10 - #define ROTARY_ENCODER_POSITION() ((ROTARY_ENCODER_GPIO->IDR >> 9) & 0x03) + #define ROTARY_ENCODER_POSITION ((ROTARY_ENCODER_GPIO->IDR >> 9) & 0x03) #define ROTARY_ENCODER_EXTI_LINE1 LL_EXTI_LINE_9 #define ROTARY_ENCODER_EXTI_LINE2 LL_EXTI_LINE_10 #define ROTARY_ENCODER_EXTI_PORT LL_SYSCFG_EXTI_PORTE @@ -246,158 +228,6 @@ #define PWR_ON_GPIO GPIO_PIN(GPIOD, 0) // PD.00 #endif -#if defined(RADIO_X9DP2019) - #define STATUS_LEDS - #define GPIO_LED_GPIO_ON gpio_clear - #define GPIO_LED_GPIO_OFF gpio_set - #define LED_RED_GPIO GPIO_PIN(GPIOA, 13) -#elif defined(PCBXLITES) - #define STATUS_LEDS - #define GPIO_LED_GPIO_ON gpio_clear - #define GPIO_LED_GPIO_OFF gpio_set - #define LED_RED_GPIO GPIO_PIN(GPIOE, 4) // PE.04 - #define LED_BLUE_GPIO GPIO_PIN(GPIOE, 6) // PE.06 -#elif defined(PCBXLITE) - #define STATUS_LEDS - #define GPIO_LED_GPIO_ON gpio_clear - #define GPIO_LED_GPIO_OFF gpio_set - #define LED_GREEN_GPIO GPIO_PIN(GPIOE, 5) // PE.05 - #define LED_RED_GPIO GPIO_PIN(GPIOE, 4) // PE.04 - #define LED_BLUE_GPIO GPIO_PIN(GPIOE, 6) // PE.06 -#elif defined(PCBX7ACCESS) - #define STATUS_LEDS - #define GPIO_LED_GPIO_ON gpio_set - #define GPIO_LED_GPIO_OFF gpio_clear - #define LED_BLUE_GPIO GPIO_PIN(GPIOB, 1) // PB.01 - #define LED_RED_GPIO GPIO_PIN(GPIOC, 4) // PC.04 -#elif defined(RADIO_T8) - #define STATUS_LEDS - #define GPIO_LED_GPIO_ON gpio_set - #define GPIO_LED_GPIO_OFF gpio_clear - #define LED_GREEN_GPIO GPIO_PIN(GPIOB, 1) // PB.01 - #define LED_RED_GPIO GPIO_PIN(GPIOC, 4) // PC.04 - #define LED_BLUE_GPIO GPIO_PIN(GPIOC, 5) // PC.05 -#elif defined(RADIO_COMMANDO8) - #define STATUS_LEDS - #define GPIO_LED_GPIO_ON gpio_set - #define GPIO_LED_GPIO_OFF gpio_clear - #define LED_GREEN_GPIO GPIO_PIN(GPIOC, 0) // PC.00 - #define LED_RED_GPIO GPIO_PIN(GPIOC, 2) // PC.02 - #define LED_BLUE_GPIO GPIO_PIN(GPIOC, 1) // PC.01 -#elif defined(RADIO_ZORRO) || defined(RADIO_POCKET) - #define STATUS_LEDS - #define GPIO_LED_GPIO_ON gpio_set - #define GPIO_LED_GPIO_OFF gpio_clear - #define LED_GREEN_GPIO GPIO_PIN(GPIOE, 2) // PE.02 - #define LED_RED_GPIO GPIO_PIN(GPIOE, 13) // PE.13 - #define LED_BLUE_GPIO GPIO_PIN(GPIOA, 7) // PA.07 -#elif defined(RADIO_T14) || defined(RADIO_T12MAX) || defined(RADIO_TPROS) - #define STATUS_LEDS - #define GPIO_LED_GPIO_ON gpio_set - #define GPIO_LED_GPIO_OFF gpio_clear - #define LED_RED_GPIO GPIO_PIN(GPIOE, 2) // PE.02 - #define LED_BLUE_GPIO GPIO_PIN(GPIOE, 13) // PE.13 - #define LED_GREEN_GPIO GPIO_PIN(GPIOA, 7) // PA.07 -#elif defined(RADIO_TLITE) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_TX12) - #define STATUS_LEDS - #define GPIO_LED_GPIO_ON gpio_set - #define GPIO_LED_GPIO_OFF gpio_clear - #define LED_GREEN_GPIO GPIO_PIN(GPIOB, 1) // PB.01 - #define LED_RED_GPIO GPIO_PIN(GPIOC, 5) // PC.05 - #define LED_BLUE_GPIO GPIO_PIN(GPIOC, 4) // PC.04 -#elif defined(RADIO_FAMILY_T20) || defined(RADIO_BUMBLEBEE) - #define STATUS_LEDS - #define GPIO_LED_GPIO_ON gpio_set - #define GPIO_LED_GPIO_OFF gpio_clear - #define LED_GREEN_GPIO GPIO_PIN(GPIOG, 1) // PG.01 - #define LED_RED_GPIO GPIO_PIN(GPIOC, 5) // PC.05 - #define LED_BLUE_GPIO GPIO_PIN(GPIOC, 4) // PC.04 -#elif defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_MT12) || defined(RADIO_GX12) - #define STATUS_LEDS - #define GPIO_LED_GPIO_ON gpio_set - #define GPIO_LED_GPIO_OFF gpio_clear - #define LED_GREEN_GPIO GPIO_PIN(GPIOA, 7) // PA.07 - #define LED_RED_GPIO GPIO_PIN(GPIOE, 13) // PE.13 - #define LED_BLUE_GPIO GPIO_PIN(GPIOE, 2) // PE.02 -#elif defined(RADIO_V14) || defined(RADIO_V12) - #define STATUS_LEDS - #define GPIO_LED_GPIO_ON gpio_set - #define GPIO_LED_GPIO_OFF gpio_clear - #define LED_GREEN_GPIO GPIO_PIN(GPIOE, 14) // PE.14 - #define LED_RED_GPIO GPIO_PIN(GPIOE, 13) // PE.13 - #define LED_BLUE_GPIO GPIO_PIN(GPIOE, 2) // PE.02 -#elif defined(PCBX7) - #define STATUS_LEDS - #define GPIO_LED_GPIO_ON gpio_set - #define GPIO_LED_GPIO_OFF gpio_clear - #define LED_GREEN_GPIO GPIO_PIN(GPIOC, 4) // PC.04 - #define LED_RED_GPIO GPIO_PIN(GPIOC, 5) // PC.05 - #define LED_BLUE_GPIO GPIO_PIN(GPIOB, 1) // PB.01 -#elif defined(PCBX9LITES) - #define STATUS_LEDS - #define GPIO_LED_GPIO_ON gpio_set - #define GPIO_LED_GPIO_OFF gpio_clear - #define LED_RED_GPIO GPIO_PIN(GPIOE, 5) // PE.05 - #define LED_BLUE_GPIO GPIO_PIN(GPIOE, 6) // PE.06 -#elif defined(PCBX9LITE) - #define STATUS_LEDS - #define GPIO_LED_GPIO_ON gpio_set - #define GPIO_LED_GPIO_OFF gpio_clear - #define LED_GREEN_GPIO GPIO_PIN(GPIOE, 4) // PE.04 - #define LED_RED_GPIO GPIO_PIN(GPIOE, 5) // PE.05 - #define LED_BLUE_GPIO GPIO_PIN(GPIOE, 6) // PE.06 -#endif - - // LED Strip -#if defined(RGBLEDS) -#if defined(RADIO_GX12) - #define LED_STRIP_LENGTH 8 - #define BLING_LED_STRIP_START 0 - #define BLING_LED_STRIP_LENGTH 0 - #define CFS_LED_STRIP_START 0 - #define CFS_LED_STRIP_LENGTH 8 - #define CFS_LEDS_PER_SWITCH 1 -#else - #define LED_STRIP_LENGTH 7 - #define BLING_LED_STRIP_START 0 - #define BLING_LED_STRIP_LENGTH 7 -#endif - #define LED_STRIP_GPIO GPIO_PIN(GPIOA, 8) // PA.08 / TIM1_CH1 - #define LED_STRIP_GPIO_AF LL_GPIO_AF_1 // TIM1 / TIM2 - #define LED_STRIP_TIMER TIM1 - #define LED_STRIP_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) - #define LED_STRIP_TIMER_CHANNEL LL_TIM_CHANNEL_CH1 - #define LED_STRIP_TIMER_DMA DMA2 - #define LED_STRIP_TIMER_DMA_CHANNEL LL_DMA_CHANNEL_6 - #define LED_STRIP_TIMER_DMA_STREAM LL_DMA_STREAM_5 - #define LED_STRIP_TIMER_DMA_IRQn DMA2_Stream5_IRQn - #define LED_STRIP_TIMER_DMA_IRQHandler DMA2_Stream5_IRQHandler - #define LED_STRIP_REFRESH_PERIOD 50 //ms -#elif defined(RADIO_T14) || defined(RADIO_V14) || defined(RADIO_V12) -#if defined(RADIO_V14) - #define LED_STRIP_LENGTH 38 - #define BLING_LED_STRIP_START 6 - #define BLING_LED_STRIP_LENGTH 32 -#elif defined(RADIO_V12) - #define LED_STRIP_LENGTH 6 // 6POS switches only? -#else - #define LED_STRIP_LENGTH 1 - #define BLING_LED_STRIP_START 0 - #define BLING_LED_STRIP_LENGTH 1 -#endif - #define LED_STRIP_GPIO GPIO_PIN(GPIOA, 10) // PA.10 / TIM1_CH3 - #define LED_STRIP_GPIO_AF LL_GPIO_AF_1 - #define LED_STRIP_TIMER TIM1 - #define LED_STRIP_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) - #define LED_STRIP_TIMER_CHANNEL LL_TIM_CHANNEL_CH3 - #define LED_STRIP_TIMER_DMA DMA2 - #define LED_STRIP_TIMER_DMA_CHANNEL LL_DMA_CHANNEL_6 - #define LED_STRIP_TIMER_DMA_STREAM LL_DMA_STREAM_5 - #define LED_STRIP_TIMER_DMA_IRQn DMA2_Stream5_IRQn - #define LED_STRIP_TIMER_DMA_IRQHandler DMA2_Stream5_IRQHandler - #define LED_STRIP_REFRESH_PERIOD 50 //ms -#endif - #if defined(FUNCTION_SWITCHES) #if defined(RADIO_BUMBLEBEE) #define GPIO_FSLED_GPIO_ON GPIO_SetBits @@ -950,13 +780,6 @@ #endif // LCD driver -#if defined(RADIO_TX12) || defined(RADIO_TX12MK2) || defined(RADIO_BOXER) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_FAMILY_JUMPER_T12) || defined(RADIO_T8) || defined(RADIO_COMMANDO8) || defined(RADIO_TPRO) || defined(RADIO_TPROV2) || defined(RADIO_TPROS) || defined(RADIO_FAMILY_T20) || defined(RADIO_MT12) || defined(RADIO_T12MAX) || defined(RADIO_V12) || defined(RADIO_BUMBLEBEE) - #define LCD_VERTICAL_INVERT -#endif -#if defined(RADIO_LR3PRO) || defined(RADIO_TPROV2) || defined(RADIO_TPROS) || defined(RADIO_FAMILY_T20) || defined(RADIO_T14) || defined(RADIO_BUMBLEBEE) || defined(RADIO_GX12) || defined(RADIO_V14) - #define LCD_HORIZONTAL_INVERT - #define OLED_SCREEN -#endif #if defined(RADIO_T14) || defined(RADIO_GX12) || defined(RADIO_V14) #define SSD1309_LCD #endif @@ -1152,39 +975,6 @@ #endif #endif -// Haptic -#if defined(PCBXLITE) || defined(PCBX9LITE) || defined(RADIO_ZORRO) || defined(RADIO_POCKET) || defined(RADIO_TX12MK2)|| defined(RADIO_BOXER) || defined(RADIO_MT12) || defined(RADIO_T20V2) || defined(RADIO_T14) || defined(RADIO_T12MAX) || defined(RADIO_TPROS) || defined(RADIO_V14) || defined(RADIO_V12) || defined(RADIO_BUMBLEBEE) || defined(RADIO_GX12) - #define HAPTIC_PWM - #define HAPTIC_GPIO GPIO_PIN(GPIOB, 3) // PB.03 - #define HAPTIC_GPIO_AF GPIO_AF1 - #define HAPTIC_TIMER TIM2 // Timer 2 Channel1 - #define HAPTIC_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) - #define HAPTIC_COUNTER_REGISTER HAPTIC_TIMER->CCR2 - #define HAPTIC_CCMR1 TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 - #define HAPTIC_CCER TIM_CCER_CC2E - #define BACKLIGHT_BDTR TIM_BDTR_MOE -#elif defined(RADIO_X9DP2019) || defined(RADIO_X7ACCESS) - #define HAPTIC_PWM - #define HAPTIC_GPIO GPIO_PIN(GPIOA, 10) // PA.10 - #define HAPTIC_GPIO_AF GPIO_AF1 - #define HAPTIC_TIMER TIM1 // Timer1 Channel3 - #define HAPTIC_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) - #define HAPTIC_COUNTER_REGISTER HAPTIC_TIMER->CCR3 - #define HAPTIC_CCMR2 TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2 - #define HAPTIC_CCER TIM_CCER_CC3E -#elif defined(PCBX9E) || defined(PCBX9DP) || defined(PCBX7) - #define HAPTIC_PWM - #define HAPTIC_GPIO GPIO_PIN(GPIOB, 8) // PB.08 - #define HAPTIC_GPIO_AF GPIO_AF3 - #define HAPTIC_TIMER TIM10 // Timer 10 Channel1 - #define HAPTIC_TIMER_FREQ (PERI2_FREQUENCY * TIMER_MULT_APB2) - #define HAPTIC_COUNTER_REGISTER HAPTIC_TIMER->CCR1 - #define HAPTIC_CCMR1 TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2 - #define HAPTIC_CCER TIM_CCER_CC1E -#else - #define HAPTIC_GPIO GPIO_PIN(GPIOC, 12) // PC.12 -#endif - #if defined(RADIO_BOXER) || defined(RADIO_FAMILY_T20) || defined(RADIO_X9DP2019) || defined (RADIO_V14) || defined(RADIO_GX12) // Flysky Hall Stick #define FLYSKY_HALL_SERIAL_USART UART4 @@ -1256,29 +1046,3 @@ #define STORAGE_BLUETOOTH #endif #endif - -// Millisecond timer -#define MS_TIMER TIM14 -#define MS_TIMER_IRQn TIM8_TRG_COM_TIM14_IRQn -#define MS_TIMER_IRQHandler TIM8_TRG_COM_TIM14_IRQHandler - -// Mixer scheduler timer -#define MIXER_SCHEDULER_TIMER TIM12 -#define MIXER_SCHEDULER_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) -#define MIXER_SCHEDULER_TIMER_IRQn TIM8_BRK_TIM12_IRQn -#define MIXER_SCHEDULER_TIMER_IRQHandler TIM8_BRK_TIM12_IRQHandler - -// LCD driver -#if defined(PCBX9D) || defined(PCBX9DP) || defined(PCBX9E) -#define LCD_W 212 -#define LCD_H 64 -#define LCD_DEPTH 4 -#else -#define LCD_W 128 -#define LCD_H 64 -#define LCD_DEPTH 1 -#endif - -#if defined(PCBX9DP) || defined(PCBX9E) -#define HAS_BACKLIGHT_COLOR -#endif diff --git a/radio/src/targets/taranis/lcd_driver_spi.cpp b/radio/src/targets/taranis/lcd_driver_spi.cpp index 1c549cac1ab..df899e60ed5 100644 --- a/radio/src/targets/taranis/lcd_driver_spi.cpp +++ b/radio/src/targets/taranis/lcd_driver_spi.cpp @@ -35,7 +35,7 @@ #include "edgetx.h" #endif -#if defined(OLED_SCREEN) +#if OLED_SCREEN #define LCD_CONTRAST_OFFSET 0 #elif defined(RADIO_FAMILY_JUMPER_T12) || defined(MANUFACTURER_RADIOMASTER) || defined(RADIO_COMMANDO8) || defined(RADIO_TPRO) || defined(RADIO_T12MAX) || defined(RADIO_V12) || defined(RADIO_V14) #define LCD_CONTRAST_OFFSET -10 @@ -158,7 +158,7 @@ void lcdStart() gpio_set(OLED_VCC_CS); #endif #else -#if defined(LCD_VERTICAL_INVERT) +#if LCD_VERTICAL_INVERT // T12 and TX12 have the screen inverted. #if defined(RADIO_V12) lcdWriteCommand(0xe2); // (14) Soft reset @@ -174,7 +174,7 @@ void lcdStart() lcdWriteCommand(0xa6); // Set display mode #else lcdWriteCommand(0xe2); // (14) Soft reset -#if defined(LCD_HORIZONTAL_INVERT) +#if LCD_HORIZONTAL_INVERT lcdWriteCommand(0xa1); // Set seg #else lcdWriteCommand(0xa0); // Set seg @@ -295,7 +295,7 @@ void lcdRefresh(bool wait) #else lcdWriteCommand(0x10); // Column addr 0 lcdWriteCommand(0xB0 | y); // Page addr y -#if !defined(LCD_VERTICAL_INVERT) +#if !LCD_VERTICAL_INVERT lcdWriteCommand(0x04); #endif #endif diff --git a/radio/src/targets/tx15/hal.h b/radio/src/targets/tx15/hal.h index 1637c6e1bf5..97560839787 100644 --- a/radio/src/targets/tx15/hal.h +++ b/radio/src/targets/tx15/hal.h @@ -65,12 +65,7 @@ SAI1_Block_A: PDM_CLOCK (1 MHz bit-clock output on SAI1_CK1 / PE5, !FLYSKY_GIMBA #ifndef _HAL_H_ #define _HAL_H_ -#define CPU_FREQ 480000000 - -#define PERI1_FREQUENCY 120000000 -#define PERI2_FREQUENCY 120000000 -#define TIMER_MULT_APB1 2 -#define TIMER_MULT_APB2 2 +#include "hal_settings.h" // Expanders #define IO_INT_GPIO GPIO_PIN(GPIOD, 3) @@ -136,22 +131,12 @@ SAI1_Block_A: PDM_CLOCK (1 MHz bit-clock output on SAI1_CK1 / PE5, !FLYSKY_GIMBA #define LCD_SPI_MOSI_GPIO GPIOI #define LCD_SPI_MOSI_GPIO_PIN LL_GPIO_PIN_9 -#define LTDC_IRQ_PRIO 4 -#define DMA_SCREEN_IRQ_PRIO 6 - #define LCD_RESET_GPIO GPIOJ #define LCD_RESET_GPIO_PIN LL_GPIO_PIN_12 #define LCD_TE_GPIO GPIOI #define LCD_TE_GPIO_PIN LL_GPIO_PIN_4 -// Backlight -#define BACKLIGHT_GPIO GPIO_PIN(GPIOA, 10) // TIM1_CH3 -#define BACKLIGHT_TIMER TIM1 -#define BACKLIGHT_TIMER_CHANNEL LL_TIM_CHANNEL_CH3 -#define BACKLIGHT_GPIO_AF GPIO_AF1 -#define BACKLIGHT_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) - // QSPI Flash #define QSPI_CLK_GPIO GPIO_PIN(GPIOF, 10) #define QSPI_CLK_GPIO_AF GPIO_AF9 @@ -231,41 +216,6 @@ SAI1_Block_A: PDM_CLOCK (1 MHz bit-clock output on SAI1_CK1 / PE5, !FLYSKY_GIMBA #define I2C_B1_GPIO_AF LL_GPIO_AF_4 #define I2C_B1_CLK_RATE 400000 -// Haptic: TIM3_CH2 -#define HAPTIC_PWM -#define HAPTIC_GPIO GPIO_PIN(GPIOC, 7) -#define HAPTIC_GPIO_TIMER TIM3 -#define HAPTIC_GPIO_AF GPIO_AF2 -#define HAPTIC_TIMER_OUTPUT_ENABLE TIM_CCER_CC2E | TIM_CCER_CC2NE; -#define HAPTIC_TIMER_MODE TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2PE -#define HAPTIC_TIMER_COMPARE_VALUE HAPTIC_GPIO_TIMER->CCR2 - -// LED Strip -#define LED_STRIP_LENGTH 26 // 6POS + 2 rings of 10 -#define BLING_LED_STRIP_START 6 -#define BLING_LED_STRIP_LENGTH 20 -#define CFS_LED_STRIP_START 0 -#define CFS_LED_STRIP_LENGTH 6 -#define CFS_LEDS_PER_SWITCH 1 -#define LED_STRIP_GPIO GPIO_PIN(GPIOA, 0) // PA.00 / TIM2_CH1 -#define LED_STRIP_GPIO_AF LL_GPIO_AF_1 // TIM1/2/16/17 -#define LED_STRIP_TIMER TIM2 -#define LED_STRIP_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) -#define LED_STRIP_TIMER_CHANNEL LL_TIM_CHANNEL_CH1 -#define LED_STRIP_TIMER_DMA DMA1 -#define LED_STRIP_TIMER_DMA_CHANNEL LL_DMAMUX1_REQ_TIM2_UP -#define LED_STRIP_TIMER_DMA_STREAM LL_DMA_STREAM_0 -#define LED_STRIP_TIMER_DMA_IRQn DMA1_Stream0_IRQn -#define LED_STRIP_TIMER_DMA_IRQHandler DMA1_Stream0_IRQHandler -#define LED_STRIP_REFRESH_PERIOD 50 //ms - -#define STATUS_LEDS -#define GPIO_LED_GPIO_ON gpio_set -#define GPIO_LED_GPIO_OFF gpio_clear -#define LED_RED_GPIO GPIO_PIN(GPIOI, 8) // PI.08 -#define LED_GREEN_GPIO GPIO_PIN(GPIOI, 11) // PI.11 -#define LED_BLUE_GPIO GPIO_PIN(GPIOI, 10) // PI.10 - // Internal Module #define INTMODULE_PWR_GPIO GPIO_PIN(GPIOB, 13) // PB.13 #define INTMODULE_BOOTCMD_GPIO GPIO_PIN(GPIOH, 9) // PH.09 @@ -399,71 +349,6 @@ SAI1_Block_A: PDM_CLOCK (1 MHz bit-clock output on SAI1_CK1 / PE5, !FLYSKY_GIMBA #define EXTI2_IRQ_Priority 9 #endif -// IMU -#define IMU_I2C_BUS I2C_Bus_1 -#define IMU_INT_GPIO GPIO_PIN(GPIOG, 13) // PG.13 -#define IMU_INVERT_X // X axis mounted reversed (default, user-overridable) -#define IMU_INVERT_Y // Y axis mounted reversed (default, user-overridable) - -// IMU_INT_EXTI IRQ -#if !defined(USE_EXTI15_10_IRQ) - #define USE_EXTI15_10_IRQ - #define EXTI15_10_IRQ_Priority 6 -#endif - - -//ROTARY emulation for trims as buttons -#define ROTARY_ENCODER_NAVIGATION -// Rotary Encoder -#define ROTARY_ENCODER_INVERTED -#define ROTARY_ENCODER_GPIO_A GPIOI -#define ROTARY_ENCODER_GPIO_PIN_A LL_GPIO_PIN_7 -#define ROTARY_ENCODER_GPIO_B GPIOJ -#define ROTARY_ENCODER_GPIO_PIN_B LL_GPIO_PIN_8 -#define ROTARY_ENCODER_POSITION() (((ROTARY_ENCODER_GPIO_A->IDR >> 7) & 0x01)|((ROTARY_ENCODER_GPIO_B->IDR >> 7) & 0x02)) -#define ROTARY_ENCODER_EXTI_LINE1 LL_EXTI_LINE_7 -#define ROTARY_ENCODER_EXTI_LINE2 LL_EXTI_LINE_8 -#if !defined(USE_EXTI7_IRQ) - #define USE_EXTI7_IRQ - #define EXTI7_IRQ_Priority 5 -#endif -#if !defined(USE_EXTI8_IRQ) - #define USE_EXTI8_IRQ - #define EXTI8_IRQ_Priority 5 -#endif -#define ROTARY_ENCODER_EXTI_PORT_A LL_SYSCFG_EXTI_PORTI -#define ROTARY_ENCODER_EXTI_PORT_B LL_SYSCFG_EXTI_PORTJ -#define ROTARY_ENCODER_EXTI_SYS_LINE1 LL_SYSCFG_EXTI_LINE7 -#define ROTARY_ENCODER_EXTI_SYS_LINE2 LL_SYSCFG_EXTI_LINE8 -#define ROTARY_ENCODER_TIMER TIM17 -#define ROTARY_ENCODER_TIMER_IRQn TIM17_IRQn -#define ROTARY_ENCODER_TIMER_IRQHandler TIM17_IRQHandler - -// Millisecond timer -#define MS_TIMER TIM14 -#define MS_TIMER_IRQn TIM8_TRG_COM_TIM14_IRQn -#define MS_TIMER_IRQHandler TIM8_TRG_COM_TIM14_IRQHandler - -// Mixer scheduler timer -#define MIXER_SCHEDULER_TIMER TIM12 -#define MIXER_SCHEDULER_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) -#define MIXER_SCHEDULER_TIMER_IRQn TIM8_BRK_TIM12_IRQn -#define MIXER_SCHEDULER_TIMER_IRQHandler TIM8_BRK_TIM12_IRQHandler - -#define LANDSCAPE_LCD true -#define PORTRAIT_LCD false -#define LANDSCAPE_LCD_SML false -#define LANDSCAPE_LCD_STD true -#define LANDSCAPE_LCD_LRG false - -#define LCD_W 480 -#define LCD_H 320 - -#define LCD_PHYS_W LCD_H -#define LCD_PHYS_H LCD_W - -#define LCD_DEPTH 16 - #define LSE_DRIVE_STRENGTH RCC_LSEDRIVE_HIGH #endif // _HAL_H_ diff --git a/radio/src/targets/tx16smk3/hal.h b/radio/src/targets/tx16smk3/hal.h index 5c0d3e3d7a2..c16ad90610a 100644 --- a/radio/src/targets/tx16smk3/hal.h +++ b/radio/src/targets/tx16smk3/hal.h @@ -72,12 +72,7 @@ USART6: INTMODULE_USART #ifndef _HAL_H_ #define _HAL_H_ -#define CPU_FREQ 480000000 - -#define PERI1_FREQUENCY 120000000 -#define PERI2_FREQUENCY 120000000 -#define TIMER_MULT_APB1 2 -#define TIMER_MULT_APB2 2 +#include "hal_settings.h" // Keys #define KEYS_GPIO_REG_PAGEDN GPIOA @@ -132,91 +127,6 @@ USART6: INTMODULE_USART #define TRIMS_GPIO_REG_LSU GPIOH #define TRIMS_GPIO_PIN_LSU LL_GPIO_PIN_13 -// Extender Switches -#define SWITCHES_A_3POS -#define SWITCHES_GPIO_REG_A_H -#define SWITCHES_GPIO_PIN_A_H PCA95XX_P15 -#define SWITCHES_GPIO_REG_A_L -#define SWITCHES_GPIO_PIN_A_L PCA95XX_P14 - -#define SWITCHES_B_3POS -#define SWITCHES_GPIO_REG_B_H -#define SWITCHES_GPIO_PIN_B_H PCA95XX_P13 -#define SWITCHES_GPIO_REG_B_L -#define SWITCHES_GPIO_PIN_B_L PCA95XX_P12 - -#define SWITCHES_C_3POS -#define SWITCHES_GPIO_REG_C_H -#define SWITCHES_GPIO_PIN_C_H PCA95XX_P11 -#define SWITCHES_GPIO_REG_C_L -#define SWITCHES_GPIO_PIN_C_L PCA95XX_P10 - -#define SWITCHES_D_3POS -#define SWITCHES_GPIO_REG_D_H -#define SWITCHES_GPIO_PIN_D_H PCA95XX_P7 -#define SWITCHES_GPIO_REG_D_L -#define SWITCHES_GPIO_PIN_D_L PCA95XX_P6 - -#define SWITCHES_E_3POS -#define SWITCHES_GPIO_REG_E_H -#define SWITCHES_GPIO_PIN_E_H PCA95XX_P16 -#define SWITCHES_GPIO_REG_E_L -#define SWITCHES_GPIO_PIN_E_L PCA95XX_P17 - -#define SWITCHES_F_2POS -#define SWITCHES_GPIO_REG_F -#define SWITCHES_GPIO_PIN_F PCA95XX_P1 - -#define SWITCHES_G_3POS -#define SWITCHES_GPIO_REG_G_H -#define SWITCHES_GPIO_PIN_G_H PCA95XX_P4 -#define SWITCHES_GPIO_REG_G_L -#define SWITCHES_GPIO_PIN_G_L PCA95XX_P5 - -#define SWITCHES_H_2POS -#define SWITCHES_GPIO_REG_H -#define SWITCHES_GPIO_PIN_H PCA95XX_P0 - -#define SWITCHES_I_2POS -#define SWITCHES_GPIO_REG_I -#define SWITCHES_GPIO_PIN_I PCA95XX_P2 - -#define SWITCHES_J_2POS -#define SWITCHES_GPIO_REG_J -#define SWITCHES_GPIO_PIN_J PCA95XX_P3 - -// function switches -//SW1 -#define SWITCHES_GPIO_REG_K -#define SWITCHES_GPIO_PIN_K PCA95XX_P0 -#define SWITCHES_K_CFS_IDX 0 -#define FUNCTION_SWITCH_1 SK -//SW2 -#define SWITCHES_GPIO_REG_L -#define SWITCHES_GPIO_PIN_L PCA95XX_P1 -#define SWITCHES_L_CFS_IDX 1 -#define FUNCTION_SWITCH_2 SL -//SW3 -#define SWITCHES_GPIO_REG_M -#define SWITCHES_GPIO_PIN_M PCA95XX_P2 -#define SWITCHES_M_CFS_IDX 2 -#define FUNCTION_SWITCH_3 SM -//SW4 -#define SWITCHES_GPIO_REG_N -#define SWITCHES_GPIO_PIN_N PCA95XX_P3 -#define SWITCHES_N_CFS_IDX 3 -#define FUNCTION_SWITCH_4 SN -//SW5 -#define SWITCHES_GPIO_REG_O -#define SWITCHES_GPIO_PIN_O PCA95XX_P4 -#define SWITCHES_O_CFS_IDX 4 -#define FUNCTION_SWITCH_5 SO -//SW6 -#define SWITCHES_GPIO_REG_P -#define SWITCHES_GPIO_PIN_P PCA95XX_P5 -#define SWITCHES_P_CFS_IDX 5 -#define FUNCTION_SWITCH_6 SP - // Expanders #define IO_INT_GPIO GPIO_PIN(GPIOD, 3) #define IO_RESET_GPIO GPIO_PIN(GPIOG, 10) @@ -343,19 +253,9 @@ USART6: INTMODULE_USART // LCD -#define LTDC_IRQ_PRIO 4 -#define DMA_SCREEN_IRQ_PRIO 6 - #define LCD_RESET_GPIO GPIOJ #define LCD_RESET_GPIO_PIN LL_GPIO_PIN_12 -// Backlight -#define BACKLIGHT_GPIO GPIO_PIN(GPIOA, 10) // TIM1_CH3 -#define BACKLIGHT_TIMER TIM1 -#define BACKLIGHT_TIMER_CHANNEL LL_TIM_CHANNEL_CH3 -#define BACKLIGHT_GPIO_AF GPIO_AF1 -#define BACKLIGHT_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) - // QSPI Flash #define QSPI_CLK_GPIO GPIO_PIN(GPIOF, 10) #define QSPI_CLK_GPIO_AF GPIO_AF9 @@ -443,41 +343,6 @@ USART6: INTMODULE_USART #define I2C_B2_GPIO_AF LL_GPIO_AF_4 #define I2C_B2_CLK_RATE 400000 -// Haptic: TIM3_CH2 -#define HAPTIC_PWM -#define HAPTIC_GPIO GPIO_PIN(GPIOC, 7) -#define HAPTIC_GPIO_TIMER TIM3 -#define HAPTIC_GPIO_AF GPIO_AF2 -#define HAPTIC_TIMER_OUTPUT_ENABLE TIM_CCER_CC2E | TIM_CCER_CC2NE; -#define HAPTIC_TIMER_MODE TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2PE -#define HAPTIC_TIMER_COMPARE_VALUE HAPTIC_GPIO_TIMER->CCR2 - -// LED Strip -#define LED_STRIP_LENGTH 26 // 6POS + 2 rings of 10 -#define BLING_LED_STRIP_START 6 -#define BLING_LED_STRIP_LENGTH 20 -#define CFS_LED_STRIP_START 0 -#define CFS_LED_STRIP_LENGTH 6 -#define CFS_LEDS_PER_SWITCH 1 -#define LED_STRIP_GPIO GPIO_PIN(GPIOA, 0) // PA.00 / TIM2_CH1 -#define LED_STRIP_GPIO_AF LL_GPIO_AF_1 // TIM1/2/16/17 -#define LED_STRIP_TIMER TIM2 -#define LED_STRIP_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) -#define LED_STRIP_TIMER_CHANNEL LL_TIM_CHANNEL_CH1 -#define LED_STRIP_TIMER_DMA DMA1 -#define LED_STRIP_TIMER_DMA_CHANNEL LL_DMAMUX1_REQ_TIM2_UP -#define LED_STRIP_TIMER_DMA_STREAM LL_DMA_STREAM_0 -#define LED_STRIP_TIMER_DMA_IRQn DMA1_Stream0_IRQn -#define LED_STRIP_TIMER_DMA_IRQHandler DMA1_Stream0_IRQHandler -#define LED_STRIP_REFRESH_PERIOD 50 //ms - -#define STATUS_LEDS -#define GPIO_LED_GPIO_ON gpio_set -#define GPIO_LED_GPIO_OFF gpio_clear -#define LED_RED_GPIO GPIO_PIN(GPIOI, 8) // PI.08 -#define LED_GREEN_GPIO GPIO_PIN(GPIOI, 11) // PI.11 -#define LED_BLUE_GPIO GPIO_PIN(GPIOI, 10) // PI.10 - // Internal Module #define INTMODULE_PWR_GPIO GPIO_PIN(GPIOB, 13) // PB.13 #define INTMODULE_BOOTCMD_GPIO GPIO_PIN(GPIOH, 9) // PH.09 @@ -599,61 +464,6 @@ USART6: INTMODULE_USART #define EXTI2_IRQ_Priority 9 #endif -#define IMU_I2C_BUS I2C_Bus_2 -#define IMU_INT_GPIO GPIO_PIN(GPIOG, 13) // PG.13 -#define IMU_INVERT_X // X axis mounted reversed (default, user-overridable) -#define IMU_INVERT_Y // Y axis mounted reversed (default, user-overridable) -#if !defined(USE_EXTI15_10_IRQ) - #define USE_EXTI15_10_IRQ - #define EXTI15_10_IRQ_Priority 6 -#endif - -//ROTARY emulation for trims as buttons -#define ROTARY_ENCODER_NAVIGATION -// Rotary Encoder -#define ROTARY_ENCODER_INVERTED -#define ROTARY_ENCODER_GPIO_A GPIOI -#define ROTARY_ENCODER_GPIO_PIN_A LL_GPIO_PIN_7 -#define ROTARY_ENCODER_GPIO_B GPIOJ -#define ROTARY_ENCODER_GPIO_PIN_B LL_GPIO_PIN_8 -#define ROTARY_ENCODER_POSITION() (((ROTARY_ENCODER_GPIO_A->IDR >> 7) & 0x01)|((ROTARY_ENCODER_GPIO_B->IDR >> 7) & 0x02)) -#define ROTARY_ENCODER_EXTI_LINE1 LL_EXTI_LINE_7 -#define ROTARY_ENCODER_EXTI_LINE2 LL_EXTI_LINE_8 -#if !defined(USE_EXTI7_IRQ) - #define USE_EXTI7_IRQ - #define EXTI7_IRQ_Priority 5 -#endif -#if !defined(USE_EXTI8_IRQ) - #define USE_EXTI8_IRQ - #define EXTI8_IRQ_Priority 5 -#endif -#define ROTARY_ENCODER_EXTI_PORT_A LL_SYSCFG_EXTI_PORTI -#define ROTARY_ENCODER_EXTI_PORT_B LL_SYSCFG_EXTI_PORTJ -#define ROTARY_ENCODER_EXTI_SYS_LINE1 LL_SYSCFG_EXTI_LINE7 -#define ROTARY_ENCODER_EXTI_SYS_LINE2 LL_SYSCFG_EXTI_LINE8 -#define ROTARY_ENCODER_TIMER TIM17 -#define ROTARY_ENCODER_TIMER_IRQn TIM17_IRQn -#define ROTARY_ENCODER_TIMER_IRQHandler TIM17_IRQHandler - -// Millisecond timer -#define MS_TIMER TIM14 -#define MS_TIMER_IRQn TIM8_TRG_COM_TIM14_IRQn -#define MS_TIMER_IRQHandler TIM8_TRG_COM_TIM14_IRQHandler - -// Mixer scheduler timer -#define MIXER_SCHEDULER_TIMER TIM12 -#define MIXER_SCHEDULER_TIMER_FREQ (PERI1_FREQUENCY * TIMER_MULT_APB1) -#define MIXER_SCHEDULER_TIMER_IRQn TIM8_BRK_TIM12_IRQn -#define MIXER_SCHEDULER_TIMER_IRQHandler TIM8_BRK_TIM12_IRQHandler - -#define LCD_W 800 -#define LCD_H 480 - -#define LCD_PHYS_W LCD_W -#define LCD_PHYS_H LCD_H - -#define LCD_DEPTH 16 - #define LSE_DRIVE_STRENGTH RCC_LSEDRIVE_HIGH #endif // _HAL_H_ diff --git a/radio/util/hw_defs/generator.py b/radio/util/hw_defs/generator.py index 3c00857c739..172d003c2ee 100644 --- a/radio/util/hw_defs/generator.py +++ b/radio/util/hw_defs/generator.py @@ -88,6 +88,13 @@ def generate_from_template(json_filename, template_filename, target): legacy_inputs=legacy_inputs, main_labels=MAIN_CONTROL_LUT, key_index=key_index, + display=hw_def.display, + leds=hw_def.leds, + backlight=hw_def.backlight, + timers=hw_def.timers, + imu=hw_def.imu, + rotenc=hw_def.rotenc, + haptic=hw_def.haptic, ) try: diff --git a/radio/util/hw_defs/hal_settings.jinja b/radio/util/hw_defs/hal_settings.jinja new file mode 100644 index 00000000000..b188eae4092 --- /dev/null +++ b/radio/util/hw_defs/hal_settings.jinja @@ -0,0 +1,126 @@ +// +// WARNING: DO NOT EDIT THIS FILE +// This file has been generated from the target's JSON hardware description +// + +#pragma once +{% if timers %} + +// Timers +{% for name, val in timers %} +{% if val is not none %} +{% if val is sameas true or val is sameas false %} +#define {{ name | upper }} {{ val | tojson }} +{% elif name.endswith('_irqn') %} +#define {{ name[:name | length - 1 ] | upper }}n {{ val }} +{% elif name.endswith('_irqhandler') %} +#define {{ name[:name | length - 7 ] | upper }}Handler {{ val }} +{% else %} +#define {{ name | upper }} {{ val }} +{% endif %} +{% endif %} +{% endfor %} +{% endif -%} + +{% if display %} + +// Display +{% for name, val in display %} +{% if val is not none %} +{% if val is sameas true or val is sameas false %} +#define {{ name | upper }} {{ val | tojson }} +{% else %} +#define {{ name | upper }} {{ val }} +{% endif %} +{% endif %} +{% endfor %} +{% endif -%} + +{% if backlight %} + +// Backlight +{% for name, val in backlight %} +{% if val is not none %} +{% if val is sameas true or val is sameas false %} +#define {{ name | upper }} {{ val | tojson }} +{% else %} +#define {{ name | upper }} {{ val }} +{% endif %} +{% endif %} +{% endfor %} +{% endif -%} + +{% if leds %} + +// LEDS +{% for name, val in leds %} +{% if val is not none %} +{% if val is sameas true or val is sameas false %} +#define {{ name | upper }} {{ val | tojson }} +{% elif name.endswith('_irqn') %} +#define {{ name[:name | length - 1 ] | upper }}n {{ val }} +{% elif name.endswith('_irqhandler') %} +#define {{ name[:name | length - 7 ] | upper }}Handler {{ val }} +{% else %} +#define {{ name | upper }} {{ val }} +{% endif %} +{% endif %} +{% endfor %} +{% endif -%} + +{% if imu %} + +// IMU +{% for name, val in imu %} +{% if val is not none and val is not sameas false %} +{% if val is sameas true %} +#define {{ name | upper }} +{% elif name == 'exti' %} +{% for exti in val %} +#define USE_{{ exti.irq }} +#define {{ exti.irq }}_Priority {{ exti.priority }} +{% endfor %} +{% else %} +#define {{ name | upper }} {{ val }} +{% endif %} +{% endif %} +{% endfor %} +{% endif -%} + +{% if rotenc %} + +// Rotary Encoder +#define ROTARY_ENCODER_NAVIGATION +{% for name, val in rotenc %} +{% if val is not none and val is not sameas false %} +{% if val is sameas true %} +#define {{ name | upper }} +{% elif name == 'exti' %} +{% for exti in val %} +#define USE_{{ exti.irq }} +#define {{ exti.irq }}_Priority {{ exti.priority }} +{% endfor %} +{% elif name.endswith('_irqn') %} +#define {{ name[:name | length - 1 ] | upper }}n {{ val }} +{% elif name.endswith('_irqhandler') %} +#define {{ name[:name | length - 7 ] | upper }}Handler {{ val }} +{% else %} +#define {{ name | upper }} {{ val }} +{% endif %} +{% endif %} +{% endfor %} +{% endif -%} + +{% if haptic %} + +// Haptic +{% for name, val in haptic %} +{% if val is not none and val is not sameas false %} +{% if val is sameas true %} +#define {{ name | upper }} +{% else %} +#define {{ name | upper }} {{ val }} +{% endif %} +{% endif %} +{% endfor %} +{% endif -%} diff --git a/radio/util/hw_defs/models.py b/radio/util/hw_defs/models.py index 02752b05b75..e01a539e209 100644 --- a/radio/util/hw_defs/models.py +++ b/radio/util/hw_defs/models.py @@ -165,6 +165,113 @@ class LuxInput(BaseModel): pin: Optional[str] = None channel: Optional[Union[str, int]] = None +class EXTI(BaseModel): + irq: str + priority: int + +class Timers(BaseModel): + cpu_freq: int + peri1_frequency: int + peri2_frequency: int + timer_mult_apb1: int + timer_mult_apb2: int + ms_timer: str + ms_timer_irqn: str + ms_timer_irqhandler: str + mixer_scheduler_timer: str + mixer_scheduler_timer_freq: str + mixer_scheduler_timer_irqn: str + mixer_scheduler_timer_irqhandler: str + +class Backlight(BaseModel): + has_backlight_color: Optional[bool] = False + backlight_gpio: Optional[str] = None + backlight_timer: Optional[str] = None + backlight_timer_channel: Optional[str] = None + backlight_gpio_af: Optional[str] = None + backlight_timer_freq: Optional[str] = None + backlight_bdtr: Optional[str] = None + +class Display(BaseModel): + lcd_w: int + lcd_h: int + lcd_phys_w: int + lcd_phys_h: int + lcd_depth: int + oled_screen: Optional[bool] = False + lcd_horizontal_invert: Optional[bool] = False + lcd_vertical_invert: Optional[bool] = False + ltdc_irq_prio: Optional[int] = None + dma_screen_irq_prio: Optional[int] = None + +class LEDS(BaseModel): + led_strip_length: Optional[int] = None + bling_led_strip_start: Optional[int] = None + bling_led_strip_length: Optional[int] = None + cfs_led_strip_start: Optional[int] = None + cfs_led_strip_length: Optional[int] = None + cfs_leds_per_switch: Optional[int] = None + led_strip_gpio: Optional[str] = None + led_strip_gpio_af: Optional[str] = None + led_strip_timer: Optional[str] = None + led_strip_timer_freq: Optional[str] = None + led_strip_timer_channel: Optional[str] = None + led_strip_timer_dma: Optional[str] = None + led_strip_timer_dma_channel: Optional[str] = None + led_strip_timer_dma_stream: Optional[str] = None + led_strip_timer_dma_irqn: Optional[str] = None + led_strip_timer_dma_irqhandler: Optional[str] = None + led_strip_refresh_period: Optional[int] = None + status_leds: Optional[bool] = False + gpio_led_gpio_on: Optional[str] = None + gpio_led_gpio_off: Optional[str] = None + led_red_gpio: Optional[str] = None + led_red2_gpio: Optional[str] = None + led_green_gpio: Optional[str] = None + led_blue_gpio: Optional[str] = None + +class IMU(BaseModel): + imu_i2c_bus: Optional[str] = None + imu_int_gpio: Optional[str] = None + imu_i2c_address: Optional[str] = None + exti: Optional[List[EXTI]] = None + imu_invert_x: Optional[bool] = None + imu_invert_y: Optional[bool] = None + +class RotEnc(BaseModel): + rotary_encoder_inverted: Optional[bool] = None + rotary_encoder_gpio: Optional[str] = None + rotary_encoder_gpio_a: Optional[str] = None + rotary_encoder_gpio_b: Optional[str] = None + rotary_encoder_gpio_pin_a: Optional[str] = None + rotary_encoder_gpio_pin_b: Optional[str] = None + rotary_encoder_position: Optional[str] = None + rotary_encoder_exti_line1: Optional[str] = None + rotary_encoder_exti_line2: Optional[str] = None + rotary_encoder_exti_port: Optional[str] = None + rotary_encoder_exti_port_a: Optional[str] = None + rotary_encoder_exti_port_b: Optional[str] = None + rotary_encoder_exti_sys_line1: Optional[str] = None + rotary_encoder_exti_sys_line2: Optional[str] = None + rotary_encoder_timer: Optional[str] = None + rotary_encoder_timer_irqn: Optional[str] = None + rotary_encoder_timer_irqhandler: Optional[str] = None + exti: Optional[List[EXTI]] = None + +class Haptic(BaseModel): + haptic_pwm: Optional[bool] = None + haptic_gpio: Optional[str] = None + haptic_gpio_timer: Optional[str] = None + haptic_gpio_af: Optional[str] = None + haptic_timer_output_enable: Optional[str] = None + haptic_timer_mode: Optional[str] = None + haptic_timer_compare_value: Optional[str] = None + haptic_timer: Optional[str] = None + haptic_timer_freq: Optional[str] = None + haptic_counter_register: Optional[str] = None + haptic_ccmr1: Optional[str] = None + haptic_ccmr2: Optional[str] = None + haptic_ccer: Optional[str] = None Input = Union[StickInput, FlexInput, SwitchInput, RawInput, VBatInput, RTCBatInput, LuxInput] @@ -309,6 +416,13 @@ class HardwareDefinition(BaseModel): adc_inputs: ADCInputs switches: List[Switch] keys: List[Key] + display: Display + leds: Optional[LEDS] = None + backlight: Optional[Backlight] = None + timers: Timers + imu: Optional[IMU] = None + rotenc: Optional[RotEnc] = None + haptic: Optional[Haptic] = None @staticmethod def from_json(data: Union[str, bytes, bytearray]) -> "HardwareDefinition": diff --git a/tools/cfn_sorter.cpp b/tools/cfn_sorter.cpp index 51b35895e47..7f5e9883566 100755 --- a/tools/cfn_sorter.cpp +++ b/tools/cfn_sorter.cpp @@ -118,8 +118,8 @@ int main() { TR_SF_VARIO, "FUNC_VARIO", FUNC_VARIO, "" }, { TR_SF_HAPTIC, "FUNC_HAPTIC", FUNC_HAPTIC, "" }, { TR_SF_LOGS, "FUNC_LOGS", FUNC_LOGS, "" }, - { TR_BRIGHTNESS, "FUNC_BACKLIGHT", FUNC_BACKLIGHT, "defined(OLED_SCREEN)" }, - { TR_SF_BACKLIGHT, "FUNC_BACKLIGHT", FUNC_BACKLIGHT, "!defined(OLED_SCREEN)" }, + { TR_BRIGHTNESS, "FUNC_BACKLIGHT", FUNC_BACKLIGHT, "OLED_SCREEN" }, + { TR_SF_BACKLIGHT, "FUNC_BACKLIGHT", FUNC_BACKLIGHT, "!OLED_SCREEN" }, { TR_SF_SCREENSHOT, "FUNC_SCREENSHOT", FUNC_SCREENSHOT, "" }, { TR_SF_RACING_MODE, "FUNC_RACING_MODE", FUNC_RACING_MODE, "" }, { TR_SF_DISABLE_TOUCH, "FUNC_DISABLE_TOUCH", FUNC_DISABLE_TOUCH, "defined(COLORLCD)" }, diff --git a/tools/hwdef_schema.json b/tools/hwdef_schema.json new file mode 100644 index 00000000000..2d047e98913 --- /dev/null +++ b/tools/hwdef_schema.json @@ -0,0 +1,377 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://edgetx.org/schemas/hw_defs.schema.json", + "title": "EdgeTX radio hardware definition", + "description": "Schema describing the per-target hardware definition JSON files under radio/src/boards/hw_defs/.", + "type": "object", + "additionalProperties": false, + "required": [ + "adc_inputs", + "switches", + "keys", + "trims", + "display", + "hardware", + "timers" + ], + "properties": { + "adc_inputs": { "$ref": "#/$defs/adc_inputs" }, + "switches": { "type": "array", "items": { "$ref": "#/$defs/switch" } }, + "keys": { "type": "array", "items": { "$ref": "#/$defs/key" } }, + "trims": { "type": "array", "items": { "$ref": "#/$defs/trim" } }, + "display": { "$ref": "#/$defs/display" }, + "leds": { "$ref": "#/$defs/leds" }, + "backlight": { "$ref": "#/$defs/backlight" }, + "hardware": { "$ref": "#/$defs/hardware" }, + "timers": { "$ref": "#/$defs/timers" }, + "imu": { "$ref": "#/$defs/imu" }, + "rotenc": { "$ref": "#/$defs/rotenc" } + }, + + "$defs": { + "gpio_port": { + "description": "STM32 LL GPIO port macro, e.g. GPIOA..GPIOK.", + "type": "string", + "pattern": "^GPIO[A-K]$" + }, + "gpio_pin": { + "description": "GPIO pin macro. Usually an STM32 LL macro (LL_GPIO_PIN_0..LL_GPIO_PIN_15), but may also be an I/O expander macro (e.g. PCA95XX_PIN_5, PCA95XX_P14, AW9523B_PIN_0).", + "type": "string", + "pattern": "^[A-Z][A-Z0-9_]*$" + }, + "gpio_pin_macro": { + "description": "Combined GPIO macro form GPIO_PIN(port, n) used by some LED fields.", + "type": "string", + "pattern": "^GPIO_PIN\\(GPIO[A-K],\\s*\\d+\\)$" + }, + + "adc_inputs": { + "type": "object", + "additionalProperties": false, + "required": ["adcs", "inputs"], + "properties": { + "adcs": { "type": "array", "items": { "$ref": "#/$defs/adc" }, "minItems": 1 }, + "inputs": { "type": "array", "items": { "$ref": "#/$defs/adc_input" } } + } + }, + + "adc": { + "type": "object", + "additionalProperties": false, + "required": ["name", "adc"], + "properties": { + "name": { "type": "string" }, + "adc": { "type": "string", "pattern": "^(ADC[1-9]|SPI[1-9])$" }, + "dma": { "type": ["string", "null"], "pattern": "^DMA[12]$" }, + "dma_channel": { "type": "string" }, + "dma_stream": { "type": "string" }, + "dma_stream_irq": { "type": "string" }, + "dma_stream_irq_handler": { "type": "string" }, + "sample_time": { "type": "string" }, + "gpio_pin_cs": { "type": "string" }, + "gpio_pin_sck": { "type": "string" }, + "gpio_pin_miso": { "type": "string" }, + "gpio_pin_mosi": { "type": "string" } + } + }, + + "adc_input": { + "type": "object", + "additionalProperties": false, + "required": ["name", "type", "adc"], + "properties": { + "name": { "type": "string" }, + "type": { + "type": "string", + "enum": ["STICK", "FLEX", "VBAT", "RTC_BAT", "SWITCH", "LUX", "RAW"] + }, + "adc": { "type": "string" }, + "gpio": { "anyOf": [ { "$ref": "#/$defs/gpio_port" }, { "type": "null" } ] }, + "pin": { "anyOf": [ { "$ref": "#/$defs/gpio_pin" }, { "type": "null" } ] }, + "channel": { + "anyOf": [ + { "type": "string", "pattern": "^LL_ADC_CHANNEL_[A-Z0-9_]+$" }, + { "type": "integer" }, + { "type": "null" } + ] + }, + "inverted": { "type": "boolean" }, + "label": { "type": "string" }, + "short_label": { "type": "string" }, + "default": { + "type": "string", + "enum": ["NONE", "POT", "POT_CENTER", "SLIDER", "MULTIPOS", "AXIS_X", "AXIS_Y"] + }, + "pwm_channel": { "type": "integer" } + } + }, + + "switch": { + "type": "object", + "additionalProperties": false, + "required": ["name", "type", "default", "is_cfs"], + "properties": { + "name": { "type": "string" }, + "type": { "type": "string", "enum": ["2POS", "3POS", "ADC"] }, + "flags": { "type": "integer" }, + "inverted": { "type": "boolean" }, + "default": { "type": "string", "enum": ["NONE", "2POS", "3POS", "TOGGLE"] }, + "display": { + "anyOf": [ + { "type": "null" }, + { + "type": "array", + "items": { "type": "integer" }, + "minItems": 2, + "maxItems": 2 + } + ] + }, + "is_cfs": { "type": "boolean" }, + "cfs_idx": { "type": "integer" }, + + "gpio": { "anyOf": [ { "$ref": "#/$defs/gpio_port" }, { "type": "null" } ] }, + "pin": { "$ref": "#/$defs/gpio_pin" }, + "gpio_high": { "anyOf": [ { "$ref": "#/$defs/gpio_port" }, { "type": "null" } ] }, + "pin_high": { "$ref": "#/$defs/gpio_pin" }, + "gpio_low": { "anyOf": [ { "$ref": "#/$defs/gpio_port" }, { "type": "null" } ] }, + "pin_low": { "$ref": "#/$defs/gpio_pin" }, + + "adc_input": { "type": "string" } + }, + "allOf": [ + { + "if": { "properties": { "type": { "const": "ADC" } }, "required": ["type"] }, + "then": { "required": ["adc_input"] } + } + ] + }, + + "key": { + "type": "object", + "additionalProperties": false, + "required": ["active_low", "key", "name", "label"], + "properties": { + "gpio": { "anyOf": [ { "$ref": "#/$defs/gpio_port" }, { "type": "null" } ] }, + "pin": { "anyOf": [ { "$ref": "#/$defs/gpio_pin" }, { "type": "null" } ] }, + "active_low": { "type": "boolean" }, + "key": { + "type": "string", + "enum": [ + "KEY_MENU", "KEY_EXIT", "KEY_ENTER", + "KEY_PAGEUP", "KEY_PAGEDN", + "KEY_UP", "KEY_DOWN", "KEY_LEFT", "KEY_RIGHT", + "KEY_PLUS", "KEY_MINUS", + "KEY_MODEL", "KEY_SYS", "KEY_TELE", + "KEY_SHIFT" + ] + }, + "name": { "type": "string" }, + "label": { "type": "string" } + } + }, + + "trim_pin": { + "type": "object", + "additionalProperties": false, + "required": ["gpio", "pin", "active_low"], + "properties": { + "gpio": { "$ref": "#/$defs/gpio_port" }, + "pin": { "$ref": "#/$defs/gpio_pin" }, + "active_low": { "type": "boolean" } + } + }, + + "trim": { + "type": "object", + "additionalProperties": false, + "required": ["name"], + "properties": { + "name": { "type": "string" }, + "dec": { "$ref": "#/$defs/trim_pin" }, + "inc": { "$ref": "#/$defs/trim_pin" }, + "active_low": { "type": "boolean" } + } + }, + + "exti": { + "type": "object", + "additionalProperties": false, + "properties": { + "irq": { "type": "string" }, + "priority": { "type": "integer" } + } + }, + + "display": { + "type": "object", + "additionalProperties": false, + "required": ["lcd_w", "lcd_h", "lcd_phys_w", "lcd_phys_h", "lcd_depth"], + "properties": { + "lcd_w": { "type": "integer", "minimum": 1 }, + "lcd_h": { "type": "integer", "minimum": 1 }, + "lcd_phys_w": { "type": "integer", "minimum": 1 }, + "lcd_phys_h": { "type": "integer", "minimum": 1 }, + "lcd_depth": { "type": "integer", "enum": [1, 4, 8, 16, 24, 32] }, + "lcd_vertical_invert": { "type": "boolean" }, + "lcd_horizontal_invert": { "type": "boolean" }, + "ltdc_irq_prio": { "type": "integer", "minimum": 0, "maximum": 15 }, + "dma_screen_irq_prio": { "type": "integer", "minimum": 0, "maximum": 15 }, + "oled_screen": { "type": "boolean" } + } + }, + + "leds": { + "type": "object", + "additionalProperties": false, + "properties": { + "status_leds": { "type": "boolean" }, + "led_red_gpio": { "type": "string" }, + "led_red2_gpio": { "type": "string" }, + "led_green_gpio": { "type": "string" }, + "led_blue_gpio": { "type": "string" }, + "gpio_led_gpio_on": { "type": "string" }, + "gpio_led_gpio_off": { "type": "string" }, + + "led_strip_gpio": { "type": "string" }, + "led_strip_gpio_af": { "type": "string" }, + "led_strip_length": { "type": "integer", "minimum": 0 }, + "led_strip_refresh_period": { "type": "integer", "minimum": 0 }, + "led_strip_timer": { "type": "string" }, + "led_strip_timer_channel": { "type": "string" }, + "led_strip_timer_freq": { "type": "string" }, + "led_strip_timer_dma": { "type": "string" }, + "led_strip_timer_dma_channel": { "type": "string" }, + "led_strip_timer_dma_stream": { "type": "string" }, + "led_strip_timer_dma_irqn": { "type": "string" }, + "led_strip_timer_dma_irqhandler": { "type": "string" }, + + "cfs_led_strip_start": { "type": "integer", "minimum": 0 }, + "cfs_led_strip_length": { "type": "integer", "minimum": 0 }, + "cfs_leds_per_switch": { "type": "integer", "minimum": 0 }, + "bling_led_strip_start": { "type": "integer", "minimum": 0 }, + "bling_led_strip_length": { "type": "integer", "minimum": 0 } + } + }, + + "backlight": { + "type": "object", + "additionalProperties": false, + "properties": { + "backlight_gpio": { "type": "string" }, + "backlight_gpio_af": { "type": "string" }, + "backlight_timer": { "type": "string" }, + "backlight_timer_channel":{ "type": "string" }, + "backlight_timer_freq": { "type": "string" }, + "backlight_bdtr": { "type": "string" }, + "has_backlight_color": { "type": "boolean" } + } + }, + + "hardware": { + "type": "object", + "additionalProperties": false, + "required": ["cpu", "cpu_type"], + "properties": { + "cpu": { "type": "string", "pattern": "^STM32[A-Za-z0-9]+$" }, + "cpu_type": { "type": "string", "enum": ["STM32F2", "STM32F4", "STM32H7"] }, + "has_audio_mute": { "type": "boolean" }, + "has_ext_module_support": { "type": "boolean" }, + "has_int_module_support": { "type": "boolean" }, + "sport_max_baudrate": { "type": "integer", "minimum": 0 }, + "surface": { "type": "boolean" } + } + }, + + "timers": { + "type": "object", + "additionalProperties": false, + "required": [ + "cpu_freq", + "peri1_frequency", + "peri2_frequency", + "timer_mult_apb1", + "timer_mult_apb2", + "ms_timer", + "ms_timer_irqn", + "ms_timer_irqhandler", + "mixer_scheduler_timer", + "mixer_scheduler_timer_freq", + "mixer_scheduler_timer_irqn", + "mixer_scheduler_timer_irqhandler" + ], + "properties": { + "cpu_freq": { "type": "integer", "minimum": 1 }, + "peri1_frequency": { "type": "integer", "minimum": 1 }, + "peri2_frequency": { "type": "integer", "minimum": 1 }, + "timer_mult_apb1": { "type": "integer", "minimum": 1 }, + "timer_mult_apb2": { "type": "integer", "minimum": 1 }, + "ms_timer": { "type": "string" }, + "ms_timer_irqn": { "type": "string" }, + "ms_timer_irqhandler": { "type": "string" }, + "mixer_scheduler_timer": { "type": "string" }, + "mixer_scheduler_timer_freq": { "type": "string" }, + "mixer_scheduler_timer_irqn": { "type": "string" }, + "mixer_scheduler_timer_irqhandler": { "type": "string" } + } + }, + + "imu": { + "type": "object", + "additionalProperties": false, + "properties": { + "imu_i2c_bus": { "type": "string" }, + "imu_int_gpio": { "type": "string" }, + "imu_i2c_address": { "type": "string" }, + "imu_invert_x": { "type": "boolean" }, + "imu_invert_y": { "type": "boolean" }, + "exti": { "type": "array", "items": { "$ref": "#/$defs/exti" } } + } + }, + + "rotenc": { + "type": "object", + "additionalProperties": false, + "properties": { + "rotary_encoder_inverted": { "type": "boolean" }, + "rotary_encoder_gpio": { "type": "string" }, + "rotary_encoder_gpio_a": { "type": "string" }, + "rotary_encoder_gpio_b": { "type": "string" }, + "rotary_encoder_gpio_pin_a": { "type": "string" }, + "rotary_encoder_gpio_pin_b": { "type": "string" }, + "rotary_encoder_position": { "type": "string" }, + "rotary_encoder_exti_line1": { "type": "string" }, + "rotary_encoder_exti_line2": { "type": "string" }, + "rotary_encoder_exti_port": { "type": "string" }, + "rotary_encoder_exti_port_a": { "type": "string" }, + "rotary_encoder_exti_port_b": { "type": "string" }, + "rotary_encoder_exti_sys_line1": { "type": "string" }, + "rotary_encoder_exti_sys_line2": { "type": "string" }, + "rotary_encoder_timer": { "type": "string" }, + "rotary_encoder_timer_irqn": { "type": "string" }, + "rotary_encoder_timer_irqhandler": { "type": "string" }, + "exti": { "type": "array", "items": { "$ref": "#/$defs/exti" } } + } + }, + + "haptic": { + "type": "object", + "additionalProperties": false, + "properties": { + "haptic_pwm": { "type": "boolean" }, + "haptic_gpio": { "type": "string" }, + "haptic_gpio_timer": { "type": "string" }, + "haptic_gpio_af": { "type": "string" }, + "haptic_timer_output_enable": { "type": "string" }, + "haptic_timer_mode": { "type": "string" }, + "haptic_timer_compare_value": { "type": "string" }, + "haptic_timer": { "type": "string" }, + "haptic_timer_freq": { "type": "string" }, + "haptic_counter_register": { "type": "string" }, + "haptic_ccmr1": { "type": "string" }, + "haptic_ccmr2": { "type": "string" }, + "haptic_ccer": { "type": "string" }, + } + } + } +}