Commit graph

39596 commits

Author SHA1 Message Date
Andrew Rice
aed1945c5d mks5lboot: support the iPod Nano 3G
Registers the Nano 3G (platform ipodnano3g, model number 117, "nn3g"
header) so mks5lboot can build DFU installers and uninstallers for it,
adds its original bootloader to the dualboot code, and lists the
platform in the usage text and the README.

The target has to be named ipodnano3g rather than nano3g: the dualboot
Makefile derives the source directory and the piezo driver's file name
from it.

The per-target OF hash table is the substantive change. identify_fw()
decrypts the IM3 header's data_sign with the hardware UKEY and looks it
up in of_sha[], and anything not listed is taken to be a Rockbox
bootloader. The table held only iPod Classic firmware, so on a Nano 3G
the installer took Apple's own bootloader for a Rockbox one and gave up,
and the uninstaller would have refused to restore it. Both bail out
before writing, so nothing is damaged, but neither can work. The table
is now per target, and lists the bootloader of every Nano 3G firmware
release, 1.0.1 to 1.1.3.

The decrypted data_sign is the first 16 bytes of the SHA-1 of the
plaintext bootloader, so it is the same on every unit. Each release's
updater image (aupd, GID-encrypted, in the ipsw) carries that bootloader,
0x1f800 bytes, at the start of a NOR image. The aupd of each release was
decrypted on a Nano 3G with the hardware GID key and hashed on the host.
For 1.1.3 the result matches the data_sign read from a 4GB unit (model
MA978) whose NOR had never been written to, and the bootloader in its
aupd is byte-identical to the decrypted copy the installer relocated on
that unit. 1.1.2 and 1.1.3 ship the same bootloader.

dualboot.c is generated, and only the Nano 3G arrays are added. The iPod
Classic arrays are left byte-for-byte as they were: rebuilding them with
a different compiler changes their bytes, which would ship an untested
installer to Classic users for no reason.

The dualboot Makefile did not build from the current tree for any
target, which the committed blobs, older than both problems, had hidden.
config.h needs autoconf.h, which tools/configure generates per target,
so each target now takes a CONFIGDIR_<target> pointing at a configured
bootloader build for it, e.g.

  make CONFIGDIR_ipod6g=../../../build-ipod6g-bl \
       CONFIGDIR_ipodnano3g=../../../build-nano3g-bl

And the linker script is preprocessed with __ASSEMBLER__ defined, under
which config.h now emits the ldmpc/ldrpc assembler macros that ld
rejects; the sed that cleans it now also drops .macro, .endm and .syntax
lines and the macro bodies. Before these fixes the iPod Classic build
failed first on the missing autoconf.h and then with a linker syntax
error; with them it builds both blobs.

Tested on that unit, with s5l8702pwnage delivering the images through
Apple's DFU, and again with mks5lboot's own --bl-inst and --bl-uninst:
the installer put Rockbox in NOR, the unit then booted
Rockbox, and holding MENU booted Apple's firmware from the relocated
original bootloader; the uninstaller restored it and the unit booted
Apple's firmware again. Those images carried a table holding only the
1.1.3 entry. The Nano 3G blobs in dualboot.c were then rebuilt with the
Makefile for the full table - with the one-entry table the rebuild was
byte-identical to what the tested images carried - and mks5lboot
--bl-inst with them installed Rockbox on the same unit, which booted
Rockbox and, holding MENU, Apple's firmware. The uninstaller built with
the full table has not been run, and no firmware other than 1.1.3 has
been installed to or uninstalled from on hardware. For the iPod Classic,
the uninstaller DFU this builds is byte-identical to the one built
before this change.

AI provenance: developed with Claude Opus 5 (Anthropic), used through
Claude Code. The model wrote most of the code and this message under
Andrew Rice's direction. Any hardware testing described above was
carried out by Andrew Rice, who is responsible for this change.

