chore: use settings from radio JSON files instead of hal.h (#7411)

Co-authored-by: 3djc <3djc@gh.com>
This commit is contained in:
philmoz
2026-07-13 10:15:50 +10:00
committed by GitHub
co-authored by 3djc
parent 445c09f662
commit f3cabd42f7
100 changed files with 3290 additions and 2193 deletions
+7
View File
@@ -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:
+126
View File
@@ -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 -%}
+114
View File
@@ -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":