From f3cabd42f7cd05044fd7af09a36a2aa9c5bb39c8 Mon Sep 17 00:00:00 2001 From: philmoz Date: Mon, 13 Jul 2026 10:15:50 +1000 Subject: [PATCH] chore: use settings from radio JSON files instead of hal.h (#7411) Co-authored-by: 3djc <3djc@gh.com> --- cmake/Macros.cmake | 2 + companion/src/firmwares/boardjson.cpp | 41 +- radio/src/CMakeLists.txt | 23 ++ radio/src/boards/generic_stm32/CMakeLists.txt | 16 +- radio/src/boards/hw_defs/boxer.json | 57 ++- radio/src/boards/hw_defs/bumblebee.json | 59 ++- radio/src/boards/hw_defs/commando8.json | 54 ++- radio/src/boards/hw_defs/el18.json | 54 ++- radio/src/boards/hw_defs/f16.json | 55 ++- radio/src/boards/hw_defs/gx12.json | 75 +++- radio/src/boards/hw_defs/lr3pro.json | 56 ++- radio/src/boards/hw_defs/mt12.json | 72 +++- radio/src/boards/hw_defs/nb4p.json | 91 ++++- radio/src/boards/hw_defs/nv14.json | 54 ++- radio/src/boards/hw_defs/pa01.json | 93 ++++- radio/src/boards/hw_defs/pl18.json | 70 +++- radio/src/boards/hw_defs/pl18ev.json | 70 +++- radio/src/boards/hw_defs/pl18u.json | 71 +++- radio/src/boards/hw_defs/pocket.json | 57 ++- radio/src/boards/hw_defs/st16.json | 103 ++++- radio/src/boards/hw_defs/t12.json | 54 ++- radio/src/boards/hw_defs/t12max.json | 57 ++- radio/src/boards/hw_defs/t14.json | 72 +++- radio/src/boards/hw_defs/t15.json | 54 ++- radio/src/boards/hw_defs/t15pro.json | 100 ++++- radio/src/boards/hw_defs/t16.json | 55 ++- radio/src/boards/hw_defs/t18.json | 54 ++- radio/src/boards/hw_defs/t20.json | 56 ++- radio/src/boards/hw_defs/t20v2.json | 59 ++- radio/src/boards/hw_defs/t22.json | 92 ++++- radio/src/boards/hw_defs/t8.json | 53 ++- radio/src/boards/hw_defs/tlite.json | 54 ++- radio/src/boards/hw_defs/tpro.json | 54 ++- radio/src/boards/hw_defs/tpros.json | 59 ++- radio/src/boards/hw_defs/tprov2.json | 56 ++- radio/src/boards/hw_defs/tx12.json | 54 ++- radio/src/boards/hw_defs/tx12mk2.json | 57 ++- radio/src/boards/hw_defs/tx15.json | 116 +++++- radio/src/boards/hw_defs/tx16s.json | 55 ++- radio/src/boards/hw_defs/tx16smk3.json | 116 +++++- radio/src/boards/hw_defs/v12.json | 68 +++- radio/src/boards/hw_defs/v14.json | 71 +++- radio/src/boards/hw_defs/v16.json | 68 +++- radio/src/boards/hw_defs/x10.json | 54 ++- radio/src/boards/hw_defs/x10express.json | 54 ++- radio/src/boards/hw_defs/x12s.json | 50 ++- radio/src/boards/hw_defs/x7.json | 52 ++- radio/src/boards/hw_defs/x7access.json | 51 ++- radio/src/boards/hw_defs/x9d+.json | 48 ++- radio/src/boards/hw_defs/x9d+2019.json | 54 ++- radio/src/boards/hw_defs/x9d.json | 40 +- radio/src/boards/hw_defs/x9e.json | 48 ++- radio/src/boards/hw_defs/x9lite.json | 55 ++- radio/src/boards/hw_defs/x9lites.json | 54 ++- radio/src/boards/hw_defs/xlite.json | 57 ++- radio/src/boards/hw_defs/xlites.json | 56 ++- radio/src/boards/hw_defs/zorro.json | 57 ++- radio/src/bootloader/CMakeLists.txt | 4 - radio/src/cfn_sort.cpp | 76 ++-- radio/src/datastructs_private.h | 2 +- radio/src/edgetx.cpp | 2 +- radio/src/edgetx.h | 2 +- radio/src/functions.cpp | 2 +- radio/src/gui/128x64/lcd.cpp | 2 +- radio/src/gui/128x64/radio_setup.cpp | 8 +- radio/src/gui/212x64/radio_setup.cpp | 12 +- radio/src/gui/colorlcd/boot_lcd.cpp | 2 +- radio/src/gui/colorlcd/lcd.cpp | 4 +- radio/src/gui/common/stdlcd/feature_control.h | 10 +- .../src/gui/common/stdlcd/radio_hardware.cpp | 6 +- radio/src/gui/screenshot.cpp | 2 +- radio/src/hal/CMakeLists.txt | 7 - radio/src/lua/CMakeLists.txt | 15 - radio/src/lua/api_general.cpp | 1 + radio/src/storage/yaml/CMakeLists.txt | 7 - .../targets/common/arm/stm32/CMakeLists.txt | 2 + .../arm/stm32/rotary_encoder_driver.cpp | 4 +- radio/src/targets/horus/board.cpp | 2 +- radio/src/targets/horus/hal.h | 95 +---- radio/src/targets/horus/lcd_driver.cpp | 8 +- radio/src/targets/pa01/hal.h | 88 +--- radio/src/targets/pl18/CMakeLists.txt | 1 - radio/src/targets/pl18/hal.h | 103 +---- radio/src/targets/simu/CMakeLists.txt | 13 +- radio/src/targets/simu/simulcd.cpp | 6 +- radio/src/targets/st16/hal.h | 91 +---- radio/src/targets/t15pro/hal.h | 161 +------- radio/src/targets/t22/hal.h | 90 +---- radio/src/targets/taranis/CMakeLists.txt | 9 - radio/src/targets/taranis/board.cpp | 6 +- radio/src/targets/taranis/board.h | 10 +- radio/src/targets/taranis/hal.h | 248 +----------- radio/src/targets/taranis/lcd_driver_spi.cpp | 8 +- radio/src/targets/tx15/hal.h | 117 +----- radio/src/targets/tx16smk3/hal.h | 192 +-------- radio/util/hw_defs/generator.py | 7 + radio/util/hw_defs/hal_settings.jinja | 126 ++++++ radio/util/hw_defs/models.py | 114 ++++++ tools/cfn_sorter.cpp | 4 +- tools/hwdef_schema.json | 377 ++++++++++++++++++ 100 files changed, 3290 insertions(+), 2193 deletions(-) create mode 100644 radio/util/hw_defs/hal_settings.jinja create mode 100644 tools/hwdef_schema.json diff --git a/cmake/Macros.cmake b/cmake/Macros.cmake index d116cf2f8..2e781b93f 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 ea02fb2f9..b2e62f9db 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 8c66a6147..d38b54e9f 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 e5c3dd015..67c3a70c0 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 c632f83d5..578c5d531 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 7040bf08d..e552ec0da 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 132c798a3..4b38465b2 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 b853a0598..87c4d55e0 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 ee4dc9dca..ae80ad34e 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 db423db05..95e5dfa7c 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 9991bacf5..12ae15c6b 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 6b9d001e6..05c1264f9 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 17d7a725c..0c47b12de 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 f7ed73bf1..62008f880 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 f6b9563b7..3af341b02 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 1be590ac6..0d3708f26 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 3b735b429..9a3a9b2b9 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 90817a7b1..7171cbbc1 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 f965d84be..f74a509a8 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 05b8cafaa..b705dd88d 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 85e3a903e..ee2ceb1ad 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 575854e0b..e0a314623 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 1c82eff91..2600c553d 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 8640d9f92..c85848bec 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 e259a1699..eec541388 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 ad6b59bbc..d57a5eb7f 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 436a336f7..031d372eb 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 485d7d64e..74f20a250 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 0cd2f349a..b6c261817 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 be41fffa5..d089261c8 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 3489f713c..f9daf48f7 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 0f40cfc93..112b10f41 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 bb88c752a..5a75748bf 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 02e15a693..e5633eb99 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 2473a3b1d..c17afc30e 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 287b88c9b..dd3b474a8 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 308933a17..63f23e4fc 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 11ce991a3..cd035f662 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 524b953f9..2eaf411e2 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 8ffb0d97d..8f0edf9c3 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 c5b5b2537..ac726ddfc 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 f79d83c38..29efa82b5 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 3170004fe..901daabc4 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 9f188f4d3..2b2660eeb 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 9f188f4d3..2b2660eeb 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 06e02f7da..23be1bce6 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 3678ba3e4..9c70904dd 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 1c56aa292..9185f5868 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 c1432a45b..38faffdee 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 eef3abf5a..bd99ff181 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 89056ea4b..45e5de657 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 9b016edcf..443ded67c 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 37b358cb4..ce5fdde13 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 cab935be9..78d75f43b 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 ec1e33fb6..99b246142 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 0a6983908..9a7246e06 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 93b405fc3..cf71f58d0 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 05e443e43..25d5aa39c 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 49d43bdad..936ef2f00 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 00785562f..47ecd9cf4 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 c82a0718a..e856137ca 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 3e84b3bed..80eb1fb03 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 37a6933fa..d998a7294 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 5597cb8f8..0497e4653 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 8fb4112af..c6c39279a 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 b373c082f..454606ddf 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 0ce2ca9d5..4cad2268e 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 e55430516..b4eb7c946 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 9aeda6d4f..817c21db3 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 7c3c6c09c..5c0169ba6 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 8a3f1999b..d68e887b5 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 589d1e8cd..7e4ed1485 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 787c8ee8d..47e576c8a 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 dddda8746..faf23a44d 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 68fbf9bb7..8f3bdbca3 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 c5beb4116..03c0d6138 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 a8658dec3..76831c135 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 04308fd28..bbe71bb0a 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 4ba08f6f5..ac93332d4 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 c6aab824f..724808e0c 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 0b11d2a8e..1524f14cc 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 4fe0c4a3a..137c16201 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 3b453937e..79d763454 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 0f71244e7..8394c20b5 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 8530bae2a..1f331c188 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 3f00d817d..d63d2fc58 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 a8b5804a0..dabf0f06e 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 d08c36c85..c1db554e3 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 300e2ae05..d3033ce80 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 b66f6e384..ebb0427d3 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 7cecc6749..891462520 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 764ea8999..cb3fc88ea 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 1c549cac1..df899e60e 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 1637c6e1b..975608397 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 5c0d3e3d7..c16ad9061 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 3c00857c7..172d003c2 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 000000000..b188eae40 --- /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 02752b05b..e01a539e2 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 51b35895e..7f5e98835 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 000000000..2d047e989 --- /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" }, + } + } + } +}