Change-Id: I4b2fa692ac4110192ccbde0f1790b0ae2d1c73f5
2026-09-15 16:22:11 -04:00
William Wilgus
1784c9b8a7 FixRed devices with non backlit remotes
Change-Id: I42b9c438a5b0571397c5410cfecebe035d4f134e
2026-09-13 13:30:59 -04:00
William Wilgus
2507be9af2 FixRed for devices without backlight
Change-Id: I202180b529d32b04fad48813af905e9250d3a29b
2026-09-13 12:50:12 -04:00
William Wilgus
a7ab67f459 add backlight_on_button_hold to plugins and backlight_use_settings_helper
backlight_on_button_hold / remote_backlight_on_button_hold

were never added to the Plugin API nor backlight_use_settings() helper

Change-Id: I75999af76f98244a870ab86564e591c8a900e66c
2026-09-13 12:04:10 -04:00
Jared Sanchez
b7fe01393a usb-drv-arc: defer SET_ADDRESS until status completion
The generic USB core calls usb_drv_set_address() after starting the
zero-length status stage for SET_ADDRESS. On an iPod Video 5.5G connected
to a V-MODA VAMP VERZA, applying the address at that point causes the
accessory to reset the USB bus and enumeration does not continue.

Keep the generic USB core unchanged. In the ARC driver, capture a standard
device SET_ADDRESS request when its setup packet arrives and defer writing
REG_DEVICEADDR until the successful zero-length EP0 IN status transfer
completes. Clear any pending address on a new setup packet or USB bus reset.

With this driver-specific change the VAMP completes enumeration, iAP
authentication, 44.1 kHz digital-audio negotiation, and audio playback.

Tested on real hardware:
- Apple iPod Video 5.5G
- V-MODA VAMP VERZA over 30-pin USB
- 44.1 kHz digital audio playback

Development provenance:
The debugging process and patch preparation were performed with assistance
from OpenAI ChatGPT (GPT-5.6 Sol). I built and tested the firmware on the
hardware and verified the final behavior.

Change-Id: Ic9392d211dccda568fd42b06cb2b8853d4b8e893
2026-09-13 08:16:04 -04:00
David Cormier
e0136bc7f4 ipod6g: add hardware H.264 video playback
Add S5L8702 VPU-B initialization, reset, bitstream input, frame output,
and cache maintenance to the iPod 6G target. Advertise it with
HAVE_HW_H264 and append a capability-gated decoder interface to the
plugin API.

Keep MP4 parsing, AAC decode and mixer output, A/V synchronization,
playback controls, resume state, and presentation in the multi-file
h264_player plugin. The target layer exposes decoder operations only.

Accept non-fragmented MP4/M4V containing Constrained Baseline H.264
through level 3.0, up to 640x480 at 30 fps, with optional AAC-LC audio.
Validate codec configuration and all sample-table relationships before
activating the hardware.

Read MP4 tables in bulk, boost the CPU while preparing them, and report
staged loading progress so long movies do not appear to hang during
startup.

Register the viewer and document its format limits and controls. The
libm4a compatibility fixes needed by video-first containers remain in
the preceding standalone change.

Tested on an iPod Classic 6G through an isolated Rolo nightly runtime:
H.264/AAC playback and M4V startup succeeded. Normal and
isolated-runtime iPod 6G builds also complete, and git diff --check is
clean.

Change-Id: I1e96c65c7d0b4231a94f602f8052f1b26d6e4a80
2026-09-13 08:07:59 -04:00
Christian Soffke
57a91121f6 root_menu: remove ACTIVITY_UNKNOWN hack for plugins
This was added in commit 8ff2c81bd to prevent a custom
root menu UI from flashing on screen in some themes
when returning from a plugin. Because the display isn't
updated in this scenario anymore, the workaround can be
safely eliminated.

Change-Id: Ie46b0921cfdad6e45a31661a5d451dc2717171d6
2026-09-12 08:33:27 -04:00
Christian Soffke
7e3782868c quickscreen: fix icon x-position off-by-one
Top, bottom, and right icons were displayed too far to
the left. Apparently a long-standing issue.

Icon width is 7, so subtract 7/2 = 3 pixels, instead
of 4, from calculated center, and only 7 pixels, instead
of 8, from the right vp edge.

