Skip to content

feat: add support for HelloRadioSky V15 - #7867

Merged
pfeerick merged 13 commits into
mainfrom
pfeerick/main-v15
Oct 8, 2026
Merged

pfeerick merged 13 commits into
mainfrom
pfeerick/main-v15

Conversation

@pfeerick

@pfeerick pfeerick commented Oct 5, 2026 •

Copy link
Copy Markdown
Member

Summary of changes:

  • Adds support for HelloRadioSky V15

Features unique to the V15 that are currently enabled:

  • HRS Tools (Radio Tools → "HRS Tools"). These use the radio's external measurement port (GND / +5V / signal):
    • Auto Measure: detects the protocol of a connected receiver or device (PWM, PPM, SBUS, CRSF, SUMD, DJI RS or MAVLink) and opens the matching live view of its channels or data.
    • Pulse Scope: a logic/pulse waveform view.
    • Servo Tester: PWM output to a servo.
    • DShot Tester: DShot output to an ESC.
  • Battery Meter: plug a 1–6S pack's balance lead into the radio and a screen pops up automatically, showing pack voltage, each cell, the spread between cells, and a charge-level bar.
  • Charging HUD: V15 has a dedicated USB-C PD capable charge port
    • While charging: a full-screen HUD shows charge level, volts, amps, watts and a current bar. RTN hides it until you unplug.
    • When switched off while charging: the radio stays on showing the HUD until you unplug or press RTN.
  • Battery current and power as sources: BatI and BatP can be used anywhere a source can (mixes, logical switches, Play Value, widgets).

@pfeerick pfeerick added this to the 3.0 milestone Oct 5, 2026
@pfeerick
pfeerick force-pushed the pfeerick/main-v15 branch 4 times, most recently from be7dddf to f8a375f Compare October 7, 2026 10:23
pfeerick and others added 11 commits October 7, 2026 22:35
Adds the HelloRadioSky V15 (STM32H750, LTDC colour LCD) target and
Companion support, moving V12 alongside it under targets/hrs.

V15-specific features: battery sensor and charger UI, AUX3 chat module,
IMU, and the HRS Tools suite (auto measure for PWM/PPM/SBUS/CRSF/SUMD/
DJI RS/MAVLink, pulse scope, servo and DShot testers).

Co-authored-by: helloradiosky <157123396+helloradiosky@users.noreply.github.com>
Co-authored-by: philmoz <philmoz@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add a weak customRadioSetupLines() hook so a target can append its own
Radio Setup lines, and move the V15 AI Terminal window and AI Mode line
into targets/hrs/tools.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
mixer.cpp now uses batterySensorVoltage()/batterySensorCurrent() from
the board header instead of including V15's batsenser.h, and the unused
Bat6sInterfaceFunction enum moves to batsenser.h.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The current source is in 0.1 A steps, so the range and voice playback
should use PREC1 (they used PREC2, reading 10x too small). Power is
now announced with its sign.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
0x4C78746F is already used by the FlySky ST16, which made Companion
treat the two radios as compatible.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Map TX_BAT_CURRENT/TX_BAT_POWER to the reserved RESERVED3/4 special
source slots, available on V15 only, so models using them are no longer
lost when saved from Companion.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Firmware/nightly/Companion CI matrices, WASM simulator modules,
generate-hw-defs.sh, CMake presets, fw.json, compilation options docs,
bug report template, and the regenerated web/public/radios.json.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Opt V15 into the configurable/dimmable status LEDs from #7806, like V12:

- -DSTATUS_LED_PWM, with TIM2 (free, APB1, own IRQ) as the software PWM
  timer in v15.json. TIM7 can't be used as on V12, it is the DShot
  tester's frame timer.
- Drop V15's own led_driver.cpp. It was a copy of the generic driver
  from before #7806 whose strong symbols override the generic weak ones,
  so PWM would never be used. Without PWM the generic driver behaves the
  same (same pins, CFS strip start is 0).
- boardInit() uses ledBoot() instead of setting the blue LED directly.
- Regenerate yaml_datastructs_v15.cpp for statusLedDim/statusLedSrc.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add "tx-current" and "tx-power" next to "tx-voltage", so scripts can use
getValue("tx-current") / getFieldInfo() on radios with a battery sensor.
getSourceIndex() matches the on-screen (translated) source name, so
lookups by "BatI"/"BatP" would break once those strings are localised.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add "vgr" and "vfl" for the CI1302 voice control sources (#7501), so
getValue()/getFieldInfo() can find them by name like other single
sources.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
pfeerick and others added 2 commits October 8, 2026 00:19
The charging HUD reopened and stayed after unplugging the charger:
PI3 sees the IP2363 LED1 output through 100R and the charge LED through
2K. Once LED1 stops driving, the internal pull-up against the LED path
leaves the pin around 1.6V, which reads as charging. A pull-down makes
the undriven state read low; LED1 still easily drives it high.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The CSD203 system current is positive while the radio draws from the
battery and negative while charging, but the HUD treats positive as
charging (bright current bar, warning colour when negative). Charging
showed negative amps/watts and a warning-coloured bar.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@pfeerick pfeerick changed the title feat: add HelloRadioSky V15 - main feat: add support for HelloRadioSky V15 Oct 8, 2026
@pfeerick
pfeerick marked this pull request as ready for review October 8, 2026 01:37
@pfeerick
pfeerick merged commit baed185 into main Oct 8, 2026
61 checks passed
@pfeerick
pfeerick deleted the pfeerick/main-v15 branch October 8, 2026 01:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant