Add two codeplug primitives - codeplugAllChannelsIndexSetUnused() (frees a
channel slot: clears the in-use bitmap bit, persists the header, fixes counts)
and codeplugZoneRemoveChannelFromZoneAndSave() (removes a channel from a zone's
list) - and wire two new Channel quick-menu items:
- 'new channel': allocates the first free slot, writes a blank 145.500 FM
channel, adds it to the current zone, reloads the zone and opens Channel
Details to edit it.
- 'Delete Channel': confirmation, then scrubs the channel from every real zone
before freeing the slot. Guards against deleting the last channel and honours
the read-only/APRS lock.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Flag any release with major version 0 as a Forgejo pre-release on create, and
PATCH the flag on re-runs so it stays correct. Existing v0.1.0/v0.2.0/v0.3.0
releases were updated to pre-release too.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The menu label 'Screen Dim' is a raw literal, and the shared menu code voices
labels through voicePromptsAppendLanguageString(), which derives the prompt
index from the pointer's offset within the language table and crashed on a
foreign pointer (v0.2.0 fixed only the value, not the label). That helper now
ignores pointers outside the language table.
Bump version to 0.3.0.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Screen Dim passed a plain literal ('100%'/'50%'/...) to
voicePromptsAppendLanguageString(), which derives the prompt index from the
string's offset within the language table; a foreign pointer produced a garbage
index and crashed (only with voice on). Route the value through
voicePromptsAppendString() instead. Also move the 3-bit dim level's high bit off
legacy option bit 2 to bit 29 and clamp the level against the option arrays.
Bump version to 0.2.0.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Inactive segments now render in the background colour (off) instead of dimmed.
- The 7-seg renderer left the foreground on the last segment drawn (now the
background colour), which hid MHz; re-apply the frequency theme colour before
drawing MHz so it reappears and matches the digits.
- Move the TX frequency line down 1px for a little more RX/TX separation.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add SCREEN_DIM_15 (Off / 100 / 50 / 30 / 15). The value now needs 3 bits, so
repurpose the spare BIT_UNUSED_2 as BIT_SCREEN_DIM_2; existing codeplugs (bit 2
clear) keep their level, no reset.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- README: add 'What's different from OpenGD77' (incl. the new SK2 mute) and a
dedicated 'Flashing' section (DFU steps, per-model flash.sh, donor note).
- scripts/forgejo-release.sh: build/attach a single platform or all, reuse an
existing release, replace same-named assets, and warn if freetrxVersion.h
doesn't match the tag.
- TOOLS.md: document the platform build argument.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
./build-firmware.sh DM1701 builds OpenDM1701.bin with PLATFORM_RT84_DM1701 +
PLATFORM_VARIANT_DM1701 (vs PLATFORM_MDUV380). Same firmware source, same GCC 14
toolchain and codec placement. Not officially tested on DM-1701 hardware yet.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- New freetrxVersion.h with semver (MAJOR/MINOR/PATCH + string), currently 0.1.0.
- Firmware Info top line now shows "FreeTRX v0.1.0"; the git commit ID line is
unchanged. The version is also announced via voice prompt.
- CHANGELOG: promote the accumulated changes to a 0.1.0 section.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Splash screen and Firmware Info name now show "FreeTRX".
- Firmware-info credits: "Marcus DK1DA", a separator, and a thank-you to the
original OpenGD77 authors.
- README documents that this iteration is developed/tested only on the TYT
MD-UV380 and Retevis RT-3S, with a contact for testing other supported radios.
- CHANGELOG updated.
Hardware/tooling identifiers (build filename, MD-UV380 model IDs, hotspot
version string) intentionally left unchanged to avoid breaking flashing and
Pi-Star/MMDVM compatibility.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Rename the project to FreeTRX (fork of OpenGD77).
- New README.md documenting the fork and its upstream source
(OpenGD77 R20260131 / OpenGD77_MDUV380_DM1701_20260130).
- Preserve the original project README as README.OpenGD77.md.
- Add LICENSE.md reproducing the inherited OpenGD77 license (modified
BSD 3-Clause + non-commercial clause). The license is NOT GPL-compatible and
cannot be relicensed; all original copyrights are retained.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>