Skip to content

feat: Support of new radio DRO1 by DumboRC - #6076

Open
FreedomLJS wants to merge 70 commits into
EdgeTX:mainfrom
FreedomLJS:main
Open

feat: Support of new radio DRO1 by DumboRC#6076
FreedomLJS wants to merge 70 commits into
EdgeTX:mainfrom
FreedomLJS:main

Conversation

@FreedomLJS

@FreedomLJS FreedomLJS commented Apr 11, 2025

Copy link
Copy Markdown

DRO1 is a new product from DumboRC, which is committed to creating the best user experience for users.

Summary by CodeRabbit

Release Notes

  • New Features
    • Added support for the DumboRC DRO1 transmitter, including firmware build targets, registration, and board selection.
    • Added DRO1 hardware configuration: device naming/USB descriptors, display/touch (GT911) setup, and supported options (including Lua/FLEX and RF module settings).
    • Updated the module UI to show the 5 volts warning where applicable.
  • Bug Fixes
    • Prevented font decompression from failing when font data is missing.
  • Chores
    • Updated build/test and nightly automation to include the DRO1 target.

@richardclli richardclli changed the title The first submission of the DRO1 device code originating from DumboRC. feat: Support of new radio DRO1 by DumboRC Apr 13, 2025
@wimalopaan

Copy link
Copy Markdown
Contributor

Are there any informations about this radio available?

@wimalopaan

Copy link
Copy Markdown
Contributor

@FreedomLJS Are there any further infos about the DR01 (tech specs, release date, ...)?

@3djc

3djc commented Aug 11, 2025

Copy link
Copy Markdown
Collaborator

Since it is a F4 radio, it cannot be merged anymore anyway

@wimalopaan

Copy link
Copy Markdown
Contributor

Since it is a F4 radio, it cannot be merged anymore anyway

Ok, thanks for that info!

@coderabbitai

coderabbitai Bot commented Jun 8, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR adds DumboRC DRO1 support across companion firmware, radio target configuration, build tooling, and CI workflows. It also introduces a DRO1 hardware definition and updates several radio runtime conditionals and UI paths for the new target.

Changes

DumboRC DRO1 Board Integration

Layer / File(s) Summary
Companion board type definition and Boards class integration
companion/src/firmwares/boards.h, companion/src/firmwares/boards.cpp, companion/src/firmwares/boardjson.cpp, companion/src/firmwares/opentx/opentxinterface.cpp
Adds BOARD_DUMBORC_DRO1, IS_DUMBORC_DRO1(), T16 family membership, board metadata mappings, OpenTx firmware registration, and boardjson flex-switch fixups for DRO1.
DRO1 hardware definition and CMake build configuration
radio/src/boards/hw_defs/dro1.json, radio/src/targets/horus/CMakeLists.txt, tools/boards.py
Introduces the DRO1 hardware definition and the DRO1 CMake/board mapping used to select board-specific build options and manufacturer/radio-family settings.
Radio HAL and board-level peripheral configuration
radio/src/targets/horus/hal.h, radio/src/targets/horus/board.h, radio/src/targets/horus/lcd_driver.cpp, radio/src/targets/horus/tp_gt911.cpp, radio/src/targets/horus/usb_descriptor.h, radio/src/tasks.cpp, radio/src/telemetry/frsky.h, radio/src/edgetx.cpp, radio/src/gui/colorlcd/module/module_setup.cpp
Extends DRO1 handling across HAL constants, board defaults, LCD/touch/USB setup, audio startup, telemetry, manufacturer defaults, and the 5V warning UI path.
Build system and tooling integration
fw.json, radio/src/CMakeLists.txt, tools/build-common.sh, radio/util/fwoptions.py, tools/build-dumborc.py, radio/util/build-firmware.py, radio/util/hw_defs/legacy_names.py, tools/generate-hw-defs.sh, tools/generate-yaml.sh
Updates target metadata, build flags, firmware options, legacy target naming, and the DRO1 build/generation scripts.
CI/CD workflows and issue templates
.github/workflows/build_fw.yml, .github/workflows/nightly.yml, .github/ISSUE_TEMPLATE/bug-report.yml
Adds dro1 to the build and nightly matrices and adds DumboRC DRO1 to the bug report transmitter list.
Bug fixes and feature refinements
radio/src/gui/colorlcd/fonts.cpp, radio/src/gui/colorlcd/model/model_setup.cpp, radio/src/tests/module_ports.cpp, radio/src/stamp.cpp
Adds the font decompression null guard, conditions RF setup buttons on hardware capability flags, gates internal-module tests on HARDWARE_INTERNAL_MODULE, and adds the DUMBORC_RELEASE factory suffix.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

  • EdgeTX/edgetx#7328: Both PRs touch radio/src/tasks.cpp in audioTask().
  • EdgeTX/edgetx#7420: Both PRs extend the same board-support plumbing across companion and radio target files.