Change-Id: I8440a4fef4778a66d56117a05b3fe4c36ac8dadd
2026-09-09 15:24:31 +02:00
Christian Soffke
f2985dc8a2 option_get_valuestring: fix trailing whitespace for UNIT_INT
Remove trailing whitespace from int settings, so
that right-aligned or centered values look correct
in Quickscreen for settings such as Brightness.

Change-Id: I006cf3c3e8b30be2246e7370f26e0428fa47e54b
2026-09-09 15:24:30 +02:00
Christian Soffke
10ec9bd530 quickscreen: eliminate excess/pad variable from vp setup
Simplifies commit da207d606 a bit more

Change-Id: I7ef98914153c0c0bfb5a3ff594fcb7e98f2dc5ba
2026-09-08 06:31:30 +02:00
Solomon Peachy
a967c5a018 Translation updates
- German (Wilfried Winkler)
 - Italian (Alessio Lenzi)

Change-Id: I52d6751364eae722743a5fdb1ece51c626498677
2026-09-07 22:21:49 -04:00
Solomon Peachy
54b26ac9f1 Translation updates:
- Chinese Simplified (Wang Ji)
 - Polish (Adam Rak)
 - Slovak (Matej Golian)
 - US English (Myself)

Change-Id: I939907d653309eabdb8d8c722bc953749a818898
2026-09-07 12:36:34 -04:00
Vencislav Atanasov
a70f30adf1 Bulgarian translation update
Change-Id: I96bc87fb873e9eb4a6ca96283873459314e0992f
2026-09-07 18:02:55 +03:00
Solomon Peachy
4f54dbec79 lang: restrict LANG_TOUCHSCREEN_FLICK_SHORTCUTS to touchscreen devices
Change-Id: Iaabc39901eadca6d36d663f7feca52273041afac
2026-09-07 09:52:58 -04:00
Solomon Peachy
76a2fdfc1f lang: Restrict LANG_COMPOSITE_VIDEO_OUTPUT to devices that have it
Currently just ipod6g, but treat it as a generic feature

Change-Id: Idda31455765908e4bd099cf5117b858bb3848f7f
2026-09-07 09:27:20 -04:00
David Cormier
064c165367 libm4a: handle sparse chunk maps and video-first MP4
Size the reduced stco lookup with ceiling division. The table stores
chunk entries 0, divider, 2 * divider, and so on, so floor division
allocated one entry too few whenever the original count had a
remainder.

Treat a valid media-information atom whose first child is not smhd as
a non-audio track and skip the remainder. Continue scanning subsequent
tracks so AAC decoding works when an MP4 places its video track before
the audio track, while still rejecting malformed atom sizes and
malformed sound headers.

Keep these container fixes independent of the H.264 player and target
driver so they can be reviewed and applied to libm4a on their own.

Build-tested as part of the normal and isolated-runtime iPod 6G
configurations and hardware-tested with AAC audio in M4V playback.

Change-Id: I8c711525932f54ecbdad982c7f7ddc9490c5668d
2026-09-07 09:17:27 -04:00
Solomon Peachy
cbd8b68e06 manual: Remove executable bit off of files that shouldn't have it
Change-Id: I1524a574d44f0f1bc5cb121fab949a82ca8cc802
2026-09-07 09:00:07 -04:00
Aidan MacDonald
376db9bf5b touchscreen: Add flick gesture support in list and WPS
Add some hardcoded flick gestures in the list UI:

Top   -> open quickscreen
Left  -> go back
Right -> go to the WPS

The WPS also gets a set of hardcoded flick shortcuts:

Top    -> open quickscreen
Left   -> go to file / database browser
Right  -> view playlist
Bottom -> context menu

These are enabled by default in pointing mode but can
be disabled using the "Touchscreen Flick Shortcuts"
option.

Change-Id: Ib30a338ebb9662cd136985da6d34ed5b041e4077
2026-09-07 08:56:38 -04:00
David Cormier
27332d64ad ipod6g: add composite output setting
Add Off, Auto, and On choices under the LCD settings menu for targets
with HAVE_COMPOSITE_VIDEO_OUT. Off is the default and leaves accessory
ADC, video registers, framebuffer conversion, output clocks, and CPU
boost untouched.

Auto enables output only for the qualified Philips dock signature. On
still requires a physically present, fully identified dock and permits
other detected composite accessories.

Document the menu behavior and the corresponding configuration-file
values in the iPod Classic manual.

Hardware tested on an iPod Classic 6G/7G with a Philips DCP750/37.

Change-Id: I649149daa331a95aa31110e1f2260a4a00ba789a
2026-09-07 08:55:22 -04:00
David Cormier
d2ae775f0a ipod6g: add composite video output driver
Add NTSC composite output for the iPod Classic 6G/7G using the
S5L8702 video processor, mixer, and encoder. Reconstruct the setup used
by the original firmware and mirror the 320x240 LCD in a centered
648x432 viewport.

Expose the driver through HAVE_COMPOSITE_VIDEO_OUT and a
target-neutral videoout interface. Keep the S5L8702 MMIO layout and
register definitions with the other SoC definitions in s5l87xx.h.

Convert LCD updates from RGB565 to planar YUV420. MPEG playback copies
decoded YUV420 planes directly, avoiding an RGB round trip. Hold output
clocks and CPU boost only while the memory-backed layer is active, and
restore them on disable or power-off.

Defer dock identification out of the serial tick because the accessory
resistor ADC path sleeps. Auto detection recognizes the measured Philips
DCP750/37 resistor range; manual mode can qualify other attached docks.

Leave interrupts enabled during the encoder's 10 ms reset wait so PCM
DMA can service linked-buffer completions when a dock is inserted during
audio playback. Keep reset assertion, reset release, all SVID register
writes, and pipeline start atomic so the composite setup cannot
interleave.

Hardware tested on an iPod Classic 6G/7G with a Philips DCP750/37 for
correct colors and geometry, stable UI mirroring, and full-screen MPEG
playback.

Change-Id: I669f2477d5cc707b48f7d24384c713d874a80e3f
2026-09-07 08:55:22 -04:00
Christian Soffke
2ec4760117 disktidy: fix blank "Last Run" screen in some themes
Listen to GUI_EVENT_NEED_UI_UPDATE events and redraw, so
screen doesn't disappear if a theme draws over the  UI vp.
Occurs in situations when the SBS is redrawn after waking
the screen, or when the song changes.

Change-Id: I062e802959ab9d34d8c04b7f82da6b87efb5d739
2026-09-05 19:31:28 -04:00
Christian Soffke
da207d6067 quickscreen: refactor quickscreen_fix_viewports
Reduces GNU complexity score from 7 to 2.

Use separate inline functions that group setting
- x-position and width for left and right text viewport
- y-position and height for all text viewports
- position/dimensions for icons viewport

Change-Id: I14f4eee1f4d6fefa9acbf4a37970a535e77990b1
2026-09-06 00:47:04 +02:00
William Wilgus
45bd2b970b [Bugfix] FS#13975 - Keyremap plugin: text importer allow multiple ACTION_NONE entries
importing discards duplicate entries based on context + action code
however you may want multiple entries to map to the same action
and you can't do it within the same context

instead only consider an entry as a duplicate if they have the same
context, actioncode, button, and prebutton

Change-Id: I5aba3459505987ba37e26758aec62f02fcf8165a
2026-09-05 11:03:27 -04:00
Mauricio Garrido
20fa5f017d 3ds: Another small fix.
This commit makes removes some remaining 3ds headers and functions from common console headers.

Change-Id: I347173bf1f3604ff29a85bd52a9dd6130b4ff4b2
2026-09-05 07:43:52 -04:00
Christian Soffke
569c2a53c8 quickscreen: fix string size calculation in quickscreen_fix_viewports
The parent vp wasn't set before checking the string size,
so, in certain scenarios, the size was calculated using a
different font than the one configured for the UI viewport.

