TODO:
* Dynamically hide the sample rates that aren't supported
by the current sink
* Better "default" selection based on hardware type/speed
Change-Id: I261544fc3ba78429eaaa81c89aebd2e68106caa3
The SYSTEM_STATUS macro for these variables has an
F_T_INT flag, which may result in an unexpected value
being written to the resume file for PLM and PVS.
Change-Id: Iea18efbdc68604e1297721d132a9a5b7d056ffad
Every menu heading except the top-level "MPEG Player" (ie the name of
the plugin) now uses pre-existing translated strings.
Change-Id: I65ee64ddc537be4947872da4757bc2f6a27d0bae
All URLs into Sandisk's web site return 404 or 403 errors, so
point at our local mirror of Sansa firmware files instead.
Change-Id: Ib3efcb62b13431f6416a320483877ca162ea5990
(Sandisk no longer hosts any firwmare for these old devices, so point
users at our own mirror instead)
Change-Id: Ibdcddcd2560b2062e84c82c53049022a7f76b226
Prevents the most recent File Browser directory from
being overwritten when ft_load is called from places other
than the Files menu, such as when browsing the Plugins
menu or the Playlist Catalogue (coming from the main menu,
or from the "Add to Playlist" context menu).
Change-Id: Idbdb2d92c6abcc5cca022d3025b48e0cd4b32f17
Removes `#ifdef`s in many places to just have `HAVE_TOUCHSCREEN` be the
input fall back, as is already tentatively the case in the code.
Solitaire was the only app excluded since there aren’t enough buttons
for it mapped in the SDL layer.
Change-Id: I62450b7110b86c8037a121e96cd2e46754be79a3
get_more() can disable audio when there's nothing more to genreate
but that can get called (and "fail") _before_ we set the flag
that audio is turned on. If this occurs, we will incorrecly
set the "audio on" flag after the failure which will prevent
the mixer from being re-started.
(We're at the mercy of thread scheduling)
Change-Id: I4f6c50a71c7ad685ff45f775e7e4b1c61b8b7777
some targets can process requests fast enough without dedicated
batch api implementation.
provide generic implementationn for such targets.
Change-Id: I152681441e70e0e98396274d9305d371d2bbfbe3
in order to implement iap digital audio interface, we have to send
a pcm packet every usb frame i.e. 1000 packets per second.
this rate can't be achieved with current standard request-response design,
even with fast_completion_handler.
this is why this new api is needed.
Change-Id: Id3d7dd037660871e2bdb69656f63ff13280c3804
This way all paths to setting the volume respect the limits, instead
of only callers of setvol(), which only applies to (some?) interactive
paths.
Change-Id: Ia8ece22aafcb04df33021071cb933eaeb1146502
firmware/pcm_mixer.c:36:35: warning: conversion from ‘long unsigned int’ to ‘unsigned int’ changes value from ‘18446744073709551615’ to ‘4294967295’ [-Woverflow]
36 | static unsigned int mixer_sampr = -1UL;
|
firmware/pcm_mixer.c:269:21: warning: comparison is always false due to limited range of data type [-Wtype-limits]
269 | if (mixer_sampr == -1UL)
| ^~
So drop the 'L' and everything is peachy.
Change-Id: I9440d3300931be229c6c4b01bdc1d09b55c34d88
All that matters is that the _current_ sink is ready, not all possible
sinks. When switching sinks we will need to ensure tehy are initialized
before switching over.
Change-Id: I341f7e9dcb4e2add4d0b292b68b69eb08dec0194
Change the SAI FIFO threshold so that it is always
kept topped up at maximum; DMA needs to do single
transfers to the peripheral now. Ignore FEIF errors
since they seem to occur constantly with this setup
(though it's not exactly clear why this happens).
FEIF only indicates that the SAI made a DMA request
while the DMA FIFO is empty, which isn't a fatal error.
The DMA channel will simply service the request when
it is ready.
Keeping the SAI FIFO constantly full increases the
overall timing margin before underrun so losing the
FEIF info isn't a big deal in practice.
Change-Id: I16eb1cbb17039db76938bd86c4921b8060c83556
The purpose of the mutex is to make it possible to switch pcm sinks
safely, but pcm_play_lock/unlock and pcm_set_frequency need to be
called from IRQ context which is fundamentally incompatible with
our mutex implementation.
The proper path forward will be to promote the counter-based per-sink
lock/unlock implementation to the pcm core, and only allowing sink
switching when the counter is 0.
In the mean time, just remove sink_mutex entirely as the sink switching
code has yet to be committed.
Change-Id: I029459d7ec6ea47c6e2b8fce52d203129a282832
This is more of an ease of use enhancement than a bug
but it should prevent the annoyance of the message about the missing entry
without needing to go and reset the start in screen setting
Change-Id: I15eb005ce254eb0f0d3f2543abf710b68468a8b3
The context was supplied with context|flag but expected context x flag
Also fixes a bug where the user export doesn't show the correct save location
if changed -- it still saved properly anyway..
Change-Id: I061d63e15475d2cb73d070737dc18d56d7800472
- Allow overriding of the smdhtool and 3dsxtool programs
- Introduce dependencies in ctru.make for 3dsx and cia packages
- Build these packages when the binary is built
- Copy instead of moving the cia package when building a zip
- Properly clean all build artifacts when make clean is used
Change-Id: I2069bcc44d6ab6031ef61ed9980f92ff9a913bc9
- Move all devkitpro includes before the Rockbox ones so that the macros which are both conflicting and unused can be undef'd
- Remove unused result variables
- Exclude an unused function from being compiled for this target
- Fix hex number formatting
- Fix the return value of dummy functions
- Fix macro redefinition in the plugins keypad config
- Remove duplicate button mapping
- Turn off -Wchar-subscripts as it's already handled in Rockbox's ctype.h
Change-Id: I3f5a3d492c585f233277a380feaea5fe877a044f
- Fix the macOS check so that it only includes the linker command line and not the whole block
- Remove a dash from the .map file name, likely a typo
- Don't remove the .elf file after packaging, so that it can be used to debug any issues with the build
Change-Id: I9639263169e027c9702ac617eb8209b1707e11f4
It is required to call gfxExit() before exiting the app if gfxInit() was previously called. Otherwise, the GSP thread continues to run after the stack is invalidated. The missing code is already in lcd_shutdown(), but it was never called because HAVE_LCD_SHUTDOWN was not defined for the ctru target.
Change-Id: I8999df6372cd593c5b52478028ad7421b23d5f92
Confirmed on iFlash-modded ipodvideo, USB mass storage connections
frequently fail with bus resets during mount on macOS, and trigger
"reset high-speed USB device" errors on Linux during sequential
reads.
The root cause is: storage_read_sectors() calls yield() via
ata_wait_intrq(), which switches to the main thread running
handle_usb_events() loop. This calls send_event(GUI_EVENT_ACTIONUPDATE),
triggering LCD redraw that takes approximately 110ms. This stalls the
ATA DMA completion, causing the USB bulk transfer to time out from the
host's perspective.
This commit removes the yield to prevent the reading thread from being
preempted by the lengthy LCD redraw during DMA completion.
This also improves sequential read throughput from ~13MB/s to ~18MB/s.
Change-Id: Ia552f97aa0169c93c4f21e250d13dc3a626661d4
* Terminating record of the max unicode codepoint (0x10ffff)
* Add in Arabic diacritic marks in the 0x10efa..10efff range
This is currently disasbled due to it effectively doubling the
size of our diacritic table. The diacritics added are unlikely
to be seen in practice as they are used only in some formal
Quaranic contexts. If we identify other diacritic marks above
0xffff, then we can turn this code on.
Change-Id: I50c2eace18c70be6fe7199fccab190e7da401089
* When the codepoint > 0xffff, don't overflow past the end
of our diacritic table (Fixed by William Wilgus)
* Truncation of the 'info' field causes the RTL flag to be dropped
(RTL flag is b15 but we truncate it into an 8-bit variable)
Both bugs introduced in a2c10f6189 (September 2025)
Change-Id: Id5425606f2cf91d3b3a81f4b67a97d546de81e41
FONT_UI is a placeholder when it gets assigned it isn't resolved
immediately
when its time to resolve the font it is processed with font_get(int font)
first it sets it to the last slot
and then decrements till it gets a valid font
I think this is intended to allow the largest
chance of getting a loaded font
instead if global_status->font_id has been set use that
similar to how the screen helper does
Change-Id: If97e504466265fafecbe07b7b72adb4808b67e6a