Suggested labels: enhancement ✨, hardware support, firmware

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description does not follow the required template and is missing both the Fixes # line and the Summary of changes section. Add the required template sections, including a Fixes # reference and a detailed Summary of changes that matches the PR scope.
Docstring Coverage ⚠️ Warning Docstring coverage is 11.54% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: adding support for the DumboRC DRO1 radio.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
radio/src/targets/horus/usb_descriptor.h (1)

52-59: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

DRO1 USB descriptors are shadowed by the earlier PCBX10 branch.

Because #elif defined(PCBX10) is evaluated before #elif defined(RADIO_DRO1), DRO1 builds that also define PCBX10 will expose X10 USB strings instead of DumboRC DRO1 strings.

Suggested fix
-#elif defined(PCBX10)
-  `#define` USB_NAME                     "FrSky X10"
-  `#define` USB_MANUFACTURER             'F', 'r', 'S', 'k', 'y', ' ', ' ', ' '  /* 8 bytes */
-  `#define` USB_PRODUCT                  'X', '1', '0', ' ', ' ', ' ', ' ', ' '  /* 8 Bytes */
-#elif defined(RADIO_DRO1)
+#elif defined(RADIO_DRO1)
   `#define` USB_NAME                     "DumboRC DRO1"
   `#define` USB_MANUFACTURER             'D', 'U', 'M', 'B', 'O', 'R', 'C', ' '  /* 8 bytes */
   `#define` USB_PRODUCT                  'D', 'R', 'O', '1', ' ', ' ', ' ', ' '  /* 8 Bytes */