Change-Id: I66bb2e496598811f6169a118de5cb83b451fa292
2026-09-04 17:32:48 +02:00
Aidan MacDonald
284af2aee8 lastfm_scrobbler: don't include rbversion.h
I intended to remove this in commit a8f8aa40b9 ("lastfm_scrobbler:
fetch rbversion from plugin API") but apparently forgot to do so,
so the scrobbler plugin was still rebuilding itself when RBVERSION
changes. Removing the header fixes that.

Change-Id: I6740d72ad35f5037a6a4a7580559a6c980b3225b
2026-09-03 16:49:08 +01:00
Christian Soffke
1a37ac8568 tree: skip redundant SBS refresh after Quickscreen
missing from 81cf120983

Change-Id: I161a777e62d0c8563cd7b588678549e2385c6fc9
2026-09-03 01:32:17 +02:00
Christian Soffke
81cf120983 quickscreen: always refresh SBS when leaving
Eliminate special case for transition to the Shortcuts menu.
The SBS refresh doesn't cause a screen update anymore, and
has negligible cost, so do it regardless.

Reverts the changes to quickscreen.c introduced in commit
dfd9c10 ("Eliminate skin updates in between activities")

+ simplify quickscreen_draw_item (no effect on behavior)

Change-Id: I3fca976de554c720cb69a41566fd0d0a7e6ea92d
2026-09-02 23:07:58 +02:00
Christian Soffke
8eefac3638 quickscreen: prevent out-of-bounds viewports
Fixes possible crash in case of pathological
UI vp dimensions, when attempting to clear a
QS item's vp.

E.g. https://github.com/federicoplg/musicOS
(commit c5e8570) configures a 1x1 UI viewport
at x=319 y=239, resulting in left/right item
viewports that have negative width or height.

Minor additional simplifications with no
effect on behavior:

- Combine actions requiring cleanup in a setup function.
  Put it below the existing cleanup function
- Rename quick_screen_quick to quickscreen_show, and
  quickscreen_run to quickscreen_main
- Iterate over items using FOR_QS_ITEMS macro
- Remove quickscreen_draw_item's int_value
- quickscreen_update: immediately continue if qs skinned
- Remove some obsolete #includes

Change-Id: I49aea3be837b861bdcd5132e84fef858df72327b
2026-09-02 14:03:17 -04:00
Marc Andersen
8ad69d6649 debug_menu: exclude HIBY RAM info from simulators
The "View RAM info" debug screen reports the host system's memory. It
calls sysinfo(2) and reads /proc/meminfo, but it is guarded only by
HIBY_LINUX.

That breaks the win32 simulator for all seven HIBY_LINUX targets -
agptekrocker, aigoerosq, hibyr1, hibyr3proii, hidizsap80max, xduoox20
and xduoox3ii - because HIBY_LINUX is still defined when the simulator
is cross-compiled for Windows, and mingw has no <sys/sysinfo.h>:

  apps/debug_menu.c:146:10: fatal error: sys/sysinfo.h: No such file or directory

Exclude simulators at all three sites - the include, the function and
the menu entry - matching the !defined(SIMULATOR) guards already used
elsewhere in this file. On a simulator the screen reports the developer
machine's memory rather than the simulated device's, so it does not
belong there on any host.

Verified by building agptekrocker three ways: as a Windows simulator,
which now succeeds; as a Linux simulator, which still succeeds; and for
the device itself with arm-rockbox-linux-gnueabi, which still succeeds
and keeps the screen.

Provenance, per the AI disclosure requirement in docs/CONTRIBUTING: this
change was drafted with Claude Code (Anthropic Claude Opus 5) at my
direction. Patch set 3 adopts Solomon Peachy's review suggestion to key
the guard off SIMULATOR rather than __linux__.

Change-Id: If8a09da82d22118924a3375e05739dcd5640e11d
2026-09-02 09:00:59 -04:00
Mauricio Garrido
94d422f1c4 3ds: small fix.
Rename missing ctru variable to 3ds and remove 3ds specific headers from
common ones.

Change-Id: Ib99cf2d31671dec0f6ca1de68ca2e33693991dc3
2026-09-02 05:41:40 -04:00
Aidan MacDonald
387b36fab7 erosqnative: document the sample depth choice for es9018k2m
The reason 16/24-bit on the DAC does not work is that this
configures the I2S frame length, and the X1000's AIC uses
a hardcoded 64-bit frame length regardless of the bit depth
selected at the AIC input side. The AIC will pad the lower
bits of the 32-bit output sample with zeros.

Change-Id: I48c9893ca358248a63f24e3f75149da988943953
2026-09-01 15:15:17 -04:00
Marc Andersen
a3e93c496e lua: only define strerror/strcoll on native targets
apps/plugins/lua/rockaux.c defines strerror() and strcoll() so the Lua
plugin has something to link against on native targets, which have no
libc providing them. Hosted targets do have a libc, and defining them
there is at best redundant.

On the Windows simulator it is worse than redundant. Both come from
mingw's libmsvcrt.a, and because that is a static archive the linker
pulls in an archive member for an unrelated symbol, then finds a second
definition of these two, so lua.rock fails to link:

  libmsvcrt.a(...): multiple definition of `strcoll';
  rockaux.o:rockaux.c:244: first defined here
  libmsvcrt.a(...): multiple definition of `strerror';
  rockaux.o:rockaux.c:47: first defined here

On hosted Linux there is no diagnostic, because glibc supplies these
from a shared library where a local definition simply wins. That means
the plugin has been quietly shadowing glibc's strerror() with a stub
that always returned NULL, which is presumably not intended either.

Guard both with CONFIG_PLATFORM & PLATFORM_NATIVE, matching the guard
used a few lines above for errno. Hosted targets now get the real
implementations from their own libc.

This also silences a "redeclared without dllimport attribute" warning
that GCC 16 emits for the same clash.

Verified by building xduoox3 as a Windows simulator, xduoox3 as a Linux
simulator, and sansaclip as a native ARM target: all three link cleanly
with no multiple-definition errors.

Provenance, per the AI disclosure requirement in docs/CONTRIBUTING: this
change was drafted with Claude Code (Anthropic Claude Opus 5) at my
direction. Patch set 2 adopts Aidan MacDonald's review suggestion to key
the guard off PLATFORM_NATIVE rather than _WIN32.

Change-Id: I8ffb6fd792147c9067afa708003b1285fb9d07a4
2026-09-01 15:14:02 -04:00
Michael McAllister
f349e85154 ingenic: move the drivers the X1000 shares with other SoCs
Pure file move, in preparation for a second Ingenic SoC.

  dma, gpio, i2c, installer, kernel, nand and the SPL NAND backend
  move from target/mips/ingenic_x1000/ to target/mips/ingenic/

Drivers that cannot move as whole files, because part of each is
genuinely X1000-specific, are left alone for now: msc, uart, sfc, the
debug menu and the OST helpers in system-x1000.c.

Verified as a no-op: built at target 246 --type=b before and after from
the same source path, bootloader.bin is byte-identical, and every moved
file's object has the same instruction stream under its new name.
Builds clean with no warnings for targets 246, 260 and 247, both
--type=n and --type=b.

Change-Id: I9f67c23384df49b8c4554d695b772bcd54a4e32f
Co-Authored-By: Claude Opus 5
2026-09-01 11:37:21 -04:00
Michael McAllister
9d86c9b201 sdmmc_host: reject commands the card reports as failed
sdmmc_host looks only at the transport status the controller returns,
and passes NULL for the response of every data transfer, so nothing ever
reads R1. A card does not signal a rejected command by failing the
transfer: it answers normally and simply does not commit the data. A
write refused for a write-protect violation, an address error or an
internal ECC failure is therefore reported to the filesystem as a
success.

Add sdmmc_host_submit_cmd_r1(), which fails a command whose response
carries any bit in SD_R1_CARD_ERROR, and use it for SET_BLOCKLEN and the
read or write itself. Those responses were already being received and
discarded, so this costs no extra bus traffic.

The R1 of the transfer command is returned before the data moves, so it
cannot report a failure which happened during the transfer. Whatever
ends the transfer has to be checked too: CMD12 where it terminates a
multiblock transfer, and CMD13 (SEND_STATUS) where CMD23 was used and
there is no closing command. Without the CMD13 an error is reported only
on the next transfer, against the wrong sector.

A CMD12-terminated read which ends on the last block of the card will
have tried to read past the end, and the SD spec (4.3.3, "Block Read")
requires the resulting OUT_OF_RANGE to be ignored. It is masked out for
exactly that case.

Only valid for R1 and R1b. A controller cannot apply the check itself
because it is told the response length rather than its format, and R3,
R6 and R7 are also 48-bit responses carrying unrelated bits in the same
positions.

Affects any target building sdmmc_host.

Exercised on X1600 hardware over 8 GiB of sequential reads with no
errors; the error path itself was not observed to trigger. Not run on
X1000 hardware.

Change-Id: I4a80dd29385d3eb4f256bc745a84f96e7054bbf8
Co-Authored-By: Claude Opus 5
2026-09-01 10:59:29 -04:00
Mauricio Garrido
e498c0171a 3ds: Port refactor.
This commit does the following changes to the 3ds port:

- Rename the target from ctru to 3ds.
- Rename all files and functions with the ctru naming convention to 3ds.
- Created a new file and folder structure that will better integrate future console ports that share the same codebase.
- Fixed a buffer overflow bug in pcm code.

Change-Id: I17c6f86df64eb99dd2b653485d70832ff46b2ba8
2026-09-01 08:39:07 -04:00
Solomon Peachy
8e965d9159 FS#13994 - Updated Dutch Translation (Marc Aarts)
Change-Id: I3e6f3062ae9e5ddc63b65e2a23ad984f13b0ba72
2026-09-01 07:39:10 -04:00
Solomon Peachy
3e996ec73e FS#13993 - rbutl push decompression onto a separate thread (Alessio Lenzi)
During Rockbox installation or update, the progress window currently
becomes unresponsive to screen-reader navigation while archive
inspection, free-space calculation and extraction are in progress. A
blind user cannot reliably move through or read the status messages and
therefore cannot determine what the utility is doing, how far the
installation has progressed, or whether an error has occurred.

The cause is that these operations are performed synchronously in the
GUI thread after a package has been downloaded. Although the
installation itself continues, the user interface cannot process
keyboard input and accessibility events reliably until the operation
finishes.

The attached patch moves the package installation work to a low-priority
QThread. Downloading remains asynchronous as before, while progress and
log signals from archive extraction are delivered back to the GUI thread
through Qt connections. This keeps the progress window fully navigable
with a screen reader throughout the installation.

Change-Id: I9a36a736e5b4bf98de8c3a71151679a4c1333dc7
2026-09-01 07:36:48 -04:00
Solomon Peachy
3664373ce7 FS#13992 - Updated Vietnamese Translation (Chu Khánh Hạnh)
Change-Id: Ic0567f972cebbe152ba9b9badf6d60c17b0e6ddc
2026-08-31 22:40:30 -04:00
Solomon Peachy
420537c864 manual: correct Ipod/Itunes -> iPod/iTunes
Change-Id: I54b323085140f0e4abddab7a522e34e897d9edf4
2026-08-30 21:17:29 -04:00
Sebastian Leonhardt
95e9d227aa manual: fix typos and whitespace; bump copyright to 2026
Change-Id: I453f94d1b9995deb1e8275a878bf81a22960c08e
2026-08-30 20:54:35 -04:00
Vencislav Atanasov
9cef2a3aef 3DS: implement touchscreen_enable_device to gate touch input (Olivier Senn)
Change-Id: I2f9d2505b727a6a68e8dba9199ea4053aa902b64
2026-08-30 09:04:55 -04:00
Vencislav Atanasov
4d3c7aed03 3DS: implement clean power-off via exit(0) (Olivier Senn)
Replace the dead infinite loop in power_off() with sim_do_exit()
which properly shuts down kernel, timer, mcuhwc, and cfgu services
before calling exit(0). Remove the stale sys_poweroff() declaration
in system-ctru.h; the generic implementation in powermgmt.c handles
SYS_POWEROFF broadcasting.

Change-Id: I247c4de482c66c3a060d0b88b7e2239ecec189c5
2026-08-30 09:04:55 -04:00
Vencislav Atanasov
ce47229857 3DS: auto-create application data directories on boot (Olivier Senn)
Restore paths_init() to create /3ds/.rockbox and the config
directory tree at startup, so Rockbox works without manual SD
card setup.

Edited by Vencislav Atanasov: Use the ROCKBOX_DIR macro instead of hardcoding the paths.

Change-Id: I33ab8e588cdca58285d50e9e5698a8071b381cf4
2026-08-30 09:04:55 -04:00
Aidan MacDonald
99c18f336c sdmmc_host: add quirk for card timeout on single block access
Some 512G Samsung cards (and possibly other cards) seem to
have problems with repeated single block read commands and
sometimes just time out without ever sending the data. The
card response is received OK and reports no errors but no
data is received.

The problem also occurs if a multiple block read is used to
transfer a single block but doesn't seem to occur when more
than one block is transferred.

Less commonly, timeouts can occur on write commands but it
is not clear if that happens only after a timed out read.
Adding a delay of a few tens of milliseconds before each
read/write single block command appears to prevent this.

Change-Id: I5a02b71f59cc02832acaf30e5f900a3ee8804e76
2026-08-29 19:48:22 +01:00
Aidan MacDonald
a95f9debb2 sdmmc_host: move init cleanup into sdmmc_host_device_init()
Change-Id: If2fa58602b1c3a9aea4a56c65eb8e1ee37520a2d
2026-08-29 19:48:22 +01:00
Aidan MacDonald
f40cae6cdc x1000: rewrite SD driver using sdmmc_host
Remove all SD protocol handling and all target specific code
like GPIO/interrupt handling and clock parent setup. This can
now be handled from sdmmc_host_target_init() for each target.

Now only the clock frequency is managed by the MSC driver.
To make this code easier to factor out later, it's confined
to helper functions that do not access the driver state.

One small change is that MSCxDIV output is now clamped to a
minimum of 50MHz to avoid unnecessary frequency changes. The
MSC_CLKRT divider can still divide 50MHz down to 400 KHz so
there is no downside to this.

Auto-CMD12 is now unused. Using it would make error handling
more difficult for sdmmc_host since the controller does not
expose response data for the auto-CMD12.

Explicit CMD12 was not handled correctly in the old version
of the driver because the busy signal was ignored for R1b
responses if there was no associated data transfer. This is
now fixed by waiting for the PRG_DONE interrupt instead of
END_CMD_RES for non-data transfer R1b type commands.

Since existing X1000 targets are all very similar they use
a shared implementation in sdmmc-x1000-common.c for clock
setup and card detection. New targets can either use this
or create a separate file if they are different enough to
warrant one.

Change-Id: I35396637325d7c06a10151bb6aee64cabdc7b682
2026-08-29 14:48:12 -04:00
Christian Soffke
28e5a125ab configure: macos: fix checkwps error messages
Change-Id: Ic42c20bf011861413245b671a79de6df1b6f43fb
2026-08-28 16:51:55 -04:00
Christian Soffke
70fd3e1f1e ipodcolor: Fall back to UDMA 1
The ipod4g target has already had UDMA 2 disabled
(see commits 7d78503 and d118f47) due to reported
instabilities. The iPod color, using stock hardware,
appears to be affected too.

Change-Id: I9aea2efce3026938f719da4e5372b233ff6234cf
2026-08-28 16:51:30 -04:00
Christian Soffke
8536d981a8 checkwps: print file name extension instead of "WPS"
Change-Id: I5b0a90993dcda293400ac0d805451a5f18bca322
2026-08-28 13:42:38 +02:00