+#elif defined(PCBX10)
+  `#define` USB_NAME                     "FrSky X10"
+  `#define` USB_MANUFACTURER             'F', 'r', 'S', 'k', 'y', ' ', ' ', ' '  /* 8 bytes */
+  `#define` USB_PRODUCT                  'X', '1', '0', ' ', ' ', ' ', ' ', ' '  /* 8 Bytes */
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@radio/src/targets/horus/usb_descriptor.h` around lines 52 - 59, The
RADIO_DRO1 USB descriptors are being shadowed by the earlier PCBX10 branch so
builds that define both PCBX10 and RADIO_DRO1 get the X10 strings; change the
conditional ordering or make the branches independent: ensure the RADIO_DRO1
block (defines USB_NAME, USB_MANUFACTURER, USB_PRODUCT) is evaluated before the
PCBX10 block (or convert both to separate `#if` ... `#endif` blocks) so RADIO_DRO1
builds receive the DumboRC DRO1 strings instead of the FrSky X10 strings; update
the placement of the RADIO_DRO1/PCBX10 conditionals around the USB_* defines
accordingly.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@radio/src/boards/hw_defs/dro1.json`:
- Around line 137-143: EXT3 and EXT4 entries currently reuse the same
ADC/GPIO/pin/channel as RH/RV, making them electrical aliases; update the "EXT3"
and "EXT4" objects so their "adc", "gpio", "pin" and "channel" fields point to
unique ADC/GPIO pins (not the same values used by "RH" or "RV"/stick axes) and
keep "inverted" as required, and apply the same fix to the other duplicated
blocks noted (the other EXT3/EXT4 and RH/RV occurrences); locate entries by the
"name":"EXT3"/"EXT4" and "name":"RH"/"RV" symbols and replace the duplicated
mapping values with the correct distinct ADC channel and GPIO pin identifiers.

In `@radio/src/targets/horus/hal.h`:
- Around line 133-134: PCBREV_VALUE() is defined as the braced-init-list "{0}"
for RADIO_V16 / RADIO_DRO1 but is used as an rvalue in an assignment
(hardwareOptions.pcbrev = PCBREV_VALUE(); in pwr_driver.cpp) where a scalar is
expected; change the macro for RADIO_DRO1/RADIO_V16 from "{0}" to a plain scalar
(e.g., 0 or (0)) so PCBREV_VALUE() expands to a valid numeric expression for
assignment to the bit-field hardwareOptions.pcbrev.

In `@tools/build-dumborc.py`:
- Around line 71-73: Validate that each requested board and translation exists
before calling build: check entries in args.boards against the boards mapping
keys (the variable boards) and args.translations against the translations list,
and if any unknown values are present raise an argparse.ArgumentError or call
parser.error with a clear message listing the invalid items; then iterate only
over the validated lists and call build(board, translation, args.srcdir). Locate
this in the loop using the variables boards, translations, args.boards,
args.translations and the build() call and add the membership checks and error
reporting there.
- Around line 38-54: The current build flow uses os.system and continues even if
cmake/make fail, then may try to copy a missing artifact and skip cleanup; wrap
the build and copy steps in a try/finally where the finally always restores cwd
and calls shutil.rmtree(path), and make the build commands fail-fast by
replacing os.system(...) calls (or checking their return codes) with
subprocess.run(..., check=True) or explicitly raising on non-zero return so that
the shutil.copy of "%s/arm-none-eabi/firmware.bin" and the loop that creates
filename only run when builds succeed; ensure you reference and preserve cwd,
path, command, the make invocation, shutil.copy and shutil.rmtree when
implementing the change.
- Around line 40-43: The code currently builds a shell command string using
cmake_options, translation, and srcdir and calls os.system, which is vulnerable
to injection; replace the string interpolation and os.system calls with
subprocess.run using an argument list (e.g., subprocess.run(["cmake"] +
cmake_options.split() + ["-DTRANSLATIONS="+translation, "-DDUMBORC_RELEASE=YES",
srcdir], check=True) and subprocess.run(["make", "firmware", "-j6"],
check=True)), avoid shell=True, and keep or log a safe printable representation
of the command instead of executing the formatted shell string.

---

Outside diff comments:
In `@radio/src/targets/horus/usb_descriptor.h`:
- Around line 52-59: The RADIO_DRO1 USB descriptors are being shadowed by the
earlier PCBX10 branch so builds that define both PCBX10 and RADIO_DRO1 get the
X10 strings; change the conditional ordering or make the branches independent:
ensure the RADIO_DRO1 block (defines USB_NAME, USB_MANUFACTURER, USB_PRODUCT) is
evaluated before the PCBX10 block (or convert both to separate `#if` ... `#endif`
blocks) so RADIO_DRO1 builds receive the DumboRC DRO1 strings instead of the
FrSky X10 strings; update the placement of the RADIO_DRO1/PCBX10 conditionals
around the USB_* defines accordingly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: aecfdc5c-ce6e-493e-9d0b-4e5afe5b43ff

📥 Commits

Reviewing files that changed from the base of the PR and between 65f135c and 91a232a.

📒 Files selected for processing (32)
  • .github/ISSUE_TEMPLATE/bug-report.yml
  • .github/workflows/build_fw.yml
  • .github/workflows/nightly.yml
  • companion/src/firmwares/boardjson.cpp
  • companion/src/firmwares/boards.cpp
  • companion/src/firmwares/boards.h
  • companion/src/firmwares/opentx/opentxinterface.cpp
  • fw.json
  • radio/src/CMakeLists.txt
  • radio/src/boards/hw_defs/dro1.json
  • radio/src/edgetx.cpp
  • radio/src/gui/colorlcd/fonts.cpp
  • radio/src/gui/colorlcd/model/model_setup.cpp
  • radio/src/gui/colorlcd/module/module_setup.cpp
  • radio/src/stamp.cpp
  • radio/src/targets/horus/CMakeLists.txt
  • radio/src/targets/horus/board.h
  • radio/src/targets/horus/hal.h
  • radio/src/targets/horus/lcd_driver.cpp
  • radio/src/targets/horus/tp_gt911.cpp
  • radio/src/targets/horus/usb_descriptor.h
  • radio/src/tasks.cpp
  • radio/src/telemetry/frsky.h
  • radio/src/tests/module_ports.cpp
  • radio/util/build-firmware.py
  • radio/util/fwoptions.py
  • radio/util/hw_defs/legacy_names.py
  • tools/boards.py
  • tools/build-common.sh
  • tools/build-dumborc.py
  • tools/generate-hw-defs.sh
  • tools/generate-yaml.sh

Comment thread radio/src/boards/hw_defs/dro1.json
Comment thread radio/src/targets/horus/hal.h
Comment thread tools/build-dumborc.py
Comment thread tools/build-dumborc.py
Comment thread tools/build-dumborc.py

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
radio/src/gui/colorlcd/model/model_setup.cpp (1)

459-459: 💤 Low value

Consider removing the "FIX :" comment prefix.

The "FIX :" prefix is non-standard. Standard practice uses "NOTE:", "TODO:", or plain descriptive text. Since the guard itself is correct, the comment could simply read:

/* Valid only if HARDWARE_INTERNAL_MODULE is defined */
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@radio/src/gui/colorlcd/model/model_setup.cpp` at line 459, Remove the
non-standard "FIX :" prefix from the comment on line 459 in the file
radio/src/gui/colorlcd/model/model_setup.cpp. The comment should simply read "/*
Valid only if HARDWARE_INTERNAL_MODULE is defined */" without the "FIX :" prefix
to follow standard commenting conventions.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@radio/src/gui/colorlcd/model/model_setup.cpp`:
- Line 459: Remove the non-standard "FIX :" prefix from the comment on line 459
in the file radio/src/gui/colorlcd/model/model_setup.cpp. The comment should
simply read "/* Valid only if HARDWARE_INTERNAL_MODULE is defined */" without
the "FIX :" prefix to follow standard commenting conventions.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7a0c4f6c-eaa1-40f0-8812-2be8d34cb685

📥 Commits

Reviewing files that changed from the base of the PR and between 91a232a and dbf6ab2.

📒 Files selected for processing (3)
  • radio/src/edgetx.cpp
  • radio/src/gui/colorlcd/model/model_setup.cpp
  • radio/src/gui/colorlcd/module/module_setup.cpp
🚧 Files skipped from review as they are similar to previous changes (2)
  • radio/src/edgetx.cpp
  • radio/src/gui/colorlcd/module/module_setup.cpp

@dsolaray

Copy link
Copy Markdown

DRO1 is a new product from Dumbo

Are there any further infos about the DR01 (tech specs, release date, ...)?

This thread was created on april 2025 and maybe the initial radio project differs from the current radio form factor which looks very much like a bad copy of the TX16 MK3 (january 2026)

in other words you won't miss anything as far as build quality goes....
Dumbo @FreedomLJS is not different from Helloradio @helloradiosky they just clone a product that sells well but won't improve or overcome the Radiomaster offerings.

@helloradiosky

helloradiosky commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

DRO1 is a new product from Dumbo

Are there any further infos about the DR01 (tech specs, release date, ...)?

This thread was created on april 2025 and maybe the initial radio project differs from the current radio form factor which looks very much like a bad copy of the TX16 MK3 (january 2026)

in other words you won't miss anything as far as build quality goes.... Dumbo @FreedomLJS is not different from Helloradio @helloradiosky they just clone a product that sells well but won't improve or overcome the Radiomaster offerings.

@dsolaray
I'm very sorry, I think you don't know us well enough. You can visit our official website to see the detailed feature introduction of our products, helloradiosky.com. We really hope to promote the open-source EDGETX product well and benefit model enthusiasts. Every product we design is done with great care, especially our upcoming V15, which incorporates over 20 years of practical experience in model hobbies. We hope everyone can understand and tolerate. Thank you very much.

@dsolaray

Copy link
Copy Markdown

I'm very sorry, I think you don't know us well enough.

Many years and long track record in this hobby. Did you use to work for Radiomaster ?

You can visit our official website to see the detailed feature introduction of our products, helloradiosky.com

I have several times visited this outdated website which contains chinenglish wording or confusing spec. tables. Does the support email work now ?

We really hope to promote the open-source EDGETX product well and benefit model enthusiasts.

There's life beyond the FPV world, so you are actually developing more clones for an already overly saturated market.

Every product we design is done with great care, especially our upcoming V15

This is nothing but a clone of the TX15 MAX with missing top sliders and features the same low-resolution screen as the V16. The Gemini module is not much relevant for LOS flying

over 20 years of practical experience in model hobbies.

Yet you have to hire western located users @frankiearzu for the receivers firmware development

We hope everyone can understand and tolerate.

We hope you do better next time and come out more appealing products for helis and fixed wings.

@gagarinlg

Copy link
Copy Markdown
Member

This is not a place for this kind of discussion

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants